다음을 통해 공유


코드 검사를 사용하여 테스트 중인 코드의 양 확인

단위 테스트와 같은 코딩된 테스트에서 테스트 중인 프로젝트 코드의 비율을 확인하려면 Visual Studio의 코드 검사 기능을 사용할 수 있습니다. 버그를 효과적으로 방지하려면 테스트에서 코드의 상당 부분을 실행하거나 '커버'해야 합니다.

CLR(관리형) 및 비관리(네이티브) 코드 모두에 대해 코드 검사 분석이 가능합니다. 정적 계측과 동적 계측이 모두 지원됩니다. 명령줄 시나리오에서 코드 검사를 사용하려면 네이티브 코드도 지원하는 dotnet-coverage 대한 확장인 vstest.console.exe 또는 Microsoft.CodeCoverage.Console 도구사용합니다.

테스트 탐색기를 사용하여 테스트 메서드를 실행할 때 테스트 메뉴에서 코드 검사 옵션을 사용할 수 있습니다. 결과 테이블에는 각 어셈블리, 클래스 및 프로시저에서 실행되는 코드의 백분율이 표시됩니다. 원본 편집기에서 테스트된 코드를 강조 표시합니다. Cobertura와 같은 인기 있는 형식으로 결과를 내보낼 수 있습니다.

요구 사항

코드 검사 기능은 Visual Studio Enterprise 버전에서만 사용할 수 있습니다.

메모

.NET 코드 검사의 경우 명령줄 도구 dotnet-coverage사용할 수도 있습니다.

코드 커버리지 분석

  1. 테스트 메뉴에서 모든 테스트 대한 코드 검사 분석선택합니다.

    코드 검사 분석이 강조 표시된 테스트 메뉴의 스크린샷

    코드 검사 분석이 강조 표시된 테스트 메뉴의 스크린샷

    테스트 탐색기 도구 창에서 코드 검사를 실행할 수도 있습니다.

  2. 테스트가 실행된 후, 실행된 줄을 보려면 Visual Studio에서 코드 검사 범위 분석 메뉴의 코드 검사 색상 표시를 선택합니다. 기본적으로 테스트에서 다루는 코드는 연한 파란색으로 강조 표시됩니다.

    코드 커버리지 강조 표시된 스크린샷

    코드 커버리지 강조 표시된 스크린샷

    코드 검사 색 지정 옵션의 드롭다운 목록에서 코드 줄, 왼쪽 여백의 문자 모양 또는 둘 다에 색 지정이 적용되는지 여부를 선택할 수 있습니다.

  3. 색을 변경하거나 굵은 얼굴을 사용하려면 도구>옵션>환경>글꼴 및 색>표시 설정을 선택합니다. 텍스트 편집기. 표시 항목아래에서 "적용 범위" 항목에 대한 설정을 조정합니다(예: 적용 범위가 닿지 않은 영역).

    코드 커버리지 글꼴 및 색을 나타내는 스크린샷

    코드 커버리지의 글꼴과 색상을 보여주는 스크린샷

  4. 결과에 커버리지가 낮게 표시되면 테스트되지 않는 코드 부분을 조사하고 이를 커버하기 위해 더 많은 테스트를 작성합니다. 개발 팀은 일반적으로 약 80개의% 코드 검사를 목표로 합니다. 경우에 따라 더 낮은 범위가 허용됩니다. 예를 들어 표준 템플릿에서 일부 코드가 생성되는 경우 더 낮은 범위가 허용됩니다.

코드 검사를 최적화하려면 다음을 수행합니다.

  • 컴파일러 최적화를 해제합니다.
  • 관리되지 않는(네이티브) 코드를 사용하는 경우 디버그 빌드를 사용합니다.
  • 각 어셈블리에 대한 .pdb(기호) 파일을 생성합니다.

예상한 결과를 얻지 못하면 코드 커버리지 문제 해결을 참조하세요.

코드를 업데이트한 후 코드 검사를 다시 실행하는 것을 잊지 마세요. 검사 결과 및 코드 색 지정은 코드를 수정하거나 테스트를 실행할 때 자동으로 업데이트되지 않습니다.

Visual Studio 2022 버전 17.2부터 도구 > 옵션 > 환경 > 미리 보기 기능선택한 다음 코드 검사 환경 개선 사항을 선택한 다음 Visual Studio를 다시 시작하여 최신 코드 검사 기능을 사용하도록 설정할 수 있습니다.

블록 또는 줄로 보고하세요

코드 커버리지는 블록로 측정됩니다. 블록은 정확히 하나의 진입점과 종료 지점이 있는 코드의 일부입니다. 테스트 실행 중에 프로그램의 제어 흐름이 블록을 통과하는 경우 해당 블록은 적용된 것으로 계산됩니다. 블록이 사용된 횟수는 결과에 영향을 주지 않습니다.

테이블 머리글에서 열 추가/제거을 선택하여 줄의 결과를 표시할 수도 있습니다. 일부 사용자는 백분율이 소스 코드에 표시되는 조각의 크기와 더 밀접하게 일치하기 때문에 줄 수를 선호합니다. 긴 계산 블록은 여러 줄을 차지하더라도 단일 블록으로 계산됩니다.

코드 줄에는 둘 이상의 코드 블록이 포함될 수 있습니다. 이 경우 테스트 실행에서 줄의 모든 코드 블록을 실행하면 한 줄로 계산됩니다. 줄 내의 일부 코드 블록이 실행되지만 모두가 실행되는 것은 아니면, 이는 부분 줄로 계산됩니다.

코드 커버리지 결과 보기

코드 검사 결과 창은 일반적으로 프로젝트/클래스/메서드 계층 구조에서 보고서를 구성합니다. 디렉터리/파일/메서드 수준에서 적용 범위를 표시하도록 변경할 수 있습니다.

  • 원본 보고서보려면 코드 검사 결과 창에서 코드 검사 보기 구성 아이콘을 선택합니다. 그런 다음 보고서 스타일 드롭다운에서 원본 뷰 선택합니다.

코드 검사 결과 창에는 일반적으로 전체 솔루션에 대한 결과가 표시됩니다. 현재 분기에서 업데이트된 파일의 결과만 표시하도록 결과를 필터링할 수 있습니다.

  • 변경 집합 보고서을 보려면 코드 검사 결과 창에서 코드 검사 보기 구성 아이콘을 선택합니다. 그런 다음 보고서 콘텐츠 드롭다운에서 변경 집합 보고서을 선택합니다. 활성 리포지토리와 기본 분기를 업데이트하여 비교 기준을 설정하고 비교 보고서를 생성합니다.

코드 검사 결과 창의 검색 상자에서 보고서를 필터링할 수 있는 여러 가지 방법이 있습니다.

  • 이름으로 검색하려면(창에서 검색 문자열과 일치하는 항목만 표시), 검색 상자에 검색 문자열을 입력합니다.
  • 형식으로 필터링하려면 검색 상자에 형식의 이름을 입력하세요.
  • 모두 표시하고 검색 상자를 지웁니다.
  • 100% 완전히 덮인표시하려면 검색 상자에 "Covered (%Lines)":"100"을 입력합니다.
  • 부분적으로 덮인 표시(>0% && < 100%)를##을 적용된 백분율로 바꿔서 "부분적으로 덮은(%Lines)":"<##"을 입력합니다.
  • 0%표시하려면 검색 상자에 "덮지 않음(%Lines)":"0"을 입력합니다.

코드 검사 결과 관리

코드 검사 결과 창에는 일반적으로 가장 최근 실행의 결과가 표시됩니다. 테스트 데이터를 변경하거나 매번 일부 테스트만 실행하는 경우 결과가 달라집니다.

코드 검사 결과 창을 사용하여 이전 결과 또는 다른 컴퓨터에서 가져온 결과를 볼 수도 있습니다.

여러 실행의 결과(예: 다른 테스트 데이터를 사용하는 실행)를 병합할 수 있습니다.

  • 이전 결과 집합을 보려면 드롭다운 메뉴에서 선택합니다. 메뉴에는 새 솔루션을 열 때 지워지는 임시 목록이 표시됩니다.

  • 이전 세션결과를 보려면 결과 가져오기 선택하고 솔루션에서 TestResults 폴더로 이동하고 .coverage 파일을 가져옵니다.

    .coverage 파일이 생성된 이후 소스 코드가 변경된 경우 검사 색 지정이 올바르지 않을 수 있습니다.

  • 결과를 텍스트읽을 수 있도록 하려면 결과 내보내기 선택하고 .xml형식저장으로 선택합니다. 이렇게 하면 다른 도구로 처리하거나 메일로 쉽게 보낼 수 있는 읽을 수 있는 .xml 파일이 생성됩니다. Cobertura와 같은 내보내기 형식을 선택할 수도 있습니다.

  • 다른 사람에게 결과를 보내려면 .coverage 파일 또는 내보낸 .xml 파일을 보냅니다. 그런 다음 파일을 가져올 수 있습니다. 동일한 버전의 소스 코드가 있는 경우 커버리지 색상 표시를 볼 수 있습니다.

다른 실행의 결과 병합

경우에 따라 테스트 데이터에 따라 코드의 다른 블록이 사용됩니다. 따라서 여러 테스트 실행의 결과를 결합할 수 있습니다.

예를 들어 입력 "2"를 사용하여 테스트를 실행할 때 특정 함수의% 50개에 해당한다고 가정합니다. 입력 "-2"를 사용하여 두 번째로 테스트를 실행하면, 커버리지 색상 표시 보기에서 함수의 나머지 50%가%로 표시되는 것을 볼 수 있습니다. 이제 두 테스트 실행의 결과를 병합하면 보고서 및 검사 색 지정 보기에 함수의% 100개가 적용된 것으로 표시됩니다.

코드 커버리지 창에서 병합 버튼에 아이콘을 사용하세요. 이 작업을 수행하려면병합 결과를 사용하십시오. 최근 실행 또는 가져온 결과의 조합을 선택할 수 있습니다. 내보낸 결과를 결합하려면 먼저 가져와야 합니다.

결과 내보내기 사용하여 병합 작업의 결과를 저장합니다.

병합의 제한 사항

  • 다른 버전의 코드에서 검사 데이터를 병합하면 결과가 별도로 표시되지만 결합되지는 않습니다. 완전히 결합된 결과를 얻으려면 동일한 코드 빌드를 사용하여 테스트 데이터만 변경합니다.

  • 내보낸 다음 가져온 결과 파일을 병합하는 경우 블록이 아닌 줄별로만 결과를 볼 수 있습니다. 열 추가/제거 명령을 사용하여 줄 데이터를 표시합니다.

  • ASP.NET 프로젝트의 테스트 결과를 병합하면 별도의 테스트 결과가 표시되지만 결합되지는 않습니다. 이 동작은 ASP.NET 아티팩트 자체에만 적용됩니다. 다른 어셈블리에 대한 결과가 결합됩니다.

코드 검사 결과에서 요소 제외

코드가 텍스트 템플릿에서 생성되는 경우와 같이 코드의 특정 요소를 검사 점수에서 제외할 수 있습니다. 코드 요소 중 클래스, 구조체, 메서드, 속성, 속성 setter 또는 getter, 이벤트에 System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute 특성을 추가합니다.

클래스를 제외해도 파생 클래스는 제외되지 않습니다.

예를 들어:

using System.Diagnostics.CodeAnalysis;
...
public class ExampleClass1
{
    [ExcludeFromCodeCoverage]
    void ExampleMethod() {...}

    [ExcludeFromCodeCoverage] // exclude property
    int ExampleProperty1
    { get {...} set{...}}

    int ExampleProperty2
    {
        get
        {
            ...
        }
        [ExcludeFromCodeCoverage] // exclude setter
        set
        {
            ...
        }
    }

}
[ExcludeFromCodeCoverage]
class ExampleClass2 { ... }

다음 매크로를 사용합니다.

ExcludeFromCodeCoverage( ExclusionName, L"FunctionName");

ExcludeSourceFromCodeCoverage( ExclusionName, L"SourceFilePath");

  • ExclusionName은 예시로 고유한 이름입니다.

  • FunctionName 정규화된 함수 이름입니다. 와일드카드를 포함할 수 있습니다. 예를 들어 클래스의 모든 함수를 제외하려면 MyNamespace::MyClass::*

  • SourceFilePath.cpp 파일의 로컬 또는 UNC 경로입니다. 와일드카드를 포함할 수 있습니다. 다음 예제에서는 특정 디렉터리의 모든 파일을 제외합니다. \\MyComputer\Source\UnitTests\*.cpp

  • #include <CodeCoverage\CodeCoverage.h>

  • 네임스페이스 또는 클래스가 아닌 전역 네임스페이스에 제외 매크로를 호출합니다.

  • 단위 테스트 코드 파일 또는 애플리케이션 코드 파일에 제외를 배치할 수 있습니다.

  • 제외는 컴파일러 옵션을 설정하거나 #pragma managed(off)사용하여 관리되지 않는(네이티브) 코드로 컴파일되어야 합니다.

메모

C++/CLI 코드에서 함수를 제외하려면 함수에 [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] 특성을 적용합니다. 이는 C#과 동일합니다.

추가 요소 포함 또는 제외

코드 검사 분석은 로드되고 .pdb 파일을 .dll 또는 .exe 파일과 동일한 디렉터리에서 사용할 수 있는 어셈블리에서만 수행됩니다. 따라서 경우에 따라 적절한 .pdb 파일의 복사본을 가져오면 포함된 어셈블리 집합을 확장할 수 있습니다.

.runsettings 파일을 작성하여 코드 검사 분석을 위해 선택된 어셈블리 및 요소를 보다 자세히 제어할 수 있습니다. 예를 들어 클래스에 특성을 추가하지 않고도 특정 종류의 어셈블리를 제외할 수 있습니다. 자세한 내용은 코드 커버리지 분석 사용자 지정을 참고하십시오.

Azure Pipelines에서 코드 커버리지 분석

코드를 체크 인하면 테스트가 다른 팀 구성원의 테스트와 함께 빌드 서버에서 실행됩니다. Azure Pipelines에서 코드 검사를 분석하여 전체 프로젝트에서 가장 up-to날짜 및 포괄적인 검사 그림을 가져오는 것이 유용합니다. Azure Pipelines의 코드 검사에는 일반적으로 개발 머신에서 실행되지 않는 자동화된 시스템 테스트 및 기타 코딩된 테스트도 포함됩니다.

명령줄에서 코드 커버리지 분석

명령줄에서 테스트를 실행하려면 vstest.console.exe 유틸리티를 사용합니다. 코드 검사는 옵션에서 호출하는 /EnableCodeCoverage 유틸리티의 옵션입니다.

  1. Visual Studio용 개발자 명령 프롬프트를 시작합니다.

    Windows 시작 메뉴에서 Developer Command Prompt for VS 검색하고 검색 텍스트와 연결된 앱 결과를 선택합니다.

  2. 명령 프롬프트에서 다음 명령을 실행합니다.

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
    

    개발자 PowerShell의 경우 셸의 시작 디렉터리가 Visual Studio 프로젝트 위치입니다. MyTestAssembly.dll 경로 및 테스트 파일 이름으로 바꿉다. 자세한 내용은 VSTest.Console.exe 명령줄 옵션참조하세요.

문제 해결

코드 검사 결과가 표시되지 않으면 문제 해결 코드 검사 문서가 도움이 될 수 있습니다.