метрики кода visual studio
Обзор анализа исходного кода
Анализаторы можно разбить на следующие группы.
Вы можете установить сторонние анализаторы в виде пакета NuGet или расширения Visual Studio. Анализаторы сторонних разработчиков, такие как StyleCop, Roslynator, XUnit Analyzers и Sonar Analyzer.
Уровни серьезности анализаторов
У каждого анализатора есть один из следующих уровней серьезности:
Уровень серьезности (Обозреватель решений) | Уровень серьезности (файл EditorConfig) | Реакция на событие во время сборки | Реакция на событие редактора |
---|---|---|---|
Ошибка | error | Нарушения отображаются как ошибки в списке ошибок и в выходных данных сборки из командной строки и приводят к сбою сборок. | Соответствующий код ошибки подчеркнут красной волнистой линией и отмечен небольшой красной рамкой в полосе прокрутки. |
Предупреждение | warning | Нарушения отображаются как предупреждения в списке ошибок и в выходных данных сборки из командной строки, но не приводят к сбою сборок. | Соответствующий код подчеркнут зеленой волнистой линией и отмечен небольшой зеленой рамкой в полосе прокрутки. |
Сведения | suggestion | Нарушения отображаются как сообщения в списке ошибок и отсутствуют в выходных данных сборки из командной строки. | Соответствующий код подчеркнут серой волнистой линией и отмечен небольшой серой рамкой в полосе прокрутки. |
Скрытый | silent | Невидимая для пользователя. | Невидимая для пользователя. Тем не менее данные диагностики передаются в обработчик диагностики IDE. |
Нет | none | Полностью подавлена. | Полностью подавлена. |
По умолчанию | default | Соответствует стандартному уровню серьезности правила. Чтобы определить, какое значение по умолчанию используется для правила, просмотрите окно свойств. | Соответствует стандартному уровню серьезности правила. |
Если анализатор обнаруживает нарушения правил, они помечаются в редакторе кода (волнистая линия под соответствующим кодом) и в окне «Список ошибок».
Нарушения анализаторов, приведенные в списке ошибок, соответствуют уровню серьезности правила. Нарушения анализаторов выделяются в редакторе кода с помощью волнистых линий под соответствующим кодом. На следующем рисунке показаны три нарушения — одна ошибка (красная волнистая линия), одно предупреждение (зеленая волнистая линия) и одно предложение (три серые точки):
Многие правила анализатора или диагностические средства имеют одно или несколько связанных исправлений кода, которые можно применить для устранения нарушения правила. Исправления кода отображаются в меню со значком лампочки вместе с другими типами быстрых действий. Сведения об этих исправлениях кода см. в разделе Распространенные быстрые действия.
Настройка уровней серьезности анализатора
Вы можете настроить уровни серьезности правил анализатора или данные диагностики в файле EditorConfig или в меню лампочки.
Анализаторы также можно настроить для проверки кода во время сборки и в реальном времени по мере ввода. Можно настроить область выполнения динамического анализа кода только для текущего документа, для всех открытых документов или для всего решения. См. практическое руководство по Настройка области динамического анализа кода.
Ошибки и предупреждения времени сборки из анализаторов кода отображаются только в том случае, если анализаторы установлены как пакет NuGet. Встроенные анализаторы (например, IDE0067 и IDE0068) никогда не запускаются во время сборки.
Сравнение пакета NuGet и расширения VSIX
Сторонние анализаторы можно установить для отдельного проекта с помощью пакета NuGet. Некоторые из них также доступны в виде расширения Visual Studio. В этом случае они применяются к любому решению, открытому в Visual Studio. Между этими двумя способами установки анализаторов существуют некоторые ключевые различия.
Область
Если анализаторы устанавливаются как расширение Visual Studio, они применяются на уровне решения и ко всем экземплярам Visual Studio. Если анализаторы устанавливаются в виде пакета NuGet, что является предпочтительным, они применяются только к проекту, где установлен данный пакет NuGet. В командных окружениях анализаторы, установленные как пакеты NuGet, входят в область для всех разработчиков, работающих над этим проектом.
Ошибки сборки
Чтобы применить правила во время сборки, например с помощью командной строки или в составе сборки непрерывной интеграции (CI), выберите один из следующих вариантов:
Установите анализаторы в качестве пакета NuGet. Если установить анализатор как расширение, его предупреждения и ошибки не будут отображаться в отчете о сборке.
На следующем изображении показаны выходные данные сборки из командной строки для создания проекта, содержащего нарушение правила анализа:
Важность правил
Вы не можете настроить важность правил из анализаторов, которые были установлены как расширение Visual Studio. Чтобы настроить важность правила, установите анализаторы как пакет NuGet.
Использование окна «Результаты метрик кода»
В окне Результаты метрик кода отображаются данные, формируемые анализом метрик кода. Дополнительные сведения о значениях данных метрик кода см. в разделе значения метрик кода.
Отображение результатов метрик кода
Окно результатов метрик кода отображается автоматически при формировании результатов метрик кода. Окно также можно отобразить в любое время.
Окно Результаты метрик кода можно отобразить с помощью одной из следующих последовательностей меню:
в меню анализ выберите Windows > результаты метрик кода.
в меню вид выберите другие Windows > результаты метрик кода.
Просмотр сведений о метриках кода
Фильтрация результатов метрик кода
Раскрывающийся список Фильтр содержит имена столбцов результатов. При определении фильтра он добавляется в конец списка вместе с отступом. Список может содержать последние 10 фильтров, которые были определены.
Фильтрация результатов метрик кода
В списке Фильтр выберите имя столбца.
В поле min (минимум) введите минимальное отображаемое значение.
В поле Макс введите максимальное отображаемое значение.
Чтобы просмотреть сведения о результатах, разверните дерево иерархии.
Добавление, удаление и изменение порядка столбцов данных
Столбцы «результаты» можно добавлять и удалять из окна « Результаты метрик кода ». Кроме того, можно изменить порядок столбцов результатов так, чтобы они отображались в нужном порядке.
Добавление или удаление столбца
Нажмите кнопку Добавить или удалить столбцы или щелкните правой кнопкой мыши заголовок любого столбца и выберите команду Добавить или удалить столбцы.
В диалоговом окне Добавление или удаление столбцов установите или снимите флажок напротив столбца, который требуется добавить или удалить, а затем нажмите кнопку ОК.
Переупорядочение столбцов
В диалоговом окне Добавление или удаление столбцов выберите столбец, который необходимо переместить, а затем щелкните стрелку вверх или стрелку вниз.
Если столбец расположен в нужном месте, нажмите кнопку ОК.
Копирование данных в буфер обмена или Excel
Создание рабочего элемента на основе результатов метрик кода
дополнительные сведения о Azure Boards рабочих элементов см. в разделе рабочие элементы.
Создание рабочего элемента на основе результата
Щелкните результат правой кнопкой мыши.
Наведите указатель мыши на пункт создать рабочий элемент, а затем выберите тип рабочего элемента, который необходимо создать (Ошибка, задача и т. д.).
Заполните форму рабочего элемента, заполнив все обязательные поля.
Создание ошибки на основе результата
Щелкните результат, чтобы выбрать его.
Заполните форму рабочего элемента, заполнив все обязательные поля.
Use the Code Metrics Results window
The Code Metrics Results window displays the data that is generated by the code metrics analysis. For more information about code metrics data values, see Code metrics values.
Display code metrics results
The Code Metrics Results window is displayed automatically when you generate code metrics results. You can also display the window at any time.
You can display the Code Metrics Results window using one of the following menu sequences:
On the Analyze menu, choose Windows > Code Metrics Results.
On the View menu, choose Other Windows > Code Metrics Results.
The Code Metrics Results window opens, even if it contains no results.
To view code metrics details
If code metrics results have been generated, expand the tree in the Hierarchy column.
Filter code metrics results
You can filter the results that are displayed in the Code Metrics Results window by using the toolbar at the top. For example, you might want to see only the results that have a maintainability index below 65.
The Filter drop-down box contains the names of the results columns. When a filter is defined, it is added to the bottom of the list together with an indentation. The list can contain the last 10 filters that were defined.
To filter the code metrics results
From the Filter list, select the column name.
In Min, type the minimum value to be displayed.
In Max, type the maximum value to be displayed.
Click the Apply Filter button.
To see the result details, expand the hierarchy tree.
Add, remove, and rearrange data columns
You can add or remove results columns from the Code Metrics Results window. In addition, you can rearrange results columns so that they appear in the order that you want.
Add or remove a column
Click the Add/Remove Columns button, or right-click any column heading and then click Add/Remove Columns.
In the Add/Remove Columns dialog box, select or clear the check box for the column that you want to add or remove, and then choose OK.
Rearrange columns
Click the Add/Remove Columns button.
In the Add/Remove Columns dialog box, select the column that you want to move and then choose either the up arrow or the down arrow.
When the column is positioned where you want it, choose OK.
Copy data to the clipboard or Excel
You can select and copy a selected row of code metrics data to the clipboard as a text string that contains one line for the name and value of each data column. You can also click Open Selection in Microsoft Excel to export all of the code metrics results to an Excel spreadsheet.
Create a work item based on code metric results
You can create an Azure Boards work item that is based on results in the Code Metric Results window. When the work item is created, Visual Studio automatically enters a title in the Title field and code metrics data under the History tab.
For more information about Azure Boards work items, see Work items.
To create a work item based on a result
Right-click the result.
Point to Create Work Item, and then click the type of work item you want to create (Bug, Task, and so forth).
Complete the work item form by filling in all required fields.
On the File menu, click Save All to save the work item.
To create a bug based on a result
Click the result to select it.
Click the Create Work Item button.
Complete the work item form by filling in all required fields.
On the File menu, click Save All to save the work item.
How to: Generate code metrics data
You can generate code metrics data in three ways:
From the command line for C# and Visual Basic projects.
.NET code-quality analyzers code metrics rules
These rules are disabled by default but you can enable them from Solution Explorer or in an EditorConfig file. For example, to enable rule CA1502 as a warning, your EditorConfig file would contain the following entry:
Configuration
You can configure the thresholds at which the code metrics rules fire.
Create a text file. As an example, you can name it CodeMetricsConfig.txt.
Add the desired thresholds to the text file in the following format:
In this example, rule CA1502 is configured to fire when a method’s cyclomatic complexity is greater than 10.
In the Properties window of Visual Studio, or in the project file, mark the build action of the configuration file as AdditionalFiles. For example:
Calculate Code Metrics menu command
Generate code metrics for one or all of your open projects in the IDE by using the Analyze > Calculate Code Metrics menu.
Generate code metrics results for an entire solution
You can generate code metrics results for an entire solution in any of the following ways:
From the menu bar, select Analyze > Calculate Code Metrics > For Solution.
In Solution Explorer, right-click the solution and then select Calculate Code Metrics.
In the Code Metrics Results window, select the Calculate Code Metrics for Solution button.
The results are generated and the Code Metrics Results window is displayed. To view the results details, expand the tree in the Hierarchy column.
Generate code metrics results for one or more projects
In Solution Explorer, select one or more projects.
From the menu bar, select Analyze > Calculate Code Metrics > For Selected Project(s).
The results are generated and the Code Metrics Results window is displayed. To view the results details, expand the tree in the Hierarchy.
Calculate code metrics from the command line instead
Command-line code metrics
Microsoft.CodeAnalysis.Metrics NuGet package
The easiest way to generate code metrics data from the command line is by installing the Microsoft.CodeAnalysis.Metrics NuGet package. After you’ve installed the package, run msbuild /t:Metrics from the directory that contains your project file. For example:
Code metrics output
The generated XML output takes the following format:
Metrics.exe
If you don’t want to install the NuGet package, you can generate and use the Metrics.exe executable directly. To generate the Metrics.exe executable:
Open Developer Command Prompt for Visual Studio as an administrator.
From the root of the roslyn-analyzers repo, execute the following command: Restore.cmd
Change the directory to src\Tools\Metrics.
Execute the following command to build the Metrics.csproj project:
An executable named Metrics.exe is generated in the artifacts\bin directory under the repo root.
Metrics.exe usage
To run Metrics.exe, supply a project or solution and an output XML file as arguments. For example:
Legacy mode
You can choose to build Metrics.exe in legacy mode. The legacy mode version of the tool generates metric values that are closer to what older versions of the tool generated. Additionally, in legacy mode, Metrics.exe generates code metrics for the same set of method types that previous versions of the tool generated code metrics for. For example, it doesn’t generate code metrics data for field and property initializers. Legacy mode is useful for backwards compatibility or if you have code check-in gates based on code metrics numbers. The command to build Metrics.exe in legacy mode is:
Previous versions
Visual Studio 2015 included a command-line code metrics tool that was also called Metrics.exe. This previous version of the tool did a binary analysis, that is, an assembly-based analysis. The newer version of the Metrics.exe tool analyzes source code instead. Because the newer Metrics.exe tool is source code-based, command-line code metrics results may be different to those generated by the Visual Studio IDE and by previous versions of Metrics.exe. Starting in Visual Studio 2019, the Visual Studio IDE analyzes source code like the command-line tool and the results should be the same.
Visual Studio 2015 included a command-line code metrics tool that was also called Metrics.exe. This previous version of the tool did a binary analysis, that is, an assembly-based analysis. The new Metrics.exe tool analyzes source code instead. Because the new Metrics.exe tool is source code-based, command-line code metrics results are different to those generated by the Visual Studio IDE and by previous versions of Metrics.exe.
The new command-line code metrics tool computes metrics even in the presence of source code errors, as long as the solution and project can be loaded.
Metric value differences
Starting in Visual Studio 2019 version 16.4 and Microsoft.CodeAnalysis.Metics (2.9.5), SourceLines and ExecutableLines replace the previous LinesOfCode metric. For descriptions of the new metrics, see Code metrics values. The LinesOfCode metric is available in legacy mode.
The LinesOfCode metric is more accurate and reliable in the new command-line code metrics tool. It’s independent of any codegen differences and doesn’t change when the toolset or runtime changes. The new tool counts actual lines of code, including blank lines and comments.
О разработке ПО и эффективности
Методы и инструменты эффективной разработки приложений.
понедельник, 9 января 2012 г.
Code Metrics + Refactoring
Думаю, большинство из вас знают, что в Visual Studio есть набор метрик кода. Моя цель – привлечь к ним ваше внимание, в том числе как к одной из отправных точек для ревью кода и рефакторинга.
Сначала я расскажу о запуске подсчёта метрик. Потом кратко опишу каждую метрику и дам некоторые рекомендации по рефакторингу в случае проблем. Затем немного расскажу о моём опыте использования метрик на практике.
Однако, начиная разговор о метриках кода в Visual Studio, хочу пояснить моё отношение к метрикам кода вообще.
С одной стороны, это мощный инструмент для оценки качества кода. По моему мнению, его обязательно стоит использовать как отправную точку для ревью кода (в том случае, когда идем не от коммита, а делаем ревью отдельного класса/модуля).
С другой стороны, не стоит идеализировать метрики кода – это всего лишь один из инструментов. Вы же не считаете, что раз молоток хорошо забивает гвозди, это лучшее средство для закручивания шурупов? 😉
По моему личному опыту, если метрики говорят что где-то всё плохо – с большой вероятностью там действительно всё плохо и код необходимо рефакторить или переписывать заново. Правда и в этих случаях бывают исключения.
Важное замечание: не стоит думать что код с хорошими метриками действительно хорош. Контр-пример – практически к любому коду можно многократно и фанатично применить рефакторинг “Extract Method”. После чего получим код с очень хорошими метриками, в котором даже автор на следующий день не разберется.
Еще одно важное замечание: разумеется, универсальных советов для любой ситуации у меня нет. Я лишь могу дать рекомендации на основе моего личного опыта.
Запуск подсчёта метрик
Вы можете запустить подсчёт метрик из Visual Studio 2008/2010 (скажу сразу, что это относится к версиям Premium и Ultimate). Для этого откройте меню Analyze и выберите либо “Calculate Code Metrics for Selected Project(s)” либо “Calculate Code Metrics for Solution”.
По прошествии некоторого времени, которое зависит от размера проекта и быстродействия компьютера, появится результат. Его, помимо прочего, можно будет отфильтровать (задав фильтр и нажав первую выделенную кнопку):
С учётом того, что нет возможности развернуть сразу всё под-дерево, может пригодиться возможность экспортировать результаты в Excel (вторая выделенная кнопка). Чтобы сделать скриншот мне пришлось развернуть все узлы вручную.
Также отмечу, что у подсчёта метрик для анонимных методов есть особенности. Подробно останавливаться на них не буду, потому что, на мой взгляд, они этого не заслуживают
Помимо работы из Visual Studio есть возможность запускать подсчёт метрик из консольного приложения. Для этого нужно установить Visual Studio Code Metrics PowerTool. При этом требуется соответствующая лицензия на Visual Studio или TFS.
Maintainability Index
Это, на мой взгляд, основная метрика – своего рода KPI для оценки кода с точки зрения поддержки. Остальные метрики, по моему мнению, стоит использовать просто как подсказку при более детальном анализе проблем, локализованных с помощью Maintainability Index. Или же, если с Maintainability Index всё в порядке, а хочется улучшать код дальше, имеет смысл обратить внимание на метрики, не являющиеся основой для его вычисления (Class Coupling + Depth of Inheritance).
Метрика считается по следующей формуле:
Cyclomatic Complexity и Lines of Code будут описаны далее.
Чем больше MI, тем должно быть проще поддерживать код. Трактовка Майкрософт значений этой метрики следующая:
Своё мнение о значениях этой метрики я расскажу позже. Пока только скажу, что для того, чтобы получить скриншот со значением 19, мне пришлось написать метод почти на 300 строк с вложенными друг в друга 23 раза switch’ами и рекурсивными вызовами в каждом. Рекурсия скорее всего лишняя, просто сначала попробовал пойти другим путём.