Недавно наша компания начала измерять циклическую сложность (CC) функций в нашем коде на еженедельной основе и сообщает, какие функции улучшились или ухудшились. Поэтому мы начали уделять гораздо больше внимания ЦК функций.Поиск разъяснений в отношении кода структурирования для уменьшения циклической сложности
Я читал, что CC может быть неофициально рассчитано как 1 + количество точек принятия решения в функции (например, если инструкция, для цикла, выбора и т. Д.), А также количество путей через функцию ...
Я понимаю, что самый простой способом снижения CC является использование метода Extract рефакторинга несколько раз ...
есть нечто Я не уверен, например, что такое CC следующих фрагментов кода?
1)
for (int i = 0; i < 3; i++)
Console.WriteLine("Hello");
И
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Они оба делают то же самое, но первая версия имеет более высокую CC из-за для заявления?
2)
if (condition1)
if (condition2)
if (condition 3)
Console.WriteLine("wibble");
И
if (condition1 && condition2 && condition3)
Console.WriteLine("wibble");
Если предположить, что язык делает оценку короткого замыкания, например, C#, то эти два фрагмента кода имеют тот же эффект, но ... ЦК от первого фрагмента выше, потому что у него есть три решения/если утверждения?
3)
if (condition1)
{
Console.WriteLine("one");
if (condition2)
Console.WriteLine("one and two");
}
И
if (condition3)
Console.WriteLine("fizz");
if (condition4)
Console.WriteLine("buzz");
Эти два кода фрагменты делать разные вещи, но они имеют тот же CC? Или вложенные операторы if в первом фрагменте имеют более высокий CC? т. е. вложенные, если высказывания мысленно более сложны для понимания, но это отражено в CC?
Чья оригинальный документ вы имеете в виду? Не могли бы вы предоставить ссылку? – RickL 2008-10-15 11:34:24
добавлена ссылка и имя (Thomas J McCabe) – moogs 2008-10-15 11:36:09
Спасибо, я просмотрел бумагу, ее довольно сложно прочитать, поскольку она находится в точном техническом стиле. – RickL 2008-10-15 12:06:31