Как писать высококлассный код. Часть шестая. Code Metrics

среда, 9 марта 2011, Александр Краковецкий

Метрики кода (code metrics) были анонсированы в Visual Studio 2008. С помощью этого инструмента можно вычислять различные метрики кода:

alt text

Результат будет содержать статистические данные:

alt text

Вызвать code metrics можно такими способами

  • Solution Explorer - Calculate Code Metrics
  • Analyze - Calculate Code Metrics for ...
  • View - Other windows - Code Metrics Results.

Code metrics позволяет вычислять следующие метрики.

Maintainability Index

Комплексный показатель качества кода. Этот показатель разработан специалистами из Carnegie Mellon Software Engineering Institute. Рассчитывается метрика по следующей формуле:

MI = MAX(0, (171 — 5.2 * ln(HV) — 0.23 * CC — 16.2 * ln(LoC)) * 100 / 171),

где

  • HV – Halstead Volume, вычислительная сложность. Чем больше операторов, тем больше значение этой метрики;
  • CC – Cyclomatic Complexity. Эта метрика описана ниже;
  • LoC – количество строк кода.

Эта метрика может принимать значения от 0 до 100 и показывает относительную сложность поддержки кода. Чем больше значение этой метрики, тем легче поддерживать код.

Icon Level Range

Green

High Maintainability Between 20 and 100 inclusive

Yellow

Moderate Maintainability Between 10 and 19 inclusive

Red

Low Maintainability Between 0 and 9 inclusive

Visual Studio помечает методы/классы зеленым цветом, если значение метрики находится в пределах от 20 до 100, желтым цветом, если значение находится в пределах от 10 до 20, и красным цветом, когда значение меньше 10.

Cyclomatic Complexity

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

alt text

Depth of Inheritance

Глубина наследования. Эта метрика показывает для каждого класса, какой он по счету в цепочке наследования. Например, есть 3 класса A, B, C, B унаследован от А, а С унаследован от В, то значение этой метрики для классов A,B и C будет равно соответственно 1, 2 и 3.

alt text

Class Coupling

Показывает степень зависимости классов друг с другом. В расчет берутся уникальные классы из параметров, локальных переменных, возвращаемого типа, базового класса, атрибутов (полный список можно найти в MSDN). Хороший дизайн программного обеспечения предполагает небольшое количество связанных классов. Чем их больше, тем сложнее в дальнейшем переиспользовать этот класс, а также поддерживать, т.к. существует очень много зависимостей.

Lines of Code

Показывает количество строк кода. Этот показатель показывает не точное количество строк в вашем файле, т.к. подсчет основан на IL-коде. В расчет не берутся пустые строчки, комментарии, строчки со скобками, объявление типов и пространств имен. Большое количество строк в методе/классе может показывать на ошибки в проектировании и на то, что этот код можно разделить на несколько частей.

alt text

Более детально о метриках можно почитать по ссылке.

Visual Studio Code Metrics PowerTool 10.0

Visual Studio Code Metrics PowerTool – это утилита, которая позволяет рассчитывать метрики кода для .NET кода и сохранять их в XML файл.

Скачать утилиту можно по ссылке.

После установки в папке (%PROGRAMFILES%)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop должны появиться файлы Metrics.exe и MetricsReport.xsd.

Пример использования:

metrics /f:Metrics.exe /o:MetricsResults.xml

В результате будет создан файл MetricsResults.xml с результатами анализа.

Для одного небольшого приложений этот файл выглядит таким образом:

<?xml version="1.0" encoding="utf-8"?>
<CodeMetricsReport Version="10.0">
  <Targets>
    <Target Name="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\1.exe">
      <Modules>
        <Module Name="1.exe" AssemblyVersion="1.0.0.0" FileVersion="1.0.0.0">
          <Metrics>
            <Metric Name="MaintainabilityIndex" Value="75" />
            <Metric Name="CyclomaticComplexity" Value="5" />
            <Metric Name="ClassCoupling" Value="8" />
            <Metric Name="DepthOfInheritance" Value="1" />
            <Metric Name="LinesOfCode" Value="14" />
          </Metrics>
          <Namespaces>
            <Namespace Name="BeautifulCode">
              <Metrics>
                <Metric Name="MaintainabilityIndex" Value="75" />
                <Metric Name="CyclomaticComplexity" Value="5" />
                <Metric Name="ClassCoupling" Value="8" />
                <Metric Name="DepthOfInheritance" Value="1" />
                <Metric Name="LinesOfCode" Value="14" />
              </Metrics>
              <Types>
                <Type Name="Program">
                  <Metrics>
                    <Metric Name="MaintainabilityIndex" Value="75" />
                    <Metric Name="CyclomaticComplexity" Value="5" />
                    <Metric Name="ClassCoupling" Value="8" />
                    <Metric Name="DepthOfInheritance" Value="1" />
                    <Metric Name="LinesOfCode" Value="14" />
                  </Metrics>
                  <Members>
        // детальные метрики всех элементов приложения
                  </Members>
                </Type>
              </Types>
            </Namespace>
          </Namespaces>
        </Module>
      </Modules>
    </Target>
  </Targets>
</CodeMetricsReport>

Более детально об использовании утилиты можно почитать здесь.

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии