Opiniodawcy: Radosław Smilgin, dr hab. Marek Skomorowski

Projekt okładki i stron tytułowych Grzegorz Laskowski

Ilustracja na okładce RealCG Animation Studio/Shutterstock

Wydawca Łukasz Łopuszański

Redaktor prowadzący Irena Puchalska

Redaktor Urszula Pawłowska

Koordynator produkcji Anna Bączkowska

Skład i łamanie Marta Jeczeń-Bańkowska

Przygotowanie wersji elektronicznej Ewa Modlińska

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN Michał Nakoneczny / 88em.eu

Publikacja dofinansowana przez Uniwersytet Jagielloński

Książka, którą nabyłeś, jest dziełem twórcy i wydawcy. Prosimy, abyś przestrzegał praw, jakie im przysługują. Jej zawartość możesz udostępnić nieodpłatnie osobom bliskim lub osobiście znanym. Ale nie publikuj jej w internecie. Jeśli cytujesz jej fragmenty, nie zmieniaj ich treści i koniecznie zaznacz, czyje to dzieło. A kopiując jej część, rób to jedynie na użytek osobisty.

Szanujmy cudzą własność i prawo

Więcej na www.legalnakultura.pl

Polska Izba książki

Copyright © by Wydawnictwo Naukowe PWN SA

Warszawa 2015

ISBN 978-83-01-18393-6

eBook został przygotowany na podstawie wydania papierowego z 2015 r. (wyd. I)

Warszawa 2015

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl

www.pwn.pl

Spis treści

Spis ilustracji

Spis tabel

Spis listingów

Znaki handlowe

Wstęp

CZĘŚĆ I. PODSTAWY TESTOWANIA

1. Wprowadzenie do testowania

1.1. Dlaczego testowanie jest niezbędne

1.2. Definicja testowania

1.3. Słynne przykłady awarii oprogramowania

1.4. Rys historyczny

1.5. Ogólne zasady testowania

1.6. Jak dużo testować i kiedy skończyć?

1.7. Psychologia testowania

1.8. Kodeks etyczny testera

1.9. Role związane z testowaniem

2. Podstawowe definicje

3. Proces testowy

3.1. Podstawowy proces testowy

3.1.1. Planowanie

3.1.2. Monitorowanie i nadzór

3.1.3. Analiza testów

3.1.4. Projektowanie testów

3.1.5. Implementacja testów

3.1.6. Wykonanie testów

3.1.7. Ocena spełnienia kryteriów wyjścia oraz raportowanie

3.1.8. Czynności zamykające testowanie

3.2. Proces testowy wg ISO/IEC/IEEE 29119

4. Testowanie w cyklu życia oprogramowania

4.1. Modele wytwarzania oprogramowania

4.1.1. Model kaskadowy

4.1.2. Model V

4.1.3. Model W

4.1.4. Rational Unified Process (RUP)

4.1.5. Rapid Application Development (RAD)

4.1.6. Model spiralny Boehma

4.1.7. Metodyki zwinne

4.1.8. Metodologia Cleanroom

4.2. Weryfikacja i walidacja

4.3. Poziomy testów

4.3.1. Testy jednostkowe

4.3.2. Testy integracyjne

4.3.3. Testy systemowe

4.3.4. Testy akceptacyjne

4.3.5. Pozostałe poziomy testów

4.4. Typy testów

4.4.1. Testy funkcjonalne

4.4.2. Testy niefunkcjonalne

4.4.3. Testy strukturalne

4.4.4. Testy związane ze zmianami

4.5. Poziomy a typy testów

CZĘŚĆ II. TECHNIKI PROJEKTOWANIA TESTÓW

5. Testowanie oparte na modelu

5.1. Cechy dobrego modelu

5.2. Taksonomia modeli

5.3. Przykład wykorzystania modelu

5.4. Modele działania oprogramowania

5.4.1. Graf przepływu sterowania

5.4.2. Ograniczenia w stosowaniu grafu przepływu sterowania

5.4.3. Graf przepływu danych

5.4.4. Ścieżki, ścieżki testowe i ścieżki nieosiągalne

6. Techniki testowania statycznego

6.1. Przeglądy

6.1.1. Proces dla testowania statycznego

6.1.2. Metody sprawdzania oraz możliwe wyniki przeglądu

6.1.3. Role

6.1.4. Aspekt psychologiczny przeglądów

6.1.5. Typy przeglądów

6.1.6. Biznesowa wartość przeglądów

6.1.7. Wdrażanie przeglądów

6.1.8. Kryteria sukcesu przeglądów

6.2. Analiza statyczna

6.2.1. Analiza przepływu sterowania

6.2.2. Poprawność sekwencji operacji

6.2.3. Analiza przepływu danych

6.2.4. Narzędzia do parsowania kodu

6.2.5. Testowanie zgodności ze standardami oprogramowania

6.2.6. Metryki złożoności kodu

6.2.7. Formalne dowodzenie poprawności

6.2.8. Symboliczne wykonywanie kodu

6.2.9. Analiza statyczna strony internetowej

6.2.10. Grafy wywołań

7. Analiza dynamiczna

7.1. Wykrywanie wycieków pamięci

7.2. Wykrywanie dzikich i wiszących wskaźników

7.3. Błędy API

7.4. Analiza wydajności (profiling)

8. Techniki oparte na specyfikacji (czarnoskrzynkowe)

8.1. Podział na klasy równoważności

8.1.1. Opis metody

8.1.2. Formalna definicja podziału

8.1.3. Poprawne i niepoprawne klasy równoważności

8.1.4. Procedura tworzenia przypadków testowych

8.1.5. Przykład

8.1.6. Przykład śledzenia artefaktów procesu testowego

8.2. Analiza wartości brzegowych

8.2.1. Opis metody

8.2.2. Metody dwóch oraz trzech wartości granicznych

8.2.3. Które wartości rozważać jako brzegowe?

8.2.4. Przypadek zmiennych ciągłych

8.2.5. Przykład

8.3. Tablice decyzyjne

8.3.1. Opis metody

8.3.2. Wartości nieistotne i minimalizacja tablicy decyzyjnej

8.3.3. Przykład

8.4. Grafy przyczynowo-skutkowe

8.4.1. Opis metody

8.4.2. Przekształcanie między grafami P-S i tablicami decyzyjnymi

8.4.3. Metoda śledzenia wstecznego – redukcja liczby testów

8.4.4. Przykład

8.5. Testowanie przejść między stanami

8.5.1. Opis metody

8.5.2. Tabelaryczne reprezentacje przejść

8.5.3. Kryteria pokrycia dla maszyny stanowej

8.5.4. Diagram maszyny stanowej w UML

8.5.5. Przykład

8.6. Kategoria-podział (Category-Partition)

8.6.1. Opis metody

8.6.2. Przykład

8.7. Drzewa klasyfikacji

8.7.1. Opis metody

8.7.2. Budowa drzewa klasyfikacji

8.7.3. Asortyment produktów programowych i model cech

8.7.4. Przykład

8.8. Metody kombinacyjne

8.8.1. Opis metody

8.8.2. Each Choice

8.8.3. Base Choice

8.8.4. Multiple Base Choice

8.8.5. Pair-wise testing

8.8.6. Pokrycie n-tupletów (n-wise})

8.8.7. Pełne pokrycie kombinatoryczne

8.8.8. Subsumpcja kryteriów kombinacyjnych

8.9. Testowanie dziedziny

8.9.1. Opis metody

8.9.2. Hiperpłaszczyzny i podprzestrzenie

8.9.3. Wyznaczanie hiperpłaszczyzny przez punkty

8.9.4. Punkty IN, OUT, ON i OFF

8.9.5. Strategia IN-OUT dla testowania dziedziny

8.9.6. Strategia N-ON × M-OFF dla testowania wartości brzegowych

8.9.7. Ograniczenia nieliniowe

8.9.8. Przykład

8.10. Testowanie oparte na przypadkach użycia

8.10.1. Opis metody

8.10.2. Przykład

8.11. Testowanie oparte na scenariuszach

8.11.1. Opis metody

8.11.2. Przykład

8.12. Testowanie oparte na historyjkach użytkownika

8.12.1. Opis metody

8.12.2. Przykład

8.13. Testowanie losowe

8.13.1. Opis metody

8.13.2. Wady i zalety testowania losowego

8.13.3. Automatyzacja i problem wyroczni

8.13.4. Adaptive Random Testing (ART)

8.13.5. Losowanie danych wejściowych

8.13.6. Przykład

8.14. Testowanie oparte na składni

8.14.1. Opis metody

8.14.2. Notacja Backusa–Naura (BNF)

8.14.3. Tworzenie przypadków testowych

8.14.4. Przykład

8.15. Testowanie CRUD

8.15.1. Opis metody

8.15.2. Rozszerzenie metody

8.15.3. Przykład

8.16. Wybór i łączenie technik ze sobą

9. Techniki oparte na strukturze (białoskrzynkowe)

9.1. Testowanie instrukcji

9.1.1. Opis metody

9.1.2. Przykład

9.2. Testowanie gałęzi

9.2.1. Opis metody

9.2.2. Przykład

9.3. Testowanie decyzji

9.3.1. Opis metody

9.3.2. Testowanie decyzji a testowanie gałęzi

9.3.3. Przykład

9.4. Testowanie warunków

9.4.1. Opis metody

9.4.2. Przykład

9.5. Testowanie warunków/decyzji

9.5.1. Opis metody

9.5.2. Przykład

9.6. Testowanie wielokrotnych warunków

9.6.1. Opis metody

9.6.2. Zwarcie (semantyka short-circuit)

9.6.3. Nieosiągalne kombinacje warunków

9.6.4. Przykład

9.7. Testowanie warunków znaczących (MC/DC)

9.7.1. Opis metody

9.7.2. Dwa warianty kryterium MC/DC

9.7.3. Skorelowane a ścisłe pokrycie warunków znaczących

9.7.4. Wyznaczanie wartości warunków pobocznych dla warunku znaczącego

9.7.5. Przykład

9.8. Pokrycie MUMCUT oraz kryteria z nim związane

9.8.1. Opis metody

9.8.2. Kryteria MUTP, MNFP, CUTPNFP i MUMCUT

9.8.3. Przykład

9.8.4. Zdolność metody MUMCUT do wykrywania określonych typów błędów

9.9. Testowanie pętli

9.9.1. Opis metody

9.9.2. Pętle zagnieżdżone

9.9.3. Testowanie wzorców pętli

9.9.4. Przykład

9.10. Liniowa sekwencja kodu i skok (LSKiS)

9.10.1. Opis metody

9.10.2. Przykład

9.10.3. LSKiS a DD-ścieżki i bloki podstawowe

9.11. Testowanie ścieżek pierwszych

9.11.1. Opis metody

9.11.2. Algorytm wyznaczania ścieżek pierwszych

9.11.3. Przykład

9.12. Analiza ścieżek

9.12.1. Wstęp

9.12.2. Testowanie wszystkich ścieżek

9.12.3. Ścieżki liniowo niezależne i testowanie ścieżek bazowych

9.12.4. Wyznaczanie ścieżek bazowych

9.12.5. Przykład

9.12.6. Inne kryteria pokrycia związane z testowaniem ścieżek

9.13. Testowanie przepływu danych

9.13.1. Wstęp

9.13.2. Pokrycie wszystkich definicji (all-defs)

9.13.3. Pokrycie wszystkich użyć (all-uses)

9.13.4. Pokrycie wszystkich du-ścieżek (all-du-paths)

9.13.5. Uwagi o kryteriach pokrycia przepływu danych

9.13.6. Przykład

9.14. Objazdy i ścieżki poboczne (detours, sidetrips)

9.15. Testowanie mutacyjne

9.15.1. Wstęp

9.15.2. Rodzaje mutantów

9.15.3. Proces testowania mutacyjnego

9.15.4. Operatory mutacyjne

9.16. Subsumpcja kryteriów

10. Techniki oparte na defektach i na doświadczeniu

10.1. Wstrzykiwanie błędów

10.2. Taksonomie

10.3. Zgadywanie błędów

10.3.1. Opis metody

10.3.2. Przykład

10.4. Testowanie oparte na liście kontrolnej

10.5. Testowanie eksploracyjne

10.5.1. Opis metody

10.5.2. Przykład sesji testowania eksploracyjnego

10.6. Ataki usterkowe

10.7. Testowanie ad hoc

11. Wybór odpowiednich technik

12. Priorytetyzacja przypadków testowych

12.1. Wprowadzenie

12.2. Ocena priorytetyzacji – miara APFD

12.3. Techniki priorytetyzacji

CZĘŚĆ III. TESTOWANIE CHARAKTERYSTYK JAKOŚCIOWYCH

13. Model jakości według ISO 9126

14. Modele jakości według ISO 25010

15. Testowanie jakości użytkowej

15.1. Testowanie efektywności (effectiveness)

15.2. Testowanie wydajności (efficiency)

15.3. Testowanie satysfakcji (satisfaction)

15.3.1. Przydatność (usefulness)

15.3.2. Zaufanie (trust)

15.3.3. Przyjemność (pleasure)

15.3.4. Komfort (comfort)

15.4. Testowanie wolności od ryzyka (freedom from risk)

15.4.1. Ryzyko ekonomiczne (economic risk)

15.4.2. Ryzyko dotyczące zdrowia i bezpieczeństwa (health and safety risk)

15.4.3. Ryzyko związane ze środowiskiem (environmental risk)

15.5. Testowanie kontekstu użycia (context coverage)

15.5.1. Zupełność kontekstu (context completeness)

15.5.2. Elastyczność (flexibility)

16. Testowanie jakości produktu

16.1. Testowanie funkcjonalnej przydatności (functional suitability)

16.1.1. Zupełność funkcjonalności (functional completeness)

16.1.2. Poprawność funkcjonalności (functional correctness)

16.1.3. Stosowność funkcjonalności (functional appropriateness)

16.2. Testowanie wydajności w działaniu (performance efficiency)

16.2.1. Zachowanie w czasie (time behaviour)

16.2.2. Zużycie zasobów (resource utilization)

16.2.3. Pojemność (capacity)

16.2.4. Techniki testowania wydajności

16.3. Testowanie zgodności (compatibility)

16.3.1. Współistnienie (co-existence)

16.3.2. Współdziałanie (interoperability)

16.3.3. Przykład

16.4. Testowanie użyteczności (usability)

16.4.1. Zrozumiałość (appropriateness recognizability)

16.4.2. Łatwość nauki (learnability)

16.4.3. Łatwość użycia (operability)

16.4.4. Ochrona przed błędami użytkownika (user error protection)

16.4.5. Estetyka interfejsu użytkownika (user interface aesthetics)

16.4.6. Dostęp (accessibility)

16.5. Heurystyki dotyczące użyteczności

16.5.1. Heurystyki Nielsena

16.5.2. Laboratorium badania użyteczności (usability lab)

16.6. Testowanie niezawodności (reliability)

16.6.1. Dojrzałość (maturity)

16.6.2. Odporność na błędy (fault tolerance, robustness)

16.6.3. Odtwarzalność (recoverability)

16.6.4. Dostępność (availability)

16.7. Testowanie zabezpieczeń (security)

16.7.1. Poufność (confidentiality)

16.7.2. Integralność (integrity)

16.7.3. Niezaprzeczalność (non-repudiation)

16.7.4. Odpowiedzialność (accountability)

16.7.5. Uwierzytelnianie (authenticity)

16.8. Testowanie pielęgnowalności (maintainability)

16.8.1. Modularność (modularity)

16.8.2. Powtórne użycie (reusability)

16.8.3. Analizowalność (analyzability)

16.8.4. Modyfikowalność (modifiability)

16.8.5. Testowalność (testability)

16.9. Testowanie przenaszalności (portability)

16.9.1. Adaptowalność (adaptability)

16.9.2. Instalowalność (installability)

16.9.3. Zastępowalność (replaceability)

17. Testowanie jakości danych

17.1. Model jakości danych

17.2. Charakterystyki inherentne

17.2.1. Dokładność (accuracy)

17.2.2. Zupełność (completeness)

17.2.3. Spójność (consistency)

17.2.4. Wiarygodność (credibility)

17.2.5. Aktualność (currentness)

17.3. Charakterystyki inherentne i zależne od systemu

17.3.1. Dostępność (accessibility)

17.3.2. Zgodność (compliance)

17.3.3. Poufność (confidentiality)

17.3.4. Wydajność (efficiency)

17.3.5. Precyzja (precision)

17.3.6. Identyfikowalność (traceability)

17.3.7. Zrozumiałość (understandability)

17.4. Charakterystyki zależne od systemu

17.4.1. Dostępność (availability)

17.4.2. Przenaszalność (portability)

17.4.3. Odtwarzalność (recoverability)

CZĘŚĆ IV. ZARZĄDZANIE TESTOWANIEM

18. Zarządzanie testowaniem w kontekście

18.1. Kontekst ograniczeń projektowych

18.2. Kontekst interesariuszy procesu testowego

18.3. Kontekst produkcji oprogramowania

18.4. Kontekst cyklu życia oprogramowania

18.5. Kontekst testów

18.6. Kontekst czynnika ludzkiego

19. Testowanie oparte na ryzyku

19.1. Czym jest ryzyko?

19.2. Zalety testowania opartego na ryzyku

19.3. Rodzaje ryzyka

19.4. Zarządzanie ryzykiem w cyklu życia

19.5. Identyfikacja ryzyka

19.5.1. Analiza interesariuszy (stakeholder analysis)

19.5.2. Technika „władza versus zainteresowanie”

19.5.3. Techniki identyfikacji ryzyk

19.5.4. Przykłady ryzyk produktowych

19.6. Analiza ryzyka

19.6.1. Klasyfikacja ryzyk

19.6.2. Czynniki wpływające na prawdopodobieństwo i wpływ ryzyka

19.6.3. Ilościowa i jakościowa ocena ryzyka produktowego

19.6.4. Osiąganie konsensusu w procesie decyzyjnym

19.6.5. Priorytetyzacja ryzyk

19.7. Łagodzenie ryzyka

19.7.1. Sposoby łagodzenia ryzyka

19.7.2. Łagodzenie ryzyka przez testowanie

19.7.3. Estymacja kosztów łagodzenia ryzyka

19.8. Monitorowanie ryzyka

19.8.1. Macierz identyfikowalności ryzyk

19.8.2. Aktualizacja ryzyk oraz ich parametrów

19.8.3. Raportowanie

19.9. Techniki analizy ryzyka

19.9.1. PRAM (Pragmatic Risk Analysis and Management)

19.9.2. SST (Systematic Software Testing)

19.9.3. Przykład: zastosowanie SST do systemu ELROJ

19.9.4. PRisMa (Product Risk Management)

19.9.5. Przykład: zastosowanie PRisMa do systemu ELROJ

19.9.6. Analiza zagrożeń (hazard analysis)

19.9.7. Koszt ekspozycji ryzyka (cost of exposure)

19.9.8. FMEA (Failure Mode and Effect Analysis)

19.9.9. Przykład: zastosowanie FMEA do systemu ELROJ

19.9.10. QFD (Quality Function Deployment)

19.9.11. Przykład: zastosowanie QFD do systemu ELROJ

19.9.12. FTA (Fault Tree Analysis)

19.9.13. Przykład: zastosowanie FTA do systemu ELROJ

19.10. TMap (Test Management Approach)

19.11. TestGoal – testowanie oparte na wynikach

20. Pozostałe strategie testowania

20.1. Testowanie oparte na wymaganiach

20.1.1. Testowanie wymagań

20.1.2. Projektowanie testów opartych na wymaganiach

20.1.3. Przykład: obliczanie punktacji w grze w kręgle

20.2. Podejście oparte na modelu (profile operacyjne)

20.3. Podejście metodyczne (listy kontrolne)

20.4. Podejście oparte na standardzie

20.5. Inne podejścia

20.5.1. Podejście reaktywne

20.5.2. Podejście good enough

20.5.3. Podejście konsultacyjne

21. Dokumentacja w zarządzaniu testowaniem

21.1. Dokumenty organizacyjnego procesu testowego

21.1.1. Polityka testów

21.1.2. Przykład polityki testów

21.1.3. Organizacyjna strategia testowania

21.1.4. Przykład organizacyjnej strategii testowania

21.2. Dokumenty procesu zarządzania testowaniem

21.2.1. Plan testów (test plan)

21.2.2. Przykład planu testów

21.2.3. Jednopoziomowy plan testów (level test plan)

21.2.4. Przykład jednopoziomowego planu testów

21.2.5. Raport o stanie testów (test status report)

21.2.6. Przykład raportu o stanie testów

21.2.7. Raport końcowy z testowania (test completion report)

21.2.8. Przykład raportu końcowego z testowania

21.3. Dokumenty dynamicznych procesów testowych

21.3.1. Specyfikacja testów (test design specification)

21.3.2. Przykład specyfikacji testów

21.3.3. Specyfikacja przypadku testowego (test case specification)

21.3.4. Przykład specyfikacji przypadku testowego

21.3.5. Specyfikacja procedury testowej (test procedure specification)

21.3.6. Przykład specyfikacji procedury testowej

21.3.7. Wymagania co do danych testowych (test data requirements)

21.3.8. Przykład wymagania co do danych testowych

21.3.9. Wymagania co do środowiska testowego (test environment requirements)

21.3.10. Przykład wymagań co do środowiska testowego

21.3.11. Raport o gotowości danych testowych (test data readiness report)

21.3.12. Raport o gotowości środowiska testowego (test environment readiness report)

21.3.13. Otrzymane wyniki (actual results)

21.3.14. Wynik testu (test result)

21.3.15. Dziennik wykonania testów (test execution log)

21.3.16. Raport o incydencie (test incident report)

21.3.17. Raport z sesji testowania eksploracyjnego (exploratory testing session report)

21.3.18. Przykład raportu z sesji testowania eksploracyjnego

22. Szacowanie testów

22.1. Czynniki wpływające na szacowanie

22.2. Techniki szacowania

22.2.1. Intuicja, zgadywanie, doświadczenie

22.2.2. Estymacja przez analogię

22.2.3. Struktura podziału prac (Work Breakdown Structure, WBS)

22.2.4. Estymacja grupowa

22.2.5. Dane przemysłowe

22.2.6. Analiza punktów testowych (Test Point Analysis)

22.2.7. Modele matematyczne (parametryczne)

22.3. Negocjacje i redukcja zakresu testów

23. Nadzór i kontrola postępu testów

23.1. Wprowadzenie

23.2. Przykłady metryk

23.2.1. Metryki ryzyka produktowego

23.2.2. Metryki defektów

23.2.3. Metryki przypadków testowych

23.2.4. Metryki pokrycia

23.2.5. Metryki pewności

23.3. Zarządzanie testowaniem opartym na sesji

24. Biznesowa wartość testowania

24.1. Wprowadzenie

24.2. Koszt jakości

24.3. Wartość ekonomiczna oprogramowania i problemy z nią związane

24.4. Dług technologiczny w kontekście testowania

25. Testowanie rozproszone, zakontraktowane i zewnętrzne

25.1. Zespoły w ramach organizacji

25.2. Zespoły w ramach innych oddziałów organizacji

25.3. Dostawcy sprzętu i oprogramowania

25.4. Dostawcy usług testowych

25.5. TaaS (Testing as a Service)

26. Zarządzanie wdrażaniem standardów przemysłowych

27. Zarządzanie incydentami

27.1. Cykl życia defektu

27.2. Atrybuty defektu i ODC

27.2.1. Atrybuty defektów

27.2.2. ODC (Orthogonal Defect Classification)

27.2.3. Przykładowe analizy przy użyciu ODC

27.3. Metryki zarządzania incydentami

27.4. Zawartość raportu o incydencie

27.5. Komunikowanie incydentów

CZĘŚĆ V. LUDZIE I NARZĘDZIA

28. Ludzie i ich kompetencje – tworzenie zespołu

28.1. Budowanie zespołu testowego

28.1.1. Opis stanowiska

28.1.2. Analiza CV

28.1.3. Rozmowa kwalifikacyjna

28.1.4. Asymilacja nowego członka zespołu

28.1.5. Zakończenie zatrudnienia

28.2. Rozwój zespołu testowego

28.2.1. Indywidualny rozwój poszczególnych członków zespołu

28.2.2. Wyznaczanie celów

28.2.3. Dynamika zespołu testowego

28.2.4. Określanie ról i odpowiedzialności

28.2.5. Umiejętności zespołu jako całości: gap analysis

28.2.6. Indywidualne osobowości i role w zespole

28.2.7. Rozwój umiejętności i szkolenia

28.2.8. Mentoring

28.2.9. Okresowa ocena członków zespołu

28.3. Przywództwo

28.3.1. Zarządzanie a przywództwo

28.3.2. Model zmiany według Satir

28.3.3. Cechy charakteru lidera i zasady przywództwa

28.3.4. Informowanie i komunikacja

28.3.5. Lojalność, zaufanie i odpowiedzialność

28.3.6. Budowanie zespołu

28.4. Poziomy niezależności zespołu testowego

28.5. Komunikacja

29. Techniki pracy grupowej

29.1. Proces podejmowania decyzji

29.2. Techniki wspomagania kreatywności

29.2.1. Burza mózgów

29.2.2. NGT (Nominal Group Technique)

29.2.3. Metoda analogii

29.2.4. JAD (Joint Application Development)

29.3. Techniki porządkowania i priorytetyzacji

29.3.1. Diagram podobieństwa (affinity diagram)

29.3.2. Macierz i graf priorytetyzacji

29.3.3. Mapa myśli

29.4. Techniki szacowania i oceny

29.4.1. Wielokrotne głosowanie

29.4.2. Metoda delficka i Wideband Delphi

29.4.3. Poker planistyczny (planning poker)

29.4.4. Model Saaty’ego (Analytic Hierarchy Process)

29.5. Definiowanie problemu, przyczyny źródłowej lub możliwości

29.5.1. Analiza pola sił (force field analysis)

29.5.2. Immersja

29.5.3. Diagram rybiej ości (diagram Ishikawy)

30. Testowanie wspierane narzędziami

30.1. Podstawowe zagadnienia związane z użyciem narzędzi

30.1.1. Wybór odpowiedniego narzędzia

30.1.2. Koszty wdrożenia narzędzia

30.1.3. Ryzyka związane z wdrożeniem narzędzia

30.1.4. Korzyści z wdrożenia narzędzia

30.1.5. Strategie wdrażania automatyzacji

30.1.6. Integracja i wymiana informacji między narzędziami

30.1.7. Klasyfikacja narzędzi testowych

30.2. Automatyzacja testów

30.2.1. Czynniki sukcesu udanej automatyzacji

30.2.2. Metryki dla automatyzacji testów

30.3. Generyczna architektura automatyzacji testów

30.3.1. Warstwa generowania testów

30.3.2. Warstwa definiowania testów

30.3.3. Warstwa wykonania testów

30.3.4. Warstwa adaptacji testów

30.3.5. Zarządzanie konfiguracją

30.4. Automatyczna generacja danych testowych

30.5. Metody i techniki automatyzacji testów

30.5.1. Kroki procesu projektowania architektury

30.5.2. Podejścia do automatyzacji przypadków testowych

30.5.3. Podejście nagraj i odtwórz

30.5.4. Skrypty linearne

30.5.5. Skrypty zorganizowane

30.5.6. Testowanie oparte na danych

30.5.7. Testowanie oparte na słowach kluczowych

30.5.8. Testowanie oparte na procesie

30.5.9. Testowanie oparte na modelu

30.5.10. Języki i notacje dla definicji testów

30.6. Katalog narzędzi testowych

30.6.1. Narzędzia do zarządzania testami

30.6.2. Narzędzia do wykonywania/organizacji testów

30.6.3. Narzędzia do testowania mutacyjnego, posiewu usterek i wstrzykiwania błędów

30.6.4. Narzędzia do testów bezpieczeństwa

30.6.5. Symulatory i emulatory

30.6.6. Narzędzia do analizy statycznej i dynamicznej

30.6.7. Narzędzia do testów wydajnościowych

30.6.8. Narzędzia typu capture and replay

30.6.9. Narzędzia do testów jednostkowych

30.6.10. Testowanie w metodyce BDD

30.6.11. Narzędzia do testowania opartego na modelu

30.6.12. Narzędzia do śledzenia defektów, zarządzania incydentami i raportowania

30.7. Wdrażanie narzędzi w organizacji

30.7.1. Cykl życia narzędzia

30.7.2. Użycie narzędzi open source

30.7.3. Przykładowe problemy związane z użyciem narzędzi

CZĘŚĆ VI. UDOSKONALANIE PROCESU TESTOWEGO

31. Kontekst udoskonalania procesu

31.1. Po co udoskonalać?

31.2. Co można udoskonalić?

31.3. Spojrzenia na jakość

31.3.1. Jakość oparta na produkcie

31.3.2. Jakość oparta na użytkowniku

31.3.3. Jakość oparta na wytwarzaniu

31.3.4. Jakość oparta na wartości

31.3.5. Jakość transcendentna

31.4. Generyczny proces udoskonalania

31.4.1. Cykl Deminga–Shewarta (PDCA)

31.4.2. IDEAL

31.4.3. Podstawowe zasady doskonałości (Fundamental Concepts of Excellence)

31.5. Przegląd podejść do udoskonalania

31.5.1. Podejścia oparte na modelu

31.5.2. Podejścia analityczne

31.5.3. Podejścia hybrydowe

31.5.4. Inne podejścia do udoskonalania procesu testowego

32. Udoskonalanie oparte na modelu

32.1. Wprowadzenie

32.2. Udoskonalanie procesów organizacyjnych i biznesowych

32.2.1. TQM (Total Quality Management)

32.2.2. ISO 9000

32.2.3. EFQM Excellence Model

32.2.4. Six Sigma

32.2.5. Lean

32.3. Udoskonalanie procesu produkcji oprogramowania

32.3.1. CMMI

32.3.2. ISO/IEC 15504

32.3.3. ITIL (Information Technology Infrastructure Library)

32.3.4. TSP (Team Software Process)

32.3.5. BOOTSTRAP

32.4. Udoskonalanie procesu testowego – modele referencyjne procesu

32.4.1. TPI Next (Test Process Improvement)

32.4.2. TMMi (Test Maturity Model integration)

32.4.3. Porównanie TPI Next i TMMi

32.5. Udoskonalanie procesu testowego – modele referencyjne zawartości

32.5.1. STEP (Systematic Test and Evaluation Process)

32.5.2. CTP (Critical Testing Processes)

33. Podejście analityczne

33.1. Wprowadzenie

33.2. Analiza przyczynowa

33.2.1. Opis metody

33.2.2. Wybór elementów do analizy przyczynowej

33.2.3. Zebranie i zorganizowanie informacji

33.2.4. Identyfikacja przyczyny źródłowej przez analizę zebranych informacji

33.2.5. Wyciągnięcie wniosków

33.3. Podejście GQM (Goal–Question–Metric)

33.3.1. Opis metody

33.3.2. Fazy GQM

33.3.3. Dwa paradygmaty metody GQM

33.3.4. Wzorzec definiowania celu

33.3.5. Siedem pytań

33.3.6. Przykład

33.4. Miary, metryki i wskaźniki

34. Wybór metody usprawniania

35. Proces udoskonalania

35.1. Wprowadzenie

35.2. Rozpoczęcie procesu doskonalenia

35.2.1. Określenie powodu doskonalenia (stymulacja do zmiany)

35.2.2. Ustanowienie celów dla doskonalenia testowania

35.2.3. Określenie kontekstu

35.2.4. Pozyskanie wsparcia

35.2.5. Stworzenie infrastruktury dla procesu udoskonalania

35.3. Diagnozowanie aktualnej sytuacji

35.3.1. Scharakteryzowanie obecnego oraz pożądanego stanu procesu

35.3.2. Rekomendacje akcji naprawczych

35.4. Ustanowienie planu doskonalenia procesu testowego

35.4.1. Ustanowienie priorytetów dla wdrażania planu doskonalenia

35.4.2. Opracowanie podejścia do wdrożenia

35.4.3. Zaplanowanie działań związanych z wdrożeniem

35.5. Działanie w celu wdrożenia udoskonaleń

35.5.1. Stworzenie rozwiązania

35.5.2. Rozwiązania pilotażowe/testowe

35.5.3. Doprecyzowanie rozwiązania

35.5.4. Zaimplementowanie rozwiązania

35.6. Wyciąganie wniosków z projektu doskonalenia testów

35.6.1. Analiza i weryfikacja przeprowadzonych działań

35.6.2. Propozycje przyszłych rozwiązań

36. Organizacja, role i umiejętności

36.1. Organizacja

36.1.1. Zakres działań GPT

36.1.2. Organizacja Grupy procesu testowego

36.1.3. Właściwości Grupy procesu testowego

36.2. Role i umiejętności

36.2.1. Doskonalący proces testowy

36.2.2. Główny oceniający

36.2.3. Oceniający

36.2.4. Umiejętności doskonalącego proces testowy

37. Czynniki sukcesu

CZĘŚĆ VII. JAKOŚĆ OPROGRAMOWANIA

38. Czym jest jakość oprogramowania?

38.1. Testowanie oprogramowania a jakość oprogramowania

38.2. Model Kano

38.3. Dojrzałość procesu i standardy jakości

38.3.1. SPR

38.3.2. Ocena Malcolma Baldridge’a

38.4. Co mierzyć, jak mierzyć i po co mierzyć?

39. Podstawy teorii pomiarów

39.1. Metryka, miara, wskaźnik, pomiar

39.2. Skale pomiarowe

39.2.1. Skala nominalna

39.2.2. Skala porządkowa

39.2.3. Skala interwałowa

39.2.4. Skala stosunkowa

39.2.5. Podsumowanie rodzajów skal pomiarowych

39.3. Typy metryk

39.3.1. Metryka bezpośrednia (podstawowa)

39.3.2. Suma/różnica

39.3.3. Stosunek

39.3.4. Proporcja

39.3.5. Odsetek

39.3.6. Miary iloczynowe

39.3.7. Tempo

39.4. Spójność i odpowiedniość pomiaru

39.5. Błędy pomiarowe

39.6. Podstawowe zasady analizy danych

39.6.1. Miary tendencji centralnej

39.6.2. Miary rozproszenia

39.6.3. Korelacja i regresja liniowa

39.6.4. Przyczynowość

40. Narzędzia kontroli jakości

40.1. Klasyfikacja narzędzi

40.2. Rodzaje narzędzi oraz obszary ich zastosowań

40.3. Statystyczna kontrola procesu

40.3.1. Wykres przebiegu

40.3.2. Karty kontrolne

40.4. Wykres czasu cyklu

40.5. Narzędzia analizy i zapobiegania przyczynom źródłowym

40.5.1. 5 pytań „dlaczego?” i diagram „why–why”

40.5.2. Macierz „jest–nie jest”

40.5.3. Kaizen

40.5.4. Poka yoke

41. Metryki wielkości oprogramowania

41.1. Metryki wolumenowe

41.1.1. LOC

41.1.2. Współczynnik produktywności języka

41.1.3. Pomiar specyfikacji i projektu

41.2. Metryki funkcjonalności

41.2.1. Punkty funkcyjne

41.2.2. Punkty obiektowe i rozszerzone punkty obiektowe

41.2.3. Punkty cech

41.2.4. Punkty przypadków użycia

42. Metryki charakterystyk jakościowych

42.1. Metryki dla funkcjonalności

42.2. Metryki dla niezawodności

42.3. Metryki dla użyteczności

42.4. Metryki dla wydajności

42.5. Metryki dla pielęgnowalności

42.6. Metryki dla przenaszalności

43. Metryki złożoności oprogramowania

43.1. Metryki Halsteada

43.2. Złożoność cyklomatyczna McCabe’a

43.2.1. Gęstość złożoności cyklomatycznej

43.2.2. ECC (Essential Cyclomatic Complexity)

43.3. Konstrukcje składniowe

43.4. Metryki struktur

43.5. Metryki złożoności systemu

43.5.1. Indeks utrzymywalności

43.5.2. Metryka złożoności systemu Agrestiego–Carda–Glassa

43.6. Metryki obiektowe

43.6.1. Metryki Lorenza

43.6.2. Metryki CK

43.7. Metryki złożoności dokumentacji

43.8. Metryki złożoności algorytmicznej

44. Metryki i modele wysiłku

44.1. Modele oparte na zgadywaniu i intuicji

44.2. Modele oparte na dekompozycji

44.3. Modele oparte na wiedzy eksperckiej

44.4. Modele oparte na benchmarkach

44.5. Modele oparte na porównaniu

44.5.1. Porównanie proste (naiwne)

44.5.2. Porównanie z uwzględnieniem różnic

44.6. Modele parametryczne

44.6.1. Tworzenie własnego modelu

44.6.2. Model COCOMO II

44.7. Łączenie modeli i uwagi na temat estymacji

45. Metryki i modele dla defektów

45.1. Natura defektów

45.2. Metryki defektów

45.3. Modele statyczne defektów

45.3.1. Model wprowadzania/usuwania defektów

45.3.2. Model fazowy

45.3.3. Model dwufazowy

45.3.4. Efektywność usuwania defektów i powstrzymanie fazowe

45.3.5. Modele zmian w kodzie

45.4. Modele dynamiczne defektów

45.4.1. Model Rayleigha

45.4.2. Model wykładniczy i S-kształtny

45.4.3. Model COQUALMO

45.5. Analiza mutacyjna

45.6. Metryki dynamicznej stylometrii

46. Metryki i modele przyrostu niezawodności

46.1. Wprowadzenie

46.2. Matematyczne podstawy teorii niezawodności

46.2.1. Funkcja niezawodności i funkcja awarii

46.2.2. Metryka MTTF (średniego czasu do awarii)

46.2.3. Rozkłady prawdopodobieństwa modelujące występowanie awarii

46.2.4. Rozkład wykładniczy i jego związek z metryką MTTF

46.2.5. Funkcja częstości awarii oraz ryzyko (hazard rate)

46.2.6. Prawdopodobieństwo awarii do czasu t

46.3. Modele przyrostu niezawodności

46.3.1. Model Jelinskiego–Morandy

46.3.2. Model niedoskonałego debugowania Goela–Okumoto

46.3.3. Niejednorodny model procesu Poissona Goela–Okumoto

46.3.4. Logarytmiczny model Poissona czasu wykonywania Musy–Okumoto

46.3.5. Model S-kształtny

46.3.6. Inne modele niezawodności

47. Metryki i modele dostępności

47.1. Dostępność

47.1.1. Dostępność ciągła a dostępność wysoka

47.1.2. Metody zwiększające dostępność systemu

47.1.3. Ilościowa miara dostępności i jej obliczanie

47.2. Odmładzanie oprogramowania

47.2.1. Powody degradacji i sposoby odmładzania oprogramowania

47.2.2. Wpływ odmładzania na dostępność systemu

48. Metryki dla procesu testowego

49. Metryki zadowolenia klienta

49.1. Proces pomiaru zadowolenia klienta

49.1.1. Wybór metody i sposobu przeprowadzenia badania

49.1.2. Opracowanie ankiety/kwestionariusza lub innego narzędzia badań

49.1.3. Wybór metody próbkowania

49.1.4. Wybór rozmiaru próby

49.1.5. Zebranie, opracowanie i analiza danych

49.2. Dział wsparcia klienta

50. Sposób prezentowania danych

50.1. Prezentowanie danych graficznych

50.2. Prezentowanie metryk

Dodatek A

Dodatek B

Dodatek C

Dodatek D

Bibliografia

O autorze

Spis ilustracji

1.1. U-kształtna zależność gęstości defektów od rozmiaru modułu

1.2. Dwa przykłady skumulowanej liczby zgłoszonych i naprawionych defektów

3.1. Podstawowy proces testowy (wg ISTQB)

3.2. Przykład obustronnego śledzenia między artefaktami projektu

3.3. Przypadek testowy wysokiego poziomu

3.4. Przypadek testowy niskiego poziomu

3.5. Histogram odsetka wymagań pokrytych testami

3.6. Wielowarstwowy model procesu testowego wg ISO/IEC/IEEE 29119

3.7. Proces projektowania i implementacji testów wg ISO/IEC/IEEE 29119

4.1. Model kaskadowy (wodospadowy)

4.2. Model V

4.3. Model W

4.4. Model RUP

4.5. Model szybkiego prototypowania RAD

4.6. Model spiralny Boehma

4.7. Model Scrum

4.8. TDD

4.9. Metodologia Cleanroom

4.10. Hierarchia czynności weryfikacji i walidacji wg ISO/IEC/IEEE 29119

4.11. Projekt architektury przykładowego programu

5.1. Taksonomia modeli

5.2. Generacja kodu Graya o długości 3 z kodu o długości 2

5.3. Model 8-bitowego konwertera Gray2Order

5.4. Podstawowe elementy grafu przepływu sterowania

5.5. Transformacja konstrukcji algorytmicznych na grafy przepływu sterowania

5.6. Podział kodu na bloki podstawowe i odpowiadający mu graf przepływu sterowania

5.7. Problematyczne programy dla modelowania przepływu sterowania

5.8. Graf przepływu danych dla funkcji compute_prefix

5.9. Kod oraz odpowiadający mu CFG z nieosiągalną ścieżką

6.1. Porównanie miejsc powstawania i wykrywania defektu bez stosowania przeglądów (u góry) i z przeglądami (na dolej)

6.2. Podstawowy model inspekcji Fagana

6.3. Porównanie nakładu pracy w projekcie z inspekcjami i bez nich

6.4. Graf przepływu sterowania dla programu wykorzystującego kolejkę z ograniczoną pojemnością

6.5. Graf przepływu sterowania i jego złożoność cyklomatyczna

6.6. Przykład złego grafu przepływu sterowania oraz jego korekta

6.7. Wykonanie symboliczne kodu zamieniającego wartości zmiennych

6.8. Struktura strony www sklepu internetowego

6.9. Przykład niezrównoważonej i zrównoważonej struktury strony internetowej

6.10. Podstawowe typy wywołań między modułami

6.11. Graf wywołań dla programu grep.c

8.1. Podział dziedziny na klasy równoważności

8.2. Niepoprawny podział dziedziny

8.3. Obustronne śledzenie między artefaktami procesu testowego

8.4. Klasy równoważności i wartości brzegowe dla programu ZniżkaMPK

8.5. Metody dwóch oraz trzech wartości granicznych

8.6. Drzewo możliwych wartości wszystkich warunków

8.7. Ilustracja minimalizacji tablicy decyzyjnej

8.8. Opcje programu Word

8.9. Elementy składowe grafów przyczynowo-skutkowych

8.10. Wykorzystanie operatorów O i M dla reprezentacji przyczyn i skutków o więcej niż dwóch możliwych wartościach

8.11. Fragment grafu P-S odpowiadający jednej regule tablicy decyzyjnej

8.12. Graf P-S stworzony na podstawie tablicy decyzyjnej

8.13. Graficzna ilustracja reguł śledzenia wstecznego

8.14. Graf P-S do którego zastosowano śledzenie wsteczne

8.15. Ogólny model stanów oraz przejść między nimi. Dwie konwencje zapisu

8.16. Maszyna stanowa dla automatu biletowego

8.17. Graficzna reprezentacja różnych typów stanów

8.18. Maszyna stanowa z warunkami na niektórych przejściach

8.19. Przykładowa maszyna stanowa

8.20. Graf de Brujina dla ścieżek długości 2

8.21. Maszyna stanowa dla procesu opisującego pracę redakcji czasopisma

8.22. System komputerowego rozpoznawania obiektów

8.23. Typy wierzchołków w drzewie klasyfikacji

8.24. Drzewo klasyfikacji dla systemu SKRO wraz z macierzą testową

8.25. Notacja dla modelu cech

8.26. Model cech dla asortymentu produktu programowego smartfonu

8.27. Drzewo klasyfikacji wraz z tabelą kombinacji dla kryterium minimalistycznego

8.28. Etapy ręcznego tworzenia przypadków dla kryterium pokrycia par

8.29. 2-(4, 4, 1)-tablica ortogonalna i jej przekształcenie na zbiór przypadków testowych

8.30. Hierarchia subsumpcji dla kombinacyjnych kryteriów pokrycia

8.31. Hiperpłaszczyzny i podprzestrzenie w przestrzeni dwu- i trójwymiarowej

8.32. Obszar z brzegiem „otwartym”

8.33. Przykłady punktów IN, OUT, ON i OFF dla testowanego obszaru

8.34. Zdolność punktów ON-OFF do wykrywania błędów dziedziny

8.35. Redukcja liczby punktów ON i OFF dla kombinacji ograniczeń

8.36. Graficzna reprezentacja warunków dla kategoryzacji urządzeń ciśnieniowych

8.37. Warunki testowe na połączeniach linii

8.38. Model przepływu zdarzeń dla oprogramowania bankomatu

8.39. Typowe wzorce obszarów wejścia powodujących awarie

8.40. Ilustracja technik adaptacyjnego testowania losowego

8.41. Macierz CRUD

9.1. Kod i CFG dla programu SortBąbelkowe

9.2. Krawędzie CFG jako elementy pokrycia w testowaniu gałęzi

9.3. Graf przepływu sterowania dla programu Bisekcja

9.4. CFG i jego drzewo zagnieżdżeń pętli

9.5. Symboliczna reprezentacja LSKiS

9.6. DD-ścieżki a bloki podstawowe

9.7. Przykładowy CFG

9.8. CFG oraz ścieżki pierwsze dla funkcji CzyPierwsza

9.9. CFG z wykładniczą liczbą ścieżek testowych względem decyzji

9.10. Przykładowy CFG i jego zbiór ścieżek bazowych

9.11. CFG dla programu TypTrójkąta oraz dwa zbiory ścieżek bazowych

9.12. Przykładowy graf przepływu danych

9.13. Objazdy i ścieżki poboczne

9.14. Proces testowania mutacyjnego

9.15. Hierarchia subsumpcji dla białoskrzynkowych kryteriów pokrycia

10.1. Proces wstrzykiwania usterek i ulepszania zestawu testów (za [131])

10.2. Karta testu przed rozpoczęciem sesji testowania eksploracyjnego

10.3. Stworzenie etykiety w MS Word

10.4. Stworzenie podpisu tablicy w MS Word

10.5. Stworzenie w tekście odsyłacza do tablicy w MS Word

10.6. Karta testu po zakończeniu sesji testowania eksploracyjnego

10.7. Model usterki powodowanej interakcją programu i środowiska

11.1. Heurystyczny model strategii testowej

12.1. Geometryczna interpretacja miary APFD

13.1. Model jakości według ISO 9126

14.1. Model jakości McCalla

14.2. Model jakości użytkowej według ISO 25010

14.3. Model jakości produktu według ISO 25010

14.4. Model jakości danych według ISO 25012

16.1. Ekran programu ELROJ – przykład niepoprawnej funkcjonalności

16.2. Przykłady testowania obciążeniowego

16.3. Przykład złej skalowalności systemu

16.4. Przykładowy wynik analizy WAMMI (źródło: www.wammi.com/whatis.html)

16.5. Informowanie użytkownika o stanie systemu

16.6. Brak zgodności między systemem a rzeczywistością

16.7. Kontrola użytkownika nad systemem

16.8. Spójność interfejsów w obrębie rodziny produktów MS Office

16.9. Zapobieganie błędom: okno kalendarza zamiast pola na ręczne wpisanie daty

16.10. Wybór lokalizacji zamiast ręcznego wpisywania ścieżki

16.11. Zaawansowane opcje niewidoczne dla początkującego użytkownika

16.12. Prosty i estetyczny interfejs elektronicznego kalkulatora

16.13. Przykłady złych komunikatów o błędach

16.14. Laboratorium badania użyteczności (źródło: www.designperspectives.com/usability.html)

16.15. Mapa ciepła (heat map) dla śledzenia wzroku

16.16. Relacje między metrykami MTTR, MTTF i MTBF

16.17. Średni czas między awariami

16.18. Zależności między modułami i odpowiadająca im macierz struktury projektu

17.1. Przykład zgodności danych z zewnętrznymi regulacjami

17.2. Przykład poufności danych (hasło do poczty)

17.3. Przykład identyfikowalności danych

18.1. Klasyczny trójkąt ograniczeń projektowych

18.2. Skomplikowana struktura zależności między rolami w projekcie

19.1. Prawdopodobieństwo ryzyka a jego wpływ

19.2. Zależność między wielkością zużycia zasobów a osiąganym poziomem jakości

19.3. Model zarządzania ryzykiem

19.4. Macierz „władza versus zainteresowanie”

19.5. Czynniki wpływające na prawdopodobieństwo i wpływ ryzyka

19.6. Przykłady macierzy ryzyka produktowego

19.7. Poziom ryzyka według jego klasyfikacji

19.8. Przykład symulatora dla łagodzenia ryzyka

19.9. Macierz identyfikowalności ryzyka-testy

19.10. Przykład wysokopoziomowego raportu o ryzykach

19.11. Systemy o wysokiej i niskiej wierności

19.12. Czynności w analizie ryzyka według metody SST

19.13. Dwie postaci macierzy ryzyka produktowego w metodzie PRisMa

19.14. Proces PRisMa

19.15. Macierz ryzyka PRisMa i reguła koła

19.16. Techniki projektowania testów a kwadranty macierzy PRisMa

19.17. Macierz ryzyka produktowego dla systemu ELROJ

19.18. Związek między zagrożeniem, ryzykiem a awarią

19.19. Macierz QFD (tzw. dom jakości)

19.20. Macierz QFD dla systemu ELROJ

19.21. Notacja drzew awarii

19.22. Przykładowe drzewo awarii

19.23. Drzewo awarii dla systemu ELROJ

19.24. Model TMap

19.25. TestGoal – dziesięć zasad testowania sterowanego wynikami

20.1. Podział wymagań

20.2. Łańcuch Markowa jako model profilu operacyjnego

20.3. Wartość testowania w podejściu good enough

21.1. Hierarchia dokumentacji testowej wg ISO/IEE 29119-3

21.2. Przykładowy dziennik wykonania testów

22.1. Struktura podziału prac dla liczby testów systemu ELROJ

22.2. Schemat APT

23.1. Wymiary postępu testowania

23.2. Macierz identyfikowalności testy – ryzyka oraz historia testów przykładowego projektu

23.3. Raport z pokrycia ryzyk

23.4. Raport o defektach

23.5. Raport o defektach w podziale na ich umiejscowienie

23.6. Dwa raporty o testach i defektach dla modułu B

23.7. Raport o przypadkach testowych

23.8. Raport o testach uwzględniający wysiłek i podział na cechy jakościowe

23.9. Raport z pokrycia

24.1. Model kosztu jakości

24.2. Klasyczne i współczesne spojrzenie na ekonomiczny model kosztu jakości

25.1. Testowanie rozproszone, zakontraktowane i zewnętrzne

25.2. Klasyfikacja usług TaaS

27.1. Cykl życia incydentu

27.2. ODC: rozkład defektów dla atrybutu „wpływ”

27.3. Raport z narzędzia do zarządzania incydentami

27.4. Raporty na podstawie danych z dziennika incydentów

28.1. Przykładowe ogłoszenie o pracę dla testera

28.2. Hierarchia potrzeb – piramida Maslowa

28.3. Model Tuckmana dynamiki zespołu

28.4. Matryca RACI

28.5. Inwentarz umiejętności i gap-analysis

28.6. Wskaźnik osobowości Myers–Briggs

28.7. Model analizy transakcyjnej Wagnera

28.8. Style uczenia się według Honeya i Mumforda

28.9. Model zmiany według V. Satir

28.10. Cechy charakteru lidera

28.11. Komunikacja kierownika testów z innymi podmiotami

29.1. Generyczny proces podejmowania decyzji

29.2. Diagram podobieństwa – przykład

29.3. Graf priorytetyzacji – przykład

29.4. Mapa myśli – przykład

29.5. Wielokrotne głosowanie – przykład

29.6. Metoda delficka – przykład

29.7. Proces metody Wideband Delphi

29.8. Poker planistyczny w formie aplikacji na smartfona

29.9. AHP – struktura przykładowego problemu decyzyjnego

29.10. Analiza pola sił dla problemu zmiany w organizacji

29.11. Diagram rybiej ości (Ishikawy) – przykład

30.1. Automatyzacja vs testowanie ręczne – koszty

30.2. Koszty związane z wdrożeniem narzędzia

30.3. Ryzyka związane z wykorzystaniem narzędzi w testowaniu

30.4. Model generycznej architektury automatyzacji testów

30.5. Proces projektowania architektury automatyzacji testów

30.6. Różne sposoby reprezentacji elementów GUI: a) check-box; b) radio button; c) lista rozwijana

30.7. Formularz ze strony www obliczającej indeks BMI

30.8. Widok okna Selenium po nagraniu przypadku testowego

30.9. Selenium – odtworzenie nagranych akcji przypadku testowego

30.10. Oczekiwana informacja na ekranie systemu ELROJ

30.11. Skrypt oparty na słowach kluczowych z wykorzystaniem programu Excel

30.12. Języki i notacje stosowane w automatyzacji testów

30.13. Diagramy UML 2.5

30.14. Cykl życia narzędzia

31.1. Kontekst udoskonalania procesu testowego

31.2. Przykładowe obszary udoskonalania testowania

31.3. Cykl Deminga i jego zastosowanie w kontekście udoskonalania

31.4. Model IDEAL

31.5. Przegląd metod udoskonalania

31.6. Model People CMM

32.1. Model doskonałości EFQM (Excellence Model)

32.2. Six Sigma – rozkład normalny i zmienność procesu

32.3. CMMI – model z reprezentacją etapową

32.4. Obszary procesowe CMMI: weryfikacja i walidacja

32.5. Model TPI Next

32.6. TPI Next – macierz dojrzałości testów

32.7. TPI Next – macierz dojrzałości dla przykładowego procesu

32.8. TPI Next – bazowy układ klastrów

32.9. TPI Next – przykładowa sekwencja doskonalenia oparta na klastrach

32.10. TMMi – poziomy dojrzałości i odpowiadające im obszary procesów

32.11. TMMi – struktura modelu

32.12. STEP – elementy modelu

32.13. STEP – struktura aktywności w podziale na poziomy testów

32.14. CTP – model procesu

33.1. Analiza Pareto

33.2. Przestrzenna i czasowa identyfikacja grup defektów

33.3. Rozkład normalny

33.4. Wykres X–Y dla identyfikacji defektów do analizy przyczynowej

33.5. Techniki zbierania i organizacji informacji

33.6. Rozszerzenie diagramu Ishikawy w celu przeprowadzenia analizy

33.7. GQM – schemat modelu

33.8. Paradygmat GQM – koncepcja pomiaru

33.9. Paradygmat QIP – koncepcja udoskonalania

33.10. GQM – wzorzec definiowania celu

35.1. Korporacyjna tablica rozdzielcza – przykład

35.2. Zrównoważona karta wyników – przykład

36.1. Struktura Grupy procesu testowego dla dużej organizacji

36.2. Umiejętności doskonalącego proces testowy

38.1. Model Kano

39.1. Hierarchia abstrakcji pojęć w teorii pomiaru

39.2. Przykład zastosowania skali nominalnej

39.3. Graficzna reprezentacja spójności i odpowiedniości pomiaru

39.4. Rozkład dobrze opisywany przez modę

39.5. Różne stopnie korelacji

39.6. Model liniowy zależności defektów od punktów funkcyjnych

39.7. Podatność korelacji na wartości odstające

39.8. Kwartet Anscombe’a

40.1. Wykres przebiegu dla dostępności systemu

40.2. S-kształtny (skumulowany) wykres przebiegu

40.3. Karta kontrolna i przykłady anomalii

40.4. Karta kontrolna

40.5. Wykres czasu cyklu

40.6. Diagram why–why

40.7. Macierz jest–nie jest

40.8. Kaizen

41.1. Zależność gęstości defektów od rozmiaru programu

41.2. Procedura obliczania punktów funkcyjnych

41.3. Punkty funkcyjne – pięć typów funkcji

43.1. Ustrukturalizowane i nieustrukturalizowane elementy CFG

43.2. Redukcja CFG w celu obliczenia ECC

43.3. Przykładowy system

43.4. Przykładowa hierarchia klas

44.1. Model szacowania przez porównanie

44.2. Porównanie modeli parametrycznych dla wysiłku

44.3. Dane o PF i wysiłku oraz krzywa do nich dopasowana

45.1. Wykorzystanie modeli defektów

45.2. Dynamika i występowanie defektów – przykłady

45.3. Gęstość defektów w kolejnych wersjach oprogramowania

45.4. Model wprowadzania/usuwania defektów

45.5. Model wprowadzania i usuwania defektów w pojedynczej fazie

45.6. Macierz defektów i obliczanie metryk PCE, DRE i Dunna

45.7. Model Rayleigha dla różnych wartości współczynnika skali

45.8. Rozkład Weibulla dla różnych współczynników kształtu

45.9. Graficzna reprezentacja zaobserwowanych danych

45.10. Predykcja na podstawie modelu Rayleigha

45.11. Rozkład wykładniczy – gęstość i dystrybuanta

45.12. COQUALMO – podmodele wprowadzania i usuwania defektów

45.13. Model dynamicznej stylometrii – predykcja gęstości defektów

46.1. Indeks niezawodności

46.2. Dystrybuanta rozkładu wykładniczego

46.3. Model Jelinskiego–Morandy – chwilowa częstość awarii

47.1. Strategie odmładzania i reagowania a dostępność systemu

49.1. Metody pomiaru zadowolenia klienta

50.1. Marsz wojsk napoleońskich na Moskwę – przykład idealnego wykresu

50.2. Przykłady błędnie prezentowanych danych

50.3. Przykład niepożądanej i pożądanej redundancji

50.4. Wykres z dodanymi informacjami kontekstowymi

50.5. Przykład drążenia danych

A.1. Przykładowy ekran obsługiwany przez program ELROJ

A.2. Schemat logiczny systemu ELROJ

C.1. Granica funkcji

C.2. Geometryczna interpretacja pochodnej funkcji w punkcie

C.3. Geometryczna interpretacja całki oznaczonej

C.4. Ilustracja prawdopodobieństwa warunkowego

Spis tabel

1.1. Najważniejsze odkrycia w historii testowania oprogramowania

1.2. Koszt usuwania defektu w podziale na fazy cyklu życia

3.1. Typowe poziomy testów i odpowiadająca im podstawa testów

3.2. Mapowanie wymagań na elementy projektowe systemu ELROJ

3.3. Możliwe relacje między rzeczywistym a uzyskanym wynikiem testu

5.1. Przypadki testowe dla konwertera Gray2Order

5.2. Modele działania oprogramowania

6.1. Efektywność usuwania defektów dla wybranych statycznych metod testowania

6.2. Prosta analiza kosztów i zysków z przeprowadzenia przeglądu

6.3. Możliwe typy następstw operacji na zmiennych

6.4. Możliwe następstwa operacji dla zmiennej i w programie compute_prefix

8.1. Podsumowanie metody podziału na klasy równoważności

8.2. Zestaw warunków testowych dla programu TypTrójkąta na podstawie charakterystyki „typ trójkąta”

8.3. Zestaw warunków testowych dla programu TypTrójkąta na podstawie charakterystyk Ch2, Ch3 i Ch4

8.4. Przypadki testowe pokrywające klasy równoważności dla programu TypTrójkąta

8.5. Macierz identyfikowalności dla elementów pokrycia i przypadków testowych

8.6. Podsumowanie metody analizy wartości brzegowych

8.7. Porównanie efektywności różnych podejść do identyfikacji wartości granicznych

8.8. Przypadki testowe w analizie wartości brzegowych dla programu CarPanel

8.9. Ogólna postać tablicy decyzyjnej

8.10. Podsumowanie metody tablicy decyzyjnej

8.11. Tablica decyzyjna dla programu Egzaminator

8.12. Zminimalizowana tablica decyzyjna dla programu Egzaminator

8.13. Jeszcze bardziej zminimalizowana tablica decyzyjna programu Egzaminator

8.14. Tablica decyzyjna dla programu Bankier

8.15. Zminimalizowana tablica decyzyjna dla programu Bankier

8.16. Przypadki testowe dla programu Bankier

8.17. Przykładowa tablica decyzyjna z wymaganiami nieosiągalnymi

8.18. Przykładowa tablica decyzyjna z wymaganiami nieosiągalnymi po zminimalizowaniu

8.19. Podsumowanie metody grafów przyczynowo-skutkowych

8.20. Wynikowa tablica decyzyjna po zastosowaniu metody śledzenia wstecznego dla skutku S1

8.21. Tabelaryczna postać maszyny stanowej automatu biletowego

8.22. Pełna tabela przejść maszyny dla automatu biletowego

8.23. Krawędzie wychodzące z poszczególnych stanów

8.24. Obliczanie ścieżek o długości 2

8.25. Podsumowanie metody grafów przyczynowo-skutkowych

8.26. Przypadki testowe dla kryterium 0-przełączeń dla programu Czasopismo

8.27. Przypadki testowe dla kryterium 1-przełączeń dla programu Czasopismo

8.28. Podsumowanie metody kategoria-podział

8.29. Parametry i kategorie metody getDisplayString

8.30. Parametry, kategorie i wybory dla metody getDisplayString

8.31. Podsumowanie metody drzew decyzyjnych

8.32. Przypadki testowe dla programu SKRO

8.33. Przypadki testowe spełniające kryterium Each Choice

8.34. Elementy pokrycia dla kryterium Base Choice

8.35. Elementy pokrycia dla kryterium Multiple Base Choice

8.36. Podsumowanie metod kombinacyjnych

8.37. Podsumowanie metod analizy dziedziny

8.38. Kategoryzacja urządzeń ciśnieniowych w zależności od dopuszczalnego ciśnienia i pojemności

8.39. Przypadki testowe dla programu Kategoryzacja

8.40. Przypadek użycia dla szybkiej wypłaty z bankomatu

8.41. Przypadek testowy dla scenariusza głównego przypadku użycia SzybkaWypłata

8.42. Przypadek testowy dla scenariusza alternatywnego przypadku użycia SzybkaWypłata

8.43. Podsumowanie metody testowania opartego na przypadkach użycia

8.44. Podsumowanie metody testowania opartego na scenariuszach

8.45. Przypadek testowy dla scenariusza „udana wypłata”

8.46. Przypadek testowy dla scenariusza „nierozpoznana karta”

8.47. Przypadek testowy dla scenariusza „trzykrotny błędny PIN”

8.48. Przypadek testowy dla scenariusza „niewystarczająca ilość środków na koncie”

8.49. Podsumowanie metody testowania opartego na historyjkach użytkownika

8.50. Przypadki testowe dla historyjki użytkownika

8.51. Podsumowanie metody testowania losowego

8.52. Testowanie losowe – przypadki testowe dla modułu Przekształcenie

8.53. Podsumowanie metody testowania opartego na składni

8.54. Przypadki testowe dla techniki opartej na składni

8.55. Przypadki testowe wyprowadzone z macierzy CRUD

8.56. Różne realizacje możliwych operacji CRUD

8.57. Macierz CRUD dla systemu ELROJ

8.58. Przekształcona macierz CRUD dla systemu ELROJ

9.1. Podsumowanie metody testowania instrukcji

9.2. Przypadki testowe dla pokrycia instrukcji

9.3. Podsumowanie metody testowania gałęzi

9.4. Przypadki testowe spełniające kryterium pokrycia gałęzi – wariant I

9.5. Przypadki testowe spełniające kryterium pokrycia gałęzi – wariant II

9.6. Podsumowanie metody testowania decyzji

9.7. Przypadki testowe dla pokrycia decyzji

9.8. Przypadki testowe dla decyzji złożonej z 3 warunków

9.9. Podsumowanie metody testowania warunków

9.10. Przypadki testowe dla testowania warunków

9.11. Podsumowanie metody testowania warunków/decyzji

9.12. Przypadki testowe dla pokrycia warunków/decyzji

9.13. Podsumowanie metody testowania warunków wielokrotnych

9.14. Przypadki testowe nieuwzględniające zwarcia

9.15. Testy dla pokrycia wielokrotnych warunków z short-circuit

9.16. Przypadki testowe dla kryterium pokrycia wielokrotnych warunków

9.17. Wartościowanie warunków dla skorelowanego pokrycia warunków znaczących

9.18. Skorelowane pokrycie warunków znaczących – po usunięciu duplikatów

9.19. Wartościowania warunków dla ścisłego pokrycia warunków znaczących

9.20. Ścisłe pokrycie warunków znaczących – przypadki po usunięciu duplikatów

9.21. Tablica prawdy dla predykatu D = p ∧ (q ∨ r)

9.22. Podsumowanie metody testowania warunków znaczących

9.23. Tablica prawdy dla operatora XOR

9.24. Tablica prawdy dla predykatu funkcji leapYear

9.25. Przypadki testowe spełniające kryterium MC/DC dla funkcji leapYear

9.26. Podsumowanie metody testowania pętli

9.27. Pokrycie ścieżek iterowanych w metodzie wzorców pętli

9.28. Przypadki testowe dla pokrycia pętli w programie SortBąbelkowe

9.29. Podsumowanie metody testowania LSKiS

9.30. Możliwe LSKiS dla programu Potęgowanie

9.31. Przypadki testowe pokrywające LSKiS

9.32. Podsumowanie metody testowania ścieżek pierwszych

9.33. Przypadki testowe dla pokrycia ścieżek pierwszych programu CzyPierwsza

9.34. Podsumowanie metody testowania ścieżek

9.35. Testy dla TypTrójkąta spełniające kryteria pokrycia ścieżek i ścieżek bazowych

9.36. Podsumowanie metody testowania przepływu danych

9.37. Miejsca i typy wystąpienia zmiennych w procedurze RównanieKwadratowe

9.38. Przypadki testowe dla pokrycia wszystkich definicji

9.39. Przypadki testowe dla pokrycia wszystkich użyć

9.40. Podsumowanie metody testowania mutacyjnego

10.1. Tasonomia defektów oparta na przyczynie źródłowej (root-cause)

10.2. Lista kontrolna dla sprawdzenia użyteczności strony www

12.1. Przypadki testowe i usterki przez nie wykrywane

16.1. Ochrona przed błędami użytkownika – przykłady dobrych i złych rozwiązań

17.1. Baza danych adresów urzędów wojewódzkich

19.1. Ilościowe szacowanie ryzyka

19.2. Przykłady ryzyk produktowych i projektowych

19.3. Lista ryzyk z określonym poziomem i kategorią

19.4. Priorytetyzacja ryzyk

19.5. Poziomy krytyczności wg normy DO-178C

19.6. Poziomy nienaruszalności bezpieczeństwa wg IEC 61508

19.7. Obliczanie poziomu ryzyka w metodzie SST

19.8. Lista ryzyk dla programu ELROJ

19.9. Wagi czynników w PRisMa

19.10. Szacowanie ryzyka przez kierownika projektu

19.11. Szacowanie ryzyka przez analityka biznesowego

19.12. Szacowanie ryzyka przez architekta systemu

19.13. Uśrednione oceny

19.14. Ważona ocena ryzyk produktowych

19.15. Metody łagodzenia ryzyka dla systemu ELROJ

19.16. Wpływ redukcji ryzyka

19.17. FMEA dla programu ELROJ

20.1. Postać wymagań i proponowane techniki ich testowania

20.2. Profil operacyjny dla wyboru funkcji bankomatu

22.1. Przykładowe szacowanie kosztów testów z korektą

22.2. Średnie przemysłowe parametrów dotyczących testowania

27.1. ODC: przykład dwuwymiarowej analizy

29.1. Macierz priorytetyzacji – przykład

30.1. Zestaw słów kluczowych dla programu ELROJ

30.2. Frameworki wspierające testowanie jednostkowe

30.3. Przykładowe problemy z używaniem narzędzi

32.1. Doskonalenie oparte na modelu – korzyści i ryzyka

32.2. Obszary procesowe TMMi oraz ich cele i praktyki specyficzne

32.3. Porównanie TPI Next i TMMi

32.4. STEP – struktura poziomu testów

32.5. CTP – przykładowe metryki

33.1. Przykłady kategoryzacji defektów dla ich wyboru w analizie przyczynowej

35.1. Porównanie podejść do wdrożenia doskonalenia procesu testowego

36.1. Typy zdolności emocjonalnych według Mayera i Saloveya

39.1. Skale pomiarowe – podsumowanie

39.2. Dane o punktach funkcyjnych i liczbie defektów dla modelu regresji

40.1. Narzędzia kontroli jakości

40.2. Parametry kart kontrolnych

40.3. Pomiary dla karty kontrolnej

41.1. Tablica produktywności dla wybranych języków programowania

41.2. Wagi dla poszczególnych złożoności typów funkcji

41.3. Obliczanie złożoności typu funkcji danych

41.4. Obliczanie złożoności typu transakcji dla plików wewnętrznych

41.5. Obliczanie złożoności typu transakcji dla plików/zapytań zewnętrznych

41.6. Punkty funkcyjne dla systemu ELROJ

43.1. Metryki Halsteada

43.2. Złożoność cyklomatyczna a ryzyko

43.3. Złożoność cyklomatyczna a prawdopodobieństwo złej poprawki

43.4. Metryki Lorenza

43.5. Indeks Flescha – interpretacja wyników testu

44.1. Pracochłonność projektu testowego według podziału prac i czynności

44.2. Pracochłonność projektu testowego według podziału systemu

44.3. Rekomendowane wartości współczynnika D

44.4. Przykładowe dane historyczne z poprzednich projektów

44.5. Czynniki modyfikujące dla metody szacowania przez porównanie

44.6. Szacowanie wysiłku i kosztu przez porównanie

44.7. Dane historyczne o wysiłku i punktach funkcyjnych

44.8. COCOMO II – wagi czynników skali w zależności od ich wpływu

45.1. Wykorzystanie modelu fazowego

45.2. Modele zmian w kodzie – porównanie

47.1. Przykładowe dostępności systemu i odpowiadające im czasy niedostępności

47.2. Związek między gęstością defektów i wartością MTTF

49.1. Zebrane od użytkowników dane z ankiet

A.1. Wymagania funkcjonalne dla programu ELROJ

C.1. Tablica prawdy dla operatorów alternatywy, koniunkcji, implikacji i równoważności

C.2. Tablica prawdy dla operatora negacji

Spis listingów

1.1. Procedura przetwarzania komunikatów w oprogramowaniu AT&T

1.2. Dwa sposoby pobrania ciągu znaków ze strumienia wejściowego

1.3. Przykładowy program z pętlą

2.1. Algorytm sortowania bąbelkowego

2.2. Przykładowy program ilustrujący stopień pokrycia

3.1. Implementacja wysokopoziomowego przypadku testowego

3.2. Implementacja niskopoziomowego przypadku testowego

4.1. Historyjka użytkownika w podejściu BDD

5.1. Kod w C obliczający tablicę prefiksów dla algorytmu Knutha–Morrisa–Pratta

5.2. Fragment kodu z dynamicznym wiązaniem

6.1. Przykład programu z martwym kodem

6.2. Fragment kodu z dwoma definicjami zmiennej x

6.3. Przykład źle napisanego programu w C

6.4. Program obliczający silnię

6.5. Program obliczający silnię z wstawionymi asercjami

6.6. Program zamieniający miejscami wartości dwóch zmiennych

6.7. Kod źródłowy programu grep.c

7.1. Pseudokod programu Collatz

7.2. Zinstrumentowany program Collatz

7.3. Kod z wiszącymi i dzikimi wskaźnikami

7.4. Przeprowadzenie analizy wydajności

7.5. Przykładowy płaski profil programu generowany przez gprof

7.6. Graf wywołań wygenerowany przez gprof

8.1. Program obliczający końcową ocenę z przedmiotu

8.2. Algorytm redukcji liczby testów dla grafu P-S

8.3. Konfiguracja środowiska testowego dla wykonania testu metody getDisplayString

8.4. Procedura InParameterOrder dla pokrycia par

9.1. Fragment programu z martwym kodem

9.2. Prosty program

9.3. Program Bisekcja

9.4. Funkcja sprawdzająca przestępność roku

9.5. Funkcja RównanieKwadratowe

9.6. Powtórzony kod programu SortBąbelkowe

9.7. Szybkie potęgowanie

9.8. Wyznaczanie ścieżek pierwszych

9.9. Funkcja CzyPierwsza

9.10. Zdolność metody ścieżek bazowych do wykrywania defektów

9.11. Kod programu TypTrójkąta

9.12. Procedura RównanieKwadratowe napisana w Adzie

9.13. Program i jego pięć przykładowych mutantów

16.1. Fragment kodu html obowiązkowego w responsive web design

17.1. Skrypt PL/SQL z poleceniem ROLLBACK

19.1. Symulacja Monte Carlo szacująca prawdopodobieństwo awarii głównej

30.1. Page Object dla strony www wyszukiwania Google

30.2. Test z wykorzystaniem Page Object Pattern

30.3. Skrypt w Pythonie dla nagranego przypadku testowego

30.4. Pseudokod zorganizowanego skryptu

30.5. Skrypt dla testowania opartego na danych

30.6. Przypadki testowe dla systemu ELROJ oparte na słowach kluczowych

30.7. Fragment skryptu napisanego w Perlu

30.8. Skrypt VBScript wyszukujący dane w arkuszu kalkulacyjnym

30.9. Kod w OCL definiujący ograniczenia dla metody calcArea

30.10. Plik XML z rozkładem jazdy dla systemu ELROJ

33.1. Test statystyczny t-Studenta dla czasu naprawy defektów

39.1. Skrypt w pakiecie R budujący model liniowy

43.1. Kod programu w C++ sortującego tablicę

45.1. Skrypt wykorzystujący model Rayleigha do predykcji defektów

46.1. Model Jelinskiego–Morandy – praktyczne wykorzystanie

49.1. Statystyki opisowe dla zebranych danych

Znaki handlowe

CMM® oraz CMMI® są zarejstrowanymi znakami Carnegie Mellon University.

IDEALSM, PSPSM i TSPSM są zarejestrowanymi znakami Instytutu Inżynierii Oprogramowania (SEI), Carnegie Mellon University.

EFQM Excellence ModelTM jest zarejestrowanym znakiem handlowym European Foundation for Quality Management.

ISTQB® jest zarejestrowanym znakiem International Software Testing Qualifications Board.

ITILTM jest zarejestrowanym znakiem Office of Government Commerce.

TMMTM jest zarejestrowanym znakiem Illinois Institute of Technology.

TMMi® jest zarejestrowanym znakiem TMMi Foundation.

TPI® oraz TPI Next® są zarejestrowanymi znakami Sogeti Nederland B.V.

Wstęp

Mniej więcej w latach dziewięćdziesiątych XX wieku inżynieria oprogramowania weszła w erę jakości. Jakość, odnosząca się zarówno do produktu, jak i do procesu wytwórczego, stała się celem numer jeden w każdym poważnym projekcie IT. Wszystkie szanujące się firmy przeprowadzają u siebie audyty, aby wykazać zgodność swoich działań z takimi normami jak ISO 9001 czy określić poziom dojrzałości procesów według modelu CMMI (ang. Capability Maturity Model Integration). Powstało wiele metodologii zarządzania jakością, głównie na użytek „klasycznego” przemysłu. Równocześnie, do branży informatycznej przenikały i znalazły poczesne miejsce takie idee jak statystyczna kontrola procesu czy metoda Six Sigma.

Jednym ze sposobów zapewniania jakości tworzonych aplikacji jest testowanie oprogramowania. Testowanie jest tak stare jak wytwarzanie oprogramowania i można bez cienia przesady powiedzieć, że istniało od momentu powstania pierwszego programu napisanego na komputerze. Mimo tak szacownej historii testowanie, zwłaszcza w polskich firmach, ciągle pozostaje mało docenianą dziedziną inżynierii oprogramowania. Wciąż można spotkać szefów firm, którzy – chcąc pokazać przyjazne nastawienie ich organizacji wobec wszystkich kandydatów – wyrażają gotowość zatrudniania osób z niewielkim doświadczeniem, oferując im stanowiska testerów. Uważają bowiem, że jest to zawód, który mogą wykonywać osoby bez jakiejkolwiek znajomości testowania. Wynika to z braku świadomości tego, że testowanie jest nie tylko dyscypliną trudną, lecz także odgrywa kluczową rolę w zapewnianiu jakości tworzonego oprogramowania.

Taka postawa właścicieli firm produkujących oprogramowanie jest zupełnie niezrozumiała. Gdyby zaproponować im zatrudnienie programisty-amatora, który dopiero chce się nauczyć profesjonalnego pisania kodu, zaprotestowaliby gwałtownie i odpowiedzieliby zapewne, że nie mogą sobie pozwolić na takie ryzyko, bo to obniżyłoby jakość tworzonego produktu. Paradoksalnie jednak, nie dbając o doświadczenie zatrudnianych testerów, pozwalają sobie na ryzyko o wiele większe, gdyż konsekwencje późnego wykrycia defektów (na skutek nieumiejętnego testowania), po przekazaniu oprogramowania klientowi, są o wiele poważniejsze, niż gdy wykrycie to następuje we wczesnych fazach cyklu życia.

Takie podejście kierownictwa często wynika z powierzchownej wiedzy o testowaniu oprogramowania. Wielu menedżerów wyższego szczebla kojarzy proces testowania z praktykantem, który „siedzi, klika i patrzy, czy coś się nie zepsuje”. Nie zdają sobie sprawy, jak rozległą, trudną i skomplikowaną dziedziną jest testowanie. Często nie rozumieją, że efektywne testowanie oprogramowania wymaga wielkiego nakładu pracy, alokacji sporych środków finansowych, sprawnego zarządzania oraz nierzadko umiejętności zastosowania wysoce nietrywialnych technik. Proces testowania jest tak samo trudny, a może nawet trudniejszy, jak proces tworzenia oprogramowania.

O znaczeniu testowania może świadczyć powstanie w ostatnich latach różnych organizacji międzynarodowych, takich jak np. ISTQB, które przeprowadzają egzaminy na certyfikowanych testerów, organizują konferencje czy publikują materiały opisujące dobre praktyki w testowaniu. Także na naszym, polskim podwórku pojawia się coraz więcej ciekawych inicjatyw związanych z jakością oprogramowania, np. Mistrzostwa Polski w Testowaniu czy też seria konferencji „Test Well” zainicjowana w 2013 roku. Te ostatnie przykłady pozwalają patrzeć optymistycznie na rozwój społeczności testersko-jakościowej w Polsce, ale trzeba pamiętać, że jest jeszcze wiele do zrobienia. I po to, między innymi, powstała ta książka.

Niniejszy podręcznik został napisany dla:

- początkujących testerów, aby już na samym początku swojej kariery zawodowej poznali dobre praktyki oraz najefektywniejsze techniki i metody testowania, a także aby mogli spojrzeć na tę dziedzinę z lotu ptaka, zobaczyć, z jakich obszarów się składa i jakie są zależności między nimi;

- zawodowych testerów, aby ugruntowali i poszerzyli swoją wiedzę o zaawansowane techniki testowania;

- inżynierów jakości, aby efektywnie wykorzystywali istniejące metody, modele i procesy zapewniania jakości oprogramowania;

- kierowników, menedżerów i dyrektorów testów, aby sprawniej zarządzali procesem testowym w organizacji i efektywnie go ulepszali;

- osób doskonalących lub chcących doskonalić proces testowy w organizacji, aby nabyli niezbędną do tego celu wiedzę;

- osób przygotowujących się do egzaminów na certyfikaty ISTQB (poziom podstawowy, zaawansowany i ekspercki), aby dostarczyć im zwarte źródło materiałów pomocnych w nauce do egzaminu;

- dyrektorów działów IT, aby mogli lepiej zrozumieć rolę testowania w organizacji;

- pracowników naukowych, którzy prowadzą lub zamierzają prowadzić zajęcia dydaktyczne i/lub badania naukowe w obszarze testowania i jakości oprogramowania;

- obecnych lub przyszłych pasjonatów testowania, którzy planują związać swój rozwój zawodowy z tą dziedziną inżynierii jakości oprogramowania.

Podręcznik ten abstrahuje od konkretnych języków programowania czy narzędzi testowych. Wyjątkiem jest rozdział 30, gdzie podałem przykładowy katalog konkretnych aplikacji wspomagających proces testowania. W książce skupiłem się wyłącznie na metodach i technikach testowania, zarządzania testowaniem oraz zapewniania jakości, dzięki czemu zawarta w niej wiedza jest uniwersalna i przydatna dla każdego testera w każdej organizacji, niezależnie od typu projektu, w jakim uczestniczy, oraz narzędzi, jakich używa. Słowo „narzędzia” w podtytule książki jest związane z abstrakcyjnymi metodami pomocnymi w pracy inżyniera jakości, a nie konkretnymi aplikacjami typu CASE (ang. Compute-Aided Software Engineering) czy CAST (ang. Computer-Aided Software Testing).

projekt (ang. project) – zestaw skoordynowanych i kontrolowanych aktywności o określonym czasie rozpoczęcia i zakończenia; jest powoływany, aby osiągnąć cel zgodnie z określonymi wymaganiami, w tym ograniczeniami czasowymi, kosztowymi i zasobowymi [1]

CASE (ang. Computer-Aided Software Engineering) – inżynieria oprogramowania wspomagana komputerowo

CAST (ang. Computer-Aided Software Testing) – testowanie oprogramowania wspomagane komputerowo; patrz także: automatyzacja testowania

Książka składa się z siedmiu części. Pierwsza jest wprowadzeniem w dyscyplinę testowania oprogramowania. Zawiera niezbędne pojęcia, opisuje proces testowy i wyjaśnia, jak ten proces jest umiejscowiony w różnych cyklach życia oprogramowania. Definiuje także typowe poziomy i typy testów.

Część druga to obszerny przegląd technik projektowania testów. Opisane zostały w nim wszystkie najważniejsze oraz najczęściej stosowane techniki: czarnoskrzynkowe, białoskrzynkowe, oparte na defektach i oparte na doświadczeniu. Omówione są również techniki statyczne, takie jak przeglądy czy analiza statyczna, oraz metody analizy dynamicznej.

W części trzeciej zostały opisane zagadnienia związane z testowaniem niefunkcjonalnym, czyli testowaniem cech jakościowych. Materiał tej części w dużym stopniu jest oparty na normie ISO/IEC/IEEE 25010 [2], która zastąpiła kilka lat temu normę ISO/IEC 9126 [3].

Część czwarta jest przeznaczona głównie dla osób zajmujących się testowaniem od strony zarządzania, takich jak: kierownicy testów, menedżerowie jakości, kierownicy zespołów testowych. Omówione są w niej techniki zarządzania z naciskiem na metody oparte na ryzyku. Zawiera także przegląd dokumentacji testowej zgodny z normą ISO/IEC 29119-3 [4], która zastąpiła dotychczas stosowaną normą IEEE 829 [5].

Część piąta jest poświęcona ludziom i narzędziom w procesie testowym. Przedstawione są w niej zagadnienia komunikacji w zespole, kompetencji oraz motywacji. Zawiera także szeroki przegląd typów narzędzi wraz z konkretnymi przykładami ich zastosowań.

Część szósta dotyczy metod doskonalenia procesu testowego. Jest przeznaczona głównie dla menedżerów, osób odpowiedzialnych w firmie za usprawnianie procesu testowego oraz dla kandydatów przygotowujących się do egzaminu ISTQB Expert Level – Test Process Improvement.

Część siódma jest poświęcona zagadnieniom jakości oprogramowania: metrykom i modelom stosowanym w inżynierii jakości.

W książce, oprócz tekstu podstawowego, występują dwa inne rodzaje informacji: definicje oraz listingi (kody źródłowe):

definicja – definicja pojęcia (wraz z jego angielskim odpowiednikiem) jest opisana na szarym tle; większość definicji jest podana za Słownikiem wyrażeń związanych z testowaniem pod redakcją Lucjana Stappa, opublikowanym przez Stowarzyszenie Jakości Systemów Informatycznych [6]

Kod źródłowy lub pseudokod programu – napisany czcionką Courier New, między dwiema poziomymi liniami oznaczającymi początek i koniec kodu. Linie kodu mogą być numerowane w celu odwołania się do nich w tekście.

Nazwy zmiennych, funkcji oraz programów w zwykłym tekście są oznaczone kursywą. Fragmenty kodu w tekście są podane, podobnie jak listingi, czcionką maszynową (Courier New). Wartości logiczne są opisywane albo słownie, jako prawda i fałsz, albo za pomocą liczb 1 i 0, pogrubioną czcionką.

Książka zawiera cztery dodatki. W Dodatku A został opisany system ELROJ (ELektroniczny ROzkład Jazdy), który będzie przykładem przewodnim służącym do ilustracji wielu metod i technik testowania. Dodatek ten zawiera opis systemu, specyfikację wymagań oraz fragment projektu architektury. Zaleca się, aby Czytelnik przed lekturą właściwej części książki zapoznał się z opisem tego systemu.

W Dodatku B zebrano wszystkie najważniejsze normy i standardy bezpośrednio lub pośrednio związane z testowaniem i jakością oprogramowania. Dodatek C zawiera formalne definicje pojęć matematycznych oraz definicje z zakresu teoretycznych podstaw informatyki, które są wykorzystywane w książce. W Dodatku D zostały opisane najbardziej znane i cenione w środowisku testerów programy certyfikacji na testerów lub inżynierów jakości.