循環的複雑度をグラフで計算する方法を示すために、C# プロジェクトの各メソッドの制御フロー図 (ノードとエッジを含む単純なフロー グラフ) を作成する必要があります。
最初に VS 2010 を使用して循環的複雑度をカウントし、次にグラフを作成して、結果の値が VS からカウントされた値と同じであることを確認しました。ただし、循環的複雑度の+1と実際に見なされる式がわからないため、ここでいくつかの問題に遭遇しました。
ここで一例を見てみましょう:
public ActionResult Edit(string id, string value)
{
string elementId = id;
// Use to get first 4 characters of the id to indicate which category the element belongs
string fieldToEdit = elementId.Substring(0, 4);
// Take everything AFTER the 1st 4 characters, this will be the ID
int idToEdit = Convert.ToInt32(elementId.Remove(0, 4));
// The value to be return is simply a string:
string newValue = value;
var food = dbEntities.FOODs.Single(i => i.FoodID == idToEdit);
// Use switch to perform different action according to different field
switch (fieldToEdit)
{
case "name": food.FoodName = newValue; break;
case "amnt": food.FoodAmount = Convert.ToInt32(newValue); break;
case "unit": food.FoodUnitID = Convert.ToInt32(newValue); break;
// ** DateTime format need to be modified in both view and plugin script
case "sdat": food.StorageDate = Convert.ToDateTime(newValue); break;
case "edat": food.ExpiryDate = Convert.ToDateTime(newValue); break;
case "type": food.FoodTypeID = Convert.ToInt32(newValue); break;
default: throw new Exception("invalid fieldToEdit passed");
}
dbEntities.SaveChanges();
return Content(newValue);
}
この方法では、VS は循環的複雑度を 10 と計算しました。ただし、case ステートメントは 7 つしかないため、他のどの式が複雑さに寄与しているのかわかりません。
多くのソースを検索しましたが、カウントされるすべての式の完全なリストを取得できませんでした。
誰でもこれについて助けることができますか?または、C# コードから制御フロー図を生成できるツールはありますか?
前もって感謝します...