Kontrollflussgraphen und zyklomatische Komplexität für das Verfahren folgenden
-
28-09-2019 - |
Frage
insertion_procedure (int a[], int p [], int N)
{
int i,j,k;
for (i=0; i<=N; i++) p[i] = i;
for (i=2; i<=N; i++)
{
k = p[i];
j = 1;
while (a[p[j-1]] > a[k]) {p[j] = p[j-1]; j--}
p[j] = k;
}
}
Ich habe zyklomatische Komplexität für diesen Code zu finden und schlage dann einige weißen Box-Testfälle und Blackbox Testfälle. Aber ich habe Probleme beim Herstellen einer CFG für den Code.
Würde schätzen etwas Hilfe auf Testfälle als auch.
Lösung
Starten Sie durch die Aussagen Nummerierung:
insertion_procedure (int a[], int p [], int N)
{
(1) Int i,j,k;
(2) for ((2a)i=0; (2b)i<=N; (2c)i++)
(3) p[i] = i;
(4) for ((4a)i=2; (4b)i<=N; (4c)i++)
{
(5) k=p[i];j=1;
(6) while (a[p[j-1]] > a[k]) {
(7) p[j] = p[j-1];
(8) j--
}
(9) p[j] = k;
}
Jetzt können Sie deutlich sehen, welche Anweisung ausgeführt ersten und die letzten usw. so zeichnet die cfg einfach wird.
Nun berechnen zyklomatische Komplexität Sie eine von drei Methoden:
- Die Anzahl der Regionen in der Grafik: 4
- Nein. von Prädikaten (rot auf graph) + 1: 3 + 1 = 4
- Keine Kanten - nein. von Knoten + 2:. 14-12 + 2 = 4
Andere Tipps
Die zyklomatische Komplexität ist 4.
1 für das Verfahren 1 für die for-Schleife +1 für die while-Schleife 1 für den Zustand, wenn der while-Schleife.
Sie können auch McCabe Formel M = E-N + 2C
verwenden
E = Kanten
N = Knoten
C = Components |
M = zyklomatische Komplexität
E = 14
N = 12
C = 1
M = 14-12 + 2*1 = 4