"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