1. 도구개요 2. 기능요약 3. 도구실행환경 4. 도구설치방법 5. 도구기능소개 6. 도구활용예제 7. FAQ 8. 도구평가 9. 용어집
1. 도구개요 소개 주요기능.Class 파일을바탕으로코드의커버리지를측정하는라이브러리 커버리지측정및보고 카테고리 세부카테고리정적분석 커버리지 Code Coverage Management 도구난이도상 라이선스형태 / 비용 GNU General Public License (GPL v2) / 무료사전설치도구 JDK 운영체제 Windows, Linux, Mac OS, UNIX 도구버전 2.0.3 (2013.12) 특징.class 파일을바이트코드레벨에서코드변조 (instrument) 커버리지를측정하여 XML, HTML로보고 - 작성된코드의커버리지보고 - 커버리지에대한코드상의보고내용을라인 (Line) 바탕으로표시 적용회사 / 프로젝트 - 관련도구 제작사 공식홈페이지 Ant, Hudson, Git, IC#Code Team http://cobertura.sourceforge.net/ 2
2. 기능요약.Class 파일을바탕으로코드의커버리지를측정하는라이브러리 주요기능커버리지분석범위코드추적보고서작성 지원내용.Class파일지원지원 (XML, HTML) 타도구와의연계지원 (Hudson, Ant, Maven 등 ) 3
3. 도구실행환경 JDK(Java development kit) 상에서설치및구현이가능 다양한 OS 를지원 Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32, 64-bit 지원 Mac OS X : 32, 64-bit 지원 UNIX : 32, 64-bit 지원 자바기반프로그램 : JDK(Java development kit) 필요 사용방법에따라 WAS, Ant( 본매뉴얼 ), Hudson 등이사용될수있음 ( 라이브러리제공형태 ) WAS (Apache 등 ) Ant, Maven JDK (Java development kit) Hudson 등 Windows / Linux / Mac OS / UNIX 4
4. 도구설치방법 세부목차 4.1 다운받기 4.2 환경설정 4.3 파일구조 5
4. 도구설치방법 4.1 다운받기 (1/2) 다운받기 : http://cobertura.github.io/cobertura/ 접속 Download 클릭 6
4. 도구설치방법 4.1 다운받기 (2/2) 다운받기 : Sourceforge 사이트에서받은후압축해제 5 초후자동으로다운 7
4. 도구설치방법 4.2 환경설정 환경변수설정 변수이름 : COBERTURA_HOME / 변수값 : 설치폴더 8
4. 도구설치방법 4.3 파일구조 파일구조 Command Line 도구 (4 개의 bat 파일 ), 및라이브러리폴더 9
4. 도구설치방법 4.4 파일명변경 cobertura-#.#.#.jar 파일명변경 corbertura 의 4 가지 batch 파일내에 cobertura-#.#.#.jar 에대한클래스명을 cobertura.jar 로사용하고있어파일명변경필요 10
5. 도구기능소개 세부목차 5.1 의특징 5.2 Command Line 명령어 5.3 with Ant 5.4 Ant Build 수행 5.5 Ant Build 수행결과 5.6 주요추가기능 (2.0.3) 11
5. 도구기능소개 5.1 의특징 (1/2) 코드의커버리지를분석.class 파일을바이트코드레벨에서코드변조 (instrument) 커버리지를측정하여 XML, HTML로보고 작성된코드의커버리지보고 커버리지에대한코드상의보고내용을라인 (Line) 바탕으로표시 12
5. 도구기능소개 5.1 의특징 (2/2) 커버리지분석의단계 class 파일을바이트코드레벨에서코드변조 (instrument) 코드변조를통해커버리지측정을위한실행코드를추가 다양한방법으로테스트를수행 클래스패스에 cobertura 관련된라이브러리를추가 변조된.class 파일이참조되도록클래스패스를변경 변조된클래스파일실행시해당실행정보를메모리에배포및해제되는순간에종료 특정파일 (cobertura.ser) 에커버리지정보를저장 특정파일에위치를임의로메모리에알려주는명령을추가하는작업수행 커버리지레포트를작성한다. (html, xml 형태등 ) 개발자정보, 테스트결과등과함께별도레포트를제공해주는기능수행 13
5. 도구기능소개 5.2 Command Line 명령어 (1/3) Instrumenting : cobertura-instrument.bat Build 시발생하는.Class 파일코드변조를통해커버리지측정을위한실행코드를추가 cobertura-instrument [--basedir dir] [--datafile file] [--destination dir] [--ignore regex] classes [...] --basedir : Instrument 할클래스를포함하고있는폴더를지정 --datafile : Instrument 후클래스파일이측정데이터위치를선정 ( 기본 : 현재위치 cobertura.ser) --destination : Instrument 된파일을저장하는위치 --ignore : 소스코드의특정행을필터링할수있는정규표현식을지정 Instrumenting 예시 cobertura-instrument.bat --destination C:\MyProject\build\instrumented C:\MyProject\build\classes Running Tests : Java -cp 클래스경로를변경, 클래스패스변경하고수행하는것으로자동진행 변경예시 java -cp C:\cobertura\lib\cobertura.jar; C:\MyProject\build\instrumented;C:\MyProject\build\classes;C:\MyProject\build\test-classes - Dnet.sourceforge.cobertura.datafile=C:\MyProject\build\cobertura.ser ASimpleTestCase 14
5. 도구기능소개 5.2 Command Line 명령어 (2/3) Reporting : cobertura-report.bat Instrument 된클래스를바탕으로작성된 cobertura.ser 파일을바탕으로보고서작성 cobertura-report [--datafile file] [--destination dir] [--format (html xml)] [--encoding encoding] source code directory [...] [--basedir dir file underneath basedir...] --basedir : Instrument 할클래스를포함하고있는폴더를지정 --datafile : classes 에대해 metadata 를포함하는파일의이름을지정 --destination : 결과보고서를저장할경로지정 --format : 보고서의생성형태를지정 (HTML, XML) --encording : 파일에서읽을때인코딩형식을지정 Reporting 예시 cobertura-report.bat --format html --datafile C:\MyProject\build\cobertura.ser --destination C:\MyProject\reports\coverage C:\MyProject\src Merging Datafiles : cobertura-merge.bat 여러개의데이터파일을하나의데이터파일로병합할때사용 cobertura-merge.bat [--datafile file] datafile [...] --datafile : 데이터경로및파일명을지정 Merging 예시 cobertura-merge.bat --datafile C:\MyProject\build\cobertura.ser C:\MyProject\testrundir\server\cobertura.ser C:\MyProject\testrundir\client\cobertura.ser 15
5. 도구기능소개 5.2 Command Line 명령어 (3/3) Checking Coverage : 커버리지체킹 - cobertura-check.bat Instrument 된클래스를바탕으로작성된 cobertura.ser 파일을바탕으로보고서작성 cobertura-check.bat [--datafile file] [--branch 0..100] [--line 0..100] [--totalbranch 0..100] [--totalline 0..100] [--regex regex:branchrate:linerate] --branch : 각클래스에최소허용 branch coverage 비율을지정합니다. (0~100) --datafile : classes 에대해 metadata 를포함하는파일의이름을지정 --line : 각클래스에최소허용 line coverage 비율을지정합니다. (0~100) --packageline : 각클래스에각패키지별최소허용 line coverage 비율을지정합니다. (0~100) --totalbranch : 각클래스에전체프로젝트의허용 branch coverage 비율을지정합니다. (0~100) --totalbranch : 각클래스에전체프로젝트의허용 line coverage 비율을지정합니다. (0~100) Checking 예시 cobertura-check.bat --datafile C:\MyProject\build\cobertura.ser --branch 50 --totalline 70 --regex com.example.rabidsquirrel.*:65:65 16
5. 도구기능소개 5.3 with Ant (1/6) Ant 와 의연계 : build.xml 작성예시 Ant 는모든 Build 자동화및옵션을제공, 사용자작성에따라여러빌드옵션을제공 17
5. 도구기능소개 5.3 with Ant (2/6) Ant 명령어설정 : build.xml Property 명령어선언 : build.xml 내부 property 선언 각 build 옵션에서사용할경로와속성을 Property 에서선언, build.xml 에서설정 18
5. 도구기능소개 5.3 with Ant (3/6) path / taskdef 명령어설정 Class 경로와 Resource 설정 19
5. 도구기능소개 5.3 with Ant (4/6) Target (Ant 수행단위 ) 명령어설정 : main, clean, build, Main( 전부수행 ), clean( 폴더비우기 ), build(build 수행 ) 20
5. 도구기능소개 5.3 with Ant (5/6) Target (Ant 수행단위 ) 명령어설정 instrument, test-build, test test( 일련의과정수행 ), Instrument( 커버리지측정삽입 ), test-build 21
5. 도구기능소개 5.3 with Ant (6/6) Target (Ant 수행단위 ) 명령어설정 test-report, coverage-report, javadoc test-report( 테스트결과보고서작성 ), coverage-report( 커버리지보고서작성 ), javadoc(javadoc 작성 ) 22
5. 도구기능소개 5.4 Ant Build 수행 (1/5) Ant Build 파일읽기 : build.xml 읽기 개미아이콘 ( 혹은마우스우클릭 Add Buildfiles ) 클릭 저장폴더선택 build.xml 선택 23
5. 도구기능소개 5.4 Ant Build 수행 (2/5) Ant Build 수행 : Clean Build Instrument coverage-report Clean : 기존 Build 시에존재하던폴더를모두삭제하고, 새로생성 24
5. 도구기능소개 5.4 Ant Build 수행 (3/5) Ant Build 수행 : Clean Build Instrument coverage-report Build : 기존코드를컴파일 25
5. 도구기능소개 5.4 Ant Build 수행 (4/5) Ant Build 수행 : Clean Build Instrument coverage-report Instrument : 커버리지측정코드를가지는 Class 파일생성및 ser 파일생성 26
5. 도구기능소개 5.4 Ant Build 수행 (5/5) Ant Build 수행 : Clean Build Instrument coverage-report coverage-report : 커버리지보고서생성 27
5. 도구기능소개 5.5 Ant Build 수행결과 (1/4) 생성된파일 : 기존 Instrument 로인해생성된클래스및보고서생성 Index.html 을클릭하여결과보고서확인가능 28
5. 도구기능소개 5.5 Ant Build 수행결과 (2/4) 보고서 : All Packages Coverage Report 전체커버리지상태의 Overview 29
5. 도구기능소개 5.5 Ant Build 수행결과 (3/4) 보고서 : All Packages Coverage Report 기본패키지 (default) 에대한보고서 30
5. 도구기능소개 5.5 Ant Build 수행결과 (4/4) 보고서 : Class Coverage Report 코드기반 Coverage Report 31
5. 도구기능소개 5.6 주요추가기능 (2.0.3) --ignoretrivial 옵션추가 Coverage report 에아래의사항이포함되지않도록지시 Getter methods that simply read a class field; Setter methods that set a class field; Constructors that only set class fields and call a super class constructor. cobertura-report.bat --format html --datafile C:\MyProject\build\cobertura.ser --destination C:\MyProject\reports\coverage - ignoretrivial C:\MyProject\src --ignoremethodannotation 옵션추가 Coverage report 에특정애노테이션이표시된메서드는포함되지않도록지시 cobertura-report.bat --format html --datafile C:\MyProject\build\cobertura.ser --destination C:\MyProject\reports\coverage - ignoremethodannotation @IgnoreThis C:\MyProject\src 32
6. 도구활용예제 세부목차 6.1 예제소개 6.2 예제이슈사항 / 요구사항및방향 6.3 build.xml 작성 6.4 Ant Build 수행 6.5 커버리지측정결과 33
6. 도구활용예제 6.1 예제소개 예제시스템 : 패키지의커버리지측정 커버리지측정하기요구사항 - Sourceforge 에서 Code를받음 - 받은 Code를바탕으로컴파일을실시 - 실시한클래스파일을바탕으로 Instrument 를이용하여변조 - Instrument 코드를바탕으로커버리지측정수행 34
6. 도구활용예제 6.2 예제이슈사항 / 요구사항및방향 커버리지측정하기에고려될수있는이슈 개인적으로측정하는데있어커버리지문제가야기될수있음 패키지커버리지측정에는다수의패키지로구성된코드가필요 소스코드는여러가지라이브러리와코드를포함 의커버리지검증기능을 코드를활용하여다수의패키지와클래스를포함하는복잡한코드의커버리지검증을실시 35
6. 도구활용예제 6.3 build.xml 작성 build.xml 작성 : 도구기능소개에소개한방법과동일하게작성 build.xml 작성 개미아이콘 ( 혹은마우스우클릭 Add Buildfiles ) 클릭 파일읽기 36
6. 도구활용예제 6.4 Ant Build 수행 (1/4) Ant Build 수행 : Clean Build Instrument coverage-report Clean : 기존 Build 시에존재하던폴더를모두삭제하고, 새로생성 37
6. 도구활용예제 6.4 Ant Build 수행 (2/4) Ant Build 수행 : Clean Build Instrument coverage-report Build : 기존코드를컴파일 38
6. 도구활용예제 6.4 Ant Build 수행 (3/4) Ant Build 수행 : Clean Build Instrument coverage-report Instrument : 커버리지측정코드를가지는 Class 파일생성및 ser 파일생성 39
6. 도구활용예제 6.4 Ant Build 수행 (4/4) Ant Build 수행 : Clean Build Instrument coverage-report coverage-report : 커버리지보고서생성 40
6. 도구활용예제 6.5 커버리지측정결과 (1/3) 보고서 : All Packages Coverage Report - Index.html 실행 전체커버리지상태의 Overview 41
6. 도구활용예제 6.5 커버리지측정결과 (2/3) 보고서 : All Packages Coverage Report net.sourceforge.cobertura.ant 패키지에대한보고서 42
6. 도구활용예제 6.5 커버리지측정결과 (3/3) 보고서 : Class Coverage Report net.sourceforge.cobertura.ant 의 CommonMatchingTask Class Coverage Report 43
7. FAQ 질문 1) 는별도의도구로존재하지않나요? 답변 1 : 네. 현재자동화도구및 Ant 에서사용할수있는라이브러리와 Command Line 형태로배포하고있으며, 바로파일을읽어서측정하는형태는제공되고있지않습니다. 질문 2) Coverage 0% 현상이나타납니다. 해결방법은없나요? 답변 2 : 가끔변조되지않은원래의 jar 파일이 classpath 로먼저잡혀있어, 변조되지않는파일을참조하는경우가생깁니다. build.xml 에서 Java vm 에 cobertura.ser 파일을직접알려주는방법이있습니다. 아래와같은내용을추가하세요. <sysproperty key="net.sourceforge.cobertura.datafile" file="${coverage.serfile}" /> <classpath location="${testopia.home}/instrumented" /> <classpath refid="test.classpath" /> 44
8. 도구평가 활용성 라이브러리형태제공으로직접사용하기에는불편한점이있음. 범용성 Maven, Hudson, Ant 등과연계가매우뛰어남 호환성 Java 컴파일및타도구와의연동이뛰어남 성능 복잡하고뛰어난커버리지분석을 Build 와함께빠르게분석 기타 직접 build.xml 을다루어야하기때문에많은기능을가지고있지만, 직접사용하는인터페이스나기능이없어초보자가사용하기에불편함 도구평가의견 는코드변조를통해뛰어나고정확한결과를빠르게출력 는라이브러리와 Command line, Ant등의연계로사용할수있지만, 사용자가직접클래스파일을변조하고처리를하여야하기때문에초보자가사용하기에매우어려운단점을지님 45
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 Code Instrument Code Coverage build.xml 코드변조. 기존에작성된코드를바탕으로특정목적을달성하기위해코드를추가하거나변조하여다른임무를수행토록함. 에서는코드변조를활용하여커버리지측정을수행 소프트웨어의테스트를논할때얼마나테스트가충분한가를나타내는지표중하나. 소프트웨어테스트를진행했을때코드자체가얼마나실행되었냐는것 Ant 라는프로그램의스크립트파일. 유닉스에서 make 라는프로그램의기능과비슷. compile, run, clean 등의작업을스크립트화해서불필요한수작업을줄임 Ant 자바프로그래밍언어에서사용하는자동화된소프트웨어빌드도구 46