2016-05-06 6 views
3

Die reguläre Zweigabdeckung erfordert zwei Komponententests, um eine einfache if-Anweisung abzudecken. Wenn jedoch eine Combound-Bedingung wie if (A && B) vorliegt, gibt es aus der Sicht des Steuerflussdiagramms einen zusätzlichen Zweig, wenn ein Kurzschluss verwendet wird. Dies steht in Einklang mit der Anzahl der zyklomatischen Komplexität, die 3 ergibt (wobei auch die Regeln angewendet werden, dass jeder logische Operator die Komplexität um 1 erhöht, weil ein Entscheidungsknoten im Falle eines Kurzschlusses erzeugt wird). Aber soweit ich weiß, berücksichtigt der Code-Analyzer diese Zweige nicht. Lohnt es sich, sie trotzdem abzudecken, um sicherzugehen, dass bei der partiellen Auswertung des Ausdrucks keine Nebenwirkungen auftreten?Sollten durch Kurzschlüsse verursachte Code-Zweige für die Code-Abdeckung berücksichtigt werden?

Antwort

3

Es hängt natürlich von Ihrem Zweck bei der Analyse des Codes ab.

FAA empfiehlt generell (z. B. DOT/FAA/AR-06/54 "Software Verification Tools Bewertungsstudie", Abschlussbericht, Juni 2007. Abschnitt 4.2.5), dass alle Operanden für einen Kurzschlussoperator (einschließlich C's Ternäroperator, sowie die booleschen Operatoren) werden als Entscheidungen interpretiert - wie Sie es beschreiben. Für höhere Planungssicherheitsniveaus (besonders katastrophale und gefährliche), haben die Ziele, die unter relevanten Standards (DO178, DO254 usw.) zu erfüllen sind, eine Auswirkung auf alle möglichen Entscheidungen - mit zunehmender Unabhängigkeit bei höheren DALs.

Unter der Annahme, dass Ihre Anwendung eine höhere DAL erfordert, wäre die Antwort normalerweise ja. Die Alternative wäre, ein spezifisches Argument zu konstruieren, um eine Behauptung zu stützen, dass eine solche Abdeckung nicht erforderlich ist, um die Ziele Ihrer Analyse oder Ihres Tests zu erreichen - und die Gutachter davon zu überzeugen, dieses Argument zu akzeptieren. Ein solches Argument muss möglicherweise für jede Art von Kurzschluss konstruiert werden.

1

Sie können auf verschiedene Weise darüber streiten, aber für mich die Tatsache, dass:

if (a && b) { X=... } 

genau das gleiche (oft definiert als):

if (a) 
{ if (b) { X=... } 
} 

bedeutet, dass Ihre Antwort auf die Abdeckung von Der Operator & & sollte identisch mit der Antwort für das entsprechende Äquivalent sein. Ähnlich für die || Operator.

+0

Was Sie sagen, ist wahr, aber das Nachdenken über die Äquivalenz wird komplizierter, wenn es ein begleitendes 'else' gibt. – Peter

+0

Dennoch gibt es immer noch eine exakte Äquivalenz, und das gibt Ihnen eine einfache Definition des zusammengesetzten Falls Unterfälle, für die die Definitionen klar sind. –