[JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계

2025. 8. 11. 22:54·✏️공부/💡JAVA
728x90
반응형

⚙️ TDD(Test-Driven Development) 

자동테스트, red•green•blue 단계


📌 TDD란?

테스트 주도 개발이라고도 하며, 자동 테스트를 활용해 개발을 이끌어가는 방식
일반적으로 기능을 먼저 만들고 테스트를 작성하는 흐름과 달리, TDD는 테스트 코드를 먼저 작성하는 것이 핵심 ⭐️

 

 

📌  기존 방식 vs TDD

👤 기존 방식

  • 사람이 직접 테스트 (수동 테스트)
  • 등록, 수정, 목록, 삭제, 종료 등 기능을 하나씩 눌러 확인
  • 시간이 오래 걸리고, 놓치는 케이스 발생 가능

🤖 TDD 방식

  • 자동 테스트로 반복 검증
  • 테스트 실행도, 결과 확인도 모두 기계가 처리
  • JUnit 같은 테스트 프레임워크 사용
  • 테스트 케이스를 만들지 않으면 개발을 진행할 수 없음 → 테스트 강제

 


 

⚙️ TDD 개발 사이클 (Red → Green → Blue)

TDD는 보통 Red → Green → Blue 3단계로 반복
단계 설명
🔴 Red 실패하는 테스트 작성 ➡️ 기능이 없으니 당연히 실패
🟢 Green 테스트를 통과시키기 위한 최소한의 구현
🔵 Blue 리팩토링 및 테스트 케이스 보완
⭐️ 핵심
기능보다 테스트가 먼저 작성된다.
즉, 테스트 코드가 없으면 기능 구현도 시작할 수 없다.

 

📌  TDD의 장점

'TDD == 자동 테스트' 라고 할 순 없지만 TDD에 자동 테스트가 포함이므로 장점이 겹침
  1. 속도: 테스트 실행이 빠름
  2. 편의성: 버튼 한 번으로 수백 개 케이스 실행 가능
  3. 정확성: 오류 발생 위치를 정확히 파악
  4. 재사용성: 코드 수정 후에도 기존 테스트로 회귀 검증 가능

 


 

📌 JUnit과 Assert

자동 테스트의 핵심은 검증이다.
Java 기본 assert 키워드도 있지만 기능 제약이 많으므로, assertThat (AssertJ 라이브러리)을 사용
import static org.assertj.core.api.Assertions.assertThat;

@Test
void addTest() {
    int result = Calculator.add(1, 2);
    assertThat(result).isEqualTo(3); // 기대 값: 3
}

 

✅ 의존성 추가 필수 (gradle 파일)


📌 간단한 예시

🔴  Red 단계 (테스트만 작성)

@Test
void addTest() {
    assertThat(Calculator.add(1, 2)).isEqualTo(3);
}

➡️ 기능이 없으므로 테스트 실패

 


🟢 Green 단계 (심플한 기능 구현)

class Calculator {
    static int add(int a, int b) {
        return 3; // 테스트 통과만을 위한 임시 구현
    }
}

➡️ 테스트 성공


🔵 Blue 단계 (리팩토링)

class Calculator {
    static int add(int a, int b) {
        return a + b; // 실제 구현
    }
}

➡️ 코드 개선 + 필요 시 테스트 케이스 추가

 


 

TDD는 처음에는 "왜 기능보다 테스트를 먼저 쓰지?" 라는 의문이 들 수 있지만,
시간이 지날수록 유지보수, 기능 확장, 버그 방지에서 강력한 효과를 발휘한다.

그러므로 꾸준히 공부하고 실습하며 익히도록 하자 🙌🏻

 

 

728x90
반응형

'✏️공부 > 💡JAVA' 카테고리의 다른 글

[JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬  (0) 2025.08.21
[JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬  (0) 2025.08.21
[JAVA] Java Stream | mapToInt() 활용한 연산, finFirst(), isPresent(), orElseThrow(), Optional<>  (4) 2025.08.07
[JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️  (3) 2025.08.06
[JAVA] JAVA 기초 | 상속(extends), 추상 클래스 (abstract), Getter / Setter  (4) 2025.08.06
'✏️공부/💡JAVA' 카테고리의 다른 글
  • [JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬
  • [JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬
  • [JAVA] Java Stream | mapToInt() 활용한 연산, finFirst(), isPresent(), orElseThrow(), Optional<>
  • [JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    Stream
    github
    트랜잭션
    Set
    S3
    프로그래머스 #JAVA
    map
    네트워크
    데브코스
    Java
    알고리즘
    GIT
    자료구조
    백엔드
    코딩테스트
    자바
    프로그래머스
    baekjoon
    동시성제어
    AWS
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계
상단으로

티스토리툴바