Как писать высококлассный код. Часть шестая. 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 с результатами анализа.
Для одного небольшого приложений этот файл выглядит таким образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?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 Украина | ![]() |