次の手順のための制御フローグラフと環状複雑さ
-
28-09-2019 - |
質問
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;
}
}
このコードの環状複雑さを見つけてから、白いボックステストケースとブラックボックステストケースを提案する必要があります。しかし、私はコードのためにCFGを作成するのに苦労しています。
テストケースについてもいくつかのヘルプに感謝します。
解決
ステートメントの番号付けから始めます。
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;
}
これで、どのステートメントが最初に実行され、最後の等しいものが実行されるかをはっきりと確認できるようになりました。
ここで、サイクロマティックな複雑さを計算するには、3つの方法のいずれかを使用します。
- グラフ上の領域の数を数えます:4
- 述語の数(グラフ上の赤) + 1:3 + 1 = 4
- エッジのいいえ - いいえ。ノード + 2:14-12 + 2 = 4の。
他のヒント
環状複雑さは4です。
1 while loopのif条件の場合、while loop +1の場合は、forループ+1の手順+1の場合1。
McCabeフォーミュラを使用することもできます M = E-N + 2C
E =エッジ
n =ノード
C =コンポーネント
M = Cyclomaticの複雑さ
E = 14
N = 12
C = 1
M = 14-12 + 2*1 = 4
所属していません StackOverflow