KIDK.KR

야매 TDD

#Programming

‘야매 TDD’는 사용하는 API와 테스트 도구에 익숙하지 않은 상황에서 다음과 같은 절차로 구현하는 것을 말한다:

  1. 우선 아주 간단한 부분 문제를 하나 해결하고, 완전하게 동작하는 코드를 만든다. 이것과 유사한 다른 부분 문제들의 구현은 앞으로 이 코드들을 기반으로해서 만들 것이다.
  2. 이 코드에다 유닛테스트를 작성한다.
  3. 이 코드들을 복제해 다른 문제를 위한 코드 뭉치를 마련한다.
  4. 테스트부터 변형하고 그 다음 복제한 코드를 수정하기 시작한다.
  5. 테스트가 깨질 것이다.
  6. 테스트를 고치며 복제한 코드를 마저 수정한다. 이런 과정을 거치면 시행착오를 줄이면서 변형을 해낼 수 있다.

예를 들면 다음과 같이 적용할 수 있을 것이다.

특정 CRUD에 해당하는 코드를 구현해야 한다면 이 문제는 한 가지 모델에 대하여 4개의 부분문제가 있는 경우라 볼 수 있다. 그렇다면,

  1. 우선 GET하는 모듈부터 완전하게 동작하는 코드를 만든다.
  2. GET에 대한 유닛테스트를 작성한다.
  3. GET을 복제해서 POST를 위한 코드 뭉치를 마련한다.
  4. 2에서 작성한 유닛테스트를 변형해 POST를 위한 테스트를 작성한다.
  5. 테스트를 돌려보고 깨진 부분을 확인한다.
  6. 테스트에 맞추어 코드를 마저 수정한다.
  7. (나머지 PUT, DELETE에 대하여 3->6 반복)

이 야매 TDD를 하다보면 한 가지 신기한 점은 코드 뭉치가 점점 진화하는 것처럼 느껴진다. 복제본이 좋아질 수록 이전에 작성한 (최초에 작성한 GET 모듈) 코드가 함께 진화하고 최종적으로 비슷한 구현체가 된다. 더 나아가 이 진화의 원형에 해당하는 것을 추상화하여 팩토리 패턴을 만들 수도 있을 것이다.