개발론중에 테스트 주도 개발 (TDD, Test-Driven Development) 이라고 있습니다.
즉, 테스트를 중요시 하는 개발론인데요. 예전부터 관심은 있었지만 막상 필요한가? 라는 생각을 하며 흘려 넘겼던 이야기입니다.

최근 저희 팀에서 후속작을 위해 게임브리오 엔진을 R&D 중에 있는데, 이참에 한번 TDD를 적용해볼까 해서 이리저리 알아봤습니다. 뭔가 대단한 방법인가 했는데, 그렇게 거창한 것이 아니더군요. 말그대로 작성한 코드를 항상 의심하며, 테스트를 통해 검증하자는 겁니다.

간단히 예를 들어 A 라는 오브젝트를 B 지점으로 옮기는 함수를 만들었는데, 실제 동작 구현을 했을 때, A가 정말 B로 옮겨졌는지 검증을 하는 것이죠.

과연 이렇게까지 테스트를 통해 검증이 필요할까? 라는 생각도 있었지만, TDD에 대해 알아가면 알아갈수록 필요성을 느끼게 되더군요. 보통 작업을 하면서 기능을 추가하다보면, [ 코딩 ] -> [ 컴파일 / 빌드 ] -> [ 실행 / 테스트 ] -> [ 디버깅 ] 의 스텝을 반복해가며 개발을 하는데, 테스트 코드를 통하게 되면 [ 실행 / 테스트 ] -> [ 디버깅 ] 부분의 소요 시간이 확 줄어들게 됩니다.

UnitTest++나 GTest 같은 단위 테스트 라이브러리를 이용하여 빌드 단계에서 작성한 테스트 코드를 통해 해당 코드에 대한 검증을 바로 수행할 수 있고, 오류가 있을 시 바로 수정이 가능하여 [ 실행 / 테스트 ] -> [ 디버깅 ] 에 들이는 시간 비용을 확 줄일 수가 있죠.

또한, 테스트 코드는 한번 쓰고 버리는 것이 아니라 계속 남기 때문에 나중에 해당 코드와 연계되는 부분이라든가 추가 기능이 들어갈시에 이전 테스트 코드를 사용함으로서 바로 검증이 이루어지므로 새로운 코드 추가에 따른 리스크도 대폭 감소 할수 있다는 겁니다.

사진은 쑥갓님이 제작하신 VisualUnitTest++

UnitTest++ 관련 링크
UnitTest++ 다운로드 : http://sourceforge.net/projects/unittest-cpp/files/
UnitTEst++  튜토리얼 : http://unittest-cpp.sourceforge.net/money_tutorial/
VisualUnitTest++ : http://code.google.com/p/vutpp/


이렇게 말은 거창하게 해놨지만, 솔직히 저도 아직까지는 어떤식으로 써야 할지 감은 안잡히고 있습니다.
현재 테스트 프로젝트에 UnitTest++ 라이브러리를 적용해놓았기는 하지만, 써먹을 만한 곳이 아직은 없는것 같습니다. 일단은 테스트 코드를 작성하는 습관을 먼저 들여야 겠습니다.


유용한 참고자료

+ Recent posts