원문은 Visual Studio 2010 Tools - To improve code quality 입니다.



Visual Studio 2010 Tools - To improve code quality



VS 2010 Tool을 사용하여 코드의 질을 향상시킬 수 있다. 이때 사용하는 Tool은 다음과 같다.

Unit Testing 
    코드 조각이나 기능들을 테스트하기 위하여 코드 조각을 작성하는 것을 말한다.

Code Coverage
    프로그램 소스내 특정 메소드가 실제 호출되서 사용되고 있는지, 그리고 사용된다면 빈도는 어느정도 인지, 또한 메소드내에 if문과 같은 조건식이 실제로 처리되고 있는지 처리된다면 빈도는 어느정도 인지 정보를 말한다. 음... 어렵네.. 자세한 정보는 다음 링크를 참조.
    cf) Code Coverage

● Test Impact Analysis

위 도구들의 VS 2010 각 에디션 별 지원 현황



데모 프로젝트를 만들어 각각을 테스트 해보기로 한다.

Step 1. Create Class Library

테스트할 클래스 라이브러리를 먼저 생성해 주자.

Class Library Name : MathLibrary
Class Name : CalculateBasic
Method : AddNumbers, SubstrctNumbers, MultiplyNumbers and DivideNumbers as shown below



Step2. Create Unit Test

 소스 코드서 마우스를 가져간 다음 마우스 오른쪽 버튼을 클릭한다.
팝업메뉴에서 "Create Unit Test..." 를 선택한다.




Create Unit Tests 윈도우에서 모든 메소드(생성자는 빼고)를 선택한 후 확인 버튼을 누른다.




New Test Project 윈도우에 생성할 UnitTest 프로젝트 이름을 입력한다.




솔루션 탐색기를 보면 CalculateBasicTest.cs 파일을 가진 MathUnitTest 프로젝트가 생성됨을 확인할 수 있다. CalculateBasicTest.cs 파일을 보면 앞서 CalculateBasic.cs의 메소드를 테스할 메소드가 생성되어 있다. 각각의 메소드에서 Assert.Inconclusive 문장을 제거해 주자.




Step 3. Test Unit Test

Unit Test를 해보자!! 우선 수행하기 전에 CalculateBasicTest.cs에 정의된 각 테스트 메소드를 보자.
AddNumbersTest 메소드를 보면 AddNumbers 메소드로 전달할 매개변수, 예측 결과값, 실제 결과값 변수가 선언되어 있다. 주석문에 TODO 라고 써있는 것 처럼 매개변수와 예측 결과값을 직접 작성해줘야 한다. 초기값으로 0 으로 되어있으니 테스트할 값으로 수정해 주자. 다른 테스트 메소드들도 이와 같은 방법으로 수정해 주자.




메뉴에서 "Test → Debug → All Tests in Solution" 을 선택한다.




하단에 Test Results 윈도우에  테스트 결과가 표시된다. 



예측한 값과 결과 같이 다르면 아래와 같이 실패한 정보를 보여준다. 이밖에도 테스트 메소드에서 예외가 발생하가나 기타 다른 이유등의 실패 시에도 그 결과를 보여준다.




Step 4. Enable Code Coverage and Test Impact Analysis

Code Coverage와 Impact Analysis 테스트를 활성화 시키자. 
메뉴에서 "Test → Edit Test Settings → Local (local.testsettings)



Test Settings 윈도우에서 다음과 같이 선택해 준다.
  1. Data and Diagnostics 선택
  2. 오른쪽 하단의 Data and Diagnostics for selected role: 에서 Code Coverage 와 Test Impact 를 체크
  3. Code Coverage 를 선택한 다음 위쪽에 Configure 를 선택한다.




Code Coverage 를 위해 포함시킬 어셈블리를 체크해 준다. 여기선 두개 다 선택해주었다. 클래스 라이브러리 혼자 독립적으로 실행될 수 없으니 해당 클래스 라이브러리를 테스트할 어셈블리도 포함시켜줘야 한다.




Step 5. Check Code Coverage

테스트를 위해 DivideNumbers 메소드를 다음과 같이 수정한다.



다시 한번 Unit Test 를 진행한 후 Test Results 에서 임의의 테스트에 마우스를 가져간 다음 마우스 오른쪽 버튼을 누른다. 팝업 메뉴에서 Code Coverage Results 를 선택한다.




Code Coverage Results 윈도우에서 결과를 확인할 수 있다.



Unit Test에 의해 코드의 Covered 와 Not Covered 수치를 확인할 수 있다. AddNumbers 를 보면 Covered Block 이 100% 이므로 Unit Test에서 모든 블록이 Covered 됬음을 알 수 있다. DivideNumbers 를 보면 28.57%가 Not Covered 이다. DivideNumbers 항목을 마우스로 선택한 후 마우스 오른쪽 버튼으로 Go to Source Code를 선택하여 코드로 이동한다.

색으로 Covered 와 Not Covered 를 구분지어 놨다.




Step 6. Test Impact Analysis

Impact Analysis 테스트의 목적은 Unit Test에서 임의의 코드의 Impact(?)를 체크하는 것이다. 
테스트를 위해 SubstractNumbers 와 MultiplyNumbers 메소드를 다음과 같이 변경해준다.




Impact Test View를 활성화 시키자.
"Test → Windows → Test Impact View"




솔루션을 다시 빌드하면 Test Impact View 에 다음과 같이 결과를 출력해 준다.




MultiplyNumbersTest 에서 마우스 오른쪽 버튼을 눌러 "Run All Impacted Tests" 를 선택해 준다.




Impacted tests로 다시 Code Coverage Result를 확인한다.



음...  Unit Test 는 어떤 경우에 사용해야겠구나 생각이 드는데 나머지는 조금 어렵다...
Posted by six605
,