본문 바로가기

Java/Java

(JAVA) 바이트코드 조작(1)

코드 커버리지 측정 (with jacoco)

 

Code Coverage 란?

  • 소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표중 하나.
  • 소프트웨어 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는지 숫자로 볼 수 있다.

 

코드 작성

public class Moim {
    int maxAttendees;
    int numberOfEnrollment;

    public boolean isEnrollmentFull()  {
        if (maxAttendees == 0) {
            return false;
        }

        if (maxAttendees < numberOfEnrollment) {
            return false;
        }

        return true;
    }
}

테스트 코드 작성

public class MoimTest {

    @Test
    public void isFull() {
        Moim moim = new Moim();
        moim.maxAttendees = 100;
        moim.numberOfEnrollment = 10;
        Assert.assertTrue(moim.isEnrollmentFull());
    }
}

 

pom.xml에 플러그인 추가

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.4</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

 

메이븐 컴파일 

 

target 하위의 jacoco 생성

 

 

 

 

 

 

 

근데 이런 툴을 어떻게 만들 수 있었을까....??????

 

단순하게 말하자면

  • 바이트코드에서 코드 커버리지를 챙겨야 하는 부분의 개수를 세어놓는다.
  • 코드가 실행될 때 그중에 몇 개가 지나갔는지 카운팅을 한다.

 

 

 

 

커버리지 만족 못할 시 빌드 실패하게 하는 방법

 <execution>
            <id>jacoco-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule>
                        <element>PACKAGE</element>
                        <limits>
                            <limit>
                                <counter>LINE</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.50</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
</execution>

 

'Java > Java' 카테고리의 다른 글

(JAVA) 바이트코드 조작(3) - javaagent  (0) 2019.12.22
(JAVA) 바이트코드 조작(2)  (0) 2019.12.22
(JAVA) 클래스로더  (0) 2019.12.21
(JAVA) JVM 구조  (0) 2019.12.21
(JAVA) 자바, JVM, JDK 그리고 JRE  (0) 2019.12.21