1. 도구개요 소개 주요기능 는 Java 프로그램을위한 Code coverage 도구 Ecl 는 의기능을 Eclipse 기반으로구현한 Plug-in Java 의 Code coverage 를 Class, Method, Line, Block 단위로측정하고보고함 카테고리 세부카테고리커버리지검증 커버리지 Code Coverage 도구난이도중 라이선스형태 / 비용 : Common Public License v1.0 / 무료 EclEmma : Eclipse Public License v1.0 / 무료 사전설치도구 : JVM 1.2 이상 (JDK 에포함 ) EclEmma : JDK 1.5 이상, Eclipse 3.5 이상 운영체제 Windows, Linux, Mac OS, UNIX 도구버전 : 2.0.5312(2012. 10) EclEmma : 2.2.0 (2012.10) 특징 개별.class 파일이나.jar 파일전체, 또는그일부를선택적으로검사할수있음 정적분석이나동적분석이가능하고 Overhead 가매우낮음 결과를 Text, HTML, XML 등의형태의보고서로출력해줌 적용회사 / 프로젝트 - 모든 JAVA 기반프로젝트 관련도구 EclEmma, Eclipse, JUnit 제작사 : Sourceforge EclEmma : Mountatinminds GmbH & Co. Kg, Munich 공식홈페이지 : http://emma.sourceforge.net EclEmma : http://www.eclemma.org 1
2. 기능요약 는 Java 의 Coverage 를측정하기위한도구 EclEmma 는 의기능을 Eclipse 에서사용할수있도록구현된 Plug-in 주요기능 지원내용 Code coverage 분석 지원 단위별 Coverage 분석 지원 Source highlighting 기능 지원 Export 기능 지원 Import 기능 지원 Coverage Overview 기능 지원 1
3. 도구실행환경 JVM 기반및 Eclipse의 Plug-in으로작동 다양한 OS를지원 Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32,64-bit 모두지원 Mac OS X : 32, 64-bit 지원 JDK 필요 : ( : JVM 1.2 이상 EclEmma : JVM 1.5 이상 ) JDK 에포함 EclEmma Eclipse JDK (Java development kit) Windows / Linux / Mac OS / UNIX 1
4. 도구설치방법 세부목차 4.1 설치하기 4.2 JDK 설치하기 4.3 Eclipse 설치하기 4.4 JUnit 설치하기 4.5 EclEmma 설치하기 1
4. 도구설치방법 4.1 설치하기 (1/3) 다음의사이트로이동 http://sourceforge.net/projects/emma/files/emma-release 현재최신 version인 2.0.5312 폴더를선택하면다음파일들이있음 emma-2.0.5312.zip // 설치 image, binaries, documentation emma-2.0.5312-src.zip //source code와 build instructions emma-2.0.5312-lib.zip //.jar binaries ( 이미설치된파일들을수정할경우 ) 2
4. 도구설치방법 4.1 설치하기 (2/3) emma-2.05312.zip 을다운로드하여압축을풀면 README.txt 파일과함께 docs, examples, lib 등의폴더가생성되고 lib 폴더안에 emma.jar 가생성됨 3
4. 도구설치방법 4.1 설치하기 (3/3) examples 폴더의예제를수행하려면사전에 JDK 와 ant 가설치되어있어야함 JDK 설치 : 다음장참조 ant 설치 : http://ant.apache.org/bindownload.cgi 에서 apache-ant-1.8.4-bin.zip 를다운로드하여압축을풀고, 그 bin drectory 를홖경변수 Path 에추가 예제수행은다음명령어를사용 ant buildfile build-onthefly.xml emma all 실행결과가 coverage 폴더에생성 4
4. 도구설치방법 4.2 JDK 설치하기 (1/2) 다음의사이트에서 JDK 다운 http://www.oracle.com/technetwork/java/javase/downloads/index.htm JDK Download 를클릭하여자신의운영체제에맞는버전을다운받고설치 5
4. 도구설치방법 4.2 JDK 설치하기 (2/2) 다음과같이홖경변수를등록한다 시스템속성 고급 홖경변수 시스템변수 Path 항목의맨뒤에 JDK 가설치된폴더의 bin 폴더를추가함 본예제에서는 C:\Program Files\Java\jdk1.7.0_09\bin 위치추가 6
4. 도구설치방법 4.3 Eclipse 설치하기 (1/2) 다음의사이트에서 Eclipse 다운 http://www.eclipse.org/downloads/ 자신의운영체제에맞는버전을다운받고압축해제 7
4. 도구설치방법 4.3 Eclipse 설치하기 (2/2) Eclipse 를실행한첫화면 8
4. 도구설치방법 4.4 JUnit 설치하기 JUnit plug-in 은 Eclipse 에기본적으로포함되어있음 Window Preference 를통해해당 Eclipse 에서작업하는모든프로젝트에 JUnit library 를포함시킬수있음 9
4. 도구설치방법 4.5 EclEmma 설치하기 (1/7) Eclipse 의 Install New Software 를선택하여설치를시작 10
4. 도구설치방법 4.5 EclEmma 설치하기 (2/7) Add 버튼을눌러사이트입력팝업을띄움 name과 location에해당사이트를지칭할명칭과주소를적고 OK 버튼을선택 name: location: http://update.eclemma.org/ 11
4. 도구설치방법 4.5 EclEmma 설치하기 (3/7) 추가한 EclEmma 사이트선택 해당 Update Site 가가진 Plug-in 리스트를보여줌. 만약해당 site 가여러버전을가지고있다면버전리스트가출력됨. EclEmma 를선택하고 Next 버튼선택 12
4. 도구설치방법 4.5 EclEmma 설치하기 (4/7) 사용자가선택한설치할요소를확인후 Next 버튼선택 13
4. 도구설치방법 4.5 EclEmma 설치하기 (5/7) 약관에동의하고 Finish 를선택하여설치시작 14
4. 도구설치방법 4.5 EclEmma 설치하기 (6/7) EclEmma 설치요소를다운로드한후, 설치가완료되면 Eclipse 를다시실행한다. 15
4. 도구설치방법 4.5 EclEmma 설치하기 (7/7) 설치가완료되면단축아이콘에다음과같은 Coverage 아이콘이생김 16
5. 도구기능소개 세부목차 5.1 Code coverage 개요 5.2 개요 5.3 EclEmma 개요 5.4 Launching 5.5 Analysis 5.6 Export 5.7 Import 1
5. 도구기능소개 5.1 Code coverage 개요 (1/3) Code coverage 단위테스트나통합테스트와같은일련의테스트작업을수행했을때, 이테스트가전체 code 중몇 % 를테스트했는지판단이필요함 예를들어, 20 가지의기능을가지고있는프로그램이있을때, 몇가지기능에대해서테스트를했는가와같이, 수행한테스트가얼마나포함했는지를나타내는것을 Test coverage 라고함 좀더작은범위의테스트인경우에는개개의 Class 나 Method 을테스트하기때문에, 테스트에대한포함범위를각각의 Class 나 Method 또는각라인을척도로삼을수있는데, 테스트전체 Source code 중얼마나포함했는지를나타내는것을 Code coverage 라고함 2
5. 도구기능소개 5.1 Code Coverage 개요 (2/3) Code Corverage 도구의원리 Code Coverage 도구의주요기능은실행중에해당 Code 라인이수행되었는지를검증하는것임. 이를위해서 Coverage 도구는 Class 의각실행라인에 Code coverage 도구로기록하는 Logic 을추가하는것이기본원리임. 기존의 Class 에 Coverage 분석을위한 Code 를추가하는작업을 Instrument 라고함 public class HelloWorld(){ public void HelloKorea(){ System.out,println( Hello Korea ); } public void HelloSeoul(){ System.out.println( Hello Seoul ); } } Coverage 도구 public class HelloWorld(){ public void HelloKorea(){ coveragetools.log( class 및라인관련정보 1 ); System.out,println( Hello Korea ); coveragetools.log( class 및라인관련정보 2 ); } public void HelloSeoul(){ coveragetools.log( class 및라인관련정보 3 ); System.out.println( Hello Seoul ); coveragetools.log( class 및라인관련정보 4 ); } } 3
5. 도구기능소개 5.1 Code Coverage 개요 (3/3) Instrument 정적기법 : 프로그램이수행되기이전에 Source code 나 Compile 이완료되어있는 Class 파일을 Instrument 하여 Instrumented class 들을만든후, 그것을수행하는방식 동적기법 : 원본 Class 를가지고프로그램을수행하여 Runtime 시에 Class 가 Loading 되는순갂에 Class 에 Instrumentation 을하는방식 동적기법은 Runtime 에서 Code instrumentation 을하는부하가발생하게됨 는동적, 정적 Instrumentation 을모두지원하는데, 동적분석의경우에는 5~20% 정도의 Overhead 가있음 유사한 Coverage 도구인 Cobertura 는정적 Instrumentation 만지원함 4
5. 도구기능소개 5.2 개요 는 Java 의 Coverage 를측정하기위한도구. 이도구는실제로테스트된 Source Code 를확인하는데필수적임 의디자인목표 성능이훌륭한 Coverage 분석데이터를제공하지만, 이를위한 Build 시갂이나실행시갂의추가적인부하를최소화 동시에여러독립적인 Module 별개발을진행하는팀단위개발홖경에적합 빠른개발속도로소규모 Java 프로그램의테스트가가능할뿐만아니라, 대규모의 SW 를테스트하는것또한가능 는 JVM Profiler Interface(JVMPI) 방식을기본으로함 의 Coverage 측정의기본단위는 Basic block 임. Basic Block 은 Branch out 이나 Branch in 이없이연속적으로수행되는 Byte code 의집합임 는전체프로그램이나 Package, Class 또는 Member 에대하여 Class, Method, Line 또는 Basic block 단위로 Coverage 를측정할수있음 5
5. 도구기능소개 5.3 EClEmma 개요 EclEmma 는 Eclipse 기반으로동작하는 Java code coverage 도구 Eclipse 통합개발홖경에서 Program 의실행, Debugging, Unit testing 등을수행하면자동으로그결과에대한 Code coverage 가측정되어편리함 EclEmma 는 의기본구조에기반을두며, 가추구하고자하는목표를지향 빠른개발 / 테스트과정 : JUnit 같은단위테스트도구를이용한결과에대하여 Code coverage 분석을할수있어서편리 효과적인 Coverage 분석 : Coverage 결과를기반으로하여 Editor 의 Code 에라인별로컬러를다르게표시해줌. 사용자는이러한컬러를통해해당 Code 가 Coverage 에포함되는지확인할수있음 Non-invasive : EclEmma 는 code 의수정이나추가적인과정없이 Coverage 분석이가능함 6
5. 도구기능소개 5.4 Launching (1/4) Eclipse 의 Run/Debug 처럼실행가능한 Coverage launch mode 기능을가지고있음 이러한 Launch 는상단의단축아이콘과 Package explore view 에서실행가능함 Coverage 정보를수집하기위해사용자의프로그램이나 Unit 테스트를갂단하기실행. EclEmma 가지원하는실행타입은다음과같음 Local Java application Eclipse/RCP application Equinox OSGi framework JUnit test TestNG test JUnit pulg-in test JUnit RAP test SWTBot test 7
5. 도구기능소개 5.4 Launching (2/4) Coverage Configuration Run Coverage... 를선택하면 Launch Configuration 과유사한홖경설정기능을제공 1. Java Application 이나 JUnit (test class 가준비되었다면 ) 에엔트리를추가 ❶ ❷ 2. Browse 를선택하여 Project explore 가 가지고있는프로젝트리스트중실행할 프로젝트를선택 3. OK 버튼을눌러선택을완료 ❸ 8
5. 도구기능소개 5.4 Launching (3/4) Launch configuration 1. Browse 를선택하여프로젝트가가진시 작가능한 Class 를선택 2. OK 버튼을눌러선택을완료 ❶ ❷ 9
5. 도구기능소개 5.4 Launching (4/4) Launch configuration Coverage Tab 에서 Coverage 측정의대상을 Source 폴더단위로선택할수있음. 이때 Source 폴더단위는 Binary class 가모여있는하나의폴더를의미 Eclipse 는 Package 의구성에따라 Binary 가위치하는폴더를지정하는것이기본 1. Configuration 의두번째탭인 Coverage 를선택 ❷ ❶ 2. 해당리스트에서 Coverage 테스트를원 하는 Directory 를선택 3. Coverage 버튼을선택하여사용자가설 정한환경으로해당프로젝트에대한 Coverage 테스트를진행 ❸ 10
5. 도구기능소개 5.5 Analysis (1/2) 사용자가프로그램이나 Unit 테스트를대상으로 coverage 실행을마치고나면 EclEmma 는자동으로결과를보여주는 View 를실행함 실행하면 Coverage View 가자동으로실행되며, Coverage 결과를출력함 Coverage Overview 실행된프로그램은총 1120 의 instrument 를가지고있고그중테스트가된것은 481 개, 테스트되지않은부분은 639 개라는것을보여줌 EclEmma 는전체프로젝트의 Coverage 결과를보여줄뿐아니라, 각파일의 Coverage 결과도제공 11
5. 도구기능소개 5.5 Analysis (2/2) Source highlighting 각파일의 Coverage 결과를자세히보기위해서해당 Source 파일을선택하면다음그림과같이 3 가지색으로 Code 가구분되어있는것을확인할수있음 빨갂색 : 전혀테스트안됨 노랑색 : 일부만테스트됨 초록색 : 테스트완료됨 12
5. 도구기능소개 5.6 Export (1/4) EclEmma 는 Coverage 테스트결과를외부에서사용할수있도록 Export 제공 File Export... Other Coverage Report 13
5. 도구기능소개 5.6 Export (2/4) EclEmma 는 Coverage 결과를 HTML, XML, Test, 또는 session file 형식으로 Export 할수있음 14
5. 도구기능소개 5.6 Export (3/4) HTML 형식으로 Export 된 Coverage 결과는프로젝트전체에대한 HTML 문서와각파일에대한다수 HTML 문서로구성됨 파일에대한결과문서는 EclEmma 에서볼수있었던 Code 별테스트결과 ( 라인별컬러 ) 도포함됨 15
5. 도구기능소개 5.6 Export (4/4) EclEmma 는 Coverage 결과를 Session File 로 Export 할수있음 Session File 로 Export 한결과에대해서는 EclEmma 는 Import 를진행할수있음 (html, xml 은불가능 ) 16
5. 도구기능소개 5.7 Import (1/2) EclEmma 는외부에서취합된 Coverage 테스트결과를볼수있도록 Import 기능을제공 Session File 로 Export 된 Coverage 결과에대해서만 Import 가가능 17
5. 도구기능소개 5.7 Import (2/2) Browse 버튼을선택하여 Improt 할 Session File 을선택 선택한 es 파일이가지고있는 Coverage 결과리스트를볼수있음. 사용자는이리스트에서원하는부분의 Coverage 결과를선택하는것이가능함 ❶ ❷ 18
6. 도구활용예제 세부목차 6.1 예제설명 6.2 프로그램구현 6.3 Coverage Test 1
6. 도구활용예제 6.1 예제설명 1~50 까지의합을구함 1~50 까지의소수의합을구함 3*3 형식의구구단을출력 해당프로그램을 EclEmma 로 Coverage 테스트하여결과를살펴봄 2
6. 도구활용예제 6.2 프로그램구현 (1/3) 새로운 Java Project 를생성함 Project name 은 Cal 로함 3
6. 도구활용예제 6.2 프로그램구현 (2/3) 3 가지기능을담당할 Cal class 를생성 public class Cal { public int plus(int in_data){ int re_value=0; for(int i=1 ; i <= in_data ; i++) { re_value = re_value + i; } return re_value; } public int sosuplus(int in_data) { int re_value=0; int flag =0; int i, j; for(i=2 ; i < in_data ; i++) { for(j=2 ; j < 10 ; j++) { if((i!= j)&&(i%j == 0)) flag++; } if(flag == 0) re_value = re_value + i; flag = 0; } return re_value; } public void gugudanprint() { int i, j, k; for(i=1 ; i <= 9 ; i=i+3) { for(j=1 ; j <= 9 ; j++) { for(k=0 ; k < 3 ; k++) { System.out.print(i+k+"*"+j+"="+((i+k)*j)+" "); } System.out.println(""); } System.out.println(""); } } } 4
6. 도구활용예제 6.2 프로그램구현 (3/3) 생성한 Cal class 를실행해줄 main 을포함한 Class 를생성 class Work1 { public static void main(string args[]) { Cal cal = new Cal(); } } System.out.println("1 ~ 50 까지의합 : " + cal.plus(50)); System.out.println("1 ~ 50 까지의소수의합 : " + cal.sosuplus(50)); cal.gugudanprint(); // 구구단 3*3 으로출력 5
6. 도구활용예제 6.3 Coverage Test (1/2) Coverage 테스트를실행함 6
6. 도구활용예제 6.3 Coverage Test (2/2) 프로그램실행결과와 Coverage 테스트결과 7
7. FAQ 질문 1) 와 EclEmma 는어떻게다른가요? 답변 1 : EclEmma 는 프로젝트를 Eclipse 에서사용할수있도록 Plug-in 으로만든도구입니다. 만약사용자가 Eclipse 를사용하지않고 를사용하고싶다면, 따로 도구를설치하여 Java code 를테스트하면됩니다. 질문 2) Code coverage 는어느수준까지가적절한가요? 답변 2 : 높을수록좋겠지만 100% 를달성하는것은현실적으로어렵고, 비용대비효과측면으로볼때에바람직하지않습니다. 실용적인측면에서 85~90% 정도가좋겠습니다. 질문 3) 는 agile 개발방법을지원합니까? 답변 3 : 네. 는개발자들이 Coding 과정에서스스로 Test 를수행하고 Code coverage 를측정하여수행한 Test 의효과를확인할수있도록도와줍니다. TDD 를지향하며개발과검증을빠르고점짂적으로짂행하는것을지원합니다. 1
8. 도구평가 활용성 대부분의 Java 프로젝트에서 JUnit 과결합하여쉬운사용가능 범용성 작은프로젝트부터, 큰프로젝트까지가리지않고사용가능 호환성 JVM 기반으로써, 다양한플랫폼에서사용가능 성능 빠른작동성능, 적은 Overhead 기타 Open source 프로젝트로써, 비용이들지않음 Code Highlighting 기능으로구분하기가편리 도구평가의견 프로젝트의규모에관계없이효과적으로사용될수있음 쉽게사용가능하고, Overhead 가작아 Software 의품질을향상시키는데효과적 EclEmma 는 Eclipse 의 Plug-in으로 JUnit 과연동하면서 와유사한기능을편리하게제공 1
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 Code Coverage 테스트를수행했을때실제로실행된 Code 의비율을측정하여그테스트의효과를평가하는 Software Engineering 기법. Class 나 Method 또는 Line 단위의비율로측정 JUnit Java code 를단위테스트하기위한도구. Eclipse 의 Plug-in 으로동작하며, 최근 Eclipse 버전에는기본탑재 1