Czy techniki projektowania testów mają sens? Adam Roman (roman@ii.uj.edu.pl) WarszawQA, 14 IV 2015
Plan prezentacji podstawowe techniki projektowania testów krótkie przypomnienie: EP, BVA fakty, mity, błędy i niedopowiedzenia trywializowanie technik nietrywialne zastosowania technik w praktyce zalety stosowania technik formalnych
Podział na klasy równoważności dziedzina wejścia dziedzina wyjścia test 1 test 2 test 3 test 1 test 2 test 3 test 4
EP według ISTQB Termometr mierzy temperaturę z dokładnością do pełnych stopni. Jeżeli temperatura spada poniżej 18 stopni ogrzewanie jest włączane. Gdy temperatura przekroczy 21 stopni ogrzewanie jest wyłączane. Jakie są najlepsze wartości (w stopniach) do zaprojektowania testów metodą klas równoważności? A 15, 19, 25. B 17, 18, 19. C 18, 20, 22. D 16, 26, 32. [źródło: http://amberplace.amberteam.pl/istqb_ctfl_q011_020]
Przykład: plik porządek elementów w pliku (klasy równ.:) plik posortowany rosnąco plik posortowany malejąco plik nieposortowany
Przykład: plik porządek elementów w pliku (klasy równ.:) plik posortowany rosnąco plik posortowany malejąco plik nieposortowany plik jednoelementowy?
Przykład: plik porządek elementów w pliku (klasy równ.:) plik posortowany rosnąco plik posortowany malejąco plik nieposortowany dwie niezależne charakterystyki: posortowany rosnąco (tak, nie) posortowany malejąco (tak, nie) plik jednoelementowy?
Własność dobrego podziału
jakie tu są klasy równoważności?
np.: klasy dla M [MIN, 0), 0, (0, MAX] klasy dla W [MIN, 0), 0, (0, MAX] Test to para (M, W) Oczekiwany wynik: zgodnie z wzorem na BMI Idea: najpierw pokryć najwięcej klas poprawności, potem po jednej klasie niepoprawności na test T1: (60, 1.75) T2: (0, 1.80) T3: (-30, 1.85) T4: (75, 0) T5: (90, -6.33) Dlaczego tak?
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)
EP dla WYJŚCIA! BMI = M / W 2 Po jednym teście na każdą klasę wyjścia: K1=[MIN, 16) K2=[16, 16.99) K3=[17, 18.49) K4=[18.5, 24.99) K5=[25, 29.99) K6=[30, 34.99) K7=[35, 39.99) K8=[40, MAX] Np. M=75, W=1.65 Oczekiwany wynik: 27.55 wpada (i pokrywa) klasę K5
Granice są istotne! EP może być za słabe Lepiej użyć BVA
Analiza Wartości Brzegowych (1)
Analiza Wartości Brzegowych (2) 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 X 2
Analiza Wartości Brzegowych (3) Co tak naprawdę testujemy w Analizie Wartości Brzegowych? testujemy te elementy! ISO 29119 Software Testing Standard, Proces projektowania i implementacji testów
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 X 2
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 (BMI <= 18) { } if (BMI < 18) { } if (BMI == 18) { } poprawny warunek pomyłka programisty (wykryta dla BMI=18) a tu co?!
BMI = M / W 2 BVA dla WYJŚCIA! testy pokazują, że dokładność BMI to 0.01 jak dobrać wartości brzegowe? M=53, W=1.84915 BMI=15.5 po zaokrągleniu BMI=16
Analiza Wartości Brzegowych (6)
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 wierzchołkowych
ANALIZA DZIEDZINY! (DOMAIN ANALYSIS) ograniczenia NIELINIOWE!!!
Przykład: obliczanie punktacji w kręglach 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ąć?!
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 AWB dla dziedziny wyjściowej! nietrywialne wartości brzegowe! 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
Techniki kombinacyjne pair-wise testing (1) Tworzymy program COTS mogący współpracować w różnych konfiguracjach 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?
Techniki kombinacyjne pair-wise testing (1) Tworzymy program COTS mogący współpracować w różnych konfiguracjach 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
Techniki kombinacyjne pair-wise testing (2)
Techniki kombinacyjne pair-wise testing (2)
Wykorzystanie tablic ortogonalnych do konstrukcji testów w pair-wise testing
EP i BVA w praktyce nietrywialne podziały dziedziny nietrywialne wartości brzegowe (nie wynikające wprost ze specyfikacji) zwykle nie jeden, ale wiele podziałów zaokrąglenia, dokładność (często nieznana) EP i BVA zarówno dla wejść jak i wyjść wielowymiarowość (domain analysis) ograniczenia liniowe i nieliniowe kombinacje wartości charakterystyk, koniecznośc minimalizacji suity testowej
Testowanie maszyny stanowej Przykład z życia: aplikacja do zarządzania pracą redakcji czasopisma
Jak testować maszynę stanów? 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 +testowanie błędnych przejść (np.: S2 > RN >?) pokrycie par przejść (1-switch coverage) czy to ma sens???
Testowanie maszyny stanowej: kryteria pokrycia pokrycie wszystkich par przejść (1-switch coverage) Elementy 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ć (w systematyczny sposób) wartościowe przypadki testowe model często pozwala na automatyczne projektowanie testów niektóre modele mogą pełnić rolę wyroczni 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, a kiedy będzie stratą czasu
KONIEC!