TESTOWANIE I JAKOŚĆ OPROGRAMOWANIA – LABORATORIUM
Transkrypt
TESTOWANIE I JAKOŚĆ OPROGRAMOWANIA – LABORATORIUM
TESTOWANIE I JAKOŚĆ OPROGRAMOWANIA – LABORATORIUM NR 7 Kryteria pokrycia logicznego Predykat to wyrażenie, które w wyniku ewaluacji przyjmuje wartośd logiczną. Klauzula to predykat nie zawierający operatorów logicznych. Przez P oznaczymy zbiór predykatów, przez C – zbiór klauzul w predykatach z P. Dla każdego predykatu pP przez Cp oznaczymy zbiór klauzul w predykacie p. Kryterium 1 (pokrycie predykatów, ang. Predicate Coverage – PC): Dla każdego predykatu pP, zbiór wymagao testowych TR zawiera dwa wymagania: p ewaluowane jest na true i p ewaluowane jest na false. Kryterium 2 (pokrycie klauzul, ang. Clause Coverage – CC): Dla każdego cC, TR zawiera dwa wymagania: c ewaluowane jest na true i c ewaluowane jest na false. Kryterium 3 (pokrycie kombinatoryczne, ang. Combinatorial Coverage, CoC): dla każdego pP, TR ma wymagania testowe takie, że da się ewaluowad p dowolną kombinacją ewaluacji klauzul z Cp. Pokrycie klauzulami aktywnymi Klauzulę, na której będziemy się skupiad, nazywad będziemy główną. Pozostałe będą nazywane klauzulami pobocznymi. Dla klauzuli głównej ci w predykacie p mówimy, że ci determinuje p, jeśli klauzule poboczne cj, ji, mają takie wartościowania, że zmiana wartości ci zmienia wartośd całego p. Kryterium 4 (pokrycie klauzulami aktywnymi, ang. Active Clause Coverage, ACC): dla każdego pP i każdej klauzuli głównej ciCp, wybierz klauzule poboczne cj, ji takie, że ci determinuje p. TR ma dwa wymagania dla każdej ci: ci ewaluowane jest na true i ci ewaluowane jest na false. Kryterium 5 (ogólne pokycie klauzulami aktywnymi, ang. General Active Clause Coverage, GACC): dla każdego pP i każdej klauzuli głównej ciCp, wybierz klauzule poboczne cj, ji tak, by ci determinowało p. TR ma dwa wymagania dla każdego ci: ci ewaluowane jest na true i na false. Wartości wybrane dla klauzul pobocznych nie muszą byd takie same dla obu ewaluacji klauzuli głównej ci. Kryterium 6 (skorelowane pokrycie klauzulami aktywnymi, ang. Correlated Active Clause Coverage, CACC): wymagania jak w Kryterium 5, przy czym wartości wybrane dla klauzul pobocznych muszą spowodowad ustawienie p na true dla jednej z wartości przyjmowanej przez klauzulę główną, oraz ustawienie p na false dla drugiej wartości przyjmowanej przez klauzulę główną. Kryterium 7 (ograniczone pokrycie klauzulami aktywnymi, ang. Restricted Active Clause Coverage, RACC): wymagania jak w Kryteriach 5 i 6, przy czym wartości wybrane dla klauzul pobocznych muszą byd takie same, gdy ci jest ewaluowane na true i na false. Wymuszenie na klauzuli, by determinowała predykat Niech p będzie predykatem z klauzulą c. Przez pc=true oznaczmy predykat p, w którym każde wystąpienie c zostało zastąpione wartością true. Analogicznie, przez pc=false oznaczmy predykat p, w którym każde wystąpienie c zostało zastąpione wartością false. Niech pc = pc=truepc=false. Predykat pc opisuje warunki, pod którymi c determinuje p. Zadanie 1. Dane są predykaty: a) p = a(bc) b) p = a(bc) c) p = ab(cd) Dla każdego z nich: a) Zidentyfikuj klauzule tworzące predykat p b) Oblicz (i uprośd) warunki, pod którymi każda z klauzul determinuje predykat c) Wypisz tabele prawdy dla wszystkich klauzul. Uwzględnij kolumny dla warunków, pod którymi każda klauzula determinuje predykat, oraz kolumnę na cały predykat d) Zidentyfikuj pary wierszy w tabeli, które spełniają GACC ze względu na każdą klauzulę e) Zidentyfikuj pary wierszy w tabeli, które spełniają CACC ze względu na każdą klauzulę f) Zidentyfikuj pary wierszy w tabeli, które spełniają RACC ze względu na każdą klauzulę Zadanie 2. Dana jest metoda checkIt(): public static void checkIt (boolean a, boolean b, boolean c) { if (a && (b || c)) { System.out.println ("P is true"); } else { System.out.println ("P isn't true"); } } a) zrefaktoryzuj metodę checkIt() do metody checkItExpand(), w której warunek każdej instrukcji if posiada dokładnie jedną zmienną logiczną. Zinstrumentuj checkItExpand(), aby móc logowad krawędzie, przez które przeszło sterowanie (wystarczą zwykłe instrukcje „print”). b) dostarcz zbiór testowy T1 (GACC) dla checkIt(). Zbuduj również zbiór testowy T2 dla checkItExpand(), który spełni pokrycie krawędziowe, ale nie spełni GACC na predykacie w checkIt(). c) uruchom oba zbiory testowe: T1 i T2 na obu metodach: checkIt() oaz checkItExpand(). Zadanie 3. Dana jest metoda twoPred(): public String twoPred (int x, int y) { boolean z; if (x < y) z = true; else z = false; if (z && x+y == 10) return "A"; else return "B"; } Dostarcz przypadki testowe dla twoPred(), które osiągną pokrycie RACC.