skip menu and go to main content

body start

개발환경 - 테스트도구

프로젝트 소식

Project Info

  • This project has not yet categorized Software Map
  • Member count : 5
  • Registered:  : 2010.05.28
  • Activity Percentile:  : 73.68%

activity viewforum,download view

개발환경 테스트도구


(./) Unit Test

Unit Test란 대상 코드에 대해 테스트하고자 개발자가 작성한 코드로서, 주로 특정 메소드를 실행해서 그 결과가 기대값과 일치하는지 확인하는 형태이며, Unit Test는 서로 독립적으로 수행되어야 한다. JUnit 기반으로 한 TestCase 작성을 지원하며, TestCase Generator를 통하여 유형에 따라 TestCase를 화면기반으로 작성할 수 있습니다. 또한, 가상의 객체인 Mock과 DB 단위 테스트케이스를 작성할 수 있도록 지원합니다.

  • 효과
    • 작성한 코드의 설계 개선 작업 시, 코드 품질에 대한 확신
    • 코드 수정 시 버그를 쉽게 찾을 수 있게 해줌
    • 자동화된 회귀 테스트 (Regression Test)를 가능하게 해주는 Source가 됨

  • 작성범위
    • 주요 흐름에 대한 테스트 (the happy path)
    • 또 다른 주요 흐름에 대한 테스트 (the main alternative path)
    • 경계 조건에 대한 테스트 (null 인자 체크 등)
    • Exception 테스트 (Exception 발생하는 조건에 대한 테스트)

제공하는 테스트 도구는 Unit Test, Mock, DB Test Framework을 통해 TestCase 작성을 지원하고, Test Automation, Test Coverage, Test Reporting 등의 기능을 제공한다.

testToolimg_1.jpg

  • TestCase 작성
    • 개발자가 구현도구를 통해 코드를 작성할 때, 그 코드를 대상으로 하는 TestCase를 작성할 수 있다. 예를 들어, OOService 클래스의 TestCaseOOServiceTest를 작성할 수 있는 기반 Framework인 Unit Test Framework을 제공한다. - Test Case
    • 개발자가 테스트하고자하는 OOService와 관련있는 OODao에 대해서, MockDao를 작성할 수 있는 라이브러리를 제공한다. 혹은, 이미 구현된 기능을 제공하는 Mock 객체도 제공한다. - Mock Support
    • Dao와 DB에 걸쳐진 Persistence Layer를 테스트할 수 있는 DB Test Framework을 제공하여 DB 연결, 데이터 초기화, 트랜잭션 처리 등 DB Test를 위한 TestCase 작성을 지원한다. - DB Support

  • Test 수행
    • 작성한 TestCase를 수행하여 성공/실패 여부를 알려준다.
    • TestCase가 작성된 범위를 수치나 코드 라인으로 알려줌으로써 TestCase가 테스트하지 못한 영역을 알려준다. - Test Coverage
    • 작성된 TestCase를 자동화하여 수시로 테스트할 수 있도록 한다. - Test Automation

  • Test Reporting
    • Coverage 분석 : 테스트 대상 모듈에 대해 테스트 클래스가 테스트를 수행하는 그 범위를 수치를 분석하여, 테스트 수행 범위를 보여줌 - Test Coverage
    • Test Reporting : 테스트를 수행한 결과를 Text, Html, XML, Excel 등의 보고서 형태로 작성함 - Test Reporting

(./) Test Automation

작성된 Test를 자동으로 수행하게 합니다. Test Suite으로 그룹핑하거나 TestCase로 작성된 다수의 테스트케이스 클래스들을 Build 도구(Maven)를 통해 자동으로 테스트가 수행되도록 합니다.

  • Test Automation 프로세스
    • Write TestSuite : 작성된 다수의 TestCase 클래스들을 수행을 위해 몇 개 그룹 혹은 하나로 묶는다.
    • Run TestSuite : TestCase 그룹들의 테스트를 한꺼번에 수행한다.
    • Test Reporting : 테스트 수행 결과를 Text, XML, HTML, Excel 형태의 리포트로 생성한다.

  • 환경설정
    • Ant, Maven Eclipse Plugin 설치
    • JUnit Eclipse Plugin 설치1)
    • TestSuite 작성을 위한 라이브러리 추가 (pom.xml) : Unit Test 작성을 위한 pom.xml dependency 설정 참고
    • 엑셀 리포팅을 사용할 경우 setting.xml에 설정 추가

  • 사용법
    • Write TestSuite : TestSuite 클래스를 작성하거나, 빌드도구에서 테스트 수행을 하기 위한 TestCase들을 명시한다.
    • Run TestSuite : 빌드도구의 이클립스 플러그인을 이용하여 테스트를 수행한다.
    • Test Reporting : 테스트 수행 결과 생성된 Text, XML, HTML, Excel 형태의 리포트를 확인한다.

(./) Test Coverage

오픈소스인 EMMA를 사용하여, 개발자가 작성한 TestCase가 대상 소스코드에 대해 어느 정도 Test Coverage를 갖는지 분석합니다. Test Coverage는 개발자가 작성한 코드에 대해 상응하는 테스트를 갖는 소스 코드의 비율을 평가하는 작업으로 다음과 같은 개념을 이해하는 것이 좋다.

  • instrument : 테스트 대상 코드를 실행하거나 JUnit Test를 수행하거나(EMMA), 컴파일을 수행하는(Cobertura) 동안 대상 코드에 테스트 코드 정보를 삽입하는 작업을 일컫는다.
  • Test Coverage report : Test Coverage 결과 리포팅(XML, HTML 등). 기본적으로 XML과 HTML 형식을 지원하며, EMMA는 TXT, XML, HTML 형식을 모두 지원한다.

Test Coverage를 수행하는 데는 다양한 툴이 있고, 각각 평가하는 나름의 로직을 갖고 있으며, 리포팅 또한 그 로직에 상응하는 형태라고 볼 수 있다. 따라서, 필요에 맞는 도구를 잘 선택하면 된다.

본 개발환경에서는 라이선스를 고려하여 EMMA와 EclEmma를 선택했다. 그러나, 코드를 수정하지 않고 툴로서 사용하기만 한다면 Cobertura를 사용하는 것도 괜찮다.

구 분 툴 이름
상 용 [http]Clover
오 픈 소 스 [http]Cobertura , [http]EMMA
Eclipse Plug-in [http]EclEmma , [http]Coverlipse

  • 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에 대해 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, basic block1)이다.
    • 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 리포트 샘플 참조

(./) Test Reporting

Build 도구(Maven)를 통해 JUnit으로 작성된 TestCase의 테스트 결과를 XML, HTML, Excel 형태로 리포팅합니다. 또한, Coverage 분석 결과도 XML, HTML 형태로 리포팅하며, 배포도구의 CI 서버는 XML 리포트 파일을 이용하여 대시보드에서 테스트 결과와 Test Coverage 분석 결과를 보여주게 됩니다.

테스트 수행한 결과를 의미있는 리포트를 만드는 데에도 Ant와 Maven 빌드도구를 사용한다. 다만, 리포트를 생성하는 기능을 수행하는 Ant Task와 Maven Plug-in이 있어야 하는데, HTML 형식은 오픈소스에서 제공한다. 각각 JUnit Report Task와 maven-surefire-report-plugin 이라는 라이브러리가 그것이다. 그리고, Excel 형식의 리포트를 생성하는 기능은 전자정부 표준 프레임워크 개발환경에서 추가했는데, Ant Task와 Maven plugin으로 제공된다.

리포트를 생성하는 방법은 다음과 같다.

1. Script를 작성한다. (Ant - build.xml, Maven - pom.xml)

2. 이클립스 Plug-in으로 리포트 생성

3. 리포트 확인

리포트를 생성하는 방법도 기본적인 흐름은 테스트 수행과 동일하다. CI 서버에 등록할 경우의 goal 설정이나 target 설정만 리포트 생성을 위한 것으로 설정하면 된다.

생성된 리포트의 결과는 다음과 같은 모습이다.

  • Maven에서 생성한 테스트 결과 HTML 리포트
  • Ant에서 생성한 테스트 결과 HTML 리포트
  • 테스트 결과 Excel 리포트