Übung statische Analyse – Vorlesung : Prozesse und Methoden beim Testen von Software Musterlösung Aufgabe : Berechnen Sie die zyklomatische Komplexität Berechnung : Z(G) = e – n + 2 e Anzahl der Kanten von G n Anzahl der Knoten von G Übung statische Analyse – Vorlesung : Prozesse und Methoden beim Testen von Software Typ If Anweisung If else Anweisung Zyklomatische 2 Komplexität Kontrollflussgraph 2 Typ do while goto Zyklomatische Komplexität 2 1 Switch Anweisung (2 x case/break 1x default) 3 While Anweisung 2 Anmerkungen : Modifizierter Kontrollflussgraph : Sequenzen können in einem Knoten zusammengefaßt werden. Es gibt keine Knoten n_in und n_out Stark zusammenhängender Kontrollflussgraph : n_final ist der Vorgängerknoten von n_start z.B. durch zyklischen Programmaufruf (typisch für embedded Systeme) Linear unabhängige Pfade : Pfade durch einen Graphen, die nicht durch andere linear unabhängige Pfade zusammengesetzt werden können. Die zyklomatische Zahl für modifizierte, stark zusammenhängende Kontrollflußgraphen ist die Anzahl der Entscheidungen +1 ! Die zyklomatische Zahl ist die Obergrenze für die Anzahl der Testfälle für eine vollständige Zweigabdeckung. Aufgabe1 : Geben Sie die zyklomatische Komplexität der Kontrollflussgraphen an : Kontrollflussgraph Switch Anweisung (3 x case/break 1x default) 4 Aufgabe 2 : Welche Erkenntnisse folgern Sie aus den Ergebnissen der Aufgabe 1 Sequenzen können beliebig lang sein ohne die zyklomatische Komplexität zu erhöhen. Jede Verzweigung in einer Auswahl erhöht die zyklomatische Komplexität um 1. Goto Anweisungen erhöhen die zyklomatische Komplexität nicht. Dipl.-Ing. Peter Kock und Dr. Stefan Kriebel, TU München SS06 1 Dipl.-Ing. Peter Kock und Dr. Stefan Kriebel, TU München SS06 2 Übung statische Analyse – Vorlesung : Prozesse und Methoden beim Testen von Software Übung statische Analyse – Vorlesung : Prozesse und Methoden beim Testen von Software 1 2 Aufgabe 3 : Erzeugen Sie einen modifizierten Kontrollflußgraphen für folgenden Code : 3 4 void output( int selection, int y) { if (selection ==1) printf(“\n 1”); else if (selection ==2) printf(“\n 2”); else if (selection ==3) printf(“\n 3”); else if (selection ==4) if (y == 0) { printf(“\n 4”); printf(“\n 5”); } else printf(“\n 6”); else printf(“\n 7”); } 5 6 7 8 9 n_start if 1 print 1 else if 2 print 2 else if 3 print 3 else if 4 if y ==0 10 11 print 4,5 else 12 n_final } print 6 13 else 14 print 7 15 Aufgabe 4 : Welche zyklomatische Komplexität hat der Graph ? 1. e =19 Kanten, n = 15 Knoten : Z= e – n + 2 = 6 2. Die Anzahl der Entscheidungen + 1 : If else entspricht einer Entscheidung => 6 Aufgabe 5 : Geben Sie alle linear unabhängigen Pfade durch den Graphen an : 1 2 3 4 5 6 Dipl.-Ing. Peter Kock und Dr. Stefan Kriebel, TU München SS06 3 1,2,3,15 1,2,4,5,15 1,2,4,6,7,15 1,2,4,6,8,13,14,15 1,2,4,6,8,9,10,15 1,2,4,6,8,9,11,12,15 Dipl.-Ing. Peter Kock und Dr. Stefan Kriebel, TU München SS06 4