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 pP przez Cp oznaczymy zbiór klauzul w predykacie p.
Kryterium 1 (pokrycie predykatów, ang. Predicate Coverage – PC): Dla każdego predykatu pP, 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 cC, 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 pP, 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, ji, 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 pP i każdej klauzuli
głównej ciCp, wybierz klauzule poboczne cj, ji 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 pP i
każdej klauzuli głównej ciCp, wybierz klauzule poboczne cj, ji 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=truepc=false. Predykat pc opisuje warunki, pod którymi c determinuje p.
Zadanie 1.
Dane są predykaty:
a) p = a(bc)
b) p = a(bc)
c) p = ab(cd)
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.