Zwinne wytwarzanie oprogramowania
Najlepsze zasady, wzorce i praktyki
Czasy kaskadowego tworzenia projektów odchodzą w niepamięć. Obecne tempo rozwoju
aplikacji i rynku nie pozwala poświęcać miesięcy na analizę, tworzenie dokumentacji,
projektowanie, a na końcu wytwarzanie, testowanie i wdrażanie. Produkt musi być
dostępny błyskawicznie! Pozwala to na natychmiastowe zebranie opinii na jego temat,
dostosowanie go do oczekiwań i szybkie reagowanie na wymagane zmiany. Takie założenia
może spełnić tylko i wyłącznie zespół wytwarzający oprogramowanie w zwinny
sposób!
Ta książka została w całości poświęcona zwinnym praktykom. Sięgnij po nią i
przekonaj się, w jaki sposób planować kolejne iteracje, tworzyć kod, a następnie go
testować.
W kolejnych rozdziałach poznasz praktyczne aspekty zwinnego tworzenia kodu –
zobaczysz, jak istotne są zasady: pojedynczej odpowiedzialności, podstawienia Liskov czy
odwracania zależności. Znajdziesz tu także zasady projektowania pakietów oraz
przydatne wzorce projektowe, omówione na konkretnych przykładach. Książka ta jest
obowiązkową lekturą dla wszystkich osób zaangażowanych w wytwarzanie oprogramowania i
chcących udoskonalić swój proces.
Dzięki tej książce:
poznasz fundamenty zwinnego wytwarzania oprogramowania
zaznajomisz się z najlepszymi praktykami
przekonasz się, jak refaktoryzować kod
wybierzesz właściwe wzorce i unikniesz typowych błędów
poprawisz swój proces wytwarzania oprogramowania
Słowo wstępne (13)
Przedmowa (14)
O autorach (20)
CZĘŚĆ I. ZWINNE WYTWARZANIE OPROGRAMOWANIA (21)
Rozdział 1. Praktyki agile (23)
- Agile Alliance (24)
- Manifest Agile Alliance (24)
- Zasady (27)
- Wniosek (29)
- Bibliografia (29)
Rozdział 2. Przegląd informacji o programowaniu ekstremalnym (31)
- Praktyki programowania ekstremalnego (31)
- Klient jest członkiem zespołu (32)
- Historyjki użytkowników (32)
- Krótkie cykle (32)
- Testy akceptacyjne (33)
- Programowanie parami (33)
- Programowanie sterowane testami (34)
- Wspólna własność (34)
- Ciągła integracja (34)
- Równomierne tempo (35)
- Otwarta przestrzeń robocza (35)
- Gra w planowanie (35)
- Prosty projekt (36)
- Refaktoryzacja (37)
- Wniosek (38)
- Bibliografia (38)
Rozdział 3. Planowanie (39)
- Początkowa eksploracja (40)
- Tworzenie prototypów, dzielenie i szybkość (40)
- Planowanie wersji dystrybucyjnych (41)
- Planowanie iteracji (41)
- Planowanie zadań (41)
- Przebieg iteracji (42)
- Wniosek (43)
- Bibliografia (43)
Rozdział 4. Testowanie (45)
- Programowanie sterowane testami (45)
- Przykład projektu w stylu "najpierw test" (46)
- Izolacja testu (47)
- Nieoczekiwane wyeliminowanie sprzężeń (48)
- Testy akceptacyjne (49)
- Przykład testów akceptacyjnych (50)
- Architektura "przy okazji" (51)
- Wniosek (51)
- Bibliografia (52)
Rozdział 5. Refaktoryzacja (53)
- Generowanie liczb pierwszych - prosty przykład refaktoryzacji (54)
- Wniosek (62)
- Bibliografia (63)
Rozdział 6. Epizod programowania (65)
- Gra w kręgle (66)
- Wniosek (98)
CZĘŚĆ II. PROJEKT AGILE (101)
- Symptomy złego projektu (101)
- Zasady (101)
- Zapachy a zasady (102)
- Bibliografia (102)
Rozdział 7. Co to jest projekt agile? (103)
- Co złego dzieje się z oprogramowaniem? (103)
- Zapachy projektu - woń psującego się oprogramowania (104)
- Co stymuluje oprogramowanie do psucia się? (106)
- Zespoły agile nie pozwalają psuć się oprogramowaniu (106)
- Program Copy (106)
- Przykład programu Copy wykonanego zgodnie z metodyką agile (109)
- Skąd deweloperzy agile wiedzieli, co należy zrobić? (110)
- Utrzymywanie projektu w jak najlepszej postaci (110)
- Wniosek (111)
- Bibliografia (111)
Rozdział 8. SRP - zasada pojedynczej odpowiedzialności (113)
- SRP - zasada pojedynczej odpowiedzialności (113)
- Czym jest odpowiedzialność? (115)
- Rozdzielanie sprzężonych odpowiedzialności (115)
- Trwałość (116)
- Wniosek (116)
- Bibliografia (116)
Rozdział 9. OCP - zasada otwarte-zamknięte (117)
- OCP - zasada otwarte-zamknięte (117)
- Opis (118)
- Kluczem jest abstrakcja (118)
- Aplikacja Shape (119)
- Naruszenie zasady OCP (120)
- Zachowanie zgodności z zasadą OCP (121)
- Przyznaję się. Kłamałem (122)
- Przewidywanie i "naturalna" struktura (122)
- Umieszczanie "haczyków" (123)
- Stosowanie abstrakcji w celu uzyskania jawnego domknięcia (124)
- Zastosowanie podejścia "sterowania danymi" w celu uzyskania domknięcia (125)
- Wniosek (126)
- Bibliografia (126)
Rozdział 10. LSP - zasada podstawiania Liskov (127)
- LSP - zasada podstawiania Liskov (127)
- Prosty przykład naruszenia zasady LSP (128)
- Kwadraty i prostokąty - bardziej subtelne naruszenie zasady LSP (129)
- Prawdziwy problem (131)
- Poprawność nie jest wrodzona (132)
- Relacja IS-A dotyczy zachowania (132)
- Projektowanie według kontraktu (132)
- Specyfikowanie kontraktów w testach jednostkowych (133)
- Realny przykład (133)
- Motywacja (133)
- Problem (135)
- Rozwiązanie niezgodne z zasadą LSP (136)
- Rozwiązanie zgodne z zasadą LSP (136)
- Wydzielanie zamiast dziedziczenia (137)
- Heurystyki i konwencje (139)
- Zdegenerowane funkcje w klasach pochodnych (140)
- Zgłaszanie wyjątków z klas pochodnych (140)
- Wniosek (140)
- Bibliografia (140)
Rozdział 11. DIP - zasada odwracania zależności (141)
- DIP - zasada odwracania zależności (141)
- Podział na warstwy (142)
- Odwrócenie własności (142)
- Zależność od abstrakcji (143)
- Prosty przykład (144)
- Wyszukiwanie potrzebnych abstrakcji (145)
- Przykład programu Furnace (146)
- Polimorfizm dynamiczny i statyczny (147)
- Wniosek (148)
- Bibliografia (148)
Rozdział 12. ISP - zasada segregacji interfejsów (149)
- Zaśmiecanie interfejsów (149)
- Odrębne klienty oznaczają odrębne interfejsy (150)
- Siła oddziaływania klientów na interfejsy (151)
- ISP - zasada segregacji interfejsów (151)
- Interfejsy klas a interfejsy obiektów (152)
- Separacja przez delegację (152)
- Separacja przez wielokrotne dziedziczenie (153)
- Przykład interfejsu użytkownika bankomatu (153)
- Wniosek (159)
- Bibliografia (159)
CZĘŚĆ III. STUDIUM PRZYPADKU: SYSTEM PŁACOWY (161)
- Szczątkowa specyfikacja systemu płacowego (162)
- Ćwiczenie (162)
- Przypadek użycia nr 1: dodawanie nowego pracownika (162)
- Przypadek użycia nr 2: usuwanie pracownika (163)
- Przypadek użycia nr 3: dostarczenie karty pracy (163)
- Przypadek użycia nr 4: dostarczenie raportu sprzedaży (163)
- Przypadek użycia nr 5: dostarczenie informacji o opłacie na rzecz związku zawodowego
(164)
- Przypadek użycia nr 6: zmiana danych pracownika (164)
- Przypadek użycia nr 7: wygenerowanie listy płac na dzień (164)
Rozdział 13. Wzorce projektowe Polecenie i Aktywny obiekt (165)
- Proste polecenia (166)
- Transakcje (167)
- Fizyczny i czasowy podział kodu (168)
- Czasowy podział kodu (168)
- Metoda Undo (169)
- Aktywny obiekt (169)
- Wniosek (173)
- Bibliografia (173)
Rozdział 14. Metoda szablonowa i Strategia: dziedziczenie a delegacja (175)
- Metoda szablonowa (176)
- Nadużywanie wzorca (178)
- Sortowanie bąbelkowe (179)
- Strategia (181)
- Sortowanie jeszcze raz (183)
- Wniosek (185)
- Bibliografia (185)
Rozdział 15. Wzorce projektowe Fasada i Mediator (187)
- Fasada (187)
- Mediator (188)
- Wniosek (190)
- Bibliografia (190)
Rozdział 16. Wzorce projektowe Singleton i Monostate (191)
- Singleton (192)
- Korzyści ze stosowania wzorca Singleton (193)
- Koszty stosowania wzorca Singleton (193)
- Wzorzec projektowy Singleton w praktyce (193)
- Monostate (194)
- Korzyści ze stosowania wzorca Monostate (196)
- Koszty stosowania wzorca Monostate (196)
- Wzorzec projektowy Monostate w praktyce (196)
- Wniosek (200)
- Bibliografia (200)
Rozdział 17. Wzorzec projektowy Obiekt Null (201)
- Wniosek (204)
- Bibliografia (204)
Rozdział 18. Studium przypadku: system płacowy. Pierwsza iteracja (205)
- Wprowadzenie (205)
- Analiza według przypadków użycia (206)
- Dodawanie pracowników (207)
- Usuwanie pracowników (208)
- Dostarczenie karty pracy (209)
- Dostarczenie raportów sprzedaży (209)
- Dostarczenie informacji o opłacie na rzecz związku zawodowego (210)
- Zmiana danych pracownika (210)
- Wypłaty (212)
- Refleksja: czego się nauczyliśmy? (214)
- Wyszukiwanie potrzebnych abstrakcji (214)
- Abstrakcja harmonogramu (214)
- Sposoby wypłaty (215)
- Przynależność do związków zawodowych (216)
- Wniosek (216)
- Bibliografia (216)
Rozdział 19. Studium przypadku: system płacowy. Implementacja (217)
- Dodawanie pracowników (218)
- Baza danych systemu płacowego (219)
- Zastosowanie wzorca Metoda szablonowa do dodawania pracowników (220)
- Usuwanie pracowników (223)
- Karty pracy, raporty sprzedaży i składki (225)
- Zmiana danych pracowników (231)
- Zmiana klasyfikacji (235)
- Co ja paliłem? (240)
- Realizacja wypłat (244)
- Czy chcemy, aby deweloperzy podejmowali decyzje biznesowe? (246)
- Realizacja wypłat dla pracowników ze stałą pensją (246)
- Realizacja wypłat dla pracowników zatrudnionych w systemie godzinowym (248)
- Okresy rozliczeniowe: problem projektowy (251)
- Program główny (257)
- Baza danych (257)
- Podsumowanie projektu systemu płacowego (258)
- Historia (259)
- Zasoby (259)
- Bibliografia (259)
CZĘŚĆ IV. PODZIAŁ SYSTEMU PŁACOWEGO NA PAKIETY (261)
Rozdział 20. Zasady projektowania pakietów (263)
- Projektowanie z wykorzystaniem pakietów? (263)
- Ziarnistość: zasady spójności pakietów (264)
- Zasada równoważności wielokrotnego wykorzystania kodu i dystrybucji (REP) (264)
- Zasada zbiorowego wielokrotnego użytku (CRP) (265)
- Zasada zbiorowego zamykania (CCP) (266)
- Podsumowanie tematyki spójności pakietów (266)
- Stabilność: zasady sprzęgania pakietów (267)
- Zasada acyklicznych zależności (ADP) (267)
- Cotygodniowe kompilacje (267)
- Eliminowanie cykli zależności (268)
- Skutki istnienia cykli w grafie zależności między pakietami (269)
- Przerywanie cykli (270)
- Odchylenia (270)
- Projekt góra-dół (271)
- Zasada stabilnych zależności (SDP) (272)
- Stabilność (272)
- Metryki stabilności (273)
- Nie wszystkie pakiety muszą być stabilne (274)
- Gdzie powinna się znaleźć implementacja projektu wysokiego poziomu? (276)
- Zasada stabilnych abstrakcji (SAP) (276)
- Mierzenie abstrakcji (276)
- Ciąg główny (277)
- Odległość od ciągu głównego (278)
- Wniosek (280)
Rozdział 21. Wzorzec projektowy Fabryka (281)
- Cykl zależności (283)
- Fabryki wymienne (284)
- Wykorzystanie wzorca Fabryka do tworzenia zestawów testowych (284)
- Znaczenie korzystania z fabryk (286)
- Wniosek (287)
- Bibliografia (287)
Rozdział 22. Studium przypadku: system płacowy (część 2.) (289)
- Struktura pakietów i notacja (290)
- Zastosowanie zasady zbiorowego domykania (CCP) (291)
- Zastosowanie zasady równoważności wielokrotnego wykorzystania kodu i dystrybucji
(REP) (292)
- Sprzężenia i hermetyzacja (294)
- Metryki (296)
- Zastosowanie wskaźników do aplikacji płacowej (297)
- Fabryki obiektów (300)
- Fabryka obiektów dla pakietu TransactionImplementation (300)
- Inicjowanie fabryk (301)
- Przebudowa granic spójności (301)
- Ostateczna struktura pakietów (302)
- Wniosek (304)
- Bibliografia (304)
CZĘŚĆ V. STUDIUM PRZYPADKU: STACJA POGODOWA (305)
Rozdział 23. Wzorzec projektowy Kompozyt (307)
- Przykład: polecenia kompozytowe (308)
- Wielokrotność czy brak wielokrotności (309)
Rozdział 24. Obserwator - ewolucja kodu do wzorca (311)
- Zegar cyfrowy (311)
- Wniosek (326)
- Wykorzystanie diagramów w tym rozdziale (327)
- Wzorzec projektowy Obserwator (327)
- Zarządzanie zasadami projektu obiektowego dla wzorca projektowego Obserwator (328)
- Bibliografia (329)
Rozdział 25. Wzorce projektowe Serwer abstrakcyjny i Most (331)
- Wzorzec projektowy Serwer abstrakcyjny (332)
- Kto jest właścicielem interfejsu? (333)
- Wzorzec projektowy Adapter (333)
- Wzorzec projektowy Adapter w formie klasy (334)
- Problem modemu. Adaptery i zasada LSP (334)
- Wzorzec projektowy Most (338)
- Wniosek (339)
- Bibliografia (340)
Rozdział 26. Wzorce projektowe Pełnomocnik i Schody do nieba - zarządzanie
zewnętrznymi interfejsami API (341)
- Wzorzec projektowy Pełnomocnik (342)
- Implementacja wzorca projektowego Pełnomocnik w aplikacji koszyka na zakupy (345)
- Podsumowanie wiadomości o wzorcu projektowym Pełnomocnik (356)
- Obsługa baz danych, oprogramowania middleware oraz zewnętrznych interfejsów API (357)
- Schody do nieba (359)
- Przykład zastosowania wzorca Schody do nieba (360)
- Wniosek (365)
- Inne wzorce projektowe, które można wykorzystywać z bazami danych (365)
- Wniosek (366)
- Bibliografia (366)
Rozdział 27. Analiza przypadku: stacja pogodowa (367)
- Firma Chmura (367)
- Oprogramowanie WMS-LC (369)
- Wybór języka (369)
- Projekt oprogramowania systemu Nimbus-LC (369)
- Historia 24-godzinna i utrwalanie (382)
- Implementacja algorytmów HiLo (384)
- Wniosek (391)
- Bibliografia (391)
- Przegląd wymagań dla oprogramowania Nimbus-LC (391)
- Wymagania użytkowe (391)
- Historia 24-godzinna (392)
- Konfiguracja użytkownika (392)
- Wymagania administracyjne (392)
- Przypadki użycia systemu Nimbus-LC (393)
- Aktorzy (393)
- Przypadki użycia (393)
- Historia pomiarów (393)
- Konfiguracja (393)
- Administracja (393)
- Plan publikacji wersji dystrybucyjnych systemu Nimbus-LC (394)
- Wprowadzenie (394)
- Wydanie I (394)
- Zagrożenia (394)
- Produkty projektu (395)
- Wydanie II (395)
- Zaimplementowane przypadki użycia (395)
- Zagrożenia (395)
- Produkty projektu (395)
- Wydanie III (396)
- Zaimplementowane przypadki użycia (396)
- Zagrożenia (396)
- Produkty projektu (396)
CZĘŚĆ VI. STUDIUM PRZYPADKU: ETS (397)
Rozdział 28. Wzorzec projektowy Wizytator (399)
- Rodzina wzorców projektowych Wizytator (400)
- Wizytator (400)
- Wzorzec projektowy Wizytator działa jak macierz (403)
- Wzorzec projektowy Acykliczny wizytator (403)
- Wzorzec projektowy Wizytator działa jak macierz rzadka (407)
- Wykorzystanie wzorca projektowego Wizytator w generatorach raportów (407)
- Inne zastosowania wzorca projektowego Wizytator (412)
- Wzorzec projektowy Dekorator (413)
- Wzorzec projektowy Obiekt rozszerzenia (418)
- Wniosek (426)
- Bibliografia (426)
Rozdział 29. Wzorzec projektowy Stan (427)
- Przegląd informacji o automatach stanów skończonych (427)
- Techniki implementacji (429)
- Zagnieżdżone instrukcje Switch/Case (429)
- Interpretacja tabeli przejść (432)
- Wzorzec projektowy Stan (433)
- SMC - kompilator maszyny stanów (436)
- Kiedy należy korzystać z maszyn stanów? (439)
- Wysokopoziomowe strategie obsługi GUI (439)
- Kontrolery interakcji z GUI (440)
- Przetwarzanie rozproszone (441)
- Wniosek (441)
- Listingi (441)
- Implementacja klasy Turnstile.java z wykorzystaniem interpretacji tabeli przejść (441)
- Klasa Turnstile.java wygenerowana przez kompilator SMC oraz inne pliki pomocnicze (443)
- Bibliografia (447)
Rozdział 30. Framework ETS (449)
- Wprowadzenie (449)
- Przegląd informacji o projekcie (449)
- Wczesny okres 1993 - 1994 (451)
- Framework? (451)
- Framework (452)
- Zespół z roku 1994 (452)
- Termin (452)
- Strategia (452)
- Wyniki (453)
- Projekt frameworka (454)
- Wspólne wymagania dla aplikacji oceniających (454)
- Projekt frameworka do wyznaczania ocen (456)
- Przypadek zastosowania wzorca Metoda szablonowa (459)
- Napisać pętlę raz (460)
- Wspólne wymagania dla aplikacji zdawania (463)
- Projekt frameworka do zdawania (463)
- Architektura menedżera zadań (469)
- Wniosek (472)
- Bibliografia (472)
Dodatek A. Notacja UML. Część I: Przykład CGI (473)
- System rejestrowania kursów: opis problemu (474)
- Aktorzy (475)
- Przypadki użycia (475)
- Model dziedziny (478)
- Architektura (482)
- Klasy abstrakcyjne i interfejsy na diagramach sekwencji (492)
- Podsumowanie (494)
- Bibliografia (494)
Dodatek B. Notacja UML. Część II: STATMUX (495)
- Definicja statystycznego multipleksera (495)
- Środowisko oprogramowania (496)
- Ograniczenia czasu rzeczywistego (496)
- Procedury obsługi przerwań wejścia (497)
- Procedury obsługi przerwań wyjścia (501)
- Protokoły komunikacji (502)
- Wniosek (512)
- Bibliografia (512)
Dodatek C. Satyra na dwa przedsiębiorstwa (513)
- Rufus! Inc. Project Kickoff (513)
- Rupert Industries Projekt Alpha (513)
Dodatek D. Kod źródłowy jest projektem (525)
- Czym jest projekt oprogramowania? (525)
Skorowidz (535)
544 strony, Format: 17.0x24.0cm, oprawa miękka