좋은 글을 발견하면 깜찍하게 인용,정리하고 폼나는 자기 의견까지 버무려서 글을 쓰는데 탁월한, 위자드닷컴 2008추천블로거 영회가 단골메뉴 단위테스트에 대한 글을 올렸다. 마침 애자일 스프링 책의 테스트관련 챕터를 쓰고 있어서 관심이 더 가서 글을 읽어봤다.

결론은 이렇다.

읽고 보니 그렇다. 테스트를 하지 않고 머리속으로 테스트 하기 좋은 코드를 작성하거나, 작성한 뒤에 테스트를 하면서 수정하기 보다는 당연히 먼저 테스트를 할 때 테스트 하기 좋은 코드를 작성하기가 수월할 것이다. :)

정답이다.

개발자가  작성하는 테스트코드의 함정은 이미 만들면서 설계해놓고, 이상적으로 동작할 것이라고 가정한 방식을 따라 교묘하게 안전하기만 한 테스트를 만들기 쉽다는 것이다. 전문 테스팅 훈련을 받거나, 자신의 코드에 대해서조차 까탈스러운 개발자가 아니라면 이미 머리로 설계해가면서 다 만든 코드에 대해서 꼼꼼한 테스트코드를 작성하기 힘들다. 게다가 테스트를 나중에 작성하는 건 정말 지루하다. 또 영회가 인용한 글에 나오는 것처럼 테스트하기가 어렵거나 단위테스트가 아닌 통합/기능테스트가 막 짬뽕되어 만들어지기가 쉽다. 테스트를 먼저 작성해야 테스터블한 코드기 때문이기도 하다.

 

그럼 이런 비슷한 얘기를 지금까지 여러번 블로그에 올리면서 단위테스트 또는 TDD 또는 테스트우선방식에 대해서 강조했던 영회는 과연 그렇게 하고 있을까? 했다면 "읽고보니 그렇더라"보다는  "해보니 그렇더라"라는 글을 올리지 않았을까라고 살짝 의심이 가지만, 그간의 영회의 테스트에 대한 뜨거운 열정과 폭발적인 관심을 생각해보면… 흠?

비단 테스트우선이나 TDD가 아니라 자동화된 테스트코드 작성에 대해서도 마찬가지이다.

 

사실 좋다고 알고 있고, 좋다고 이야기하고 떠들어댈 수 있는 것과 실제로 좋기 때문에 꼭 실천하고 하는 것에는 많은 차이가 있다. 나도 TDD가 거의 대부분의 경우에 최고의 개발전략이라고 생각하고 열심히 실천하려고 하고 있지만, 어느 순간 보면 습관적으로 테스트없이 정신없이 코드를 만들고 있는 내 모습을 보고 놀랄 때가 있다. TDD만큼 많은 사람의 입에 오르내리고 인정받는 것도 없지만, 내가 관찰한 결과는 정말 극도로 사용되지 않는 기술이기도 하다.

물론 "나중에라도 JUnit테스트를 만들면 TDD 아니에요?" 하는 사람은 일단 제외하고.

TDD에 대해서 교육까지 시키고, 글도 쓰고, 인정하는 사람들 조차도 왜 실천하지 않을까? 제일 종종 듣는 답변은 "일정상 테스트 작성할 시간이 없어서.."인데, 그 역시나 "TDD가 결국엔 개발시간을 단축시켜준다"라고도 본인 입으로 얘기했던 사람들의 말이라 변명으로 들리지도 않는다.

 

좋은 걸 알면서도 실천 안하는 이유는 뭘까?

여러가지 이유가 있겠지만 나는 가장 큰 이유는 "사실은 정말 좋은 줄 알지 못해서"라고 생각한다. 사람이 말하는 것과 행동하는 것이 다른 큰 이유는 그 말이 진심이 아니거나, 마음 속에선 부정하는 부분이 있기 때문이다. 말로는 인정하지만 몸으로는 부정하는 것 아닐까?

물론 오랜 습관의 문제도 있겠고, 환경 탓을 할 수도 있고, 팀의 문화나 뭐 살인적인 개발일정 등등을 다 얘기할 수도 있겠지만, 개인적인 여유 시간에 작은 코딩을 하나 할 때도 테스트를 안만드는 것을 보면 그런 것들은 다 치사한 변명이었을 것이라는 의심만 든다. 차라리 "TDD해보니 별거 아닌 것 같다"라던가 "TDD는 실력이 아주 뛰어난 사람이 아니면 힘들다"라는 식의 답변이 더 솔직해 보인다. 그런 말을 하는 사람들은 어느 때가 되면 자신의 생각이 잘못됐음을 인정할 가능성이라도 있겠지만, 말로는 항상 좋다고 하지만 막상 현실에선 실천하지 않는 사람은 평생가도 못할지도 모른다.

 

김현국님의 회사 모토가 "개발하다 죽자"라던데, 적어도 TDD를 하려면 "TDD하다 죽자" 정도의 굳은 결심이나, "정말 테스트를 먼저 작성해야 좋은 코드를 작성할 수 있다"라는 진정한 확신과 "좋은 코드를 작성하는 개발자가 되고 싶다"는 열망이 함께 있어야 하지 않을까.

 

참, TDD하다 죽으면 안되니 "TDD하고나서 죽자"로 바꿔야겠다.

Related posts:

  1. 테스트 주도 개발 TDD 실천법과 도구 – 채수원
  2. 모든 개발자는 사실 TDD를 하고 있다
  3. 유쾌한 이슈처리 재촉 메일
  4. TDD와 TLP
  5. 오픈소스 소프트웨어에서 오픈소스 코드가 가지는 의미는?
  6. TDD 안티 패턴

Facebook comments:

to “알면서 왜 안할까? TDD”

  1. 봄싹 다음 주제는 테스트로 할까요. 단체 TDD. 사부님이 숙제 내주고 매주 모여서 자기가 작성한 테스트 리뷰. 어떤가요. 재밌겠네요. 가서 물어봐야지~

  2. 꼬쳤어.. 트랙백도 안되는… 워프

  3. 손 트랙벡… 영회라는 이름에 걸었음
    younghoe.info/1013

  4. 안녕하세요^^; 관심사였던 TDD가 눈에 들어와서요;;봄싹 스터디에서 엉망진창에 테스트코드를 만들어보는 이들을 당혹스럽게까지 만들기도 한 일人이기도 합니다;
    알면서 왜 안하는 분들도 있겠지만 수련하다 몰라서 헤메이다 접는 분들도 많아 보이네요.. 언제쯤이면 알면서 왜 안할까? 라는 질문에 답변을 해볼 수 있을지요… OTL..

  5. 제 이름에 트랙백을 걸었습니다.
    요약하면 요구사항과 구현이 자주 바뀌는 대부분의 환경에서는 TDD하기에는
    어려움이 많습니다. ^^;

  6. 언젠가 일민 강사님과 영회 강사님께 수업을 들었던 때가 있었습니다. ^^
    그때 Spring하고 TDD에 대해서 간단하게 배울기회가 있었는데요..

    음.. 머랄까?
    TDD 정말 멋진 놈이었습니다.

    ACL이라고, 접근 권한 레벨을 주어야 하는 부분이 있었는데. 그 부분을 TDD로 개발을 했었습니다. ^^
    기대에 대한 결과값을 확인하고. 아~ 이제 됬구나 했었습니다.
    TDD 이런거구나.. 무언가 뿌듯한 느낌? 이런게 들었습니다.

    그런데, 역시나 제 자신도 믿지말라는 ^^ 동생 이야기가 현실이 되었습니다.
    잘못된 결과가 나왔던 거죠.. 그때 TDD로 개발해 두었기 때문에 한번에 수정을 할 수 있었습니다. WAS를 기동하지 않고서 말이죠..

    TDD를 저도 두분 강사님께 배운만큼 나누려고 이야기 해보면.. 다음과 같은 어려움이 있었습니다.
    1. 새로운것에 대한 거부감.(난 이렇게 해도 잘 짰는데 이게 왜 필요하지?)
    2. 좋다고 하는데 도대체 어떻게 해야하는거야? (TDD를 어떻게 하는지, 그 목적이 무엇인지 알려주는 사람이 없다.)
    3. 먼 미래를 고려하지 않는 즉흥적인 개발 습관. (차후 내가 읽어도 쉽게 이해할 수 있도록 짜기보다는 현재 기능을 중시하고 있다.)

    ^^ 이번 프로젝은 처음부터 TDD를 사용해 볼까 합니다. 저를 비롯한 모든 팀원에게 교육 한번 하구요 ^^ (영회님처럼 프로젝트 중간에 간단한 스터디겸. 세미나로..)

  7. 저도 이름에 트랙백을 걸어봅니다.
    아직 TDD가 가야할 길은 멀어보입니다.

  8. [...] 알면서 왜 안할까? TDD 무쟈게 찔린다. 근 6개월 동안 부서내 test case 관련 업무를 하면서 왜 test case를 만들지 않냐고, 왜 TDD를 하지 않을까 불평만 했지만 정작 나조차도 코딩할때는 그러지 않으니. 솔직해지자.(글도 좋았지만 테마도 맘에 든다. WP 테마 바꾼지 얼마 안됐는데 -_-)2008-11-21 10:15:51 [...]

  9. Its really a great information i have ever found through blogs. No doubt i can say that its a beneficial visit to this one. I appreciate your goal. Thanks for taking time and building such a great application. Thanks once again for sharing it here.

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha