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: rivet@rivetgroup.eu
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 kod źródłowy LOKALIZACJA BŁEDÓW 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)
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 2. Wykorzystanie jako model systemu - przykład 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
testowanie mutacyjne testuje testy 3. Do predykcji defektów (sic!) 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
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 3. Do predykcji defektów (sic!) 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 składnia: grep [wzorzec] [plik] 2. wyodrębnij kategorie parametrów i warunków Plik rozmiar # wystąpień wzorca w pliku # wystąpień wzorca w linii pozycja wzorca w pliku Wzorzec 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 składnia: grep [wzorzec] [plik] 3. podziel każdą kategorię na rozłączne strefy wyboru 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