기술용어/소프트웨어공학

TDD(Test-Driven Development)

아이티신비 2024. 6. 28. 09:00

테스트 중심 개발, TDD

정의
  • Simple Code의 추구를 목적으로 Test Case를 먼저 개발하고 Test Case를 통과하는 실제코드를 나중에 개발하는 Agile 개발방법
  • 테스트 작성으로 요구사항 검증, 설계의 고도화, 짧은 주기 Life Cycle을 반복하는 테스트-설계-피드백 중심 개발사고 방식/방법론
특징
  • Design for Testability: 소스코드의 의존성이 감소하고 독립적인 테스트가 가능한 설계구조
  • 테스트 커버리지 확보: 단위테스트를 통한 테스트 커버리지 유지, 디버깅 시간감소
  • 기능에 집중: 기능위주의 테스트 작성으로 해당 기능의 견고성이 증가
  • clean code that works: 작동하는 깔끔한 코드 지향
사이클
  • 사용자 요구사항 : 사용자, BA, 제품 개발자 등이 요구사항 Story 작성
  • Test Case : 사용자, Tester 등 관련자들이 Test Case를 마련 Detail하게 작성
  • Code 작성 : 테스트에 대해 실행 가능한 코드를 빠르게 작성
  • (임시코드/자료삽입, 가짜 구현, 명백한 구현)
  • Refactoring : Bad small을 제거하여 Refactoring 수행 후 Simple code에 대한 Test 수행
패턴
  • 빨강막대패턴 : 테스트를 언제, 어디에 작성할 것인지, 언제 멈출 것인지 결정
  • 테스트 패턴 : 상세한 테스트 작성(자식/모의객체/Self-shunt/메시지 호출)
  • 초록막대 패턴 : 코드가 테스트를 통과하도록 신속하게 작동하는 코드 작성
  • xUnit 패턴 : 자동화된 단위테스트 지원 프레임워크(jUnit, CppUnit, PyUnit)
  • 디자인 패턴 : 검증된 해결책, 설계 Template/Best Practice
수행방법
  • Automatic: 테스트가 혼자 실행, 자신을 검증할 수 있어야 함
  • Through: 철저함, 문제 영역에 대한 완벽한 테스트 지원
  • Repeatable: 반복가능, 같은 결과 도출
  • Independent: 하나의 대상에 집중, 독립적 상태 유지, 다른 테스트 의존 안 함
  • Professional(전문적): 캡슐화, 낮은 결합도의 원칙이 테스트 코드에서도 지켜져야 함
장애요소
  • 빈번한 요구사항 변경
  • 테스트케이스의 독립성 확보 어려움
  • 유닛 테스트의 자동화툴 지원 및 툴의 유연성
  • 반복적인 회귀테스트


 

공감과 댓글은 아이티신비에게 큰 힘이 됩니다.

블로그 글이 유용하다면 블로그를 구독해주세요.♥