TECHNIKI (AUTOMATYZACJI) PROJEKTOWANIA TESTÓW
Adam Roman
SKładQA, 29 III 2016
Prelegent
• Quality Assurance R&D Lead, Rivet Group
• Adiunkt w Instytucie Informatyki i Matematyki Komputerowej UJ
• Członek Stowarzyszenia Jakości Systemów Informatycznych
• Członek Polskiego Komitetu Normalizacyjnego (prace nad normą ISO/IEC 29119 Software Testing Standard)
• Certified Software Quality Engineer (ASQ)
• ISTQB Certified Tester Full Advanced Level
• Autor „Testowanie i jakośd oprogramowania. Modele, techniki, narzędzia” (PWN, 2015)
Plan spotkania
• Automatyzacja, ale czego?
• Modele i ich rola w automatyzacji
• Technika Category-Partition
• Przykład – pełna automatyzacja i jej zalety
Automatyzacja, ale czego?
• najczęściej automatyzację testów rozumie się jako automatyzację wykonania testów
– skrypty
– programy
– nagrane scenariusze
– itp.
Automatyzacja, ale czego?
• …ale (o czym raczej się nie mówi) automatyzowad można również:
• projektowanie przypadków testowych (generowanie)• specyfikowanie przypadków testowych (definiowanie)• implementację testów• generowanie danych testowych• porównywanie wyników rzeczywistych z oczekiwanymi• przeprowadzanie analizy statycznej lub dynamicznej
Modele i ich rola w automatyzacjiprzykład: model CFG
• klasyka gatunku: pokrycie
• instrukcyjne
• decyzyjne
• warunkowe
• warunkowo/decyzyjne
• MC/DC
• ścieżek
• pętli
• …
input a, b
c = a+b
if (c>0) {
while (a>0) {
a=a-1;
if (a>b) {
b=b+1;
}
}
} else {
if (a<b) {
return a
} else {
return c
}
}
• ile testów potrzeba, aby pokryd wszystkie decyzje?
• jaki test spowoduje 17-krotne wykonanie pętli while, z których dokładnie 9 przejdzie przez if (a>b)?
• zaprojektowanie przypadków testowych = zaprojektowanie ścieżek. Ale co nam to daje?
• co nam daje to, że np. pokryliśmy testami 100% decyzji?
input a, b
c = a+b
if (c>0) {
while (a>0) {
a=a-1;
if (a>b) {
b=b+1;
}
}
} else {
if (a<b) {
return a
} else {
return c
}
}
Modele i ich rola w automatyzacjiprzykład: model CFG
Wykorzystanie modelu1. Użycie (np. CFG) do oceny testów czarnoskrzynkowych
SYSTEM UNDER TEST
PRZYPADKI TESTOWE
(black box!)
WYNIKI TESTÓW
kod źródłowy
POKRYCIE KODU
OCENA TESTÓW, DODANIE NOWYCH
LOKALIZACJA BŁEDÓW
• model może opisywad działanie systemu (np. pod określonym kątem)– graf przepływu sterowania (klasyka)
– graf przepływu danych (wciąż blisko kodu, chod nie zawsze)
– model struktury menu
– modele UML na podstawie których wygenerowano kod
– model maszyny stanowej
– tablica decyzyjna
• testowanie polega na pokryciu odpowiednich elementów modelu testami
Wykorzystanie modelu2. Reprezentacja systemu i jego działania
• aplikacja obsługująca redakcję czasopisma
• proces biznesowy z punktu widzenia cyklu życia artykułu
• pokrycie = zestaw istotnie różnych scenariuszy
Wykorzystanie modelu2. Reprezentacja systemu i jego działania: przykład
• im bardziej wymagające pokrycie, tym dokładniejsze testy (i większy koszt!)
100% instrukcji
100% decyzji
100%
ścieżek liniowo niezależnych!
Wykorzystanie modelu2. Reprezentacja systemu i jego działania: przykład
• publikacja artykułu przed zrecenzowaniem?
• decyzja o odrzuceniu artykułu bez konsultacji z recenzentem?
• recenzent akceptuje a redaktor odrzuca?
• „standardowa” procedura odrzucenia artykułu
• każda ścieżka w tym procesie jest „kombinacją liniową” powyższych 4 ścieżek
Wykorzystanie modelu2. Reprezentacja systemu i jego działania: przykład
• testowanie mutacyjne testuje testy
• mutant = zmutowany program (np. ze zmienioną instrukcją x=x+1 zamiast oryginalnej x=x-1)
• mutacje = symulacje pomyłek programistów
• pokrycie = liczba zabitych mutantów / liczba wszystkich mutantów
Wykorzystanie modelu3. Użycie modelu defektów do predykcji defektów (sic!)
• D = liczba wykrytych rzeczywistych defektów
• M = liczba wszystkich mutantów
• Z = liczba zabitych mutantów
• X = nieznana liczba defektów pozostałych w kodzie
• idea: pokrycie mutacyjne = pokrycie realnych defektów
• D/(X+D) = Z/M
• X = (D*M)/Z - D
Wykorzystanie modelu3. Użycie modelu defektów do predykcji defektów (sic!)
Przykład automatyzacji dla metody Category-Partition
• idea metody C-P:1. zidentyfikuj parametry i warunki środowiskowe,
które wpływają na zachowanie się programu2. wyodrębnij ich kategorie3. podziel każdą kategorię na rozłączne strefy wyboru4. określ związki i ograniczenia między wyborami5. napisz specyfikację testów (np. używając TSL)6. wyprowadź elementy pokrycia7. dla każdego elementu pokrycia stwórz przypadek
testowy
Użyty model: Feature Tree
Przykład automatyzacji dla metody Category-Partition
• testowanie polecenia grep
• program grep wyszukuje wzorzec w pliku i zwraca linie pliku, w których wzorzec się znajduje
• składnia:
grep [wzorzec] [plik]
1. zidentyfikuj parametry i warunki środowiskowe, które wpływają na zachowanie się programu
• plik
• wzorzec
• nazwa pliku
Przykład automatyzacji dla metody Category-Partition
• testowanie polecenia grep
• program grep wyszukuje wzorzec w pliku i zwraca linie pliku, w których wzorzec się znajduje
• składnia:
grep [wzorzec] [plik]
2. wyodrębnij kategorie parametrów i warunków
• Plik– rozmiar– # wystąpieo wzorca w pliku– # wystąpieo wzorca w linii– pozycja wzorca w pliku
• Wzorzec– długośd wzorca– otoczony apostrofami?– obecnośd białych znaków– Zawiera apostrofy?
• nazwa pliku– istnienie pliku o danej
nazwie
Przykład automatyzacji dla metody Category-Partition
• testowanie polecenia grep
• program grepwyszukuje wzorzec w pliku i zwraca linie pliku, w których wzorzec się znajduje
• składnia:
grep [wzorzec] [plik]
3. podziel każdą kategorię na rozłączne strefy wyboru
• plik– rozmiar (pusty, niepusty)
– # wystąpieo wzorca w pliku (0, 1, wiele)
– # wystąpieo wzorca w linii (1, wiele)
– pozycja wzorca w pliku (1 linia, ostatnia linia, dowolna inna)
• itd.
Przykład automatyzacji dla metody Category-Partition
• testowanie polecenia grep
• program grepwyszukuje wzorzec w pliku i zwraca linie pliku, w których wzorzec się znajduje
• składnia:
grep [wzorzec] [plik]
4. określ związki i ograniczenia między wyborami
• np. jeśli# wystąpieo wzorca w pliku = 0to# wystąpieo wzorca w linii nie może byd >1
• itd.
Nasz model
GREP
PLIK WZORZEC NAZWA PLIKU
rozmiar# wyst. w linii
# wyst. w pliku
pozycja wzorca
długośdotoczony apostrof.?
białe znaki?
zawiera apostrof.?
pusty niepusty
pusty implies 0 wystąpieo w pliku
0 1 wiele
Demonstracja
• automatyczne projektowanie, specyfikowanie i implementacja testów
• radzenie sobie ze złożonością (tzw. eksplozja kombinatoryczna)
• wykonanie testów
• uwagi i wnioski, zalety i wady metody