1 minute read

TDD(Test Driven Development)

by Kent Beck
을 읽고 내용을 정리합니다.

테스트 주도 개발

은 프로그램을 개발하는 방법 중의 하나이다.

처음 TDD 가 제창된 이후로 많은 사람들이 이 방법에 매료되었고, 실천을 통해 그 방법의 강건함을 증명했다.

테스트 주도 개발 은, 소프트웨어 엔지니어라면 누구라도 따라할 수 있는, 단순한 디자인들과 테스트 모음들을 통해 자신감을 북돋게 해줄 수 있는 기술들의 집합이다.
이 기술들은 두 가지 의 간단한 규칙을 따른다.

  • 어떠한 코드를 작성하기 전에, 실패하는 자동화 테스트 를 작성한다.
  • 중복을 제거한다.

테스트 주도 개발 의 리듬은 다음과 같다.

  • 빠르게 테스트 를 추가한다.
  • 모든 테스트를 수행하고 새로운 테스트가 실패 하는 것을 확인한다.
  • 작은 수정 을 가한다.
  • 모든 테스트를 수행하고 모든 테스트가 성공하는 것을 확인한다.
  • 중복을 제거 하기 위해 리팩토링 을 한다.

테스트 주도 개발 은 아주 처음부터 조금씩 조금씩 건강한 프로그램을 만들도록 도움을 준다. 조금의 테스트를 위한 조금의 수정/개선 을 유도한다. 이 수정퇴보 가 될 수도 있고, 진보 가 될 수도 있다.

테스트 주도 개발테스트 라는 것에 대한 새로운 관점을 제시한다. 원래 테스트라는 개념은 기존의 프로그램이 주어진 상황에 맞는 결과를 제시하는 것인가 를 확인하는 것이다. 따라서 시간에 따른 순서를 따지자면 프로그램 -> 테스트 인 것이다.

하지만 테스트 주도 개발 은 순서가 반대 이다.
테스트 -> 프로그램 의 순으로 테스트가 먼저 이다.

나는 이것을 일종의 희망사항 을 적는 것으로 이해했다. 즉, 테스트에 자신이 원하는 프로그램이 만족해야하는 사항을 적는 것이다. ‘내 프로그램이 이렇게 작동했으면 좋겠다.’ 라고 말이다.

그래서 처음에 테스트를 작성하면 당연히 실패할 것이다. 프로그램은 아직 완성되지 않았고, 테스트는 (조금이라도 더) 완성된 프로그램을 대상으로 하고 있기 때문이다.

조금 더 자세한 TDD cycle 은 다음과 같다.

  1. 테스트를 작성한다. 당신의 마음 속의 과정이 코드로 어떻게 나타났으면 좋겠는지를 생각하라. 당신은 이야기를 쓰고 있다. 당신이 가졌으면 하는 인터페이스를 고안하라. 당신이 상상하는 이야기의 모든 요소를 포함하는 것이 올바른 답을 계산하는 데 필수적이다.

  2. 이 테스트가 작동하도록 하라. 무엇보다 빠르게 테스트 바를 빨강 에서 초록 으로 바뀌게 하라. 만약 깔끔하고 단순한 해결책이 보인다면, 그것을 사용하라. 만약 깔끔하고 단순한 해결책이 보이지만 시간을 좀 들여야 한다면, 그것을 메모하고 주요 문제로 돌아가서, 우선 테스트 바가 초록 이 되게하라.

  3. 올바르게 고쳐라. 이제 시스템은 동작한다. 중복을 제거 하고, 올바른 디자인 패턴 을 적용하여 프로그램이 올바르게 작동하도록 하라.

이 과정의 목표 는 결국 작동하는 깨끗한 코드 를 작성하는 것이다. 이러한 코드는 아무리 뛰어난 프로그래머라 하더라도 쉽게 도달하기 어려운 목표일 수 있다. 그리고 당연히도 대부분의 프로그래머들은 더욱 도달하기 어렵다.

하지만 점진적인 과정을 통해 이를 체득한다면, 분명히 더 강건한 프로그램을 만들 수 있다.

다음에는 TDD의 여러 패턴을 알아보도록 하자.