상세 컨텐츠

본문 제목

TechNote 1203 IDE의 코드 검사 기초

Visual Studio/Visual Studio 2008

by 탑~! 2010. 8. 6. 09:11

본문


TechNote 1203 IDE의 코드 검사 기초

Visual Studio Team System 에서 기본으로 제공되는 뛰어난  도구의 하나로 코드 검사 도구가 있습니다. 이 도구를 사용하면, 다양한 테스트를 실행하여 실제로 코드의 몇 % 가 실행되었는지 알 수 있습니다. Visual Studio Team System 에서 기본 제공되는 이 도구의 뛰어난 점의 하나는 IDE 및 단위 테스트 프레임워크와 매우 적절히 통합된다는 점입니다. TechNote에서는 단위 테스트 실행에 코드 검사 컬렉션을 추가하는 방법에 대해 설명합니다.

예제 코드로서, 입력에 따라, 1 또는 0 을 반환하는 간단한 함수를 사용합니다.


class Program

{

static void Main(string[] args)

{

Program prog = new Program();

prog.TestFunction(0);

}



public int TestFunction(int input)

{

if( input > 0 )

{

return 1;

}



else

{

return 0;

}

}

}

코드 검사를 실행하려면, 우선 단위 테스트를 작성해야 합니다.  가장 빨리  단위 테스트를 작성하는 방법은 테스트 함수를 오른쪽 클릭하는 것입니다. 그리고 context menu의 [Create Tests] 을 클릭합니다. [Create Tests] 을 클릭하면, 다음 메뉴가 표시됩니다. 이 메뉴에서는 테스트의 작성 대상 함수나 테스트의 생성에 사용하는 언어를 지정할 수 있습니다.  예에서는 함수 TestFunction 용의 테스트만을 작성합니다. TestFunction 가 이미 선택되어 있습니다. [OK] 를 클릭하기 전에,  언어종류를 선호하는 C# 으로 변경했습니다. [OK] 를 클릭하면, 테스트 프로젝트의 이름을 입력하라는 메시지가 표시됩니다. 이번은 기본값대로 했습니다.  이렇게 하여, 테스트 생성이라는 대단한 작업을 테스트 프레임워크에 의해 실행합니다.

다음과 같이, 새롭게 생성된 테스트 프로젝트가 솔루션 탐색기에 추가됩니다. ProgramTest.cs 파일을 열어, TestFunctionTest 함수내의 Assert.Inconclusive 의 행을 주석으로 해야 합니다. Assert.Inconclusive 행은 테스트 실행전에 테스트 결과를 유효성 검사 하도록 하기 위해  단위 테스트에 자동적으로 삽입됩니다. 이 행을 주석으로 하지 않으면 테스트 결과는 모두, 불확정으로 표시됩니다. 단위 테스트의 expression body 를 다음에 보여줍니다.


[TestMethod()]

public void TestFunctionTest()

{

object target = TestProject1.HelloCodeCoverage_ProgrammAccessor.CreatePrivate();



TestProject1.HelloCodeCoverage_ProgramAccessor accessor = new

TestProject1.HelloCodeCoverage_Program_Accessor();



int input = 0;



int expected = 0;

int actual;



actual = accessor.TestFunction(input);



Assert.AreEqual(expected, actual, "HelloCodeCoverage.Program.TestFunction did not

return the expected value");

//Assert.Inconclusive("Verify the correctness of this test method.");

}

테스트를 실행하기 전에 코드 검사에 대해서 계측하는 이진을 선택해야 합니다. 솔루션 탐색기에서, localtestrun.testrunconfig 파일을 두번 클릭하면,  다음에 보이는 새로운 대화상자가 열립니다. 이 대화상자의 좌측에서 [Code Coverage] 를 선택합니다. [artifacts to instrument]에서 [HelloCodeCoverage.exe] 체크 박스를 체크하고, [save] 을 클릭하고, 대화상자를 닫습니다.

다음은 단위 테스트를 실제로 실행합니다. 이것에는 우선, [Test] 메뉴의 [Windows] 를 선택하여, [test view] 를 클릭하고 테스트 보기를 엽니다. [test view] 창 (이하에 보여줍니다)에서 TestFunctionTest 테스트를 선택하고, [test view] 창의 상단 왼쪽에 있는 실행 버튼을 클릭합니다.

테스트를 실행하면, [test view] 창 ( 다음 그림 위쪽)이 표시됩니다. 실행된 하나의 테스트가 정상적으로 완료된 것을 알 수 있습니다. 성공한 테스트의 위에 “테스트 실행 : 경고”라고 표시됩니다. 이것을 클릭하면, 이것은 단지, 테스트하고 있는 실행가능 파일의 CLR 머리글 플래그의 업데이트가 필요하다고 알리는 경고메시지 입니다. 그러나  문제는 실제 테스트 결과 대신에 코드 검사이므로, 성공한 테스트 실행을 오른쪽 클릭하여, [Code Coverage results] 를 클릭합니다. 그러면, 다음과 같이 그 테스트 실행의 코드 검사 결과가 변경됩니다.

위의 코드 검사 결과를 보면, 단위 테스트에 의해서 TestFunction 의 75% 가 검사된 것을 알 수 있습니다. 검사 숫자 값을 올리려면, 테스트에서 검사하지 않는 부분을 알아야 알아야 합니다. 소스 파일의 실제 검사 부분을 알려면, [code coverage results] 창의 TestFunction 를 두번 클릭합니다. TestFunction 를 포함한 소스 파일이 표시되어 테스트에서 검사되는 부분을 보여주기 위해 강조 표시됩니다. 초록색 부분은 테스트에서 검사된 부분, 붉은색 부분은 검사되지 않았던 부분입니다. 테스트로 사용한 입력은 0 이었으므로, 1 을 반환하는 코드는 실행되지 않았습니다.

75% 의 코드 검사로는 불충분한 경우는 숫자 값을 100% 로 올리기 위해  테스트를  하나 추가해야 합니다. 우선, TestFunction 용으로 새로운 테스트를 작성합니다. 테스트 프로젝트의 ProgramTest.cs 파일을 열고, TestFunctionTest 함수를 복사하여 TestFunctionTest 아래에  이름을 TestFunctionTest2 로 변경해서 실행합니다. ProgramTest.cs 내의 새로운 테스트를 다음에 보여줍니다. 입력 및 예상되는 반환값도 0에서 1 로 변경했습니다.



[TestMethod()]

public void TestFunctionTest2()

{

object target = TestProject1.HelloCodeCoverage_ProgrammAccessor.CreatePrivate();



TestProject1.HelloCodeCoverage_ProgramAccessor accessor = new

TestProject1.HelloCodeCoverage_Program_Accessor();



int input = 1;



int expected = 1;

int actual;



actual = accessor.TestFunction(input);



Assert.AreEqual(expected, actual, "HelloCodeCoverage.Program.TestFunction did not

return the expected value");

//Assert.Inconclusive("Verify the correctness of this test method.");

}

새로운 테스트를 작성하면, 새로운 테스트는 원래의 TestFunctionTest 와 함께 테스트 보기에 표시됩니다. 테스트 보기에서 TestFunctionTest2 를 선택하여 실행합니다. 앞에서 실행한 것과  같은 방법으로 코드 검사의 결과에 액세스 합니다.

컬러 소스 코드에서 알 수 있듯이 이 테스트에서는 코드내의 “if( input > 0 )”분기가 검사되었습니다. 따라서 두 개의 테스트 결과를 조합하면, TestFunction 함수의 코드 검사는 100% 가 됩니다. 코드 검사의 결과 (위의 그림 참조 )에서는 초록색 플러스에 의해 두개 상자가 결합된 것처럼  보이는 작은 아이콘이 작업 표시 위에 있습니다. 이 상자를 클릭하면, 이 세션의 모든 테스트 실행을 목록 하는 병합 메뉴가 표시됩니다.  먼저 실행한 TestFunctionTest 와 두번째에 실행한 TestFunctionTest2 라는 두개의 실행이 표시됩니다.

두개의 테스트 실행을 선택하여 [OK] 를 클릭하여, 두개의 테스트 실행 결과에 대한 병합된 집합을 작성했습니다. 다음 그림에 병합된 결과를 보여줍니다. 코드 및 데이터에서 알 수 있듯이, 두개의 테스트를 사용한 결과 했는데 TestFunction 의 코드 검사는 100% 가 되었습니다.

'Visual Studio > Visual Studio 2008' 카테고리의 다른 글

Visual Studio 단축키  (0) 2011.11.17
Deploying Visual Studio Add In  (0) 2009.12.29
VS2008 IDE 커서  (0) 2009.03.23
VS2008 SP1 Shell fix available  (0) 2009.03.23
Visual Studio Add-In 비 활성화 시키기  (0) 2009.03.13

관련글 더보기