테스트 주도 개발(TDD)이란?

2021년 09월 15일 (29일 전)
요즘 많은 개발자들이 TDD에 대해 얘기하면서 개발자들의 관심을 많이 받고 있는 TDD에 대해 간단 정리해 보려고 한다.

테스트 주도 개발(Test Driven Development)

소프트웨어 개발 방법론 중의 하나로, 개발->테스트 방식이 아닌 테스트->개발하는 방식의 프로그래밍 방법을 말한다.
짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming(XP)의 ‘Test-First’ 개념에 기반을 둔 단순한 설계를 중요시한다.

TDD 장점

  • 소프트웨어 설계의 모듈화
  • 유지보수가 쉬운 코드
  • 코드 리팩토링의 원활화
  • 코드의 문서화
  • 디버깅 용이
  • 장기적으로 프로젝트 비용의 감소

TDD 단점

  • 생산성 저하
  • TDD 접근법은 배우기 어려움
  • 테스트 코드 유지 관리의 어려움

TDD의 효과

  • 피드백
    • 테스트를 통해 작업의 성공 & 실패 유무를 결정하고 이에 따라 피드백을 얻을 수 있다.
  • 협력
    1. TDD는 기록을 남긴다.
    2. 기록으로 남은 테스트 코드를 남들에게 보여줄 수 있고, 남들은 테스트 코드를 직접 실행해 볼 수 있다.
    3. 다른 사람의 코드에 쉽게 접근이 가능하고, 이해가 빨라지며 다른 사람의 코드 의도를 쉽게 확인할 수 있다.
    4. 그렇게 되면 쉽게 협력을 이끌어낼 수 있다.

TDD 개발 주기

  1. <Red> - 실패하는 테스트 코드를 먼저 작성한다.
  2. <Green> - 테스트 코드를 성공시키기 위한 실제 코드를 작성한다.
  3. <Blue> - 중복 코드 제거, 일반화 등의 리팩토링을 수행한다.

개발 주기를 조금 더 풀어서 쓰면

  1. 존재하지도 않는 메소드를 호출하는 테스트 코드를 먼저 만든다. (이때는 빨간 줄 범벅으로 테스트 실행이 안됨)
  2. 테스트 실행만 되도록 메소드 껍질만 만들어서 실행시킨다.
  3. jUnit의 빨간 막대가 나타난다. (구현이 안 된 껍데기만 있기 때문에 테스트 실행은 되지만 실패한다)
  4. 2번에서 만들어둔 메소드의 내부 구현을 완성하여 똑같은 코드를 다시 실행시킨다.
  5. 빨간 막대 대신 성공을 알리는 녹색 막대가 나타난다. (끝)
  6. 리팩토링
태그#Tdd