테스트 주도 개발

Bam·2022년 2월 15일
0

CS

목록 보기
4/28
post-thumbnail

테스트 주도 개발 Test Driven Development

테스트 주도 개발(TDD, Test Driven Development)는 개발 과정을 여러 세부 단위로 나누어 테스트하고, 수정하고, 완성하는 과정을 반복하는 익스트림 프로그래밍 방식 중 하나 입니다. 개발자는 테스트를 위한 코드를 작성하고, 그 테스트를 통과하기 위한 코드를 작성하며 개발해나가게 됩니다. 이 과정을 프로젝트가 완성될 때까지 반복해서 개발을 진행하게 됩니다.

기존의 개발 방식이 설계 -> 실제 코드 작성 -> 테스트의 순서로 이루어졌었다면, 테스트 주도 개발방식은 설계 -> 테스트 -> 실제 코드 작성의 순서로 진행됩니다.

테스트 주도 개발의 가장 큰 특징은 단위 테스트로 프로젝트를 일정 단위로 나누고 나뉜 단위에 대해 테스트 코드를 작성하는 작업을 실시합니다. 그리고 작성된 테스트를 통과하는 코드를 작성하고, 작성된 코드를 리팩토링 과정을 거쳐 실제 코드로 만들어나가게 됩니다.


테스트 주도 개발의 장단점

테스트 주도 개발의 장점은 다음과 같습니다.

  • 테스트 이후 실제 코드 작성 과정에서의 구조화가 용이해 객체지향적인 코드 작성에 유리하다.
  • 소단위 테스트를 토대로 프로젝트를 완성시켜 나가기 때문에 전체적인 완성도가 높아진다.
  • 버그 발생과 디버깅이 시간이 줄어들어 프로그램의 결합이 줄고, 이는 유지보수 비용 절감으로 이어진다.
  • 작은 단위를 계속 리팩토링 하게 되므로 코드가 깔끔해진다.

테스트 주도 개발의 단점은 다음과 같습니다.

  • 개발 시간이 기존 방식(폭포수 모델 등)에 비해 길다.
  • 기존 방식에서 테스트 주도 개발 방식으로 변경하기가 어렵다.

단점을 조금 자세히 이야기 하자면, 아무래도 기존 방식에서 제일 나중에 실시하는 테스트 과정을 먼저 실시하기 때문에 기존 방식에 익숙해진 개발자들이 적용하기 어렵다는 점이 있습니다.

또한 소단위 테스트와 리팩토링으로 인해 전체적인 개발 시간이 늘어나게 됩니다. 따라서 개발 기간 엄수가 중요하다면 다른 방식을 사용하거나, 예상 시간을 잘 지켜야합니다.


테스트 주도 개발의 사이클

테스트 주도 개발은 다음과 같은 절차를 프로그램 완성시까지 계속해서 반복합니다.

  1. 요구사항: 고객의 요구사항이나 현재 개발 단계에 따른 테스트 단위를 나눈다.
  2. 실패: 테스트를 통과하지 못하는 케이스를 작성한다.
  3. 성공: 실패 단계에서 통과하지 못했던 케이스를 통과시키기 위해서 코드를 변경한다.
  4. 리팩토링: 작성된 테스트 통과 코드를 리팩토링한다.
  5. 반복: 테스트 단위가 완성될 때까지 반복한다.

테스트 주도 개발 도구

개발자가 테스트 주도 개발과정에서 각 과정들을 효율적으로 할 수 있도록 다양한 도구들이 나와있습니다. 물론 도구 없이도 TDD를 구현할 수 있으나, 도구를 사용한다면 효율 좋은 TDD를 할 수 있습니다.

자바의 JUnit, C++의 CppUnit, 자바스크립트의 Jasmine, Mocha, QUnit 등이 있습니다.

0개의 댓글