===== 개요 ===== Test Coverage는 개발자가 작성한 테스트 코드가 대상 소스 코드에 대해 테스트하는 코드를 작성했는지 그 커버하는 정도를 백분률과 코드 라인을 통해 알려주는 것을 말하며, Test Coverage를 분석하고 그 결과를 리포팅하는 것에 대해 설명한다. ===== 설명 ===== Test Coverage는 개발자가 작성한 코드에 대해 상응하는 테스트를 갖는 소스 코드의 비율을 평가하는 작업으로 다음과 같은 개념을 이해하는 것이 좋다. * **instrument** : 테스트 대상 코드를 실행하거나 JUnit Test를 수행하거나(EMMA), 컴파일을 수행하는(Cobertura) 동안 대상 코드에 테스트 코드 정보를 삽입하는 작업을 일컫는다. * **Test Coverage report** : Test Coverage 결과 리포팅 (XML, HTML 등)\\ 기본적으로 XML과 HTML 형식을 지원하며, EMMA는 TXT, XML, HTML 형식을 모두 지원한다. ==== Test Coverage Tool ==== Test Coverage를 수행하는 데는 다양한 툴이 있고, 각각 평가하는 나름의 로직을 갖고 있으며, 리포팅 또한 그 로직에 상응하는 형태라고 볼 수 있다. 따라서, 필요에 맞는 도구를 잘 선택하면 된다.\\ \\ 본 개발환경에서는 라이선스를 고려하여 EMMA와 EclEmma를 선택했다.\\ 그러나, 코드를 수정하지 않고 툴로서 사용하기만 한다면 Cobertura를 사용하는 것도 괜찮다. ^ 구분 ^ 툴 이름 | | 상용 | [[http://www.cenqua.com/clover|Clover]] | | 오픈소스 | [[http://cobertura.sourceforge.net|Cobertura]], [[http://emma.sourceforge.net/|EMMA]]| | Eclipse Plug-in | [[http://www.eclemma.org/|EclEmma]], [[http://coverlipse.sourceforge.net/|Coverlipse]]| === Cobertura 특징 === 본 개발환경에서 채택은 하지 않았지만, 고려대상 중 하나였던 Cobertura의 특징은 다음과 같다. * Home : http://cobertura.sourceforge.net/ * 라이선스 : Apache Software License (Cobertura ant task), GPL 2.0 * 테스트 코드가 액세스한 코드의 백분율을 계산하는 무료 자바 툴로서 jcoverage에 기반을 둔다. * ant나 Maven, command line에서 실행 가능하다. * 대상 코드를 컴파일한 뒤 자바 바이트코드로 instrument한다. * HTML, XML 형태의 보고서를 생성한다. * class, package, all classes에 대해 라인과 분기에 대한 백분율을 알려준다. * class, package, all classes에 대해 [[http://www.arisa.se/compendium/node96.html|McCabe's cyclomatic 코드 복잡도]]를 알려준다. * HTML 결과에서 다음 항목에 대해 정렬(ascending, decending) 제공 : 클래스명, 커버된 라인 백분율, 커버된 분기 백분율 * 보고서를 UTF-8로 설정하여 저장한다 ==== Test Coverage - EMMA ==== EMMA는 오픈소스로서 라이선스는 CPL (Common Public License) v1.0 이다.\\ Ant와 Maven에서 실행 가능하며, Command-line에서도 사용 가능하다. === EMMA 특징 === * Home page : [[http://emma.sourceforge.net/]] * Coverage instrument를 클래스 로드 되기 전이나 로드 중에 할 수 있다. * 지원 Coverage 타입은 class, method, line, [[http://emma.sourceforge.net/faq.html#q.blockcoverage|basic block]]((EMMA의 coverage 기본 단위를 말하며, 일련의 바이트코드 명령이라고 볼 수 있다.))이다. * Coverage 통계는 method, class, package, all classes 별로 제공한다. * Output Report type : Text, HTML, XML. HTML은 소스코드와의 링크를 제공한다. * HTML 리포트에서 Coverage 항목에 대해 하이라이트 기능을 제공한다. * 개별 .class 파일이나 전체 .jar 파일을 instrument할 수 있음 * 매우 빠르다. 메모리도 자바 클래스 당 수백 바이트 정도 * 이클립스에서 EclEmma라는 Plugin을 통해 사용할 수 있다. === EMMA를 이용한 Test Coverage 프로세스 === * TestCase 작성 * EclEmma로 이클립스에서 Test Coverage 평가 * 빌드 Script를 작성하여 Test Coverage 자동 수행 * 리포트 생성 === EMMA Test Coverage HTML 리포트 === * 생성 디렉토리 : Ant에서는 지정하는 곳에, Maven에서는 디폴트로 target/site/emma/index.html, coverage.xml * Summary : class, method, block, line 별로 백분률로 표시함. [[#EMMA HTML 리포트 샘플]] 참조 \\ ===== 환경설정 ===== * EclEmma Eclipse Plugin 설치 * Ant, Maven Eclipse Plugin 설치 ===== 사용법 ===== ==== EclEmma 사용법 ==== 자세한 내용은 [[http://www.eclemma.org/userdoc/index.html|EclEmma Home]]을 참조하기 바란다. - EclEmma 설치 : Help > Software Updates...에서 http://update.eclemma.org/ 추가 후 [Install...] 클릭 - Test Coverage 실행 : * 툴바 이용 : EclEmma를 설치하면 툴바에 다음과 같은 아이콘이 생기고, **Coverage As** 나 **Coverage Configuration** 메뉴를 통해 실행할 수 있다. \\ {{:egovframework:dev:tst:eclemma_launchtoolbar.gif|}} * Context Menu 이용 : 프로젝트나 테스트 코드를 선택하고 오른쪽 버튼을 클릭하여 Context Menu에서 **Coverage As > JUnit Test** 를 통해 수행할 수 있다.\\ \\ - Coverage View 확인 : JUnit Test를 수행하면서 Test Coverage instrument 작업이 끝나면 Coverage View에 결과가 나타나며, 해당 항목을 더블클릭하면 해당 소스가 에디터 View를 통해 열린다. \\ {{:egovframework:dev:tst:eclemma.gif|}} ==== Maven으로 EMMA 실행하기 ==== - pom.xml 작성 : [[#Maven을 이용한 EMMA 설정 샘플]] 참조 - Maven 실행 : [[이클립스에서 Maven 실행하기]] 참조\\ * instrument : goal - **emma:instrument** * instrument + HTML Report : goal - **emma:emma** - 리포트 확인 : **target/site/emma** 디렉토리 밑에서 coverage.xml 및 index.html (emma:emma) 리포트를 확인할 수 있다 ==== Ant로 EMMA 실행하기 ==== Ant에서 EMMA를 쓰는 일은 조금 까다롭다. 따라서, Ant 수행에 대해서는 [[http://emma.sourceforge.net/userguide_single/userguide.html#introANT|EMMA 사이트]]와 [[http://wiki.metawerx.net/wiki/UsingEMMAWithANTForJUnitTestCoverageReporting|Using EMMA With ANT For JUnit Test Coverage Reporting]]를 참조하기 바란다.\\ - build.xml 작성 : [[#Ant를 이용한 EMMA 설정 샘플]] 참조 - Ant의 target 실행 : [[이클립스에서 Ant 실행하기]]를 참조하여 설정된 target을 실행한다. - 리포트 확인 : 지정된 위치 즉, **outfile**에 설정한 리포트를 확인할 수 있다 ===== 샘플 ===== ==== Maven을 이용한 EMMA 설정 샘플 ==== 전체 설정 내용은 [[EMMA 실행을 위한 pom.xml 설정 샘플]]을 참조하기 바란다. - instrument : Test Coverage 분석만 하고 XML 결과까지만 남길 경우 \\ org.apache.maven.plugins maven-surefire-plugin false always xml org.codehaus.mojo emma-maven-plugin 1.0-alpha-1 - Test Coverage HTML 리포트 생성 \\ org.codehaus.mojo emma-maven-plugin true ==== Ant를 이용한 EMMA 설정 샘플 ==== 전체 설정 내용은 [[EMMA 실행을 위한 build.xml 설정 샘플]]을 참조하기 바란다. - instrument : Test Coverage 분석만 하고 XML 결과까지만 남길 경우 \\ . . . 중략 . . . - Test Coverage 리포트 생성 \\ ==== EMMA HTML 리포트 샘플 ==== * [[EMMA에서 생성한 HTML 리포트 샘플|EMMA에서 생성한 Test Coverage HTML 리포트의 샘플]] ===== 참고자료 ===== * EMMA Home : http://emma.sourceforge.net/ * EclEmma Home : http://www.eclemma.org/ * Maven EMMA plugin : http://emma.sourceforge.net/maven-emma-plugin/ * [[http://wiki.metawerx.net/wiki/UsingEMMAWithANTForJUnitTestCoverageReporting|Using EMMA With ANT For JUnit Test Coverage Reporting]]