KraQA VIII - Techniki projektowania testów

42
Techniki projektowania testów Adam Roman [email protected]

Transcript of KraQA VIII - Techniki projektowania testów

Techniki projektowania testów

Adam Roman

[email protected]

O czym jest ta prezentacja?

• podstawowe techniki projektowania testów – fakty i mity

– błędy i niedopowiedzenia

– trywializowanie technik

• podstawowe techniki a rzeczywiste projekty – nietrywialne aspekty technik

• zaawansowane rozszerzenia podstawowych technik projektowania testów – zalety wykorzystania technik

Podział na klasy równoważności (1)

dziedzina wejścia

dziedzina wyjścia

test 1

test 2

test 3

test 4

test 1

test 2

test 3

Podział na klasy równoważności (2)

Przykład: plik

• charakterystyka: porządek elementów w pliku

– plik posortowany rosnąco

– plik posortowany malejąco

– plik nieposortowany

Przykład: plik

• charakterystyka: porządek elementów w pliku

– plik posortowany rosnąco

– plik posortowany malejąco

– plik nieposortowany

plik jednoelementowy…?

Przykład: plik

• charakterystyka: porządek elementów w pliku

– plik posortowany rosnąco

– plik posortowany malejąco

– plik nieposortowany

• charakterystyki:

– posortowany rosnąco (tak, nie)

– posortowany malejąco (tak, nie)

plik jednoelementowy…?

Oklepany przykład: trójkąt (1)

Charakterystyka B1 B2 B3

relacja a do zera (1) >0 (4) 0 (7) <0

relacja b do zera (2) >0 (5) 0 (8) <0

relacja c do zera (3) >0 (6) 0 (9) <0

Charakterystyka B1 B2 B3 B4

klasyfikacja geometryczna

(10) różno- boczny

(11) równoramienny, nie równoboczny

(12) równo- boczny

(13) niepoprawny

Oklepany przykład: trójkąt (2) relacja a do zera (1) >0 (4) 0 (7) <0

relacja b do zera (2) >0 (5) 0 (8) <0

relacja c do zera (3) >0 (6) 0 (9) <0

(10) różnoboczny

(11) równoramienny, nie równoboczny

(12) równoboczny

(13) niepoprawny

# przypadek

testowy pokrywa

klasy

1 (2, 5, 6) (1), (2), (3), (10)

2 (4, 4, 4) (12)

3 (5, 6, 6) (11)

4 (0, 4, 5) (13), (4)

3 (4, 0, 5) (5)

4 (4, 5, 0) (6)

5 (-1, 4, 4) (7)

6 (4, -1, 4) (8)

7 (4, 4, -1) (9)

Sukcesywnie twórz przypadki pokrywające jak najwięcej klas

poprawności

Sukcesywnie twórz przypadki, z których każdy pokrywa tylko jedną klasę niepoprawności

Pokrywanie klas niepoprawności: maskowanie błędów

string ObliczOcenę(int pktEgz, int pktLab)

1 if (pktEgz + pktLab > 90) then

2 return "5.0"

3 else {

4 byte pktRazem = pktEgz+pktLab

5 if (pktRazem > 70) then

6 return "4.0 bo punkty = "+pktRazem

7 else if (pktRazem > 50) then

8 return "3.0 bo punkty = "+pktRazem

9 else if (pktRazem >=0) then

10 return "2.0 bo punkty = "+pktRazem

11 else return "Jakiś error!"

12 }

Wejście (pktEgz = –1000, pktLab = 1095)

Analiza Wartości Brzegowych (1)

Analiza Wartości Brzegowych (2)

Analiza Wartości Brzegowych (3)

Wartości brzegowe: • określa się dla ustalonej klasy równoważności • to największa i najmniejsza wartość klasy równoważności • stosuje się zarówno dla klas wejść jak i dla wyjść programu

wartości brzegowe i graniczne dla klasy X2

Analiza Wartości Brzegowych (4)

Co tak naprawdę testujemy w Analizie Wartości Brzegowych?

ISO 29119 – Software Testing Standard, Proces projektowania i implementacji testów

Zawsze testujemy te elementy

Analiza Wartości Brzegowych (4)

Warunki testowe w AWB: wartości brzegowe Elementy pokrycia w AWB: wartości graniczne W Analizie Wartości Brzegowych testujemy wartości graniczne

wartości brzegowe (w kółku) i graniczne dla klasy X2

Analiza Wartości Brzegowych (5)

Czy metoda 3 wartości granicznych nie jest aby nadmiarowa?

Testujemy dla 17, 18, 19. Ale po co testować 17, skoro

już przetestowaliśmy 18, a obie te liczby leżą w tej

samej klasie równoważności? Testujmy zatem tylko 18 i 19

Analiza Wartości Brzegowych (5)

Czy metoda 3 wartości granicznych nie jest aby nadmiarowa?

Testujemy dla 17, 18, 19. Ale po co testować 17, skoro

już przetestowaliśmy 18, a obie te liczby leżą w tej

samej klasie równoważności? Testujmy zatem tylko 18 i 19

if (wiek <= 18) { … }

if (wiek < 18) {…}

if (wiek == 18) {…}

poprawny warunek

pomyłka programisty (wykryta dla wiek=18) a tu co?!

Przykład: aplikacja udzielająca pożyczki

• jakie są wartości graniczne dla przedziału liczb rzeczywistych?

• to kwestia dokładności zmiennoprzecinkowej

• ale w ogólności – to zależy od testera (!)

• jak wyglądają wartości brzegowe dla naszego przykładu?

Przykład: aplikacja udzielająca pożyczki

• wartości brzegowe dla wielkości pożyczki

– -max, -1 [błędne, ujemne]

– 0, 49 [błędne, zero]

– 50, 4949 [błędne, za mało]

– 4950, 10000049 [poprawne]

– 1000050, max [błędne, za dużo]

Przykład: aplikacja udzielająca pożyczki

• wartości brzegowe dla wartości nieruchomości

– -max, -1 [błędne, ujemne]

– 0, 49 [błędne, zero]

– 50, 24949 [błędne, za mało]

– 24950, 50000049 [poprawne]

– 5000050, max [błędne, za dużo]

Brzegi dla dziedzin wielowymiarowych przykład praktyczny (z życia wzięty)

Rozporządzenie Ministra Gospodarki z dnia 21 grudnia 2005

roku w sprawie zasadniczych wymagań dla urządzeń

ciśnieniowych i zespołów urządzeń ciśnieniowych

Program ma za zadanie przypisać kategorię urządzeniu na podstawie

2 parametrów:

objętości i ciśnienia.

Jak przetestować „brzegi”?

Metodą punktów ON i OFF

Przypadek wielowymiarowy: punkty ON i OFF

Jeśli warunek jest zaimplementowany jako warunek liniowy, to taki test dowodzi poprawności tego ograniczenia (sic!)

Przypadek wielowymiarowy: punkty ON i OFF

Testy „punktów brzegowych”

• Gra = 10 rund, 1 runda to maksymalnie 2 rzuty kulą • Jeśli w 1 rzucie gracz zbije wszystkie 10 kręgli, 2 rzutu nie wykonuje • Liczba punktów gracza w danej rundzie to liczba zbitych w niej kręgli,

przy czym do punktów tych mogą zostać doliczone dodatkowe punkty, zależne od kolejnej rundy. Ma to miejsce w następujących dwóch przypadkach:

• 1) jeśli gracz w pierwszym rzucie zbił wszystkie kręgle, jest to tzw. strike. W takim przypadku do wyniku tej rundy doliczane są punty z dwóch kolejnych rzutów tego gracza;

• 2) jeśli gracz w obu rzutach danej rundy zbił wszystkie kręgle, jest to tzw. spare. Wtedy do wyniku doliczana jest liczba punktów zdobytych przez niego w następnym rzucie kulą.

• Jeśli podczas rzutu gracz przekroczy linię rzutu, jest to tzw. foul. Jeśli zostały zbite kręgle, rzut jest liczony, ale punkty nie.

• JAKIE PRZYPADKI TESTOWE DOBRAĆ??? • (jakie klasy równoważności? jakie wartości brzegowe?

jest tyle różnych możliwych sytuacji! Jak to ogarnąć?!

Przykład: obliczanie punktacji w kręglach

Metoda Category-Partition

• dobre rozwiązanie w przypadku takim, jak program do obliczania punktów w kręglach

• rozszerzenie metody klas równoważności i AWB

1. zidentyfikuj parametry (wejścia) i warunki (stany systemu podczas jego działania)

2. wyodrębnij kategorie (główne własności lub charakterystyki) parametrów i warunków

3. dokonaj podziału kategorii na strefy wyboru

4. określ ograniczenia i związki pomiędzy strefami wyboru

5. wyprowadź elementy pokrycia (=zbiory stref wyboru)

6. dla każdego elementu stwórz przypadek testowy

Przykładowe kategorie i strefy wyboru

KATEGORIA STREFY WYBORU

Liczba punktów min=0, max=?

Liczba strike’ów 0, 1, 9, 10

Runda ostatniego strike’a 0, 1-8, 8, 9, 10

Liczba spare’ów 0, 1, 9, 10

Runda ostatniego spare’a 0, 1-9, 9, 10

Liczba fauli 0, 1, 9, 10

Kwestie do wyjaśnienia: • co gdy strike będzie w ostatniej rundzie? A co gdy w przedostatniej? • co gdy spare będzie w ostatniej rundzie? • ograniczenia (np. jeśli liczba strike’ów=10, to liczba spare’ów=0) • jak uzyskać testy sprawdzające kombinacje wszystkich dopuszczalnych par stref wyboru dla różnych kategorii w rozsądnej liczbie przypadków? Inne pomysły: np. kombinacje następujących po sobie strike’ów i spare’ów

AWB dla dziedziny wyjściowej!

nietrywialne wartości brzegowe!

Techniki kombinacyjne – pair-wise testing (1)

• przeglądarki: IE, Firefox, Chrome (3)

• drukarki: HP, Epson, Samsung, Canon (4)

• OS: Win, Linux, iOS (3)

• baza: MySQL, Postgres (2)

• ile jest możliwych kombinacji dowolnych dwóch elementów z dowolnych dwóch kategorii?

Tworzymy program COTS mogący współpracować w różnych konfiguracjach

Techniki kombinacyjne – pair-wise testing (1)

• przeglądarki: IE, Firefox, Chrome (3)

• drukarki: HP, Epson, Samsung, Canon (4)

• OS: Win, Linux, iOS (3)

• baza: MySQL, Postgres (2)

• ile jest możliwych kombinacji dowolnych dwóch elementów z dowolnych dwóch kategorii?

3*4+3*3+3*2+4*3+4*2+3*2=12+9+6+12+8+6=53

Tworzymy program COTS mogący współpracować w różnych konfiguracjach

Techniki kombinacyjne – pair-wise testing (2)

Techniki kombinacyjne – pair-wise testing (2)

Wykorzystanie tablic ortogonalnych do konstrukcji testów w pair-wise testing

Testowanie maszyny stanowej

Jest to forma testowania opartego o model Pozwala znaleźć błędy projektowe jeszcze przed napisaniem kodu! Maszyna stanowa jest modelem systemu Przykład z życia: aplikacja do zarządzania pracą redakcji czasopisma

Testowanie maszyny stanowej: kryteria pokrycia

pokrycie wszystkich przejść (0-switch coverage), np.: S1>WY>S2>PR>S3>ZP>S1>WY>S2>PR>S3>AK>S2>PU>S4 S1>WY>S2>PR>S3>RN>S2>OD>S4 pokrycie par przejść (1-switch coverage), itd. testowanie błędnych przejść (np.: S2 > RN > ?)

pokrycie wszystkich par przejść (1-switch coverage) Elementy pokrycia:

Testowanie maszyny stanowej: kryteria pokrycia

Testowanie maszyny stanowej:

analiza modelu

Testowanie maszyny stanowej:

analiza modelu

publikacja artykułu następuje przed sprawdzeniem poprawek przez

recenzenta (jest to możliwe, ale warto spytać analityka biznesowego, czy w każdej sytuacji jest to dopuszczalne)

Testowanie maszyny stanowej:

analiza modelu

Gdyby EP2 był sam w sobie przypadkiem testowym, oznaczałby sytuację akceptacji

artykułu bez przesłania go do recenzji

Testowanie maszyny stanowej:

analiza modelu

EP8: natychmiastowe odesłanie recenzentowi artykułu, który przed chwilą recenzował EP6: recenzent odrzuca artykuł który wcześniej zaakceptował EP11: redaktor odsyła recenzentowi już zaakceprowany artykuł EP4: żądanie poprawek od autora choć wcześniej była akceptacja artykułu EP9: publikacja artykułu choć jest negatywna recenzja

Testowanie maszyny stanowej:

analiza modelu

recenzent akceptuje artykuł, a redaktor go odrzuca

Podsumowanie i wnioski

• techniki projektowania testów pozwalają tworzyć wartościowe przypadki testowe

• techniki projektowania testów są trywializowane w literaturze, choć w rzeczywistości są bardzo potężnym narzędziem dla testera

• niektóre techniki pozwalają na weryfikację założeń systemu przed jego implementacją

• warto znać te techniki i wiedzieć kiedy ich użycie będzie efektywne (bo nie zawsze będzie!)