📌 테스트 주도 개발 (TDD: Test-Driven Development)
**테스트 주도 개발(TDD, Test-Driven Development)**은 **“테스트를 먼저 작성하고, 이후에 실제 코드를 작성하는 개발 방법론”**이야.
즉, **“실패하는 테스트를 먼저 만들고, 그 테스트를 통과하도록 최소한의 코드를 작성한 후, 리팩토링을 통해 개선하는 방식”**이야.
이 과정이 “Red → Green → Refactor” 라는 반복적인 순환 구조로 진행돼.
📌 TDD의 핵심 사이클 (Red → Green → Refactor)
1️⃣ Red (실패하는 테스트 작성)
• 새로운 기능을 개발할 때, 먼저 테스트 코드를 작성하고 실행.
• 당연히 아직 기능이 구현되지 않았으므로 테스트는 실패(Red) 함.
2️⃣ Green (기능을 최소한으로 구현)
• 테스트를 통과할 수 있도록 최소한의 코드를 작성.
• 이때 최소한의 로직만 구현하여 테스트를 성공(Green) 시킴.
3️⃣ Refactor (코드 개선)
• 테스트가 통과한 후, 코드를 리팩토링하여 품질을 개선.
• 리팩토링 후에도 테스트는 여전히 통과해야 함.
🔁 이 과정을 반복하며 코드를 점진적으로 발전시키는 방식이 TDD야!
📌 TDD 예제 (JavaScript + Jest)
🎯 기능 목표: 숫자를 더하는 add(a, b) 함수 구현
👉 일반적인 개발 방식
1. add(a, b) 함수를 먼저 구현
2. 그 후에 테스트 작성
👉 TDD 방식
1. add(a, b)가 정상 동작하는지 테스트를 먼저 작성 (Red 단계)
2. 최소한의 코드로 테스트를 통과하도록 구현 (Green 단계)
3. 코드 리팩토링 및 최적화 (Refactor 단계)
✅ 1. 실패하는 테스트 먼저 작성 (Red)
// sum.test.js
const add = require("./sum"); // 아직 sum.js 파일 없음
test("두 숫자의 합을 반환해야 한다.", () => {
expect(add(2, 3)).toBe(5);
});
🚨 sum.js 파일이 없어서 테스트가 실패함!
✅ 2. 최소한의 코드 작성 (Green)
// sum.js
function add(a, b) {
return a + b;
}
module.exports = add;
📌 이제 add 함수를 만들었으니, 테스트를 다시 실행하면 통과(Green)! ✅
✅ 3. 코드 리팩토링 (Refactor)
• 현재 코드는 단순하지만, 복잡한 로직이라면 리팩토링 진행 가능.
• 이 과정에서 기능을 변경하면 안 되고, 테스트가 계속 통과해야 함.
📌 TDD를 사용하면 버그가 적고, 유지보수하기 쉬운 코드가 됨!
📌 TDD의 장점 👍
✅ 버그 감소 → 테스트가 선행되므로 기능이 명확해지고, 실수할 확률이 낮아짐.
✅ 안정적인 리팩토링 가능 → 코드 변경 후에도 테스트가 보장됨.
✅ 설계 품질 향상 → 테스트가 코드 설계를 개선하도록 유도.
✅ 유지보수 용이 → 기능이 많아져도, 기존 코드가 잘 동작하는지 쉽게 확인 가능.
📌 TDD의 단점 👎
🚫 초기 개발 속도 저하 → 테스트를 먼저 작성해야 하므로 처음에는 시간이 걸림.
🚫 모든 경우를 테스트하기 어려움 → 복잡한 시스템에서는 테스트 케이스 작성이 어려울 수 있음.
🚫 테스트 코드 유지보수 필요 → 코드가 변경되면 테스트 코드도 수정해야 함.
📌 언제 TDD를 사용하면 좋을까?
✅ 핵심 기능이 중요한 프로젝트 → 결제 시스템, 인증 시스템 등
✅ 장기적으로 유지보수해야 하는 프로젝트 → 코드 품질이 중요할 때
✅ 버그 수정이 잦은 프로젝트 → 기존 기능이 깨지지 않도록 보호
🚀 즉, TDD는 처음엔 느릴 수 있지만, 장기적으로 코드 품질과 유지보수성을 높이는 강력한 개발 방식이야!
혹시 더 궁금한 거 있으면 질문해줘! 😊
'개발공부 > CS' 카테고리의 다른 글
Docker란? (0) | 2025.02.15 |
---|---|
API란? (0) | 2025.02.15 |
RESTful API? (0) | 2025.02.15 |
OOP의 5가지 설계 원칙 (0) | 2025.02.15 |
OOP란? (0) | 2025.02.15 |