Książka "Testowanie i jakość oprogramowania. Modele, techniki, narzędzia"

Back to main site

Adam Roman
Testowanie i jakość oprogramowania. Modele, techniki, narzędzia
Wydawnictwo Naukowe PWN, 2015, xlvi+1100 pp.
ISBN 978-83-01-18160-4

Po co?

Książkę tę napisałem, aby wypełnić lukę na rodzimym rynku literatury testerskiej. Polscy testerzy do tej pory nie mieli książki, która zbierałaby i przedstawiała w zrozumiały sposób współczesne osiągnięcia inżynierii jakości oprogramowania. Większość dostępnych pozycji albo traktuje o testowaniu wyrywkowo, skupiając się na niewielkim jego obszarze, albo dotyczy wykorzystania konkretnych narzędzi i technologii. Co więcej, testowanie oprogramowania to istna dżungla: pojęć, narzędzi, metod, podejść, technologii i paradygmatów. Bardzo łatwo się w tym gąszczu informacji zagubić. W istniejącej literaturze testerskiej wciąż panuje zamęt terminologiczny. Nawet w oficjalnych materiałach organizacji takich jak ISTQB można spotkać nieścisłości czy nawet błędy, co jest dosyć ironiczne biorąc pod uwagę, że testowanie powinno być precyzyjne i dokładne. Wielu autorów opisuje techniki projektowania testów ogólnikowo, często trywializując je i sprowadzając do banalnych przykładów. To sprawia (mylne!) wrażenie, że techniki te są bezużyteczne.

Niniejszy podręcznik jest próbą zaradzenia tym problemom. Ma być swego rodzaju przewodnikiem po rozległym (i grząskim) świecie testowania i jakości oprogramowania. Zawartość książki abstrahuje od konkretnych technologii czy aplikacji, choć w jednym z rozdziałów prezentowany jest bogaty katalog konkretnych narzędzi testowych. Zależało mi na tym, aby przede wszystkim skupić się na wyczerpującym, dokładnym i rzetelnym opisaniu podstaw tej - wbrew pozorom trudnej! - dziedziny. Dzięki temu wiedza prezentowana w książce jest uniwersalna. Podręcznik pozwala Czytelnikowi na spojrzenie na inżynierię jakości "z lotu ptaka", poznanie różnych jej obszarów oraz relacji pomiędzy nimi. Opisany materiał starałem się wyłożyć z jednej strony w sposób prosty i zrozumiały nawet dla początkującego testera, z drugiej - w sposób precyzyjny, formalny i wyczerpujący. Książka jest bogato ilustrowana przykładami, które pokazują praktyczne wykorzystanie opisanej teorii. W szczególności, w kontekście technik projektowania testów, podane są nietrywialne przykłady zastosowania tych technik.

Zobacz również: oferta Instytutu Informatyki UJ studiów podyplomowych z testowania.

Dla kogo?

Książka pisana była z myślą o szerokim gronie odbiorców. W szczególności przeznaczona jest dla:

Życzyłbym sobie, aby każdy Czytelnik, niezależnie od tego jaką rolę pełni w swojej organizacji, po przeczytaniu tej książki przekonał się do tego, że testowanie jest fascynującą dziedziną inżynierii oprogramowania, a bycie testerem może być wspaniałą przygodą. Chciałbym, aby miał świadomość tego jak ważną rolę pełni testowanie w procesie wytwarzania oprogramowania. I że najważniejszą cechą, jaką powinien posiadać tester nie jest znajomość technik, metod czy standardów, ale umiejętność zdroworozsądkowego MYŚLENIA.

Jak dużo?

Poniżej trochę statystyki typu "książka w liczbach":

Duża liczba umieszczonych na końcu książki, wartościowych pozycji bibliograficznych (książki, artykuły, dokumentacja, linki do stron) sprawia, że książka jest bardzo dobrym źródłem referencyjnym. Czytelnik zainteresowany określonym zagadnieniem znajdzie odnośniki do odpowiedniej literatury, której lektura pozwoli na poszerzenie wiedzy w danej tematyce.

Nagrody i wyróżnienia

Książka otrzymała tytuł Informatycznej Książki Roku 2016 , przyznany przez Polskie Towarzystwo Informatyczne .

Książka została wyróżniona podczas 10. Targów Książki Akademickiej wyróżnieniem ACADEMIA 2016.

Recenzje książki

Recenzja magazynu Quale
Recenzja portalu testerzy.pl (część 1)
Recenzja dla portalu it.pwn.pl
Recenzja na stronie kjarocka.pl

Materiały dla osób przygotowujących się do egzaminu ISTQB - Foundation Level

Tutaj można pobrać dokument opisujący mapowanie treści książki na treść sylabusa "ISTQB Certyfikowany Tester - Poziom Podstawowy" wraz z szczegółowymi komentarzami dotyczącymi różnic pomiędzy sylabusem a książką.

O czym?

Poniżej przedstawiony jest spis treści książki.

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
    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 Taksnomia 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 webowej
    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 pomię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ść pomię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 w oparciu o przypadki użycia
    8.10.1 Opis metody
    8.10.2 Przykład
8.11 Testowanie w oparciu o scenariusze
    8.11.1 Opis metody
    8.11.2 Przykład
8.12 Testowanie w oparciu o historyjki 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
    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 wg ISO 9126

14 Modele jakości wg 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 complexity)
    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 utilisation)
    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 prediction)
    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ęp (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 o ryzyko
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 Hazard analysis
     19.9.7 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 na dane testowe (test data requirements)
    21.3.8 Przykład wymagania na dane testowe
    21.3.9 Wymagania na środowisko testowe (test environment requirements)
    21.3.10 Przykład wymagań na środowisko testowe
    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 (WBS – Work Breakdown Structure)
    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 o sesję

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 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 wg 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 Nominal Group Technique
     29.2.3 Metoda analogii
     29.2.4 Joint Application Development (JAD)
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
    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 pomię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&replay
    30.6.9 Narzędzia do testów jednostkowych
    30.6.10 Testowanie w metodyce BDD
    30.6.11 Narzędzia dla testowania opartego o model
    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 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 poprzez 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

A. Specyfikacja programu ELROJ

B. Normy i standardy

C. Dodatek matematyczny i teoretyczno-informatyczny

D. Informacja o certyfikacji i egzaminach

Bibliografia

Indeks