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


Создание данных для метрик кода

Данные метрик кода можно создавать тремя способами:

Правила метрик кода для анализаторов качества кода .NET

Анализаторы качества кода .NET включают несколько правил анализатора метрик кода:

Эти правила отключены по умолчанию, но их можно включить из Обозреватель решений или в файле EditorConfig. Например, чтобы включить правило CA1502 в качестве предупреждения, файл EditorConfig будет содержать следующую запись:

dotnet_diagnostic.CA1502.severity = warning

Настройка

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

  1. Создание текстового файла. Например, его можно назвать CodeMetricsConfig.txt.

  2. Добавьте требуемые пороговые значения в текстовый файл в следующем формате:

    CA1502: 10
    

    В этом примере правило CA1502 настроено для срабатывания, если цикломатическая сложность метода превышает 10.

  3. В окне свойств Visual Studio или в файле проекта помечайте действие сборки файла конфигурации как AdditionalFiles. Например:

    <ItemGroup>
      <AdditionalFiles Include="CodeMetricsConfig.txt" />
    </ItemGroup>
    

Команда меню "Вычислять метрики кода"

Создайте метрики кода для одного или всех открытых проектов в интегрированной среде разработки с помощью меню "Анализ>метрик кода".

Создание результатов метрик кода для всего решения

Результаты метрик кода можно создавать для всего решения любым из следующих способов:

  • В строке меню выберите "Анализ>метрик>кода для решения".

  • В Обозреватель решений щелкните решение правой кнопкой мыши и выберите "Вычислить метрики кода".

  • В окне результатов метрик кода нажмите кнопку "Вычислить метрики кода" для решения.

Результаты создаются и отображается окно результатов метрик кода. Чтобы просмотреть сведения о результатах, разверните дерево в столбце Иерархии .

Создание результатов метрик кода для одного или нескольких проектов

  1. В Обозреватель решений выберите один или несколько проектов.

  2. В строке меню выберите "Анализ>метрик кода" для выбранных проектов>.

Результаты создаются и отображается окно результатов метрик кода. Чтобы просмотреть сведения о результатах, разверните дерево в иерархии.

Метрики кода командной строки

Данные метрик кода можно создавать из командной строки для проектов C# и Visual Basic для приложений платформа .NET Framework, .NET Core и .NET Standard. Чтобы запустить метрики кода из командной строки, установите пакет NuGet Microsoft.CodeAnalysis.Metrics или создайте исполняемый файл Metrics.exe самостоятельно.

Пакет NuGet Microsoft.CodeAnalysis.Metrics

Самый простой способ создать данные метрик кода из командной строки — установить пакет NuGet Microsoft.CodeAnalysis.Metrics . После установки пакета запустите msbuild /t:Metrics из каталога, содержащего файл проекта. Например:

C:\source\repos\ClassLibrary3\ClassLibrary3>msbuild /t:Metrics
Microsoft (R) Build Engine version 16.0.360-preview+g9781d96883 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 1/22/2019 4:29:57 PM.
Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" on node 1 (Metrics target(s))
.
Metrics:
  C:\source\repos\ClassLibrary3\packages\Microsoft.CodeMetrics.2.6.4-ci\build\\..\Metrics\Metrics.exe /project:C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj /out:ClassLibrary3.Metrics.xml
  Loading ClassLibrary3.csproj...
  Computing code metrics for ClassLibrary3.csproj...
  Writing output to 'ClassLibrary3.Metrics.xml'...
  Completed Successfully.
Done Building Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" (Metrics target(s)).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Можно переопределить имя выходного файла, указав /p:MetricsOutputFile=<filename>. Кроме того, можно получить данные метрик в стиле прежних версий , указав /p:LEGACY_CODE_METRICS_MODE=true. Например:

C:\source\repos\ClassLibrary3\ClassLibrary3>msbuild /t:Metrics /p:LEGACY_CODE_METRICS_MODE=true /p:MetricsOutputFile="Legacy.xml"
Microsoft (R) Build Engine version 16.0.360-preview+g9781d96883 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 1/22/2019 4:31:00 PM.
The "MetricsOutputFile" property is a global property, and cannot be modified.
Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" on node 1 (Metrics target(s))
.
Metrics:
  C:\source\repos\ClassLibrary3\packages\Microsoft.CodeMetrics.2.6.4-ci\build\\..\Metrics.Legacy\Metrics.Legacy.exe /project:C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj /out:Legacy.xml
  Loading ClassLibrary3.csproj...
  Computing code metrics for ClassLibrary3.csproj...
  Writing output to 'Legacy.xml'...
  Completed Successfully.
Done Building Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" (Metrics target(s)).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Выходные данные метрик кода

Созданный выходный код XML принимает следующий формат:

<?xml version="1.0" encoding="utf-8"?>
<CodeMetricsReport Version="1.0">
  <Targets>
    <Target Name="ConsoleApp20.csproj">
      <Assembly Name="ConsoleApp20, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <Metrics>
          <Metric Name="MaintainabilityIndex" Value="100" />
          <Metric Name="CyclomaticComplexity" Value="1" />
          <Metric Name="ClassCoupling" Value="1" />
          <Metric Name="DepthOfInheritance" Value="1" />
          <Metric Name="SourceLines" Value="11" />
          <Metric Name="ExecutableLines" Value="1" />
        </Metrics>
        <Namespaces>
          <Namespace Name="ConsoleApp20">
            <Metrics>
              <Metric Name="MaintainabilityIndex" Value="100" />
              <Metric Name="CyclomaticComplexity" Value="1" />
              <Metric Name="ClassCoupling" Value="1" />
              <Metric Name="DepthOfInheritance" Value="1" />
              <Metric Name="SourceLines" Value="11" />
              <Metric Name="ExecutableLines" Value="1" />
            </Metrics>
            <Types>
              <NamedType Name="Program">
                <Metrics>
                  <Metric Name="MaintainabilityIndex" Value="100" />
                  <Metric Name="CyclomaticComplexity" Value="1" />
                  <Metric Name="ClassCoupling" Value="1" />
                  <Metric Name="DepthOfInheritance" Value="1" />
                  <Metric Name="SourceLines" Value="7" />
                  <Metric Name="ExecutableLines" Value="1" />
                </Metrics>
                <Members>
                  <Method Name="void Program.Main(string[] args)" File="C:\source\repos\ConsoleApp20\ConsoleApp20\Program.cs" Line="7">
                    <Metrics>
                      <Metric Name="MaintainabilityIndex" Value="100" />
                      <Metric Name="CyclomaticComplexity" Value="1" />
                      <Metric Name="ClassCoupling" Value="1" />
                      <Metric Name="SourceLines" Value="4" />
                      <Metric Name="ExecutableLines" Value="1" />
                    </Metrics>
                  </Method>
                </Members>
              </NamedType>
            </Types>
          </Namespace>
        </Namespaces>
      </Assembly>
    </Target>
  </Targets>
</CodeMetricsReport>

Metrics.exe

Если вы не хотите установить пакет NuGet, можно создать и использовать исполняемый файл Metrics.exe напрямую. Чтобы создать исполняемый файл Metrics.exe , выполните следующие действия.

  1. Клонируйте репозиторий dotnet/roslyn-analyzers .

  2. Откройте командную строку разработчика для Visual Studio в качестве администратора.

  3. В корневом каталоге репозитория roslyn-analyzers выполните следующую команду: Restore.cmd

  4. Измените каталог на src\Tools\Metrics.

  5. Выполните следующую команду, чтобы создать проект Metrics.csproj :

    msbuild /m /v:m /p:Configuration=Release Metrics.csproj
    

    Исполняемый файл с именем Metrics.exe создается в каталоге артефактов\bin в корневом каталоге репозитория.

Использование Metrics.exe

Чтобы запустить Metrics.exe, укажите проект или решение и выходной XML-файл в качестве аргументов. Например:

C:\>Metrics.exe /project:ConsoleApp20.csproj /out:report.xml
Loading ConsoleApp20.csproj...
Computing code metrics for ConsoleApp20.csproj...
Writing output to 'report.xml'...
Completed Successfully.

Устаревший режим

Вы можете создать Metrics.exe в устаревшем режиме. Версия устаревшего режима средства создает значения метрик, которые ближе к старым версиям созданного средства. Кроме того, в устаревшем режиме Metrics.exe создает метрики кода для того же набора типов методов, что и предыдущие версии средства, для метрики кода, созданного средством. Например, он не создает данные метрик кода для инициализаторов полей и свойств. Устаревший режим полезен для обратной совместимости или если код проверка шлюзов на основе номеров метрик кода. Команда для сборки Metrics.exe в устаревшем режиме:

msbuild /m /v:m /t:rebuild /p:LEGACY_CODE_METRICS_MODE=true Metrics.csproj

Дополнительные сведения см. в разделе "Включение создания метрик кода" в устаревшем режиме.

предыдущих версий

Visual Studio 2015 включает средство метрики кода командной строки, которое также называется Metrics.exe. Эта предыдущая версия средства сделала двоичный анализ, то есть анализ на основе сборок. Новая версия средства Metrics.exe анализирует исходный код. Так как новое средство Metrics.exe основано на исходном коде, результаты кода командной строки могут отличаться от результатов, созданных интегрированной среды разработки Visual Studio и предыдущими версиями Metrics.exe. Начиная с Visual Studio 2019 интегрированная среда разработки Visual Studio анализирует исходный код, например средство командной строки, и результаты должны совпадать.

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

Различия значений метрик

Начиная с Visual Studio 2019 версии 16.4 и Microsoft.CodeAnalysis.Metics (2.9.5) SourceLines и ExecutableLines замените предыдущую LinesOfCode метрику. Описание новых метрик см. в разделе "Значения метрик кода". LinesOfCode Метрика доступна в устаревшем режиме.

Другие метрики, такие как и те же формулы, что CyclomaticComplexity и MaintainabilityIndex предыдущие версии Metrics.exe, но новое средство подсчитывает количество IOperations (логических исходных инструкций) вместо инструкций промежуточного языка (IL). Числа будут немного отличаться от тех, которые создаются интегрированной среды разработки Visual Studio и предыдущими версиями Metrics.exe.