"Automatyzacja testów. Kompletny przewodnik dla testerów oprogramowania"
Identyfikator Librowy: 212348
Spis treści
O autorze 16
O recenzencie technicznym 18
Podziękowania 20
Wprowadzenie 22
Jak zorganizowana jest ta książka? 23
Kto powinien przeczytać tę książkę? 23
Część I: „Dlaczego” oraz „Co” 24
Część II: „Jak” 24
CZĘŚĆ I. „Dlaczego” oraz „co ” 28
1. Wartość automatyzacji testów 30
Dlaczego potrzebujemy automatyzacji testów? 30
Od modelu kaskadowego do zwinnego tworzenia oprogramowania 31
Koszt złożoności oprogramowania 32
Utrzymywanie stałego kosztu 33
Refaktoryzacja 35
Ciągłe doskonalenie 36
2. Od testowania ręcznego do automatycznego 38
Podejście pierwsze: nagrywanie i odtwarzanie 38
Uzyskiwanie maksimum korzyści z automatyzacji testów 40
Różnice pomiędzy testami manualnymi i automatycznymi 43
Testowanie eksploracyjne 43
Rozważania dotyczące testowania automatycznego 45
3. Ludzie i narzędzia 54
Wybieranie właściwych narzędzi 54
Kto powinien pisać testy? 55
Promowanie testerów manualnych lub niedoświadczonych deweloperów do rangi deweloperów automatyzacji 55
Dzielenie pracy między testerów manualnych i deweloperów automatyzacji 58
Korzystanie z dedykowanego zespołu automatyzacji 60
Dedykowany deweloper automatyzacji wewnątrz każdego zespołu 61
Różnorodność narzędzi 62
Dawanie deweloperom pełnej odpowiedzialności za automatyzację 62
IDE i języki programowania 63
Klasyfikacja narzędzi 63
Biblioteki testowania (jednostkowego) 66
Biblioteki w stylu BDD 68
Technologie zapewniające interakcję z testowanym systemem 69
Pakiety do zarządzania testami 80
Inne czynniki mające znaczenie przy wybieraniu narzędzi 81
Narzędzia kompilacji oraz potoki ciągłej integracji lub ciągłego dostarczania 81
4. Osiąganie pełnego pokrycia 84
W jaki sposób mierzymy pokrycie? 85
Procent przypadków testów manualnych pokrytych przez automatyzację 85
Procent pokrytych funkcji 86
Procent pokrycia kodu 87
Uzyskiwanie korzyści przed osiągnięciem pełnego pokrycia 90
Co robimy po osiągnięciu pełnego pokrycia? 91
W jaki sposób uzyskać 100% pokrycia? 92
Odwracanie koła 93
Mapa drogowa prowadząca do pomyślnego projektu automatyzacji 96
Kiedy rozpocząć pracę nad progresją? 97
Nadawanie priorytetu pracy w celu zlikwidowania luki w regresji 98
5. Procesy biznesowe 100
Regularne uruchamianie testów 100
Najprostsze podejście 101
Testowanie nocne 101
Obsługiwanie błędów wykrywanych przez automatyzację 102
Zachowywanie testów kończących się niepowodzeniem 103
Wykluczanie testów kończących się niepowodzeniem 104
Tworzenie obejść w teście 105
Traktowanie wszystkich niepowodzeń automatyzacji jako błędów krytycznych 107
Ciągła integracja 108
Tworzenie oprogramowania sterowane testami akceptacyjnymi 108
Ciągłe dostarczanie i ciągłe wdrażanie 109
Wydania kanarkowe 111
Podsumowanie 112
6. A utomatyzacja i architektura testów 114
Założenia dotyczące do architektury testów 114
Poznawanie architektury testowanego systemu 115
Powrót do podstaw: czym jest system komputerowy? 115
Czym jest test automatyczny? 116
Rzeczywiste systemy komputerowe 117
Alternatywy i założenia w architekturze warstwowej 120
Związki między zakresem a testem 121
Omówienie warstw 122
Alternatywne zakresy testowania 124
Rzeczywista architektura 137
Architektura planowana kontra architektura rzeczywista 137
Typowe warianty 138
Łączenie testów 139
Podsumowanie czynników 142
Co poza architekturą warstwową? 145
Podsumowanie: dokonywanie własnych wyborów 149
7. Izolacja i środowiska testowe 150
Stan 150
Problemy z izolacją i ich rozwiązania 152
Problem 1 – testy manualne i test automatyczny wykonywane w różnym czasie 152
Problem 2 – testy manualne i automatyczne wykonywane jednocześnie 153
Problem 3 – kolejność ma znaczenie 153
Techniki izolacji 154
Problem 4 – testy automatyczne uruchamiane jednocześnie 154
Korzystanie z oddzielnych kont 155
Oddzielne środowisko dla każdego członka zespołu 155
Osobne bazy danych dla testów manualnych i automatyzacji testów 155
Resetowanie środowiska przed każdym cyklem testowania 157
Tworzenie niepowtarzalnych danych dla każdego testu 161
Każdy test czyści wszystko, co utworzył 165
Współdzielone dane tylko do odczytu 166
Podsumowanie 168
8. Szersza perspektywa 170
Relacje między architekturą oprogramowania i strukturą biznesu 170
Prawo Conwaya 170
Zespoły pionowe kontra zespoły poziome 171
Zależności między architekturą oprogramowania i strukturą organizacyjną z automatyzacją testów 172
Dedykowany zespół automatyzacji 173
Deweloperzy automatyzacji w zespołach poziomych 173
Deweloperzy automatyzacji w zespołach pionowych 174
Elastyczna struktura organizacyjna 174
Podsumowanie 175
Ekspert ds. automatyzacji 175
CZĘŚĆ II. „Jak” 178
9. Przygotowanie do samouczka 180
Wymagania i założenia wstępne 180
Stosowanie procesu do istniejących systemów automatyzacji testów 181
„Z dołu do góry” albo „z góry do dołu” 182
Omówienie procesu 182
Proces 183
Poznawanie testowanego systemu 184
Omówienie projektu MVCForum 184
Przygotowanie środowiska pod samouczek 187
Instalowanie Visual Studio w edycji Community 188
Pobieranie i instalowanie bazy danych SQL Server Express 188
Pobieranie i instalowanie przeglądarki Chrome 188
Pobieranie i budowanie aplikacji 189
Instalacja dodatku ReSharper (krok opcjonalny) 192
Korzystanie z narzędzia Git z poziomu Visual Studio 194
Przełączanie pomiędzy gałęziami 195
Podsumowanie 198
10. Projektowanie pierwszego przypadku testowego 200
Wybieranie pierwszego testu do zautomatyzowania 200
Wybieranie pierwszego przypadku testowego dla aplikacji MVCForum 204
Naukowa metoda projektowania przypadku testowego 205
Projektowanie kroków testu 205
Myślenie w kontekście obiektów i jednostek 208
Wzorzec obiektu strony 210
Podsumowanie 215
11. Kodowanie pierwszego testu 216
Tworzenie projektu 216
Modyfikowanie nazw klas, plików i metod testowych 219
Pisanie pseudokodu 221
Uwagi odnośnie do pseudokodu 222
Uzupełnianie kodu w celu jego skompilowania 224
Deklarowanie klasy LoggedInUser 226
Deklarowanie właściwości MVCForum 226
Deklarowanie metody RegisterNewUserAndLogin 228
Deklarowanie pozostałych klas i metod 228
Omówienie kodu modelu 232
Podsumowanie 233
12. Uzupełnianie pierwszego testu 234
Uruchamianie testu w celu znalezienia pierwszej metody do zaimplementowania 235
Dodawanie Selenium do projektu 236
Implementowanie konstruktora MVCForumClient 238
Uruchamianie IISExpress 238
Implementowanie metody RegisterNewUserAndLogin 240
Proszenie dewelopera o dodanie unikalnego identyfikatora automatyzacji 244
Implementowanie metod ustawiających dla właściwości 246
Usuwanie duplikacji z metod ustawiających właściwości 249
Napotykanie błędu izolacji 251
Implementowanie metody CreateDiscussion i analizowanie niepowodzenia 255
Kończenie testu 258
Podsumowanie 259
13. Badanie niepowodzeń 260
Integrowanie z najnowszą wersją aplikacji MVCForum 260
Usprawnianie raportowania błędów 262
Unikanie debugowania 265
Badanie głównej przyczyny 266
Rozwiązywanie problemu 266
Więcej problemów… 268
Rejestrowanie oraz inne formy zbierania dowodów 274
Przechwytywanie ekranu 274
Rejestrowanie 274
Rejestrowanie zagnieżdżone 275
Rejestrowanie wizualne 276
Dodatkowe opcje rejestrowania i diagnozowania 277
Dodawanie zagnieżdżonego rejestratora wizualnego do testów aplikacji MVCForum 279
Badanie trudniejszych niepowodzeń 281
Niepowodzenia, które zdarzają się tylko na jednej maszynie 281
Badanie testów migoczących 285
Badanie testów wpływających na inne testy 285
Podsumowanie 292
14. Dodawanie kolejnych testów 294
Pisanie kolejnych testów 294
Planowanie kolejnych testów 296
Dodawanie testu: dyskusje mogą być filtrowane według kategorii 297
Wprowadzanie dodatkowych usprawnień 310
Podsumowanie procesu dodawania drugiego testu 310
Tworzenie bardziej zrozumiałych identyfikatorów 310
Organizowanie kodu w foldery 311
Wyodrębnianie klasy bazowej dla testów 311
Obsługa wielu użytkowników i przeglądarek 312
Wskazówki w zakresie korzystania z plików konfiguracyjnych testów 312
Obsługiwanie wielu przeglądarek 314
Dodatkowe możliwości usprawniania 316
Automatyczne ponowne tworzenie bazy danych 316
Oczyszczanie 317
Dodawanie kolejnych testów 319
Poprawienie wydajności 319
Testy sterowane danymi 319
Podsumowanie 321
15. Ciągła integracja 322
Czy to naprawdę konieczne? 323
Tworzenie procesu kompilacji testów 323
Planowanie procesu kompilacji testów 324
Tworzenie procesu automatycznego wdrażania 326
Dodawanie testów do kompilacji 328
Zmiana procesu tworzenia oprogramowania i kultury 330
Co jest potrzebne do zmiany kultury? 331
Dążenie do „Świętego Graala” 331
Określanie punktu wyjścia 333
Skracanie czasu wykonywania testów 340
Równoległe wykonywanie i wirtualizacja 341
Realizowanie wymagań wstępnych za pośrednictwem API 341
Ulepszanie izolacji 341
Dzielenie potoku CI na etapy 342
Uruchamianie wyłącznie testów poprawności w ramach ciągłej integracji 342
Pisanie głównie testów integracyjnych i jednostkowych 343
Uruchamianie testów wyłącznie dla konkretnych komponentów 343
Optymalizowanie wydajności testów 344
Pokrywanie szerszej macierzy 345
Podsumowanie 346
16. Tworzenie oprogramowania sterowane testami akceptacyjnymi (ATDD) 348
Omówienie metodyki ATDD 348
Bycie bardziej zwinnym 349
Co sprawia, że zespół jest zwinny? 349
Dług techniczny 349
Unikanie długu technicznego 350
Proces 351
Tworzenie historyjki użytkownika 352
Pisanie testów automatycznych 355
Dostarczanie aplikacji i zbieranie opinii na jej temat 362
Używanie testów akceptacyjnych jako dokumentacji 363
Wiązanie kroków zamiast testów 363
Kompromis między możliwością ponownego użycia, poziomem szczegółów i czytelnością 365
Wprowadzanie metodyki ATDD do istniejącego projektu 366
Rozpoczynanie bez testów automatycznych 366
Retrospektywna implementacja automatyzacji 367
Rozpoczynanie od naprawy błędów 367
Zwiększanie pokrycia regresji 368
Podsumowanie 369
17. Test jednostkowe i tworzenie oprogramowania sterowane testami (TDD) 370
Przyswajanie testów jednostkowych i TDD 370
Sposoby pisania testów jednostkowych 371
Mechanizm biblioteki testów jednostkowych 372
Sposób pisania testu jednostkowego 374
Testy jednostkowe i operacje wejścia/wyjścia 377
Mechanizm działania TDD 382
Czerwone-zielone-refaktoryzacja 382
Dlaczego najpierw powinniśmy pisać testy? 385
Prawdziwe wyzwania w testowaniu jednostkowym i TDD 386
Główne wyzwania związane z testowaniem jednostkowym 386
Bardziej szczegółowe wyzwania 387
Główne wyzwania związane z podejściem TDD 387
Opanowywanie czystego kodu i zasad SOLID 391
Opanowywanie umiejętności refaktoryzowania 392
Największe wyzwanie: co testować? 393
Używanie metodyki TDD w celach, do jakich była projektowana 394
Podejście „z zewnątrz do środka” kontra podejście „od środka na zewnątrz” 394
Podsumowanie 395
18. Inne rodzaje testów automatycznych 396
Mierzenie wydajności w środowisku produkcyjnym 396
Testy wydajności 396
Czego nie robić? 398
Definiowanie oczekiwanego rezultatu 399
Testy obciążeniowe 400
Badanie wąskich gardeł w wydajności 400
Ponowne wykorzystywanie kodu pomiędzy testami funkcjonalnymi i testami wydajności 400
Wydajność postrzegana a wydajność rzeczywista 400
Jak działają testy obciążeniowe 401
Definiowanie oczekiwanego rezultatu 402
Uruchamianie testów w środowisku produkcyjnym 404
Łączenie testów wydajności z testami obciążeniowymi 404
Testowanie wdrożenia 404
Które testy uruchamiać? 405
Testowanie stanu zdrowia środowiska produkcyjnego 405
Testowanie wizualne 406
Oczyszczanie danych testu 406
Przepływ pracy testowania wizualnego 407
Testy instalacji 408
Podejścia dla testów instalacji 408
Testowanie wizualne i testowanie w wielu przeglądarkach/na wielu platformach 408
Testy aktualizacji 410
Testowanie instalacji za pośrednictwem interfejsu użytkownika lub instalacji dyskretnej 410
Testowanie programu deinstalacyjnego 410
Podejścia dla testów aktualizacji 411
Testowanie algorytmów statystycznych, niedeterministycznych i sztucznej inteligencji 412
Sposoby testowania algorytmów statystycznych 413
Testowanie aplikacji, które wykorzystują liczby losowe 415
Testowanie aplikacji analityki biznesowej 416
Podsumowanie 417
19. Co dalej? 418
Popełniaj błędy 418
Słuchaj, konsultuj się i zasięgaj porad 418
Poznaj i dostosuj się do celów swojego biznesu 419
Poznaj swoje narzędzia 419
Doskonalenie umiejętności programistycznych 420
Doskonalenie umiejętności w zakresie zapewniania jakości 421
Poszerzaj swoje horyzonty 421
Dzielenie się wiedzą 422
Dziel się własnymi narzędziami 422
Bawmy się dobrze! 423
Dodatek A. Rzeczywiste przykłady 424
Przykład 1 – system monitorowania wodomierzy 424
Symulowanie serwera komunikacji 426
Praca z usługą Google Maps 427
Przykład 2 – system do handlu na rynku Forex 429
Niestabilność powodowana przez CRM 430
Rozwiązanie 430
Izolowanie środowisk 431
Opis architektury 432
Przykład 3 – zarządzanie sklepem detalicznym 432
Testowanie aplikacji mobilnej z użyciem abstrakcyjnego zakresu testowania 432
Wdrożenie minimalne 434
Struktura organizacyjna 435
Rozwiązania automatyzacji testów 436
Symulator daty i godziny 437
Testy dla trzech warstw 438
Testy kompleksowe 438
Dodatek B. Mechanizm oczyszczania 440
Wywołania zwrotne i delegaty 440
Budowanie mechanizmu oczyszczania 442
Problem 442
Proste rozwiązanie 443
Ponowne wykorzystywanie mechanizmu oczyszczania 445
Obsługiwanie zależności pomiędzy akcjami oczyszczającymi 446
Obsługiwanie wyjątków w akcjach oczyszczających 448
Podsumowanie 449
Dodatek C. Projekt „Test Automation Essentials” 450
Kontekst 450
Struktura projektu 451
Funkcje i narzędzia 452
Pakiety NuGet 452
TestAutomationEssentials.Common 452
Uwaga dotycząca testów jednostkowych i komentarzy XML 452
TestAutomationEssentials.MSTest 455
TestAutomationEssentials.CodedUI 456
TestAutomationEssentials.Selenium 456
Pomoc w tworzeniu projektu i przenoszenie na inne języki 459
Dodatek D. Wskazówki i praktyki zwiększające produktywność programisty 460
Preferuj korzystanie z klawiatury 460
Poka-Yoke 462
Unikaj wartości Null 463
Unikaj przechwytywania wyjątków 464
Wybieranie najbardziej odpowiedniego lokalizatora 467
Trwale zakodowane ciągi znaków w automatyzacji testów: za i przeciw 470
Indeks 474