Adam Roman - Automatyczne projektowanie testów

22
TECHNIKI (AUTOMATYZACJI) PROJEKTOWANIA TESTÓW Adam Roman SKładQA, 29 III 2016

Transcript of Adam Roman - Automatyczne projektowanie testów

Page 1: Adam Roman - Automatyczne projektowanie testów

TECHNIKI (AUTOMATYZACJI) PROJEKTOWANIA TESTÓW

Adam Roman

SKładQA, 29 III 2016

Page 2: Adam Roman - Automatyczne projektowanie testów

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)

Page 3: Adam Roman - Automatyczne projektowanie testów

Plan spotkania

• Automatyzacja, ale czego?

• Modele i ich rola w automatyzacji

• Technika Category-Partition

• Przykład – pełna automatyzacja i jej zalety

Page 4: Adam Roman - Automatyczne projektowanie testów

Automatyzacja, ale czego?

• najczęściej automatyzację testów rozumie się jako automatyzację wykonania testów

– skrypty

– programy

– nagrane scenariusze

– itp.

Page 5: Adam Roman - Automatyczne projektowanie testów

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

Page 6: Adam Roman - Automatyczne projektowanie testów

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

}

}

Page 7: Adam Roman - Automatyczne projektowanie testów

• 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

Page 8: Adam Roman - Automatyczne projektowanie testów

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

Page 9: Adam Roman - Automatyczne projektowanie testó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

Page 10: Adam Roman - Automatyczne projektowanie testów

• 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

Page 11: Adam Roman - Automatyczne projektowanie testów

• 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

Page 12: Adam Roman - Automatyczne projektowanie testów

• 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

Page 13: Adam Roman - Automatyczne projektowanie testów

• 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!)

Page 14: Adam Roman - Automatyczne projektowanie testów

• 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!)

Page 15: Adam Roman - Automatyczne projektowanie testów

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

Page 16: Adam Roman - Automatyczne projektowanie testów

Użyty model: Feature Tree

Page 17: Adam Roman - Automatyczne projektowanie testów

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

Page 18: Adam Roman - Automatyczne projektowanie testów

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

Page 19: Adam Roman - Automatyczne projektowanie testów

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.

Page 20: Adam Roman - Automatyczne projektowanie testów

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.

Page 21: Adam Roman - Automatyczne projektowanie testów

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

Page 22: Adam Roman - Automatyczne projektowanie testów

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