Techniki (automatyzacji) projektowania testów

Transkrypt

Techniki (automatyzacji) projektowania testów
Techniki (automatyzacji)
projektowania testów
Adam Roman
WarszawQA, 24 II 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ść oprogramowania. Modele, techniki,
narzędzia” (PWN, 2015)
WE RIVET TECHNOLOGY ON BUSINESS
Informacje o firmie
rivet group
• Kompleksowo wspieramy naszych Klientów: od analizy po implementację,
testy, wdrożenie i utrzymanie oprogramowania.
• W skład rivet group wchodzi kilka podmiotów:
• rivet expertise to podmiot doradczy, skupiony wokół konsultingu i biznesu.
• Marka rivet in time jest odpowiedzialna za bodyleasing, outsourcing, headhunting oraz
usługi HR związane z pozyskiwaniem i rozwojem pracowników.
• rivet security – specjalizuje się w rozwiązaniach z zakresu bezpieczeństwa IT.
• Prowadzimy również działalność edukacyjną. Oferta rivet !know obejmuje ścieżki
certyfikacyjne oraz szkolenia dostosowane do indywidualnych potrzeb Klientów.
• Zapraszamy do kontaktu: [email protected]
Plan spotkania
• Po co testerowi techniki białoskrzynkowe?
• Automatyzacja, ale czego?
• Technika czarnoskrzynkowa: Category-Partition
• Przykład – pełna automatyzacja i jej zalety
Po co testerowi techniki
białoskrzynkowe?
• 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
}
}
Po co testerowi techniki
białoskrzynkowe?
• ile testów potrzeba, aby pokryć
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
}
}
1. Użycie do oceny testów
czarnoskrzynkowych
PRZYPADKI
TESTOWE
(black box!)
SYSTEM
UNDER TEST
WYNIKI
TESTÓW
LOKALIZACJA
BŁEDÓW
kod
źródłowy
OCENA
TESTÓW,
DODANIE
NOWYCH
POKRYCIE
KODU
2. Wykorzystanie jako
model systemu
• techniki białoskrzynkowe nie muszą działać na kodzie
• białą skrzynką może być jakikolwiek MODEL działania
oprogramowania, np.:
•
•
•
•
•
•
graf przepływu sterowania (klasyka)
graf przepływu danych (wciąż blisko kodu, choć nie zawsze)
model struktury menu
modele UML na podstawie których wygenerowano kod
model maszyny stanowej
tablica decyzyjna
• wiele technik czarnoskrzynkowych można traktować jak
białoskrzynkowe
• obecnie rozgraniczenie white<->black box jest bardzo rozmyte
• (prawdopodobnie wg ISTQB to herezja)
2. Wykorzystanie jako
model systemu - przykład
• aplikacja
obsługująca
redakcję
czasopisma
• proces biznesowy z
punktu widzenia
cyklu życia
artykułu
• pokrycie = zestaw
istotnie różnych
scenariuszy
2. Wykorzystanie jako
model systemu - 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!
2. Wykorzystanie jako
model systemu - 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
3. Do predykcji defektów
(sic!)
• 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
3. 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
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) automatyzować 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
Przykład automatyzacji dla
metody Category-Partition
• idea metody C-P:
1. zidentyfikuj parametry i warunki środowiskowe, które
wpływają na zachowanie się programu
2. wyodrębnij kategorie parametrów i warunków
3. podziel każdą kategorię na rozłączne strefy wyboru
4. określ związki i ograniczenia między wyborami
5. napisz specyfikację testów (np. używając TSL)
6. wyprowadź elementy pokrycia
7. dla każdego elementu pokrycia stwórz przypadek testowy
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
2. wyodrębnij kategorie
parametrów i warunków
• Plik
• składnia:
•
•
•
•
•
Wzorzec
•
•
•
•
grep [wzorzec] [plik]
•
rozmiar
# wystąpień wzorca w pliku
# wystąpień wzorca w linii
pozycja wzorca w pliku
długość wzorca
otoczony apostrofami?
obecność białych znaków
Zawiera apostrofy?
nazwa pliku
•
istnienie pliku o danej nazwie
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
3. podziel każdą kategorię na
rozłączne strefy wyboru
• plik
•
•
•
• składnia:
grep [wzorzec] [plik]
•
•
rozmiar (pusty, niepusty)
# wystąpień wzorca w pliku (0,
1, wiele)
# wystąpień 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 grep wyszukuje
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ąpień wzorca w pliku
=0
to
# wystąpień wzorca w linii
nie może być >1
• itd.
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