Condition Coverage

null
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 168
Registriert: 21. Apr 2012 14:58

Condition Coverage

Beitrag von null » 19. Feb 2013 11:45

Hallo zusammen,

ich gehe gerade noch einmal die alten Übungen durch und irgendwie hakt es gerade beim Condition Coverage der Übung 5. Noch einmal zur Erinnerung:

Code: Alles auswählen

public class Magic {
public static int magic( boolean a, boolean b, String c) {
   int result = 1;
   if (a ||    
       b) {
             result ++; 
           }
   if (a && 
       b ||
            (c. isEmpty () && 
             a)) {
                    return result ;
                 }
   else {
      return result * -1;
   }
}
}
In meiner damaligen Lösung hatte ich folgende Testfälle angegeben:

{(true,true,""); (false,false,"M")}

Mir wurde angemerkt, dass noch die folgenden Testfälle fehlen:

{(true,false,""); (false,true,"")}

Irgendwie verstehe ich aber nicht warum. Jede Condition wird durch meine obige Testsuite einmal true und einmal false. Kann mir jemand erklären, warum sie dennoch unvollständig sind?

Vielen Dank für die Hilfe

karamurat
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 11. Okt 2008 16:08

Re: Condition Coverage

Beitrag von karamurat » 19. Feb 2013 14:45

null hat geschrieben:

Code: Alles auswählen

public class Magic {
public static int magic( boolean a, boolean b, String c) {
   int result = 1;
   if (a ||    
       b) {
             result ++; 
           }
   if (a && 
       b ||
            (c. isEmpty () && 
             a)) {
                    return result ;
                 }
   else {
      return result * -1;
   }
}
}
In meiner damaligen Lösung hatte ich folgende Testfälle angegeben:

{(true,true,""); (false,false,"M")}
Mit diesen beiden Tests erreichst du bei

Code: Alles auswählen

if (a || b)
keine condition coverage..

Da wird b nur einmal zu false ausgewertet, aber zu true wurde es noch nicht ausgewertet..

Hoffe es hilft weiter

null
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 168
Registriert: 21. Apr 2012 14:58

Re: Condition Coverage

Beitrag von null » 19. Feb 2013 14:51

Hi :)

Danke, aber b wird doch durch den Testfall (true, true, "") zu true ausgewertet. Allgemein heißt der Testfall ja (a,b,c) und hier ist b == true.

Übersehe ich da etwas?

Danke

karamurat
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 11. Okt 2008 16:08

Re: Condition Coverage

Beitrag von karamurat » 19. Feb 2013 14:58

null hat geschrieben:Hi :)

Danke, aber b wird doch durch den Testfall (true, true, "") zu true ausgewertet. Allgemein heißt der Testfall ja (a,b,c) und hier ist b == true.

Übersehe ich da etwas?

Danke
Die erste if-Abfrage ist doch (a || b). Aus TGdI ist ja bekannt, dass true or x immer true ausgibt, ohne auf x zu schauen. Deshalb wird b hier nicht zu true ausgewertet und du benötigst diese anderen Tests..

errt
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 18. Okt 2012 19:12

Re: Condition Coverage

Beitrag von errt » 19. Feb 2013 20:15

Das fiese ist, dass das nie in der Vorlesung erwähnt wurde und sich die Folien geschickt darum drücken, indem sie statt der Booleschen Operatoren || und && die bitweisen Operatoren | und & verwenden, bei denen es kein Shortcutting gibt.

ab26iget.stud.tu
Mausschubser
Mausschubser
Beiträge: 63
Registriert: 14. Okt 2008 20:19

Re: Condition Coverage

Beitrag von ab26iget.stud.tu » 19. Feb 2013 20:59

Hallo,

Warum reichen hier dann nicht zwei Fälle :
a=true, b = false, c=""
a=false, b = true, c="c"

alle Bedingungen (a, b, und c.isEmpty()) werden einmal zu true und einmal zu false bewertet.

oder jeder Decision wird einzeln betrachtet ?

Code: Alles auswählen

if (a ||    
       b) {
             result ++; 
           }
   if (a && 
       b ||
            (c. isEmpty () && 
             a)) {
                    return result ;
                 }
Danke im Voraus

Hentschel
Mausschubser
Mausschubser
Beiträge: 62
Registriert: 1. Okt 2012 16:15

Re: Condition Coverage

Beitrag von Hentschel » 20. Feb 2013 08:43

Hi,

betrachten wir die Auswertung der Conditions der zweiten If-Bedingung systematisch:

Parameter a=true, b = false, c="":
1.a = true
b = false
c.isEmpty() = true
2.a = true

Parameter a=false, b = true, c="c":
1.a = false
b = nicht ausgewertet
c.isEmpty() = false
2.a = nicht ausgewertet

Somit wurde b nicht zu true und 2.a nicht zu false ausgewertet. Im übrigen wird das b der ersten If-Bedingung nicht zu false ausgewertet.

Schau dir bei Verständnisfragen noch einmal den Unterschied zwischen & und && sowie zwischen | und || in Java an.

Mfg

Martin

L4_
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 104
Registriert: 24. Apr 2012 15:44

Re: Condition Coverage

Beitrag von L4_ » 21. Feb 2013 11:55

In Modul SoftwareQualityAndTesting auf Folie 31 steht etwas unbetont:

"For a given condition c in decision d (multiple occurrences of c are counted as
distinct conditions
), ...
"

Soll also bedeuten, wenn eine Variable mehrfach in einer Formel auftaucht, dass die Auswertung dessen getrennt betrachtet werden.
Das ist wohl auch der grund, weswegen in der Übung jede Condition in einer eigenen Zeile stand.

Wenn es möglich ist boolsche Gesetze anzuwenden um den Ausdruck mit Äquivalenzumformungen zu verkleinern, sparst du dir ggf. ein paar Testfälle.

Hentschel
Mausschubser
Mausschubser
Beiträge: 62
Registriert: 1. Okt 2012 16:15

Re: Condition Coverage

Beitrag von Hentschel » 21. Feb 2013 13:25

Hi,

bei MCDC ist offensichtlich, dass es nicht erfüllbar ist, wenn eine boolsche Variable als Condition mehrfach verwendet wird.
Daher konnte der Code der Übungsaufgaben MCDC nicht erfüllen und wurde umgeformt.

Im Allgemeinen geht es beim Testen darum den vorhandenen Code unverändert zu überprüfen und nicht ihn umzuformen.
Das ist ja auch schließlich die Verantwortlichkeit des Entwicklers und nicht des Testers.

Sollten wir eine Umformung in der Klausur wünschen, werden wir es explizit dazu schreiben.

Mfg

Martin

Antworten

Zurück zu „Archiv“