Meine Organisation betont eine Zeilen- und Zweigabdeckung von 80%. Ich habe absolut kein Problem mit der Line-Coverage-Anforderung, aber die Filialabdeckung hat mir ein Problem gegeben.Ist die Filialabdeckung so nützlich wie die Leitungsabdeckung?
Lassen Sie uns das folgende Beispiel dafür nehmen:
if(decisionA && decisionB)
{
// path A - do some complex ninja code stuff
}
else
{
// path B - tell user i can't do anything
}
Jetzt habe ich zwei Fälle geschrieben, die erste, die Bahn A abdeckt und der zweite Pfad B Abdeckung Dies sollte mir 100% -Linie geben Abdeckung. Allerdings gibt dieser mir nur 50% Zweigüberdeckung, da ich nur (True & & True) + (False & & False) während ommitting (True & & False) + (False & & True) behandelt haben.
Aus meiner Sicht sind die Werte von DecisionA und DecisionB trivial und kaum zu testen. Jedoch bedeutet die allgemeine Anforderung in meiner Organisation, dass ich 4 Testfälle anstatt 2 schreiben muss. Bringe mehrere if's und verschachtelte if's mit, und das wird kompliziert.
Es scheint, dass es in der Entscheidung des Entwicklers sein sollte, ob er sich entscheidet, Zweigfälle zu decken, solange er glaubt, dass die wichtige Logik (im Falle des Ninja-Codes in Teil A) abgedeckt wird.
Was sind Ihre Gedanken dazu? Was denkst du wäre eine akzeptable Filialabdeckung? Ist meine Angst, eine hohe Filialabdeckung zu rechtfertigen, gerechtfertigt oder stelle ich die Codequalität nicht genug dar? Ich weiß, das ist ein bisschen eine subjektive Frage, aber sicherlich gibt es gute Muster, die diesbezüglich bereits etabliert sind.
Eigentlich müsste ein Ausdruck wie "a & b & ..." nur eine große Anzahl von zu überprüfenden Tests benötigen, wenn der Code * logische * Nicht-Kurzschlußoperatoren statt * bedingten * Operatoren ('&&') verwendet welche kurzgeschlossen sind. In der Praxis verwenden Programmierer die Kurzschlüsse, die eine viel geringere Anzahl von Tests erfordern. Bei einem Test mit 'a == false' brauchen wir zum Beispiel keinen weiteren Test mit 'b == false', um einen Ausdruck, der 'a && b' enthält, vollständig abzudecken. Der wahre Grund, warum Condition Coverage nicht verwendet werden kann, ist einfach, dass die vorhandenen Code-Coverage-Tools dies nicht unterstützen. –