• 0
  • 2
February 20, 2025

테스트 코드와 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일

    오오 ~~ :) 너무 글 좋네용