Ta technika odznacza się wyższym poziomem pokrycia sterowania. Jeśli występuje N unikalnych warunków atomowych, testowanie ZPWD wymaga zwykle wykonania N+1 unikalnych przypadków testowych. Testowanie ZPWD pozwala jednocześnie uzyskać pokrycie warunków i decyzji przy spełnieniu następujących założeń:
1. Istnieje co najmniej jeden test, w którym wynik decyzji ulegnie zmianie, jeśli wartość warunku atomowego X to PRAWDA.
2. Istnieje co najmniej jeden test, w którym wynik decyzji ulegnie zmianie, jeśli wartość warunku atomowego X to FAŁSZ.
3. Dla każdego z warunków atomowych istnieją testy spełniające wymagania 1 i 2.
A | B | C | (A LUB B) ORAZ C | |
---|---|---|---|---|
Test 1 | PRAWDA | FAŁSZ | PRAWDA | PRAWDA |
Test 2 | FAŁSZ | PRAWDA | PRAWDA | PRAWDA |
Test 3 | FAŁSZ | FAŁSZ | PRAWDA | FAŁSZ |
Test 4 | PRAWDA | FAŁSZ | FAŁSZ | FAŁSZ |
W powyższym przykładzie uzyskano pokrycie decyzji (wynik predykatu decyzji to zarówno PRAWDA, jak i FAŁSZ) oraz pokrycie warunków (A, B i C mają wartości zarówno PRAWDA, jak i FAŁSZ).
W teście 1 warunek A ma wartość PRAWDA, a wynik decyzji to PRAWDA. Jeśli zmienimy A na FAŁSZ (jak w teście 3, bez zmiany innych wartości), wynik zmienia się na FAŁSZ.
W teście 2 warunek B ma wartość PRAWDA, a wynik decyzji to PRAWDA. Jeśli zmienimy B na FAŁSZ (jak w teście 3, bez zmiany innych wartości), wynik zmienia się na FAŁSZ.
W teście 1 warunek C ma wartość PRAWDA, a wynik decyzji to PRAWDA. Jeśli zmienimy C na FAŁSZ (jak w teście 4, bez zmiany innych wartości), wynik zmienia się na FAŁSZ.
Obszar zastosowania
Ta technika jest powszechnie stosowana w testach oprogramowania w przemyśle lotniczym, a także w wielu innych systemach o kluczowym znaczeniu dla bezpieczeństwa. Należy z niej skorzystać w przypadku tego typu oprogramowania, gdy ewentualna awaria może stać się przyczyną katastrofy.
Ograniczenia/trudności
Uzyskanie pokrycia ZPWD może okazać się skomplikowane, jeśli predykat zawiera wiele wystąpień tego samego warunku atomowego. Warunek taki nazywany jest „powiązanym”. W konkretnej instrukcji kodu zawierającej decyzję zmiana wartości powiązanego elementu w taki sposób, aby jedynie z tego powodu zmienił się wynik całej decyzji, może okazać się niemożliwa. Jedną z metod rozwiązania tego problemu jest przyjęcie założenia, że na poziomie ZPWD musimy testować wyłącznie niepowiązane warunki atomowe. Inny sposób polega na indywidualnym analizowaniu każdego przypadku występowania decyzji, w której pojawiają się elementy tego typu.
Niektóre języki programowania i interpretery zaprojektowano w taki sposób, aby podczas wyliczania wartości złożonego wyrażenia decyzyjnego w kodzie następowało tzw. zwarcie. Oznacza to, że w uruchomionym kodzie całe wyrażenie nie musi być obliczane, jeśli końcowy wynik obliczeń można określić już po ustaleniu wartości części wyrażenia. Na przykład, w trakcie obliczania wartości decyzji „A ORAZ B” nie ma powodu obliczać wartości warunku B, jeśli wartością warunku A jest FAŁSZ. Żadna z dostępnych wartości B nie jest w stanie zmienić wartości końcowej, zatem da się skrócić czas wykonywania kodu, rezygnując z obliczania wartości tego warunku. Zwarcie może mieć wpływ na zdolność do uzyskania pokrycia ZPWD, ponieważ niektóre wymagane testy mogą nie zostać nigdy wykonane.