gyuwon
202
2019-07-20 23:22:40 작성 2019-07-22 03:43:45 수정됨
7
1232

테스트 코드가 없어서 당신이 시간이 없는 것이다


모 게시물에 테스트 코드 작성할 시간이 있다니 부럽다는 댓글이 있군요. 개발할 때 시간이 많이 부족하신 분인가 봅니다. 사실 수명이 긴 소프트웨어는 테스팅을 해도 시간이 별로 없습니다. 요구사항이 수북히 쌓여있고 지속적으로 생겨나니까요.

하지만 테스팅 또는 TDD를 사용하는 프로그래머는 과거에 만들어진 버그와 형편없는 설계에 발목을 덜 잡히고 그만큼 업무 효율을 높일 수 있는데, 여기서 중요한 점은 테스팅을 하지 않는 프로그래머는 코드베이스가 커짐에 따라 개발 속도가 지수적으로 떨어지지만 테스팅을 하는 프로그래머는 속도를 유지할 수 있다는 것입니다. 후자는 소프트웨어 사용자에게 안정적인 가치를 좀 더 빠르게 전달할 수 있습니다.

몇개월 코딩하다 누군가에게 인계하고 다른 곳으로 옮겨가는 SI 프로젝트의 경우, 일부 프로그래머들에겐 테스트 코드가 사치로 느껴질 수 있습니다. 심지어는 좋은 설계 조차도 필요 없다고 생각할 수 있습니다. 숨겨진 버그들과 수정하고 확장하기 어려운 낮은 품질의 설계는 더이상 그들이 알바 아니니까요.

하지만 지속적으로 제품을 진화시키고 서비스하는 조직의 경우 소프트웨어 회귀(https://en.wikipedia.org/wiki/Software_regression)를 인력으로 감당하는 것은 한계가 있습니다. 새로운 기능 하나를 추가하며 기존에 동작하던 천개의 기능에 부작용이 생길까봐 두려움에 빠지거나 실제로 문제가 발생해 고객과 비즈니스에 피해를 주는 것보다 천개의 테스트 코드를 작성하는 것이 훨씬 저렴합니다. 확장하기 어려운 설계 때문에 매번 레거시를 뒤엎는 것보다 테스트 코드의 도움을 받아 지속적으로 설계를 개선하는 것이 효율적입니다.

테스팅은 만능이 아니며 유용한 환경과 그렇지 않은 환경이 있습니다. 하지만 만약 그것이 우리에게 해줄 수 있는 것이 있다면 실용적으로 이용해야 합니다. 테스팅은 쓸모 없다고 말하는 분들이 사용하는 수많은 유용한 프레임워크와 라이브러리는 충실한 테스트 자동화를 통해 만들어졌습니다. 믿을 수 없다면 지금 GitHub에 접속해 코드를 보세요. 그리고 현장에서 TDD가 불가능하다고 생각하는 분들은 다음 영상에서 클라우드 서비스를 만드는 데에 어떻게 TDD가 사용되었는지 확인해 보세요.

https://www.youtube.com/watch?v=UttzAcbuk5k

5
0
  • 댓글 7

  • minarai
    2k
    2019-07-20 23:35:33

    저는 신입때부터 SM현장으로 오다보니 테스트 코드랑 문서가 필수가 되어가지고

    지금은 처음 개발당시에 빵꾸났던 문서랑 코드 숨바꼭질 하는게 제일 힘드네요...

    0
  • 라임
    435
    2019-07-20 23:39:14

    테스트가 없으니 코드의 변경이 두려워지고, 그만큼 작업 시간도 늘어나니 악순환의 반복이죠. 

    자기 합리화는 이제 그만하고, 프로라면 적어도 본인 코드에 대한 테스트는 짜야 한다고 생각합니다.

    1
  • jslovers
    1k
    2019-07-20 23:46:25 작성 2019-07-20 23:46:54 수정됨
    테스트 코드가 없어서 당신이 시간이 없는 것이다.

    ...이 아니라 기획과 설계의 구멍, 사라진 요건 변경 내역, 그리고 기타 등등이 아닐까 합니다.

    TDD를 사용하면 분명하게 사용전보다 개발 속도가 올라갑니다.

    하지만 주요 로직은 어느 정도 커버가 되더라도 다양한 사이드 까지는 아닌 것 같습니다.

    2
  • 즈루시
    11k
    2019-07-21 00:16:39

    시간이 없는 이유 중 하나일뿐이죠. TDD가 만능키는 아니니... 일정이 적절하고 플젝 인원 구성이 적절하다면 충분히 할만하고 SM 이라면 필수 추천해줄만합니다 SI에서는 어떻게들 하셨는지 궁금합니다

    습관이 되면 진짜 안할때보다 더 빨리 개발이 가능하던가요?

    0
  • 박가사탕
    666
    2019-07-21 01:47:11

    좋은 글입니다~!


    저는 코딩도 파서프로그램을 짜서

    돌립니다. 그럼 수십만개의 코드수정을 해주죠.

    이거 내가 따라다니며 수정한다는 생각을

    해보면 남량특집 영화죠 거의.


    0
  • Aaron
    739
    2019-07-22 12:51:45

    즈루시

    꼭 TDD나 SI 환경이라고 한정 지을 필요는 없을 것 같습니다.

    전 대형 복합기에 탑재되는 Android 앱을 개발하고 있습니다.

    SI는 아니지만, 나름 타이트한 개발 일정이 있습니다.

    개발시에는 태블릿/에뮬 환경에서 개발하지만,

    실제 복합기와 연동되어 돌아가는 것을 확인하려면 복합기에 올려봐야 하죠.

    근데 한번 빌드해서 복합기에서 돌려보려면 아주 많은 시간이 듭니다.

    이럴때 테스트 코드 작성이 큰 도움이 되는데요,

    로컬에서 모든 TC들이 통과했을 때 복합기에 올려봅니다.

    이건 하나의 예지만, 다른 영역에서도 비슷할 거라 봅니다.

    습관이 되면 확실히 빠릅니다.

    0
  • 즈루시
    11k
    2019-07-28 04:20:11

    Aaron // 말씀하신 환경은 sm과 비슷합니다 꾸준히 그 소스를 유지보수하고 개발하고 개선, 관리하는것이죠


    제 댓글의 포커스는 SI 에서 TDD가 과연 개발속도에 도움이 되는가 였습니다. 

    안해도 야근 열매를 달고 사는데 과연 테스트를 위해 본인이 얼마만큼 정성을 들일수 있는가 염두해두고 개발할 수 있는가 정도도요.

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.