Мне нужно построить блок-схему управления (простой блок-схему с узлами и ребрами) для каждого метода в моем проекте 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. Однако есть только 7 операторов case, я не понимаю, какие другие выражения способствуют сложности.
Я провел поиск по многим источникам, но не смог получить полный список всех выражений, которые будут учитываться.
Кто-нибудь может помочь в этом? Или есть какой-либо инструмент, который я могу создать блок-схему управления из кода С#?
Заранее спасибо...
elementId == null
, метод выдаст исключение NullReferenceException при попытке выполнить вторую строку. Это можно рассматривать как отдельный путь выполнения. - person Gebb   schedule 05.12.2011