C#プロジェクトの各メソッドに対して、グラフフローを計算する方法を示すために、コントロールフロー図(ノードとエッジを持つ単純なフローグラフ)を作成する必要がありますサイクロマティックな複雑さ。C#コードの完全なリスト循環的複雑さ+1 +1
私はまず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として循環的複雑度を計算ししかし、わずか7 case文があり、私は他の式はに貢献し理解していません複雑。
私は多くの情報源から検索しましたが、の完全なリストは数えられませんでした。
誰でもこれを助けることができますか?または、C#コードからコントロールフローダイアグラムを生成できるツールがありますか?
は、あなたが最初にやるべきこと...事前に
私はこれに答えていないが、私の推測では、スイッチブランチに加えて、例外がスローされる可能性があるケースを数えます。たとえば、 'elementId == null'の場合、メソッドは2行目の実行を試みるNullReferenceExceptionをスローします。これは別の実行パスと見なすことができます。 – Gebb