Sdílet prostřednictvím


Generování dat metrik kódu

Data metrik kódu můžete generovat třemi způsoby:

Pravidla metrik kódu analyzátorů kvality kódu .NET

Analyzátory kvality kódu .NET zahrnují několik pravidel analyzátoru metrik kódu:

Tato pravidla jsou ve výchozím nastavení zakázaná, ale můžete je povolit z Průzkumník řešení nebo v souboru EditorConfig. Pokud chcete například povolit pravidlo CA1502 jako upozornění, soubor EditorConfig bude obsahovat následující položku:

dotnet_diagnostic.CA1502.severity = warning

Konfigurace

Můžete nakonfigurovat prahové hodnoty, na kterých se pravidla metrik kódu aktivují.

  1. Vytvořte textový soubor. Můžete ji například pojmenovat CodeMetricsConfig.txt.

  2. Do textového souboru přidejte požadované prahové hodnoty v následujícím formátu:

    CA1502: 10
    

    V tomto příkladu je pravidlo CA1502 nakonfigurováno tak, aby se aktivovalo, když je složitost cyklomatické metody větší než 10.

  3. V okně Vlastnosti sady Visual Studio nebo v souboru projektu označte akci sestavení konfiguračního souboru jako AdditionalFiles. Příklad:

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

Příkaz nabídky Calculate Code Metrics (Výpočet metrik kódu)

Vygenerujte metriky kódu pro jeden nebo všechny otevřené projekty v integrovaném vývojovém prostředí pomocí nabídky Analyzovat>výpočet metrik kódu.

Generování výsledků metrik kódu pro celé řešení

Výsledky metrik kódu pro celé řešení můžete vygenerovat některým z následujících způsobů:

  • Na řádku nabídek vyberte Analyzovat>metriky>kódu pro řešení.

  • V Průzkumník řešení klikněte pravým tlačítkem na řešení a pak vyberte Vypočítat metriky kódu.

  • V okně Výsledky metrik kódu vyberte tlačítko Vypočítat metriky kódu pro řešení.

Výsledky se vygenerují a zobrazí se okno Výsledky metrik kódu. Pokud chcete zobrazit podrobnosti o výsledcích, rozbalte strom ve sloupci Hierarchie .

Generování výsledků metrik kódu pro jeden nebo více projektů

  1. V Průzkumník řešení vyberte jeden nebo více projektů.

  2. Na řádku nabídek vyberte Analyzovat>metriky>kódu pro vybrané projekty.

Výsledky se vygenerují a zobrazí se okno Výsledky metrik kódu. Pokud chcete zobrazit podrobnosti o výsledcích, rozbalte strom v hierarchii.

Metriky kódu příkazového řádku

Data metrik kódu můžete generovat z příkazového řádku pro projekty C# a Visual Basic pro aplikace .NET Framework, .NET Core a .NET Standard. Pokud chcete spustit metriky kódu z příkazového řádku, nainstalujte balíček NuGet Microsoft.CodeAnalysis.Metrics nebo sami sestavte spustitelný soubor Metrics.exe .

Balíček NuGet Microsoft.CodeAnalysis.Metrics

Nejjednodušší způsob, jak generovat data metrik kódu z příkazového řádku, je instalace balíčku NuGet Microsoft.CodeAnalysis.Metrics . Po instalaci balíčku spusťte msbuild /t:Metrics z adresáře, který obsahuje váš soubor projektu. Příklad:

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)

Název výstupního souboru můžete přepsat zadáním /p:MetricsOutputFile=<filename>. Můžete také získat data metrik kódu staršího stylu zadáním /p:LEGACY_CODE_METRICS_MODE=true. Příklad:

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)

Výstup metrik kódu

Vygenerovaný výstup XML má následující formát:

<?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

Pokud nechcete nainstalovat balíček NuGet, můžete vygenerovat a použít spustitelný soubor Metrics.exe přímo. Generování spustitelného souboru Metrics.exe :

  1. Naklonujte úložiště dotnet/roslyn-analyzers .

  2. Otevřete vývojářský příkazový řádek pro Visual Studio jako správce.

  3. V kořenovém adresáři úložiště roslyn-analyzers spusťte následující příkaz: Restore.cmd

  4. Změňte adresář na src\Tools\Metrics.

  5. Spuštěním následujícího příkazu sestavte projekt Metrics.csproj :

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

    Spustitelný soubor s názvem Metrics.exe se generuje v adresáři artifacts\bin v kořenovém adresáři úložiště.

Využití Metrics.exe

Chcete-li spustit Metrics.exe, zadejte projekt nebo řešení a výstupní soubor XML jako argumenty. Příklad:

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.

Starší režim

Můžete se rozhodnout, že chcete vytvořit Metrics.exe v zastaralém režimu. Verze starší verze režimu nástroje generuje hodnoty metrik, které jsou blíže k tomu, jaké starší verze nástroje se vygenerovaly. Kromě toho v režimu starší verze Metrics.exe generuje metriky kódu pro stejnou sadu typů metod, pro které předchozí verze nástroje generovaly metriky kódu. Například negeneruje data metrik kódu pro inicializátory polí a vlastností. Starší režim je užitečný pro zpětnou kompatibilitu nebo pokud máte kontrolní brány kódu založené na číslech metrik kódu. Příkaz pro sestavení Metrics.exe ve starším režimu je:

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

Další informace najdete v tématu Povolení generování metrik kódu v režimu starší verze.

Předchozí verze

Visual Studio 2015 obsahovalo nástroj pro metriky kódu příkazového řádku, který se také nazývá Metrics.exe. Tato předchozí verze nástroje provedla binární analýzu, tj. analýzu založenou na sestavení. Novější verze nástroje Metrics.exe analyzuje zdrojový kód. Vzhledem k tomu, že novější nástroj Metrics.exe je založený na zdrojovém kódu, výsledky metrik kódu příkazového řádku se mohou lišit od výsledků generovaných prostředím IDE sady Visual Studio a předchozími verzemi Metrics.exe. Počínaje sadou Visual Studio 2019 analyzuje integrované vývojové prostředí sady Visual Studio zdrojový kód, jako je nástroj příkazového řádku, a výsledky by měly být stejné.

Nový nástroj pro metriky kódu příkazového řádku vypočítá metriky i v případě chyb zdrojového kódu, pokud je možné načíst řešení a projekt.

Rozdíly mezi hodnotami metrik

Počínaje sadou Visual Studio 2019 verze 16.4 a Microsoft.CodeAnalysis.Metics (2.9.5) SourceLines a ExecutableLines nahraďte předchozí LinesOfCode metriku. Popis nových metrik najdete v tématu Kódové hodnoty metrik. Metrika LinesOfCode je k dispozici v režimu starší verze.

Jiné metriky, jako CyclomaticComplexity jsou a MaintainabilityIndex používají stejné vzorce jako předchozí verze Metrics.exe, ale nový nástroj spočítá počet IOperations (logické zdrojové instrukce) místo zprostředkujícího jazyka (IL). Čísla se mírně liší od čísel vygenerovaných integrovaným vývojovém prostředím sady Visual Studio a předchozími verzemi Metrics.exe.