E-book details

Nowoczesna inżynieria oprogramowania. Stosowanie skutecznych technik szybszego rozwoju oprogramowania wyższej jakości

Nowoczesna inżynieria oprogramowania. Stosowanie skutecznych technik szybszego rozwoju oprogramowania wyższej jakości

David Farley

Ebook

Inżynieria oprogramowania polega na stosowaniu empirycznego podejścia do szukania wydajnych i ekonomicznie uzasadnionych rozwiązań podczas tworzenia oprogramowania. Dziedzina ta ma na celu organizowanie optymalnego procesu tworzenia aplikacji ? od koncepcji, poprzez kodowanie, wdrażanie, utrzymywanie, po wycofywanie. Uzyskanie biegłości w tym obszarze nie jest łatwe: rozwój oprogramowania wymaga zrozumienia filozofii inżynierii i stosowania określonych zasad.

Tę książkę docenią programiści, menedżerowie, inżynierowie i liderzy techniczni. Znajdziesz w niej cenne informacje o filozofii inżynierii oprogramowania, jak również o postępach w sposobie myślenia na jej temat. Na tej bazie oparto zestaw zasad ułatwiających skuteczne radzenie sobie z dwoma podstawowymi procesami inżynierii oprogramowania: uczenia się i eksploracji oraz radzenia sobie ze złożonością. W ten sposób dowiesz się, jak usprawnić wszystkie aspekty swojej pracy, a także jak stosować sprawdzone podejścia prowadzące do sukcesu z uwzględnieniem uwarunkowań ekonomicznych. Dzięki tej przełomowej publikacji nauczysz się technik rozwiązywania problemów z wykorzystaniem zarówno obecnych, jak i przyszłych technologii. W efekcie będziesz szybciej tworzyć lepsze oprogramowanie, i to w bardziej przyjemny i satysfakcjonujący sposób.

Poznaj i stosuj zasady nowoczesnej inżynierii oprogramowania:

  • określaj jasne cele i sensownie wybieraj narzędzia
  • organizuj pracę i systemy tak, aby móc oceniać ciągłe postępy
  • zachowuj kontrolę nawet po zwiększeniu złożoności systemu
  • utrzymuj dyscyplinę z zachowaniem właściwej elastyczności
  • ucz się z historii i doświadczenia
  • naucz się oceniać nowe idee rozwoju oprogramowania

Przekonaj się, jak dzisiaj najlepsi praktycy projektują oprogramowanie!

Spis treści

Przedmowa

Wstęp

Podziękowania

O autorze

Część I. Czym jest inżynieria oprogramowania?

  • Rozdział 1. Wprowadzenie
    • Inżynieria - praktyczne zastosowanie nauki
    • Czym jest inżynieria oprogramowania?
    • Przywracanie "inżynierii" w "inżynierii oprogramowania"
      • Jak robić postępy?
    • Narodziny inżynierii oprogramowania
    • Zmiana paradygmatu
    • Podsumowanie
  • Rozdział 2. Czym jest inżynieria?
    • To nie produkcja jest naszym problemem
    • Inżynieria projektowa zamiast inżynierii produkcyjnej
    • Robocza definicja inżynierii
    • Inżynieria != kod
    • Dlaczego inżynieria jest ważna?
    • Ograniczenia rzemiosła
    • Precyzja i skalowalność
    • Radzenie sobie ze złożonością
    • Powtarzalność i precyzja pomiarów
    • Inżynieria, kreatywność i rzemiosło
    • Dlaczego to, co robimy, nie jest inżynierią oprogramowania
    • Kompromisy
    • Iluzja postępu
    • Droga od rzemiosła do inżynierii
    • Rzemiosło to za mało
    • Czas na zmianę perspektywy?
    • Podsumowanie
  • Rozdział 3. Podstawy podejścia inżynieryjnego
    • Branża zmian?
    • Znaczenie pomiarów
    • Wprowadzanie stabilności i wydajności
    • Podstawy inżynierii oprogramowania
    • Eksperci od uczenia się
    • Eksperci od radzenia sobie ze złożonością
    • Podsumowanie

Część II. Optymalizacja z myślą o uczeniu się

  • Rozdział 4. Praca w modelu iteracyjnym
    • Praktyczne zalety podejścia iteracyjnego
    • Podejście iteracyjne jako strategia projektowania defensywnego
    • Pokusa tworzenia planu
    • Praktyczne aspekty podejścia iteracyjnego
    • Podsumowanie
  • Rozdział 5. Informacje zwrotne
    • Praktyczny przykład ilustrujący znaczenie informacji zwrotnych
    • Informacje zwrotne w czasie pisania kodu
    • Informacje zwrotne na etapie integracji
    • Informacje zwrotne na etapie projektowania
    • Informacje zwrotne w architekturze
    • Preferuj szybkie informacje zwrotne
    • Informacje zwrotne w kontekście projektu produktu
    • Informacje zwrotne w organizacji i kulturze
    • Podsumowanie
  • Rozdział 6. Podejście przyrostowe
    • Znaczenie modułowości
    • Podejście przyrostowe w organizacjach
    • Narzędzia ułatwiające przyrostową pracę
    • Ograniczanie zakresu wpływu zmian
    • Projektowanie przyrostowe
    • Podsumowanie
  • Rozdział 7. Podejście empiryczne
    • Zakorzenienie w rzeczywistości
    • Oddzielenie podejścia empirycznego od eksperymentów
    • "Znam ten błąd!"
    • Unikanie oszukiwania samego siebie
    • Wymyślanie rzeczywistości pasującej do argumentów
    • Kierowanie się rzeczywistością
    • Podsumowanie
  • Rozdział 8. Nastawienie na eksperymentowanie
    • Czym jest "nastawienie na eksperymentowanie"?
    • Informacje zwrotne
    • Hipotezy
    • Pomiary
    • Kontrolowanie zmiennych
    • Zautomatyzowane testy jako eksperymenty
    • Zapewnianie kontekstu dla wyników testów przeprowadzanych w ramach eksperymentów
    • Zakres eksperymentów
    • Podsumowanie

Część III. Optymalizowanie z myślą o radzeniu sobie ze złożonością

  • Rozdział 9. Modułowość
    • Cechy charakterystyczne modułowości
    • Niedocenianie znaczenia dobrego projektu
    • Znaczenie testowalności
    • Projektowanie z myślą o łatwości testowania poprawia modułowość
    • Usługi i modułowość
    • Łatwość wdrażania a modułowość
    • Modułowość w różnych skalach
    • Modułowość w systemach ludzkich
    • Podsumowanie
  • Rozdział 10. Spójność
    • Modułowość i spójność - podstawy projektowania
    • Prosty przykład niskiej spójności
    • Kontekst ma znaczenie
    • Wysoce wydajne oprogramowanie
    • Związki z powiązaniami
    • Zapewnianie wysokiej spójności za pomocą programowania sterowanego testami
    • Jak uzyskać spójne oprogramowanie?
    • Koszty niskiej spójności
    • Spójność w systemach ludzkich
    • Podsumowanie
  • Rozdział 11. Podział zadań
    • Wstrzykiwanie zależności
    • Oddzielanie złożoności zasadniczej od złożoności przypadkowej
    • Znaczenie podejścia DDD
    • Testowalność
    • Porty i adaptery
    • Kiedy stosować wzorzec porty i adaptery?
    • Czym jest API?
    • Stosowanie programowania sterowanego testami do wprowadzania podziału zadań
    • Podsumowanie
  • Rozdział 12. Ukrywanie informacji i abstrakcja
    • Abstrakcja lub ukrywanie informacji
    • Co jest powodem powstawania "wielkiej błotnej bryły"?
    • Problemy organizacyjne i kulturowe
    • Problemy techniczne i problemy projektowe
    • Obawy przed "nadinżynierią"
    • Tworzenie bardziej abstrakcyjnego kodu za pomocą testów
    • Wartość abstrakcji
    • "Dziurawe" abstrakcje
    • Wybór odpowiednich abstrakcji
    • Abstrakcje z dziedziny problemu
    • Wyodrębnianie złożoności przypadkowej za pomocą abstrakcji
    • Izolowanie zewnętrznych systemów i zewnętrznego kodu
    • Zawsze preferuj ukrywanie informacji
    • Podsumowanie
  • Rozdział 13. Radzenie sobie z powiązaniami
    • Koszty powiązań
    • Skalowanie
    • Mikrousługi
    • Wyeliminowanie powiązań może prowadzić do większej ilości kodu
    • Luźne powiązanie nie jest jedynym, które ma znaczenie
    • Preferuj luźne powiązania
    • W czym powiązania różnią się od podziału zadań?
    • Zasada DRY jest zbyt uproszczona
    • Asynchroniczność jako narzędzie do uzyskiwania luźnych powiązań
    • Projektowanie z myślą o luźnych powiązaniach
    • Luźne powiązania w systemach ludzkich
    • Podsumowanie

Część IV. Narzędzia ułatwiające inżynierię w branży oprogramowania

  • Rozdział 14. Narzędzia w dziedzinie inżynierii
    • Czym jest rozwój oprogramowania?
    • Testowalność jako narzędzie
    • Punkty pomiaru
    • Problemy z osiąganiem testowalności
    • Jak zwiększyć testowalność?
    • Łatwość wdrażania
    • Szybkość
    • Kontrolowanie zmiennych
    • Ciągłe dostarczanie
    • Ogólne narzędzia wspomagające inżynierię
    • Podsumowanie
  • Rozdział 15. Współczesny inżynier oprogramowania
    • Inżynieria jako proces ludzki
    • Organizacje dokonujące przełomu w świecie cyfrowym
    • Skutki a mechanizmy
    • Trwałe i uniwersalne
    • Podstawy inżynierii
    • Podsumowanie
  • Title: Nowoczesna inżynieria oprogramowania. Stosowanie skutecznych technik szybszego rozwoju oprogramowania wyższej jakości
  • Author: David Farley
  • Original title: Modern Software Engineering: Doing What Works to Build Better Software Faster
  • Translation: Tomasz Walczak
  • ISBN: 978-83-8322-595-1, 9788383225951
  • Date of issue: 2023-06-20
  • Format: Ebook
  • Item ID: nowoio
  • Publisher: Helion