2012-04-28 16 views
2

コードの循環複雑度を計算するために、V(G)= E-N + 2を計算するのに役立つノードとエッジからなる制御フローチャートを作成しました。これは私のVのための結果に等しくなければならないMcCabeの循環的複雑度

int maxValue = m[0][0];   
for (int i = 0; i < N; i++)   
{      
    for (int j = 0; j < N; j++)   
    {       
     if (m[i][j] > maxValue)   
     {      
     maxValue = m[i][j];    
     }      
    }       
}     
cout << maxValue << endl;   
int sum = 0;      
for (int i = 0; i < N; i++)   
{      
    for (int j = 0; j < N; j++)   
    {       
     sum = sum + m[i][j];   
    }       
}       
cout << sum << endl; 

:= 11.私は、コードの打撃のために直線的に独立したパスを見つけることにいくつかの助けをしたいと思います今私の答えを確認するために6

のcyclomativ複雑に結果として得られます(G)、そうでなければ私の計算は間違っています。ご協力ありがとうございました。

答えて

2

McCabeの循環的複雑さが上限を与えます。次のことを考慮してください。

void func (const bool do_special) { 
    if (do_special) { 
     do_something_special_at_the_start(); 
    } 

    always_do_this_stuff_in_the_middle(); 

    if (do_special) { 
     do_something_special_at_the_end(); 
} 

グラフ理論の観点からは、これは3の循環的複雑さを持っています。しかし、do_specialは定数なので、コードには2つの独立したパスしかありません。グラフ理論モデルは、いくつかの経路が不可能であることを知らない。グラフ内の可能なのパスの数は時には循環的複雑さよりも小さい。

+0

あなたの循環系の複雑さは6です。ノードとエッジをどのようにカウントするか(16ノード、20エッジをカウントする)、カウントが一貫している場合、循環的複雑さは常に6になります。 –

0

ハメン、 このメトリックが上限を与えるという非常に良い例です。しかし、どういうわけか、あなたはこの例の複雑さについて3つの点を挙げている点を忘れているかもしれません。 do_something _...()を表示しているので、それらは関数呼び出しです。したがって、この場合、P = 3であり、循環的複雑さはV(G)= E - N - 2 * Pで与えられ、またEとNには呼び出された関数のエッジとノードも含まれるべきである。代わりに、この例は次のように書くことができます:

希望すると思います!

関連する問題