- 0
- 2
테스트 코드와 TDD 란?
답변 확인
- 태스트 코드(Text Code)와 테스트 주도 개발(TDD, Test-Driven Development) 는 소프트웨어 개발에서 코드의 안정성과 유지보수성을 높이는 중요한 기법
1. 테스트 코드(Test Code)란?
-
✅ 테스트 코드는 애플리케이션의 기능이 올바르게 동작하는지 자동으로 확인하는 코드
-
✅ 수동 테스트 대신 자동으로 실행되어 코드 변경 시에도 안정성을 유지할 수 있도록 도움
💡 테스트 코드 예제 (Jest 사용)
// sum.js (테스트할 함수)
export function sum(a, b) {
return a + b;
}
// sum.test.js (테스트 코드)
import { sum } from './sum';
test('1 + 2는 3이어야 한다.', () => {
expect(sum(1, 2)).toBe(3);
});
- ✅ test() 함수는 특정 기능이 기대한 대로 동작하는지 검증
- ✅ expect(sum(1, 2)).toBe(3)은 sum(1,2)의 결과가 3인지 확인
- ✅ 실행 시 모든 테스트가 통과하면 코드가 정상적으로 동작하는 것!
2. TDD(Test-Driven Development, 테스트 주도 개발)란?
- ✅ TDD(테스트 주도 개발) 은 "테스트 코드를 먼저 작성한 후, 기능을 구현하는 개발 방식"
- ✅ 코드의 품질을 향상시키고, 유지보수성을 높이며, 버그를 사전에 방지할 수 있음
💡 TDD 개발 과정 (Red -> Green -> Refactor)
1️⃣ Red (실패):
- 먼저 실패하는 테스트 코드를 작성
- 예제:
sum(1, 2)
가3
을 반환해야 한다는 테스트를 먼저 작성
2️⃣ Green (성공):
- 테스트가 통과하도록 최소한의 코드를 작성
- 예제: sum(a, b) { return a + b; } 를 작성하여 테스트 통과
3️⃣ Refactor (리팩토링):
- 기능이 정상적으로 동작하면, 코드를 개선(리팩토링)
💡 TDD 예제
// 실패하는 테스트 작성 (Red)
text('1 + 2는 3이어야 한다.', () => {
expect(sum(1, 2)).toBe(3);
});
// sum 함수가 없어서 테스트가 실패함!
// 최소한의 코드 작성 (Green)
export function sum(a, b) {
return a + b;
}
// 실행 후 통과 확인
// 코드 개선 (Refactor)
// 현재 sum 함수는 충분히 간결하므로 추가 리팩토링이 필요 없음
3.TDD의 장장점
📌 TDD의 장점
- 디버깅 시간 단축: 자동화된 테스트를 통해 버그를 쉽게 찾아낼 수 있음
- 리팩토링 용이: 기능이 정상적으로 동작하는지 검증할 수 있어, 안정적으로 코드 개선이 가능
- 설계 품질 향상: 테스트가 가능한 구조를 만들기 위해 더 나은 설계를 유도
- 빠른 피드백: 개발 도중 오류를 조기에 발견하여, 유지보수 비용을 절감할 수 있음
📌 TDD의 단점
- 초기 개발 속도 저하: 테스트 코드 작성 시간이 추가되므로 개발이 느려 보일 수 있음
- 복잡한 UI 테스트 어려움: 프론트엔드에서는 사용자 인터페이스(UI)를 포함한 테스트가 어려운 경우가 많음
- 경험이 필요: 효과적인 테스트 코드 작성을 위해서는 어느 정도 경험과 학습이 필요
4. 테스트 코드와 TDD 비교
구분 | 테스트 코드 | TDD |
---|---|---|
개발 방식 | 기능 구현 후 테스트 코드 작성 | 테스트를 먼저 작성 후 기능 구현 |
목적 | 기능이 정상적으로 동작하는지 확인 | 코드의 안정성과 설계를 개선 |
실행 흐름 | 기능 → 테스트 | 테스트 → 기능 → 리팩토링 |
장점 | 기능 검증 가능 | 코드 품질 개선 및 유지보수 용이 |
🔹 결론
- ✔ 테스트 코드는 코드가 정상적으로 동작하는지 검증하는 코드
- ✔ TDD(테스트 주도 개발) 는 테스트를 먼저 작성한 후 기능을 구현하는 개발 방식
- ✔ TDD를 활용하면 버그 예방, 유지보수성 향상, 안정적인 리팩토링이 가능 🚀
참고 자료
Top comments (2)
- DavidYang2월 19일
우와 댓글이다~
- Olivia2월 19일
오오 ~~ :) 너무 글 좋네용