알라딘MGG와이드바


마이클 페더스(Michael Feathers)는 단위테스트를 부정했는가 개발 이야기

Working Effectively with Legacy Code 로 유명한 Object Mentor 의 마이클 페더스 (Michael Feathers) 가 단위 테스트 규칙(A Set of Unit Testing Rules) 이라는 글을 쓴 적이 있다. 여기에 대한 내용은 'xUnit 테스트 패턴' 18장 표준 픽스처(Standard Fixture) p.420 에도 나오는데 여기에 써 보겠다.

"이런 테스트는 단위테스트가 아닙니다.
 * 데이터베이스와 통신한다
 * 네트워크로 통신한다
 * 파일을 읽고 써야 한다
 * 다른 단위 테스트와 동시에 실행시켰을 때 항상 성공하는 건 아니다.
 * 테스트를 실행하기 위해 (환경 변수를 수정한다던지 하는) 환경에 특별한 작업을 해줘야 한다."

xper 2010.07 모임에서 feather rule 을 얘기하면서 "단위테스트에 대한 부정적인 얘기" 가 논의된듯 하다. 그렇다면 마이클 페더스의 이야기를 끝까지 읽어보자.

"이런 테스트들이 나쁘다는 건 아닙니다. 보통 테스트로서 충분한 가치가 있고 단위 테스트 하니스 (harness) 안에 추가될 수도 있습니다. 하지만 이런 테스트들을 진정한 단위 테스트들과는 따로 떼어놓아 변경이 생길 때마다 단위 테스트들을 빨리 돌려볼 수 있게 유지하는 것이 중요합니다."

내 생각에 이런 토론이 나온 이유는
1. 토론 내용을 요약정리하는 과정에서 의견이 잘못 전달되었다
2. "이런 테스트는 단위테스트가 아닙니다"에 해당하는 도메인 작업을 계속하다보니 단위테스트가 왜 좋은지 전혀 느낄 수 없었다
인 듯 하다.

분명 단위테스트는 만능이 아니다. Multithread 나 GUI 같이 아직까지는 뾰족한 수가 없는 부분도 있고, 테스트 프레임워크를 잘못 구축하다보면 오히려 테스트 덕분에 얻을 수 있는 생산성의 향상보다 테스트를 작성하는 비용이 더 들 수도 있다. TDD 를 한다고 해서 프로젝트의 성공을 보장하는 것은 아니다(어떤 방법론이 프로젝트의 성공을 보장할 수 있겠는가?). 하지만, 이런 점을 감안하더라도 프로그래머가 잘 활용하기만 한다면 단위테스트로부터 얻을 수 있는 게 많다. 일단 나는 분명하게 단위테스트의 효험을 실무에서 얻을 수 있었고, 국내 N모사나 S모사, L모사, 해외의 크라이텍을 비롯한 여러 게임회사, Microsoft 를 비롯한 여러 회사에서 단위테스트의 효과를 보여주고 있다.

아래 그림은 Mary Poppendieck 이 2007 년 9월에 한국에 오면서 PT 한 자료에서 가져왔다.
보면 알겠지만 단위 테스트는 여러 테스트의 일종일 뿐이고, 모든 영역을 다 담당하는 게 아니다.
하지만 "목욕물을 버리면서 어린애까지 버리진" 말자.




덧글

댓글 입력 영역


Yes24위대한게임의탄생3

위대한 게임의 탄생 3
예스24 | 애드온2