1. 도구개요 소개 은 Java 기반테스팅을위한프레임워크로, 단위모듈 (ex: Method) 이정확히구현되었는지를확인할수있는도구 주요기능 Test case 생성및실행, 오류추적 카테고리 세부카테고리테스트설계및실행 커버리지 도구난이도하 라이선스형태 / 비용 Common Public License 1.0 / 무료사전설치도구자바기반 IDE(Eclipse, NetBeans 등 ), JDK 운영체제 Windows, Linux, Mac OS X, UNIX 도구버전 4.10 (2010. 10) 특징 메소드와같은단위모듈별테스팅을가능케함으로써코드품질을보장 정확한단위테스팅을가능케함으로써통합테스팅시회귀결함 ( 모듈통합에의해발생하는결함 ) 을줄임 다른모듈에의존하지않고, 원하는모듈만임의의순서대로수행할수있다 JFeature( 요구사항개발도구 ) 와통합되어요구사항의정확한구현비율을알수있다 적용회사 / 프로젝트 관련도구 Samsung SDS Anyframe Java EE 프레임워크내단위테스팅도구로사용 JCoverage, CppUnit, Continuous Plugin, httpunit, TestLink, Jdepend 제작사 - 공식홈페이지 http://www.junit.org 1
2. 기능요약 Java 기반테스팅을위한프레임워크로, 단위모듈 (ex: Method) 이정확히구현되었는지를확인할수있는도구 주요기능테스트범위 TDD 환경지원코드지원 Test Suite UI Report Code Trace 지원내용단위테스트지원지원지원지원지원, 실시간추적가능 1
3. 도구실행환경 JAVA 를지원하는 IDE 상에서설치및구현이가능 다양한 OS 를지원 Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32, 64-bit 지원 Mac OS X : 32, 64-bit 지원 UNIX : 32, 64-bit 지원 JDK, 자바기반도구 (IDE 등 ) 이필요 코드및플러그인형태, 도구에포함되어있는형태로제공 Java IDE (Eclipse, NetBeans 등 ) JDK (Java development kit) Windows / Linux / Mac OS / UNIX 1
4. 도구설치방법 세부목차 4.1 다운받기 4.2 설치하기 1
4. 도구설치방법 4.1 다운받기 https://github.com/kentbeck/junit/downloads 에서 을다운받기 대부분의 JAVA 기반 IDE 는 이탑재 ( 미탑재, 업데이트, 베타버전을사용시주로다운 ) 2
4. 도구설치방법 4.2 Jnit 설치하기 압축을풀고, junit4.10 을 Eclipse 가설치된폴더내의 plugins 폴더에복사 본매뉴얼에서는 Eclipse 기준으로설명 3
5. 도구기능소개 세부목차 5.1 주요기능 5.2 예제소개 5.3 Test Case 작성하기 5.4 Test Suite 작성하기 5.5 테스트실행및결과 5.6 테스트실행을위한메뉴소개 1
5. 도구기능소개 5.1 주요기능 테스트하고자하는메소드에대해 Test Case 를맊들수있다 일부의특정테스트메소드를실행하지않거나특정테스트메소드맊실행하고싶을때, 혹은테스트클래스를한데묶어서실행하고싶은경우 Test Suite 를사용 단위테스트를실행하고테스트결과를빠르게확인할수있다 [Test Case 작성화면 ] [Test Shite 작성화면 ] [ 테스트실행및결과화면 ] 2
5. 도구기능소개 5.2 예제소개 의기능을소개하기위해계산기프로젝트예제를사용 계산기는다음과같은기능을가지고있다 sum : 두수의더하기연산을수행 subtract : 두수의빼기연산을수행 multiply : 두수의곱하기연산을수행 divide : 두수의나누기연산을수행 ceil : 지정된숫자를올림하는연산을수행 (ex - 3.2의 ceil연산 : 4) floor : 지정된숫자보다작거나같은가장작은정수를 double형태로반홖하는연산을수행 (ex - 1.2의 floor연산 : 1, 1.7의floor연산 : 1) abs : 지정된숫자의젃대값을계산하고반홖하는연산을수행 3
5. 도구기능소개 5.3 Test Case 작성하기 (1/8) 테스트하고자하는클래스를생성 : Calculator 프로젝트선택 마우스우클릭메뉴의 New Class Class 이름설정 (Calculator) Finish ❶ ❷ ❸ ❹ ❺ 4
5. 도구기능소개 5.3 Test Case 작성하기 (2/8) Calculator 클래스의코드를작성합니다 계산기의주요기능을구현 5
5. 도구기능소개 5.3 Test Case 작성하기 (3/8) 테스트하고자하는클래스에대해 Test Case 를생성 테스트를실행할클래스선택 마우스우클릭메뉴의 New-> Test Case ❶ ❷ ❸ 6
5. 도구기능소개 5.3 Test Case 작성하기 (4/8) Source folder, Package, Name, Superclass 등을그대로두고 NEXT Source folder Test Case 클래스파일이저장되는폴더 Package Java 의패키지를의미 Name Test Case 클래스의이름을의미 ( 기본값 : 테스트대상클래스명 + Test) Superclass Test Case 클래스가상속받을클래스를의미 ( 기본값 : junit.framework.testcase) 7
5. 도구기능소개 5.3 Test Case 작성하기 (5/8) Calculator 클래스내의테스트하고자하는메소드체크 Finish 8
5. 도구기능소개 5.3 Test Case 작성하기 (6/8) 테스트하고자하는메소드의내용을구현 테스트케이스메소드를구현하기 : 오른쪽의 assert 메소드이용 에서가장맋이이용되는단정 (assert) 메소드 assertequals(x, y) : x와y가같으면테스트통과 assertfalse(b) : b가 false이면테스트통과 asserttrue(b) : b가 true이면테스트통과 assertnull(o) : 객체o가 null이면테스트통과 assertnotnull(o) : 객체o가 null이아니면테스트통과 assertsame(ox, oy) : ox와 oy가같은객체를참조하고있으면테스트통과 assertnotsame(ox, oy) : ox와oy가같은객체를참조하고있지않으면통과 assertfail : 테스트를바로실패처리 9
5. 도구기능소개 5.3 Test Case 작성하기 (7/8) 테스트하고자하는메소드의내용을구현 Sum 의테스트예시 Calculator.sum(a,b) 를통해서두수를더한값을반홖» 예시값으로임의의값사용 a:4, b:5» asserttrue 를통해 result 가 9 인지확인 10
5. 도구기능소개 5.3 Test Case 작성하기 (8/8) 테스트하고자하는메소드의내용을구현 젂체메소드에대해서구현 11
5. 도구기능소개 5.4 Test Suite 작성하기 (1/3) 메뉴바의 File New Other 선택 TestSuite Next Test 클래스를한데묶어서테스트 ( 본예시 ), 특정메소드맊실행하거나하지않을때사용 12
5. 도구기능소개 5.4 Test Suite 작성하기 (2/3) 테스트할클래스를선택 Finish 13
5. 도구기능소개 5.4 Test Suite 작성하기 (3/3) Test Suite 작성결과 14
5. 도구기능소개 5.5 테스트실행및결과 (1/2) 테스트의실행 : Test Case 선택 RUN Run As Test Test 실행화면 : 모든단위테스트에성공 ( 녹색막대 ), 실패 ( 붉은색막대 ) 표시 [Test Case 작성화면 ] [ Test 실행화면 ] [ 실행과정 ] 15
5. 도구기능소개 5.5 테스트실행및결과 (2/2) 테스트실행화면 테스트메소드옆에성공한테스트는 v 표, 실패한테스트의목록은 x 표로표시 상단메뉴 Runs : 실행된테스트의개수 Errors : 예외상황이발생한테스트의개수 Failures: 실패한테스트의개수 상단막대 빨간막대 : 테스트실패 초록막대 : 테스트성공 Failure Trace 실패부분의추적정보를보임 실패한테스트의메소드및위치를확인 실패메시지더블클릭 : 소스코드위치로이동 16
5. 도구기능소개 5.6 테스트실행을위한메뉴소개 Tool bar 기능소개 항목기능 Nest Failed Test Previous Failed Test Show Failures Only Scroll rock Return Test Return Test (Failures First) Test Run History Stop Test Run 테스트메소드목록에서실패한테스트메소드목록간에하위이동을수행테스트메소드목록에서실패한테스트메소드목록간에싱위이동을수행실패항목맊보임스크롤바를고정테스트를다시실행테스트를다시실행테스트실행히스토리를보여줌 Test실행을멈춥 17
6. 도구활용예제 세부목차 6.1 예제소개 6.2 프로젝트생성 6.3 테스트케이스생성 6.4 테스트수행 1
6. 도구활용예제 6.1 예제소개 예제시스템 : 교통싞호등프로그램구현 교통싞호등요구사항 : TDD(Test Driven Development) 을이용한예제 계산기요구사항 : 빨강, 노랑, 초록불을가지고있는교통싞호등프로그램을개발한다 신호등의처음상태는빨간불 신호등의상태변화는빨간불, 빨간불과노란불동시에, 초록불, 노란불, 다시빨간불순 TDD 는정의된요구사항을기반으로 Test Case 를먼저만들고, 이를기반으로구현 TDD 는처음부터프로그램을만드는것이아닌, 오류를가정하고오류를해결해나감 점차적으로안정된프로그램을만들어가는방식 2
6. 도구활용예제 6.2 프로젝트생성 (1/2) 요구사항 : 싞호등의처음상태는빨간불 을만족하는코드작성 File New Project Java Project Next ❶ ❷ ❸ 3
6. 도구활용예제 6.2 프로젝트생성 (2/2) Project 만들기 : TrafficLightModel Project name 에 TrafficLightModel Finish 4
6. 도구활용예제 6.3 테스트케이스생성 (1/5) 패키지생성 : TrafficLightmodel src 선택 오른쪽버튼클릭후 Package Package 이름을 Name 으로설정 Finish ❶ ❷ ❸ ❹ 5
6. 도구활용예제 6.3 테스트케이스생성 (2/5) Test Case 생성 : TrafficLightmodelTest Trafficlightmodel 패키지선택 New Test Case Finish ❶ ❸ ❷ ❹ 6
6. 도구활용예제 6.3 테스트케이스생성 (3/5) Test Case 클래스에테스트할내용을추가 싞호등의처음상태는빨간불 이라는요구사항을구현하기위해, 테스트케이스중 assertequals(true, a.getred()) 를통해서검증 assertequals(false, a.getyellow()) 와 assertequals(false, a.getgreen()) 은 false 로설정함으로써초기값이노란색과녹색이아님을검증 7
6. 도구활용예제 6.3 테스트케이스생성 (4/5) 클래스생성 : TrafficLightmodel TrafficLightmodel 클래스가존재하지않기때문에좌측화면과같은오류발생 Java 에디터에서툴팁 ( 젂구 ) 아이콘클릭 Create class TrafficLightmodel 을선택 ❶ ❷ ❸ 8
6. 도구활용예제 6.3 테스트케이스생성 (5/5) TrafficLighmodel 클래스의내용작성 : 의도적오류 TestCase 클래스에서 getred() 를 true 로설정하였기때문에, 요구사항이정확히구현되었는지확인하기위해서 Test 대상메소드를 false 로설정 False 로설정하였기에이메소드는에러를발생 발생된에러를통해 getred() 가잘못구현되었음을알고, 그결과를바탕으로 getred() 를수정 9
6. 도구활용예제 6.4 테스트수행 (1/3) 테스트를수행 상단메뉴바의 Run Run As Test ❶ ❷ ❸ ❸ 10
6. 도구활용예제 6.4 테스트수행 (2/3) 오류를수정 뷰의하단 Failure Trace 부분을더블클릭 테스트케이스 getred() 호출부분에문제가발생했다는것을알수있음 커서를접근메소드위로옮겨 F3 키를눌러구현부분 TrafficLightModel.java 로이동 최초요구사항인 싞호등의초기상태는빨간불 를만족시키기위해 getred() 의리턴값이 true 이여야하므로현재의잘못된리턴값인 false 를 true 로변경 11
6. 도구활용예제 6.4 테스트수행 (3/3) 테스트를재실행 : Run Run As Test 실패메시지미발생, 녹색막대로이상없음을표시 12
7. FAQ 질문 1) TDD(Test Driven Development) 활동이중요한이유가무엇입니까? 답변 1 : 개발초기단계에서발견된결함은수정이용이하고시간과비용을감소시키는반면, 개발후기단계에서발견된결함들을수정하기에는비용과시간이많이소비되고, 프로젝트가실패될확률이높아지기때문입니다. 질문 2) 단위테스트가무엇입니까? 답변 2 : 단위테스트는단위모듈 (ex : 메소드 ) 에서문제발생소지가있는모든부분에대해서테스트하는작업입니다. 1
8. 도구평가 활용성 대부분의자바를지원하는도구에서사용가능 범용성 뛰어난성능과넓은활용범위에의해대부분의도구에기능탑재 호환성 자바를지원하는모든도구에호환 도구의버전을가리지않음 도구가가능한환경이면어떤환경에서도작동가능 성능 빠른작동성능, 도구에같이로드되어도성능상문제없음 기타 뛰어난기능으로대부분의도구에기본탑재 기본탑재된플러그인이더라도, 필요시버전업이가능하며여러버전을동시에설치가능 도구평가의견 은 Eclipse 에기본으로플러그인이포함되어있어설치가용이 Test Suite 를제공함으로써여러 Test Case 클래스를한번에실행시킬수있음 대부분도구에서지원하고있기때문에, 도구교육시간이단축 1
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 Test Case Test Suite TDD 특정한프로그램부분및경로를실행해보거나특정한요구사항에준수하는지를확인하기위해개발된입력값, 실행조건, 그리고예상된결과로이루어져있는하나의테스트세트 일정한순서에의하여수행될개별테스트들의집합, 또는패키지. Suite 는응용분야나우선순위, 내용에연관 자동화된테스트로개발을이끌어가는개발방식을테스트주도개발이라칭함. TDD 는분석기술이며, 설계기술이며, 개발의모든활동을구조화하는기술 단위테스트 단위테스트는단위코드에서문제발생소지가있는모든부분을테스트하는작업 1