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