Whiteship's Note


Cobertura 사용기

Good Tools : 2008.01.18 17:03


사용자 삽입 이미지

아~~ 이 짜릿함!!!
저 화면을 보려고 거의 두 시간이나 낑낑댔습니다.

참조
사람을 위한 자동화: 연속 테스팅 (한글)
Cobertura에서 코드 커버러지 분석결과가 잘못 나올때..
Cobertura를 이용한 커버러지 테스트시 주의할 사항

TDD 연습한 코드를 Cobertura가 제공하는 Ant Task를 사용해서 리포트를 작성한 화면입니다. 딱 봐도 Rent 클래스에 대한 테스트가 부족했다는 것을 알 수 있습니다.

이상하다. 정말 열심히 TDD로 작성한 코드인데, Rent 클래스의 커버리지는 정말 이상하리 만큼 낮습니다. 그래서 살펴봤습니다.

사용자 삽입 이미지

이야... 테스트 안 된 부분은 뻘건색으로 표시 됩니다. 죽여줍니다. ㅎㅎ 무서워서라도 테스트 코드를 잘 작성해야겠군요.

toString() 메소드가 말썽이었군요. 그 위에있는 메소드도 RentalInfo에 있는 getRentalFee()는 테스트는 했는데 그것들을 쭉 돌아가며 호출하는 메소드는 그냥 작성한 것 같네요.

흠... 그리고 클래스 목록에 Test 클래스까지 포함되어 있는데, 저 녀석은 instrument 대상에서 제외시켜줘야겠습니다.

사용자 삽입 이미지

각 항목 별로 정렬도 됩니다. 가장 커버리지가 낮은 클래스는 나중에 버그가 숨어있기 가장 안전한 곳일테니, 테스트를 보충해주는게 좋을 것입니다.

각 항목 이름을 클릭하면 다음과 같은 항목에 대한 도움말을 보실 수 있습니다.

사용자 삽입 이미지

Branch Coverage는 뭔지 모르겠네요. 읽어봐도.. 별로;;

위키피디아에서는 다음과 같이 설명되어 있습니다.

Branch coverage (sometimes called Decision Coverage) measures which possible branches in flow control structures are followed. Clover does this by recording if the boolean expression in the control structure evaluated to both true and false during execution.

가능한 분기를 얼마나 테스트 했는지 나타내는 수치로군요. 제가 작성한 코드에서 예를 들어보겠습니다.

사용자 삽입 이미지

분기문이 하나이고 해당 분기문을 한 번만 테스트 했네요.(왼쪽에 있는 숫자가 몇 번 테스트 됐는지 표시 해주는 것 같습니다. 추측인데.. 거의 맞는거 같습니다.) if 문은 두 곳으로 분기할 수 있는데 그 중에서 한 번만 테스트 한 것입니다.

맞습니다. "삼각측량"을 사용하지 않았습니다.
역시 TDD는 쉽지 않습니다.
그러나 그만큼 재밌습니다.
top

  1. Favicon of http://openframework.or.kr/blog/ BlogIcon 이동국 2008.01.20 11:18 PERM. MOD/DEL REPLY

    clover 랑 비슷하군요..
    eclemma보다는 조금 나은거 같고..

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2008.01.20 13:11 PERM MOD/DEL

    넹.
    전에 Clover도 시도해봤지만, 실패했던 기억이...ㅜ.ㅜ
    Covertura는 비교적 쉽게 한 것 같습니다. 무엇보다 좋은 건 공짜라는거죠.ㅎㅎ

  2. Favicon of https://bcho.tistory.com BlogIcon 조대협 2009.02.19 16:05 신고 PERM. MOD/DEL REPLY

    Branch coverage란 if문이나 switch문을 얼마나 cover했느냐 입니다.
    if(condition)
    1..
    else
    2..
    else
    3..
    end if
    테스트 코드가 1,2번 수행했다면, Branch coverage는 2/3가 되는 것입니다.
    참고로 condition coverage는 if문 안의 condition에 대해서 얼마나 조건을 커버했느냐를 나타냅니다.
    참고하세요.

    Favicon of http://whiteship.me BlogIcon 기선 2009.02.19 16:56 PERM MOD/DEL

    그렇군요~
    감사합니다 :)

Write a comment.


Ant 빌드로 테스트 실행하기

Good Tools : 2007.12.28 16:11


참조 : http://www.java2s.com/Code/Java/Ant/Junittest.htm

1. JUnit jar 파일을 Ant의 lib 폴더에 추가

먼저 junit.jar 나 junit-4.4.jar 파일을 ANT_HOME의 lib 폴더에 넣어줍니다.  이 일도 태스크로 작성할 수 있는데, 굳이 이 일을 타겟으로 지정해서 할 필요는 없을 것 같아서 뺏습니다.

2. 빌드 작성

빌드 파일을 작성합니다. 제가 작성한 테스트의 경우에는 xml파일이나 프로퍼티 파일을 필요로 하기 때문에 해당 파일들도 build 디렉터리로 복사해주는 작업이 prepare에 추가됐습니다.

<property name="dir.build" value="build" />
    <property name="dir.test" value="test" />
    <property name="dir.src" value="src" />

    <!-- JUnit -->
    <target name="prepare">
        <mkdir dir="${dir.build}" />
        <copy file="${dir.test}/memberData.xml" todir="${dir.build}" failonerror="true" />
        <copy file="${dir.test}/testDatabase.properties" todir="${dir.build}" failonerror="true" />
    </target>

    <target name="compile" depends="prepare" description="Compile all source code.">
        <javac srcdir="${dir.test}" destdir="${dir.build}">
            <classpath refid="base-classpath" />
        </javac>
        <javac srcdir="${dir.src}" destdir="${dir.build}">
            <classpath refid="base-classpath" />
        </javac>
    </target>

    <target name="junit" depends="compile">
        <junit printsummary="on" fork="false" haltonfailure="false" failureproperty="tests.failed" showoutput="true">

            <classpath refid="base-classpath" />
            <formatter type="brief" usefile="false" />

            <batchtest>
                <fileset dir="${dir.test}">
                    <include name="**/*Test.java" />
                </fileset>
            </batchtest>
        </junit>

        <fail if="tests.failed">
        *******************************************************
        *******************************************************
        One or more tests failed. Check the output...
        *******************************************************
        *******************************************************
        </fail>
    </target>

3. 빌드파일 실행하기
사용자 삽입 이미지
사용자 삽입 이미지

top

TAG Ant, JUnit, 빌드

Write a comment.


Ant 완전 기초

Good Tools : 2007.10.14 10:51


사용자 삽입 이미지
build.xml 파일은 위와 같은 구조로 구성되어 있습니다.

최상위 엘리먼트로 project가 있고 그 안에 property, path, taskdef, target 엘리먼트를 정의하며 그 중에서도 target 엘리먼트가 가장 핵심적이고 이 것은 task 엘리먼트로 구성되어 있습니다.

property 엘리먼트에는 빌드 파일에서 사용할 프로터피 속성을 가지고 있는 파일들을 지정합니다.
    <!-- Load properties -->
    <property file="src/database.properties" />
    <property file="src/deploy.properties" />

path 엘리먼트를 사용해서 라이브러리의 경로를 나타낼 수 있습니다.
    <!-- Set classpath -->
    <path id="base-classpath">
        <pathelement path="src" />
        <pathelement path="bin" />
        <fileset dir="web/WEB-INF/lib">
            <include name="*.jar" />
        </fileset>
        <fileset dir="${ant.home}/lib" />
    </path>

taskdef 엘리먼트를 사용하여 Ant가 기본으로 제공하는 task에, 별도의 task 정의를 추가할 수도 있습니다.
  <!-- Configure the custom Ant tasks for the Manager application -->
    <taskdef resource="org/apache/catalina/ant/catalina.tasks" classpathref="base-classpath" />

target 엘리먼트를 사용하여 실제 빌드 행위 하나, 하나를 정의할 수 있습니다. target은 task로 구성되어 있으며, 선행되어야 할 target을 설정할 수 있습니다.
    <!-- 배포 자동화 -->
    <target name="War 생성하기">
        <war destfile="${ant.project.name}.war" webxml="web/WEB-INF/web.xml">
            <lib dir="web/WEB-INF/lib" />
            <classes dir="build/classes" />
            <fileset dir="web" />
        </war>
    </target>

    <target name="Tomcat에 배포하기" depends="War 생성하기">
        <deploy url="${url}" username="${username}" password="${password}" path="/${ant.project.name}" war="${ant.project.name}.war" update="true" />
        <delete file="${ant.project.name}.war"/>
    </target>

참조 :
http://ant.apache.org/manual/
2007/10/13   ANT 사용하기 ... (2) [2]
2007/10/11   ANT 사용하기 ... (1)

'Good Tools' 카테고리의 다른 글

외장 하드 포맷하기.  (0) 2007.11.03
Ant를 사용한 배포 자동화  (0) 2007.10.30
톰캣 이름 변경하기  (2) 2007.10.23
Ctrl + Shift + E  (2) 2007.10.18
Commonclipse  (0) 2007.10.15
Ant 완전 기초  (0) 2007.10.14
Ant 라이브러리 관리  (0) 2007.10.11
톰캣 클라이언트 디플로이어 사용하기  (0) 2007.10.09
SiteMesh  (0) 2007.10.08
Buildix  (2) 2007.10.04
StarUML 사용기 1  (4) 2007.09.19
top

TAG Ant

Write a comment.


Ant 라이브러리 관리

Good Tools : 2007.10.11 14:00


Ant가 사용하는 라이브러리는 굳이 서버에 올라가지 않아도 됩니다. 즉 web/WEB-INF/lib 디렉토리에 Ant와 관련된 Jar 파일들을 넣는 것은 WAR 파일 크기만 부풀릴 뿐 전혀 도움이 되지 않습니다.

Eclipse 3.3의 경우 Ant 1.7을 사용하고 있으며 Ant 1.7의 기본 폴더는
Eclipse 설치 디렉터리/plugins/org.apache.ant_1.7.0.v200706080842/ 입니다.

이 폴더는 다음과 같이 구성되어 있습니다.
사용자 삽입 이미지
이곳의 lib 폴더에 Ant가 참조할 라이브러리들을 모두 넣어 줍니다.

그리고 Ant 빌드 파일에서는 다음과 같이 위의 lib 폴더에 있는 라이브러리들을 참조할 수 있습니다.
<fileset dir="${ant.home}/lib" />

위 한 줄을 기본 클래스 패스를 정의한 부분에 추가해주면 됩니다.
사용자 삽입 이미지

'Good Tools' 카테고리의 다른 글

Ant를 사용한 배포 자동화  (0) 2007.10.30
톰캣 이름 변경하기  (2) 2007.10.23
Ctrl + Shift + E  (2) 2007.10.18
Commonclipse  (0) 2007.10.15
Ant 완전 기초  (0) 2007.10.14
Ant 라이브러리 관리  (0) 2007.10.11
톰캣 클라이언트 디플로이어 사용하기  (0) 2007.10.09
SiteMesh  (0) 2007.10.08
Buildix  (2) 2007.10.04
StarUML 사용기 1  (4) 2007.09.19
Eclipse의 Task List에서 이슈 등록하기  (0) 2007.09.18
top

Write a comment.


톰캣 클라이언트 디플로이어 사용하기

Good Tools : 2007.10.09 23:42


톰캣 매니저를 사용하는 스크립트 기반 커맨드 쉘로써, 웹 애플리케이션 배포, 검증, 컴파일 등을 할 수 있다.

Ant와 Java가 설치되어 있어야 하며, 톰캣 매니저와 달리 톰캣에 기본으로 포함되어 있지 않기 때문에 별로로 다운받아서 설치해야 한다.

톰캣 클라이언트를 설치하고 잘 설정하면 다음과 같은 Task를 사용할 수 있다.

<target name="deploy">
    <deploy url="${tomcat.manager.url}"
                username="${tomcat.manager.username}"
                password="${tomcat.manager.password}"
                path="/${webapp.name}"
                war="file:${warfile.path}" />
    </deploy>
</target>

0. Java 와 Ant 설치하기. + 경로 설정
0-1. 자바 설치 패스.
0-2. Ant 다운로드.
0-3. 경로 설정.

1. 톰캣 매니저 설정하기.
참조 : Administering Tomcat
 Tomcat 5.5.9 에 tomcat admin 설치하기

2. 톰캣 클라이언트 디플로이어 설치하기.
5.5 TCD 다운로드
apache-tomcat-5.5.23-deployer.zip

3. Eclipse에 톰캣 클라이언트 디플로이어 설치하기.
참조 : Integrating the Tomcat Deployer, Eclipse and Tomcat

4. 빌드 테스트.
ant로 위 빌드 파일에 적당한 값을 대입하거나 프로퍼티 파일을 작성하여 실행해 봅니다.
주의 할 것.
deploy를 비롯한 톰캣 클라이언트 디플로이어 태스크를 인식하지 못하기 때문에
    <!-- Configure the custom Ant tasks for the Manager application -->
    <taskdef resource="org/apache/catalina/ant/catalina.tasks" classpathref="base-classpath" />
요런 것을 추가해줘야 함.
classpathref는 톰캣 클라이언트 디플로이어 설치 디렉토리의/lib 폴더를 가리키게 하거나..
자르 파일들 모아놓은 곳에 위의 라이브러리를 몽땅 복사해 넣어두면 됩니다.

'Good Tools' 카테고리의 다른 글

톰캣 이름 변경하기  (2) 2007.10.23
Ctrl + Shift + E  (2) 2007.10.18
Commonclipse  (0) 2007.10.15
Ant 완전 기초  (0) 2007.10.14
Ant 라이브러리 관리  (0) 2007.10.11
톰캣 클라이언트 디플로이어 사용하기  (0) 2007.10.09
SiteMesh  (0) 2007.10.08
Buildix  (2) 2007.10.04
StarUML 사용기 1  (4) 2007.09.19
Eclipse의 Task List에서 이슈 등록하기  (0) 2007.09.18
Eclipse의 Task List에서 이슈 자세히 보기  (0) 2007.09.18
top

Write a comment.