私の質問は、プログラミングコードから制御フローグラフへの変換についてです。
たとえば、次のコードがあるとします。
public class Contractor
{
// other member fields...
private bool isVerified;
private int noOfA;
private int noOfB;
// other member methods...
public int GetNumberOfDependents()
{
this.noOfB = this.noOfA;
if (this.isVerified)
{
this.noOfB++;
}
if (this.noOfB > 4)
{
this.noOfB = 4;
}
return this.noOfB;
}
}
私は以下のフロー図を描きました:
また、IFコマンドの条件式のノードは描画しなかったので注意してください。これは、「コマンド」ではないと思います。
CCに関するウィキペディアのページ によると、ノードの定義は次のとおりです。
グラフのノードは、プログラムのコマンドの分割できないグループに対応します
そして式は:
M = E − N + 2P
そのため、CC値は4になりました。
ただし、この link の説明によると、CC値は3です。
ここに矛盾があります。
さらに、Programmers.SEの質問「サイクロマティック複雑性について」に対する David Tonhoferの回答 によれば、式は次のようになります。
v(G)= e-v + p
その答えは誰にも認められていません、私の質問は:私の図は正しいですか?
フロー図は次のように簡略化できます。
[this.noOfB = this.noOfA;]
| \
| \
| [noOfB++]
| /
| /
[-----------------]
| \
| \
| [noOfB = 4]
| /
| /
[-----------------]
これにより、5つのノード、6つのエッジ、および1つの連結成分が得られます=> M = 6-5 + 2 * 1 = 3。