[Software Engineering] TDD, Test Driven Development


Test-Driven Development 란?

  • 테스트 주도 개발 방법론
  • 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나
  • Simple Code의 추구를 목적으로 테스트 케이스를 먼저 개발하고 테스트 케이스를 통과하는 실제 코드를 나중에 개발하는 Agile 개발 방법
  • 테스트 작성으로 요구사항 검증, 설계의 고도화, 짧은 주기 Life Cycle을 반복하는 테스트-설계-피드백 중심의 개발사고 방식/방법론

일반적인 개발 프로세스는 어떻게 될까?

  • TDD를 알아보기에 앞서, 먼저 일반적인 개발 프로세스는 어떤지 확인해볼 필요가 있다.
  • 순서는 디자인 > 코드 작성 > (수동) 테스트 > 설계 (디자인) 수정으로 이루어 진다.
    • 개발을 어떻게 진행할 것인가에 대한 설계/디자인을 하고,
    • 이를 바탕으로 실제 코드를 작성한 뒤,
    • 최종적으로 테스트를 작동시켜 보면서
    • 기존의 설계/디자인을 수정한다.

TDD의 특징은?

  • 정확한 프로그래밍 목적을 디자인 단계에서 반드시 미리 정의해야만 하고 또 무엇을 미리 정의해야 한다.
  • Red, Green, Refactor 총 3단계로 구성되어 있다.
    • Red: 개발자는 바라는 향상 또는 새로운 함수를 정의하는 (초기적 결함을 점검하는) 자동화된 테스트 케이스를 작성한다.
    • Green: 그 케이스를 통과하기 위한 최소한의 양의 코드를 생성한다.
    • Refactor: 반복되는 코드, 긴 메소드, 큰 클래스, 긴 매개변수 목록 등 작성한 코드를 표준에 맞도록, 효율적으로 Refactoring 한다.
  • 개발을 진행하는 과정에서 Test Script 를 작성하고 코드를 Refactoring 했다는 점이 중요하다.

TDD 의 장점은?

  • 소스코드의 의존성이 감소하고 독립적인 테스트가 가능한 설계 구조
  • 단위 테스트를 통한 테스트 커버리지 유지 및 디버깅 시간 감소
  • 기능 위주의 테스트 작성으로 해당 기능의 견고성 증가
  • 깔끔한 코드 작성 가능

TDD 의 단점은?

  • 빈번한 요구사항 변경
  • 빈번한 요구사항이 있을 경우, 테스트 케이스의 변경, 반복적인 소스코드 변경이 요구된다.
  • 테스트 케이스의 독립성 확보 어려움
  • 실제 코드 개발 이전에 반복적인 소스코드의 변경은 테스트 케이스의 변경을 발생시킬 수 있으며 연관된 테스트 케이스에 영향을 미친다.
  • 필수적인 유닛 테스트의 자동화
  • 테스트가 자동화되지 않으면 테스트에 드는 시간이 증가되어 개발주기에 맞춰 진행이 어렵다.

Reference:

  • https://ko.wikipedia.org/wiki/%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%A3%BC%EB%8F%84%EA%B0%9C%EB%B0%9C
  • https://nesoy.github.io/articles/2017-01/TDD
  • http://www.jidum.com/jidums/view.do?jidumId=557





© 2018. by kdohyeon

Powered by kdohyeon