Поделиться через


Общие сведения о метриках кода

Обновлен: Ноябрь 2007

Метрики кода представляют собой набор оценок программного обеспечения, которые дают разработчикам более глубокое представление о разрабатываемом коде. Метрики кода позволяют разработчикам понять, какие типы или методы нуждаются в переработке или в более тщательном тестировании. Группы разработки могут увидеть возможные риски, понять текущее состояние проекта и отслеживать ход выполнения в процессе разработки программного обеспечения.

Оценки программного обеспечения

Ниже приведен список результатов метрик кода, которые рассчитываются в Visual Studio:

  • Коэффициент сопровождаемости. Данный коэффициент имеет значение от 0 до 100, которое обозначает относительную легкость сопровождения кода. Чем больше значение, тем легче код в сопровождении. При вычислениях учитываются метрика Холстеда, цикломатическая сложность и количество строк кода. Чтобы ускорить обнаружение проблемных фрагментов кода, могут использоваться цветовые индикаторы. Зеленый рейтинг указывает на значение индекса в диапазоне от 20 до 100, что означает, что код удобно поддерживать. Желтый рейтинг указывает на значение индекса в диапазоне от 10 до 19, что означает, что код можно поддерживать. Красный рейтинг указывает на значение индекса в диапазоне от 0 до 9, что означает, что код сложно поддерживать.

  • Цикломатическая сложность. Структурная сложность кода. Показатель вычисляется путем подсчета различных путей кода в потоке программы, то есть при обнаружении операторов if, switch, do, while, for each и for значение показателя увеличивается на 1. Программа со сложным потоком управления требует более тщательного модульного тестирования для достижения приемлемого уровня покрытия кода и характеризуется более низкой сопровождаемостью.

  • Глубина наследования. Обозначает количество определений классов, достигающих корня иерархии классов. Чем глубже иерархия, тем сложнее бывает понять, где определяются или переопределяются конкретные методы и поля. Показатель на уровне класса вычисляется путем подсчета количества типов, находящихся выше данного типа в дереве наследования. Подсчет начинается с 0, интерфейсы не учитываются. На уровне пространства имен или проектов показатель определяется как наибольшая глубина наследования среди всех типов, используемых в пространстве имен или проекте.

  • Связанность классов. Оценка связи с уникальными классами посредством параметров, локальных переменных, возвращаемых типов, вызовов методов, универсальных экземпляров или экземпляров шаблонов, базовых классов, реализаций интерфейсов, определенных на основе внешних типов полей и добавления атрибутов. При вычислении показателя не учитываются примитивы и встроенные типы, например int32, string и object. Качественная разработка программного обеспечения требует, чтобы типы и методы характеризовались высокой связностью, но низкой связанностью. Высокая связанность говорит о том, что проект трудно поддается повторному использованию и сопровождению из-за большого количества взаимозависимостей от других типов.

  • Количество строк кода. Обозначает приблизительное количество строк в коде. Расчет основан на коде промежуточного языка и поэтому не передает точного количества строк в файле с исходным кодом. При вычислении не учитываются пробелы, фигурные скобки и объявления членов, типов и пространств имен. Очень высокий показатель может свидетельствовать о том, что тип или метод пытается выполнить слишком много функций и требует разделения. Это также может говорить о возможной низкой сопровождаемости типа или метода.

Анонимные методы

Анонимным методом называется метод, не имеющий имени. Анонимные методы чаще всего используются для передачи блока кода в качестве параметра делегата. Результаты метрик для анонимного метода, объявленного в члене, таком как метод или метод доступа, связываются с членом, который объявляет метод. Они не связываются с членом, который вызывает метод.

Дополнительные сведения об обработке метриками кода анонимных методов см. в разделе Анонимные методы и анализ кода.

Созданный код

Некоторые программные средства и компиляторы создают код, который добавляется в проект и остается невидимым для разработчика проекта или недоступным для изменений. Метрики кода, как правило, пропускают созданный код при расчете значений метрик. Благодаря этому значения метрик отражают только те результаты, которые разработчик видит и может изменить.

Код, созданный для форм Windows Forms, не пропускается, поскольку данный код доступен для просмотра и внесения изменений.

Окно "Результаты метрик кода"

После проведения анализа кода в Visual Studio результаты выводятся на экран в окне Результаты метрик кода. Данное окно содержит панель инструментов в верхней части и столбцы, в которых отображаются вычисленные результаты.

В столбце Иерархия представлено дерево иерархии кода, которое можно развернуть или свернуть для получения необходимого уровня детализации. В остальных столбцах показаны вычисленные результаты. При необходимости столбцы с результатами можно скрывать или располагать в нужном порядке. Дополнительные сведения см. в разделе Практическое руководство. Добавление, удаление или изменение порядка столбцов.

В столбце Сопровождаемость помимо числового результата также содержится соответствующий значок. Зеленый значок обозначает относительно высокую степень сопровождаемости. Желтый значок обозначает среднюю степень сопровождаемости. А красный значок обозначает низкую степень сопровождаемости и потенциально проблемный участок. Данные цветовые индикаторы соответствуют категориям серьезности, которые используются в правиле FxCop под названием AvoidUnmaintainableCode. Данное правило возвращает ошибку при коэффициенте сопровождаемости ниже 10, предупреждение при коэффициенте от 10 до 20 и не возвращает ничего (ни ошибки, ни предупреждения) при коэффициенте выше 20. Коэффициент сопровождаемости объединяет в себе три метрики: цикломатическую сложность, количество строк кода и вычислительную сложность. Значения коэффициента выражаются не в единицах.

Представленные в окне результаты можно сортировать по любому из столбцов. Для этого щелкните заголовок столбца. Чтобы отсортировать результаты в обратном порядке, щелкните заголовок столбца еще раз.

См. также

Другие ресурсы

Оценка сложности и удобства сопровождения управляемого кода