2016-05-05 25 views
1

So habe ich gelernt, dass sich die Zweigabdeckung von der Entscheidungsabdeckung unterscheidet, da die Zweigabdeckung typischerweise auch unbedingte Verzweigungen umfasst, z. Methodenaufrufe, unter Verwendung von throw, break und anderen Schlüsselwörtern in C#. Aber ich frage mich, wird diese Art von Zweig Abdeckung tatsächlich in Code-Analysatoren verwendet? Ich vermute, dass sie die Entscheidungsabdeckung nutzen, um sicherzustellen, dass alle Entscheidungsergebnisse (d. H. Die sich daraus ergebenden Zweige) abgedeckt sind. Ich meine, hat der folgende Code 2 bedingt, aber 5 unbedingte Verzweigungen:Unbedingte Verzweigung und Codeabdeckung

if(A) 
    B(); 
    C(); 
    D(); 
    E(); 
else 
X(); 

Und ich glaube, wenn ich einen Test schreiben A nur falsch zu bewerten, die Codeanalysatoren mir sagen wird, dass die Zweigüberdeckung ist 50%. Aber aus der Perspektive der bedingungslosen Zweige wird mehr ausgeführt werden. Ist das richtig?

+0

Das hängt wirklich vom Analysator ab. dotCover identifiziert die Codezeilen, die von den Tests betroffen sind, und kann somit feststellen, ob alle möglichen Codezeilen ausgeführt werden. – drz

+0

@drz: OP fragte nicht nach * line * Abdeckung. Er fragte nach der Abdeckung von Zweigniederlassung und Entscheidung. –

Antwort

0

Die Zweigabdeckung zeigt nicht an, ob eine Entscheidung sowohl als wahr als auch als falsch getestet wurde.

Beispiel:

if (c) { 
    x=... 
} 
y=... 

Wenn c TRUE ist, wird der Block enthält x = ... ausgeführt wird, und Zweigüberdeckung wird die erkennen. Es wird auch erkennen, dass der mit y beginnende Code ausgeführt wurde. So erhalten Sie 100% Abdeckung, wenn C wahr ist, ohne eine Ahnung zu haben, was passiert, wenn C falsch ist.

Mit Entscheidung Abdeckung, Sie würden wissen, dass C ausgewertet wurde und produziert sowohl wahr als auch falsch, wenn Sie 100% Abdeckung hatten.

Wenn Ihre Bedingung wenn hat dann einen Block und ein Else-Block, dann geben Zweig Abdeckung und Entscheidung Abdeckung Ihnen die gleichen Informationen.

+0

Ja, ich glaube schon. Aber dann habe ich keine Ahnung, warum so gut wie alle Bücher (siehe Google-Bücher) sagen, dass die Filialabdeckung dasselbe wie die Entscheidungsabdeckung ist. – Pietross

+0

Aber ich bin nicht sicher über das Beispiel - ich denke, dass, wenn tatsächlich ein Verzweigungspunkt und Zweig Abdeckung erkennt, dass der andere Zweig wurde nicht ausgeführt - aus dem Kontrollfluss Graph ist es offensichtlich. – Pietross

+0

Stellen Sie sich vor, ich habe eine Aussage bool z = (i> j); Es gibt wohl keine Filialen. (Der x86-Maschinencode dafür ist movr1, i; cmp r1, j; Setze r1; mov z, r1 ... keine Verzweigungen). Aber es gibt eindeutig eine Entscheidung. –