brunch

You can make anything
by writing

C.S.Lewis

by 백명석 Jul 16. 2016

TDD의 Test 작성 기법들

https://github.com/msbaek/memo/blob/master/CC-E22-Test-Processes.md

위 내용은 Robert C. Martin의 Clean Coders의 강의 내용을 정리한 것이다. 차주 즈음 팀에서 발표를 했으면 하는 내용이다. 요즘 팀에서 테스트 주도 개발 Test-Driven Development 과 소프트웨어 개발의 지혜 를 스터디하고 있는데 이 내용을 지금 즈음 공유하면 스터디에 도움이 될 것 같다.


1. Fake it till you make it

return null; return 0; 등으로 상수를 반환하여 테스트를 성공시키는 멍청해 보이는 방법(fake it till you make it)은 처음 접하게 되면 이게 뭐하는 짓인가 싶을 수 있다. 이렇게 단순한 방법으로 테스트를 성공시켜 나가야만 지속적으로 테스트를 성공시키기 용이하게 된다.


2. Stairstep Tests

이렇게 단순한 테스트 추가를 지속적으로 행하기 위해서는 다음 수를 위한 계단(stairstep tests)이 필요하다. 이 또한 경험에 의해 아는 것과 이론적 근거를 이해한 후에 경험하게 된다면 이해도 및 숙련도가 달라질 수 있다고 생각한다.


3 Assert First

TDD는 테스트 driven이어야 한다. 이 말은 테스트가 나를 조정해서 코드를 작성하게 한다는 것으로 느껴진다. 어떤 코드를 작성하고 싶다면 테스트를 통해 이런 상황을 만들어야 한다.


4. Triangulation

삼각법은 fake를 못하도록 하여 정확도를 높이는 방법이라고 생각할 수 있다. 평균을 구하는 테스트에서 처음에는 return 4(주어진 숫자들이 3, 5라면)와 같이 상수를 반환하여 테스트를 성공시킬 수 있다. 그러나 여기에 return 3(주어진 숫자들이 2, 4라면)이 필요한 테스트를 추가하면 더 이상 fake가 불가하게 된다. 이때 Little Golf Game(최저 타수로 홀 안에 공을 넣으면 이기는 미니 골프 게임. 최소한의 코드로 테스트를 성공시키는 것을 의미)을 수행하여 테스트를 성공시킨다.


5. One To Many

컬렉션에 대한 기능을 구현해야 할 때가 이때는 단일 원소에 대한 기능 구현에서 시작한 후에 이를 컬렉션에 대한 기능 구현으로 확장하는 것이 좋은 알고리즘을 갖는 방법이다.


6. Refactoring Tests

마지막으로 왜 테스트를 리팩터링 해야 하는지와 테스트와 프로덕션 코드 중 하나가 사라진다면 어떤 것이 남는 것이 좋을지에 대해 설명한다.


이 내용들이 TDD를 학습하려는 분들에게 도움이 되었으면 한다.

작가의 이전글 일하는 방식
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari