Adam Roman - Automatyczne projektowanie testów

Post on 16-Apr-2017

624 views 3 download

Transcript of Adam Roman - Automatyczne projektowanie testów

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