스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초

스프링 부트 핵심 가이드(장정우 지음) - JaCoCo를 활용한 테스트 커버리지 확인, 테스트 주도 개발(TDD)

개발학생 2025. 8. 12. 14:59
반응형

*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성  

 

[Java] 차근차근 Java 설치하기 (JDK17, Window 11)

자바 개발 도구 설치 방법에 대해서 알아보겠습니다. Java17은 LTS(Long Term Support : 장기 지원) 릴리즈로 1년 후까지 기술 지원 및 버그를 개선한 서비스를 제공받을 수 있습니다. 업데이트 버전을 꾸

yungenie.tistory.com

 

[Windows] Spring Tool Suite 4(STS 4) 다운로드 및 설치

STS란?Spring Tool Suite(STS)는 스프링 프로젝트를 생성하고, 개발할 수 있게 해주는 도구입니다. STS 설치 과정에 대해 설명드리겠습니다. 설치 파일 다운로드STS 공식 사이트에서 설치 파일을 다운로

priming.tistory.com

 

MySQL :: Download MySQL Community Server

Select Version: 9.3.0 Innovation 8.4.5 LTS 8.0.42 Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris mac

dev.mysql.com

  • Gradle

**STS에서 Gradle 프로젝트 생성한 과정 

*** 함께 보면 좋은 글

2025.07.10 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

 

스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

1. 스프링 프레임워크자바(Java) 기반 애플리케이션 프레임워크로, 엔터프라이즈급(기업 환경 대상 개발) 애플리케이션을 위한 다양한 기능 제공-> 오픈소스 경량급 애플리케이션 프레임워크로

keep-programming-study.tistory.com

2025.07.11 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

 

스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

1. 서버 간 통신마이크로서비스 아키텍처에서 한 서버가 다른 서버에 통신을 요청하는 것을 의미-> 한 대는 서버/다른 한 대는 클라이언트가 됨 가장 많이 사용되는 방식은 HTTP/HTTPS 방식(TCP/IP, SOA

keep-programming-study.tistory.com

2025.07.29 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 테스트 코드 작성하기

 

스프링 부트 핵심 가이드(장정우 지음) - 테스트 코드 작성하기

*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성 Windows11(윈도우 11) 환경자바 JDK 17 버전 설치 https://yungenie.tistory.com/11 [Java] 차근차근 Java 설치하기 (JDK17, Window 11)자바 개발 도구 설치 방법

keep-programming-study.tistory.com

2025.07.30 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 테스트 코드 작성하기2

 

스프링 부트 핵심 가이드(장정우 지음) - 테스트 코드 작성하기2

*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성 Windows11(윈도우 11) 환경자바 JDK 17 버전 설치 https://yungenie.tistory.com/11 [Java] 차근차근 Java 설치하기 (JDK17, Window 11)자바 개발 도구 설치 방법

keep-programming-study.tistory.com

 

1. JaCoCo를 활용한 테스트 커버리지 확인

1) 기초 개념

  • 코드 커버리지(Code Coverage): 소프트웨어의 테스트 수준이 충분한지를 표현하는 지표 중 하나
    -> 테스트를 진행했을 때 대상 코드가 실행됐는지 표현하는 방법으로도 사용
  • JaCoCo(Java Code Coverage): JUnit 테스트를 통해 애플리케이션 코드가 얼마나 테스트되었는지를 리포트
    -> Line과 Branch를 기준으로 한 커버리지로 리포트하며, 런타임으로 테스트 케이스 실행 후 커버리지를 체크
        (HTML, XML, CSV로 확인 가능)
    => 테스트 커버리지를 측정하는 빌드 도구용 플러그인

2) JaCoCo 플러그인 설정

(1) build.gradle 코드 추가 

  • JaCoCo는 Gradle에서 플러그인으로 동작하기 때문에, 
    일반적인 라이브러리처럼 dependencies 블록에 추가하지 않고 plugins 또는 apply plugin: 방식으로 설정
plugins {
    ... 생략 ...
    id 'jacoco'
}

// jacoco 테스트 리포트가 html로 출력되도록 설정
jacocoTestReport {
    reports {
        html.required = true
    }
}

dependencies {
    ... 생략 ...
    //커버리지 리포트를 직접 파싱하거나 처리하는 코드를 작성할 때 & JaCoCo API를 사용하는 커스텀 툴을 만들 때
    implementation 'org.jacoco:org.jacoco.core:0.8.10'
}

(2) build.gradle 우클릭해서 Gradle -> Refrash Gradle Project 클릭

build.gradle 우클릭해서 Gradle -> Refrash Gradle Project 클릭

(3) JUnit 테스트 실행 후 HTML 리포트 확인하기

  • CMD(명령 프롬프트)에서 프로젝트 루트로 이동한 후 다음 명령어 입력
gradlew test
gradlew jacocoTestReport

  • 리포트 위치
프로젝트 루트/
└── build/
    └── reports/
        └── jacoco/
            └── test/
                └── html/
                    ├── index.html ← 이 파일을 브라우저로 열면 됨
                    ├── classes/
                    ├── packages/
                    └── other assets...
  • 브라우저 주소창에 [프로젝트 루트]/build/reports/tests/test/index.html를 입력하면 JUnit 결과 리포트를 볼 수 있음 

  • 브라우저 주소창에 리포트 위치를 입력하면 JaCoCo 커버리지 리포트가 뜸 

*JaCoCo 커버리지 리포트 항목

Element 패키지 또는 클래스 이름
Missed Instructions 테스트되지 않은 JVM 명령어 수
Cov. (Instructions) 명령어 커버리지 비율 (테스트된 명령어 비율)
Missed Branches 조건문(if, switch 등)에서 테스트되지 않은 분기 수
Cov. (Branches)  분기 커버리지 비율
Missed Cxty  테스트되지 않은 복잡도 (Cyclomatic Complexity)
Missed Lines  테스트되지 않은 소스 코드 라인 수
Missed Methods  테스트되지 않은 메서드 수
Missed Classes  테스트되지 않은 클래스 수

2. 테스트 주도 개발(TDD) 

1) 개요

  • Test-Driven Development의 줄임말
  • 반복 테스트를 이용한 소프트웨어 개발 방법론
  • 테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 소프트웨어 개발 방식
  • 애자일 방법론 중 하나인 익스트림 프로그래밍(eXtream Programming)의 Test-First 개념에 기반을 둔,
    개발 주기가 짧은 개발 프로세스로 단순한 설계를 중시함 

2) 테스트 주도 개발의 개발 주기

테스트 주도 개발의 개발 주기 도식화

  • 실패 테스트 작성(Write a failing test): 실패하는 경우의 테스트 코드를 먼저 작성
  • 테스트를 통과하는 코드 작성(Make a test pass): 테스트 코드를 성공시키기 위한 실제 코드 작성
  • 리팩토링(Refactor): 중복 코드를 제거하거나 일반화하는 리팩토링 수행

3) 테스트 주도 개발의 효과

(1) 디버깅 시간 단축

테스트 코드 기반 개발이므로, 문제가 발생했을때 어디에서 잘못됐는지 확인하기 쉬움

(2) 생산성 향상

테스트 코드를 통해 지속적으로 애플리케이션 코드의 불안전성에 대한 피드백을 받기 때문에,
리팩토링 횟수가 감소하여 생산성이 높아짐

(3) 재설계 시간 단축

작성된 테스트 코드를 기반으로 코드를 작성하므로, 재설계가 필요할 경우 테스트 코드를 조정하는 것으로 재설계 시간 단축 가능

(4) 기능 추가와 같은 추가 구현 용이

테스트 코드를 통해 의도한 기능을 미리 설계하고 코드를 작성하므로, 목적에 맞는 코드를 작성하기 비교적 용이 

 

반응형