Как писать высококлассный код. Часть шестая. Code Metrics
Метрики кода (code metrics) были анонсированы в Visual Studio 2008. С помощью этого инструмента можно вычислять различные метрики кода:
Результат будет содержать статистические данные:
Вызвать 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 |
High Maintainability | Between 20 and 100 inclusive | |
Moderate Maintainability | Between 10 and 19 inclusive | |
|
Low Maintainability | Between 0 and 9 inclusive |
Visual Studio помечает методы/классы зеленым цветом, если значение метрики находится в пределах от 20 до 100, желтым цветом, если значение находится в пределах от 10 до 20, и красным цветом, когда значение меньше 10.
Cyclomatic Complexity
Показывает структурную сложность кода, т.е. количество различных ветвей в коде. Чем больше этот показатель, тем больше тестов должно быть написано, для полного покрытия кода.
Depth of Inheritance
Глубина наследования. Эта метрика показывает для каждого класса, какой он по счету в цепочке наследования. Например, есть 3 класса A, B, C, B унаследован от А, а С унаследован от В, то значение этой метрики для классов A,B и C будет равно соответственно 1, 2 и 3.
Class Coupling
Показывает степень зависимости классов друг с другом. В расчет берутся уникальные классы из параметров, локальных переменных, возвращаемого типа, базового класса, атрибутов (полный список можно найти в MSDN). Хороший дизайн программного обеспечения предполагает небольшое количество связанных классов. Чем их больше, тем сложнее в дальнейшем переиспользовать этот класс, а также поддерживать, т.к. существует очень много зависимостей.
Lines of Code
Показывает количество строк кода. Этот показатель показывает не точное количество строк в вашем файле, т.к. подсчет основан на IL-коде. В расчет не берутся пустые строчки, комментарии, строчки со скобками, объявление типов и пространств имен. Большое количество строк в методе/классе может показывать на ошибки в проектировании и на то, что этот код можно разделить на несколько частей.
Более детально о метриках можно почитать по ссылке.
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 Украина | Украинское подразделение компании Microsoft. |