Podej - Helion

Autor: Alan Mellor
Tytuł oryginału: Test-Driven Development with Java: Create higher-quality software by writing tests first with SOLID and hexagonal architecture
ISBN: 978-83-289-2209-9
okładka: mi
Księgarnia: Helion
		Tytuł oryginału: Test-Driven Development with Java: Create higher-quality software by writing tests first with SOLID and hexagonal architecture
ISBN: 978-83-289-2209-9
okładka: mi
Księgarnia: Helion
Książka będzie dostępna od marca 2025
Zobacz także:
- Jak zhakowa 125,00 zł, (10,00 zł -92%)
- Blockchain i kryptowaluty. Kurs video. Zdecentralizowane finanse od podstaw 118,90 zł, (11,89 zł -90%)
- Web scraping. Kurs video. Zautomatyzowane pozyskiwanie danych z sieci 126,36 zł, (13,90 zł -89%)
- GraphQL. Kurs video. Buduj nowoczesne API w Pythonie 153,64 zł, (16,90 zł -89%)
- Windows Media Center. Domowe centrum rozrywki 66,67 zł, (8,00 zł -88%)
Spis treści
Podejście TDD w Javie. Testowanie, SOLID i architektura heksagonalna jako fundamenty wysokiej jakości -- spis treści
O autorze
O recenzentach
Wprowadzenie
Część 1. Jak doszliśmy do TDD?
- Rozdział 1. Dlaczego potrzebujemy TDD?      - Pisanie złego kodu          - Dlaczego piszemy zły kod?
 
- Rozpoznawanie złego kodu          - Złe nazwy zmiennych
- Złe nazwy funkcji, metod i klas
- Struktury podatne na błędy
- Zależność i spójność
 
- Obniżenie wydajności zespołu
- Pogorszenie wyników biznesowych
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Pisanie złego kodu          
- Rozdział 2. TDD w służbie dobrego kodu      - Projektowanie wysokiej jakości kodu          - Mów to, co masz na myśli, i miej na myśli to, co mówisz
- Zajmuj się szczegółami w prywatnych blokach kodu
- Unikaj zbędnej złożoności
 
- Wykrywanie wad projektowych          - Analiza korzyści z pisania testów przed kodem produkcyjnym
 
- Zapobieganie błędom w logice
- Zabezpieczanie się przed przyszłymi defektami
- Dokumentowanie kodu
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Projektowanie wysokiej jakości kodu          
- Rozdział 3. Obalamy mity na temat TDD      - "Pisanie testów mnie spowalnia"          - Zrozumienie korzyści ze spowolnienia
- Przełamywanie zarzutów dotyczących spowolnienia wynikającego z testów
 
- "Testy nie zapobiegają wszystkim błędom"          - Dlaczego ludzie twierdzą, że testy nie wychwytują wszystkich błędów?
- Przełamywanie zarzutów, że testy nie wychwytują wszystkich błędów
 
- "Skąd wiemy, że testy są poprawne?"          - Rozumienie obaw dotyczących pisania złych testów
- Dla pewności testujemy testy
 
- "TDD to gwarancja dobrego kodu"          - Zrozumienie problemu nadmiernych oczekiwań
- Zarządzanie oczekiwaniami względem TDD
 
- "Kod jest zbyt skomplikowany, aby go testować"          - Rozumienie przyczyn nietestowalnego kodu
- Nowe podejście do związku między dobrym projektem a prostymi testami
- Radzenie sobie z odziedziczonym kodem pozbawionym testów
 
- "Przed napisaniem kodu nie wiadomo, co testować"          - Rozumienie trudności związanych z rozpoczynaniem pracy od pisania testów
- Co zrobić, żeby nie musieć pisać kodu produkcyjnego na początku?
 
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- "Pisanie testów mnie spowalnia"          
Część 2. Techniki TDD
- Rozdział 4. Tworzymy aplikację z użyciem TDD      - Wymagania techniczne          - Przygotowanie środowiska programistycznego
- Instalowanie programu IntelliJ
- Konfiguracja projektu i bibliotek
 
- Omówienie aplikacji Wordz          - Zasady gry Wordz
 
- Poznanie metodyk zwinnych          - Czytamy historyjki użytkowników - elementy składowe planowania
- Łączymy programowanie zwinne i TDD
 
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Wymagania techniczne          
- Rozdział 5. Piszemy pierwszy test      - Wymagania techniczne
- Początek pracy z TDD - wzorzec przygotowania, działania i asercji          - Poznajemy strukturę testu
- Zaczynamy pracę od rezultatów
- Podniesienie wydajności pracy
 
- Cechy dobrego testu          - Stosowanie zasad FIRST
- Używamy jednej asercji na test
- Decydujemy o zakresie testu jednostkowego
 
- Wykrywanie częstych błędów
- Sprawdzanie wyjątków
- Testujemy tylko metody publiczne          - Zachowanie hermetyzacji
 
- Uczenie się na podstawie testów          - Chaotyczne przygotowania
- Chaotyczne wywołanie
- Chaotyczne asercje
- Ograniczenia testów jednostkowych
- Pokrycie kodu - często bezużyteczny wskaźnik
- Pisanie złych testów
 
- Rozpoczęcie pracy nad aplikacją Wordz
- Podsumowanie
- Pytania i odpowiedzi
 
- Rozdział 6. Rytm pracy  w TDD      - Wymagania techniczne
- Stosowanie cyklu czerwone, zielone i refaktoryzacja          - Czerwone na początek
- Prostota nade wszystko - przejście do etapu zielonego
- Refaktoryzacja do czystego kodu
 
- Piszemy kolejne testy do gry Wordz
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Rozdział 7. TDD i SOLID wspierają projektowanie      - Wymagania techniczne
- Testowe i pozatestowe wsparcie w projektowaniu
- Zasada jednej odpowiedzialności - proste elementy składowe          - Zbyt wiele odpowiedzialności sprawia, że z kodem trudniej się pracuje
- Możliwość ponownego użycia kodu
- Prostsze utrzymanie w przyszłości
- Przykład kodu nieprzestrzegającego zasady jednej odpowiedzialności
- Zastosowanie zasady jednej odpowiedzialności do uproszczenia utrzymania kodu w przyszłości
- Organizacja testów o jednej odpowiedzialności
 
- Zasada odwrócenia zależności - ukrywanie nieistotnych szczegółów          - Zastosowanie odwrócenia zależności do kodu rysującego kształty
 
- Zasada podstawienia Liskov - wymienne obiekty          - Aplikujemy zasadę podstawienia Liskov do kodu rysującego kształty
 
- Zasada otwarte-zamknięte - rozszerzalny projekt          - Dodajemy nowy typ kształtu
 
- Zasada segregacji interfejsów - skuteczne abstrakcje          - Przegląd użycia zasady segregacji interfejsów w kodzie rysującym kształty
 
- Podsumowanie
- Pytania i odpowiedzi
 
- Rozdział 8. Zamienniki testowe - zaślepki i atrapy      - Wymagania techniczne
- Problemy z obiektami pomocniczymi w testach          - Wyzwanie testowania niepowtarzalnych zachowań
- Wyzwanie testowania obsługi błędów
- Przyczyny trudności w testowaniu
 
- Cel stosowania zamienników testowych          - Piszemy wersję produkcyjną kodu
 
- Używanie zaślepek do zwracania predefiniowanych wyników          - Kiedy używać zaślepek?
 
- Używanie atrap do weryfikowania interakcji
- Kiedy użycie zamienników testowych jest uzasadnione?          - Nie nadużywajmy atrap
- Nie róbmy atrap zewnętrznego kodu
- Nie róbmy atrap obiektów reprezentujących wartość
- Nie da się tworzyć atrap bez wstrzykiwania zależności
- Nie testujmy atrap
- Kiedy używać atrap?
 
- Pracujemy z Mockito - popularną biblioteką do tworzenia zamienników testowych          - Rozpoczynamy pracę z Mockito
- Używamy Mockito do utworzenia zaślepki
- Używamy Mockito do utworzenia atrapy
- Zacieranie się rozróżnienia między zaślepkami a atrapami
- Dopasowywanie argumentów - niestandardowe zachowanie zamienników testowych
 
- Projektowanie kodu obsługującego błędy z użyciem testów
- Testowanie obsługi błędów w grze Wordz
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Rozdział 9. Architektura  heksagonalna - oddzielenie systemów zewnętrznych      - Wymagania techniczne
- Dlaczego systemy zewnętrzne są przyczyną trudności?          - Problemy ze środowiskiem
- Omyłkowe wywołanie prawdziwych procesów podczas wykonywania testów
- Jakich danych powinniśmy oczekiwać?
- Wywołania systemowe i czas systemowy
- Wyzwania związane z usługami stron trzecich
 
- Odwrócenie zależności na ratunek          - Generalizowanie w kierunku architektury heksagonalnej
- Przegląd elementów architektury heksagonalnej
- Złota zasada: domena nigdy nie łączy się bezpośrednio z adapterami
- Skąd kształt sześcioboku?
 
- Tworzenie abstrakcji systemu zewnętrznego          - Czego potrzebuje model domeny?
 
- Pisanie kodu domeny          - Co powinno się znaleźć w modelu domeny?
- Użycie bibliotek i frameworków w modelu domeny
- Wybór stylu programowania
 
- Tworzenie testowych zamienników  systemów zewnętrznych          - Zastępowanie adapterów zamiennikami testowymi
 
- Tworzenie testów jednostkowych większych jednostek          - Testy jednostkowe całych historyjek użytkownika
 
- Tworzenie abstrakcji bazy danych w aplikacji Wordz          - Projektowanie interfejsów repozytoriów
- Projektowanie adapterów bazy danych i generatora liczb losowych
 
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Rozdział 10. Testy FIRST i piramida testów      - Wymagania techniczne
- Piramida testów
- Testy jednostkowe zgodne z zasadami FIRST
- Testy integracyjne          - Co powinny obejmować testy integracyjne?
- Testowanie adapterów bazodanowych
- Testowanie usług sieciowych
- Testowanie zgodności kontraktu z wymaganiami konsumenta
 
- Testy przekrojowe i testy akceptacji przez użytkownika          - Narzędzia do testów akceptacyjnych
 
- Procesy CI/CD i środowiska testowe          - Co to jest proces CI/CD?
- Dlaczego potrzebujemy ciągłej integracji?
- Dlaczego potrzebujemy ciągłego dostarczania?
- Ciągłe dostarczanie czy ciągłe wdrażanie?
- Praktyczne aspekty procesów CI/CD
- Środowiska testowe
- Testowanie na produkcji
 
- Test integracyjny bazy danych dla gry Wordz          - Pobieranie słowa z bazy danych
 
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Rozdział 11. TDD jako część zapewnienia jakości      - Metodyka TDD i jej miejsce w szerszym kontekście zapewnienia jakości          - Rozumienie ograniczeń TDD
- Czy to oznacza, że testy manualne nie są potrzebne?
 
- Manualne testy eksploracyjne i odkrywanie nieoczekiwanego
- Przeglądy kodu i programowanie zespołowe
- Testowanie interfejsu i doświadczeń użytkownika          - Testowanie interfejsu użytkownika
- Ocena doświadczeń użytkownika
 
- Testowanie bezpieczeństwa i monitorowanie utrzymania
- Włączanie manualnych elementów w procesy CI/CD
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Metodyka TDD i jej miejsce w szerszym kontekście zapewnienia jakości          
- Rozdział 12. Testy na początku, później czy nigdy?      - Dodawanie testów na początku          - Podejście "testy najpierw" jako narzędzie do projektowania
- Testy stanowią wykonywalną specyfikację
- Podejście "testy najpierw" przekłada się na wartościowe wskaźniki pokrycia kodu
- Wystrzegajmy się określania progów pokrycia kodu
- Nie pisz wszystkich testów na początku
- Zaczynanie pracy od testów pomaga w ciągłym dostarczaniu
 
- "Zawsze możemy napisać testy później, prawda?"         - Dla początkujących podejście "testy później" jest łatwiejsze niż TDD
- W podejściu z późniejszym testowaniem trudniej przetestować każdą ścieżkę
- Podejście z późniejszym testowaniem ma mniejszy wpływ na projektowanie
- Późniejsze testowanie może nigdy się nie wydarzyć
 
- "Testy? Testy są dla ludzi, którzy nie potrafią programować!"          - Co się dzieje, jeżeli nie testujemy w trakcie rozwoju oprogramowania?
 
- Testowanie od wewnątrz na zewnątrz
- Testowanie od zewnątrz do wewnątrz
- Określanie granic testów dzięki architekturze heksagonalnej          - Podejście dośrodkowe działa dobrze z modelem domeny
- Podejście dośrodkowe współgra z adapterami
- Historyjki użytkownika można testować w modelu domeny
 
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Dodawanie testów na początku          
Część 3. TDD w prawdziwym życiu
- Rozdział 13. Tworzenie warstwy domeny      - Wymagania techniczne
- Rozpoczęcie nowej gry          - Sterowane testami projektowanie rozpoczęcia nowej gry
- Śledzenie postępu w grze
- Triangulacja wyboru słowa
 
- Granie w grę          - Projektowanie interfejsu oceny próby
- Triangulacja śledzenia postępu gry
 
- Koniec gry          - Reakcja na poprawną próbę
- Triangulacja zakończenia gry ze względu na liczbę niepoprawnych prób
- Triangulacja odpowiedzi na próbę po końcu gry
- Przegląd projektu
 
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Rozdział 14. Tworzenie warstwy bazodanowej      - Wymagania techniczne          - Instalowanie bazy danych PostgreSQL
 
- Tworzenie testu integracji z bazą danych          - Tworzenie testu bazy danych z użyciem biblioteki DBRider
- Tworzenie kodu produkcyjnego
 
- Implementacja adaptera WordRepository          - Dostęp do bazy danych
- Implementacja GameRepository
 
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 
- Wymagania techniczne          
- Rozdział 15. Tworzenie warstwy sieciowej      - Wymagania techniczne
- Rozpoczęcie nowej gry          - Dodanie wymaganych bibliotek do projektu
- Pisanie testu kończącego się niepowodzeniem
- Utworzenie własnego serwera HTTP
- Dodawanie ścieżek do serwera HTTP
- Podłączenie do warstwy domeny
- Refaktoryzacja kodu rozpoczynającego grę
- Obsługa błędów podczas rozpoczęcia gry
- Naprawa testów nieoczekiwanie kończących się niepowodzeniem
 
- Granie w grę
- Połączenie komponentów aplikacji w całość
- Używanie aplikacji
- Podsumowanie
- Pytania i odpowiedzi
- Polecane źródła
 





