시리즈
2025.03.06 - [SW 방법론] - 테스트 주도 개발(TDD: Test Driven Development)
2025.03.13 - [SW 방법론] - TDD 시나리오 OOP 적용 예시
TDD가 뭘까?
✅ 소프트웨어 개발방법론 중 하나이며, 매우 짧은 개발 사이클을 반복하는 SW 개발 프로세스입니다.
✅ TDD는 "테스트 → 실패 확인 → 최소한의 코드 작성 → 테스트 통과 → 리팩토링" 순으로 진행하는 개발 방식
✅ 불필요한 코드 작성을 막고, 기능이 정상적으로 동작하도록 보장하는 방법
TDD 사이클
- 먼저, 개발자는 요구사항을 검증하는 케이스를 작성합니다.
- 이후에 테스트 케이스를 통과하기 위한 최소한의 코드를 생성합니다.
- 작성한 코드는 리팩토링하는 과정을 반복합니다.
쉽게 말해서 '선 테스트 코드 작성 <-> 일부 객체 구현' 반복 후 리팩토링으로 하나의 싸이클을 형성합니다.
(예시) 기능 1, 2, 3 생성 및 테스트
- 기능1 생성: 1 -> 2 -> 1 -> 2 -> 3 -> 기능2 생성으로
- 기능2 생성: 1 -> 2 -> 3 -> 기능 3 생성으로
- 기능3 생성: 1 -> 2 -> 1 -> 2 -> 3
TDD 장점
✔ 리팩토링 비용 감소(설계 비용 감소)
✔ 디버깅 시간 감소
✔ 동작하는 문서(시나리오화)
✔ 오버 엔지니어링 방지
주의할 점
📌 간단하고, 쉬운 것들 부터 시도
📌 실패하는 테스트를 통과하기 위해서는 최소한의 코드를 작성
📌 테스트를 점점 구체화할수록 프로덕션 코드는 점점 범용적
📌 실패하는 테스트가 있을 때만 프로덕션 코드를 작성
📌 실패를 나타내는 데 충분한 정도의 테스트만 작성
테스트 코드 작성 방법
테스트 코드를 작성하고 후에 구현하는 방법으로
구현 보다는 인터페이스에 집중합니다.
테스트 코드는 목표를 시각화하는 작업입니다.
1️⃣ 실패하는 테스트 작성 (CalculatorTest.java)
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class CalculatorTest {
@Test
void testAddition() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result);
}
}
📌 테스트를 통과시키기 위해 최소한의 코드 작성 (하드코딩된 값)
📌 테스트 실행 시 통과 ✅
2️⃣ 최소한의 코드 작성 (Calculator.java)
class Calculator {
int add(int a, int b) {
return 5; // 하드코딩된 값
}
}
📌 테스트를 통과시키기 위해 최소한의 코드 작성 (하드코딩된 값)
📌 테스트 실행 시 통과 ✅
3️⃣ 테스트 추가 및 일반화
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class CalculatorTest {
@Test
void testAddition() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3));
assertEquals(7, calculator.add(3, 4)); // 새로운 테스트 추가
}
}
📌 새로운 테스트를 추가하면 add(3, 4)가 실패 ❌
📌 return 5; → return a + b;로 일반화해야 함
4️⃣ 일반화된 코드 (Calculator.java)
class Calculator {
int add(int a, int b) {
return a + b; // 일반화
}
}
📌 모든 테스트 통과 ✅
📌 코드가 점진적으로 발전하고 있음
🎯 최종 정리
✔ 테스트 → 실패 확인 → 최소한의 코드 작성 → 테스트 통과 → 리팩토링 순서로 진행
✔ 처음에는 단순한 테스트를 작성하고 점점 더 범용적으로 확장
✔ 불필요한 코드 추가 없이 테스트가 보장하는 기능만 구현
✔ TDD가 오히려 비효율적인 경우도 존재하므로 비판적으로 사고하는 것도 중요(객관적 시야 확장, 코드 비확장성 등)
'SW 방법론' 카테고리의 다른 글
TDD 시나리오 OOP 적용 예시 (1) | 2025.03.13 |
---|