빠에야는 개발중

테스트 주도 개발 본문

책 리뷰

테스트 주도 개발

빠에야좋아 2019. 7. 2. 01:01

많은 사람들이 테스트가 중요하다고 말한다. 나도 중요성은 느끼고 있었지만 잘 실천하지 못하는 중이었는데 백기선님의 유튜브 영상을 보다가 이 책을 꼭 읽어보라고 추천해주셔서 바로 사서 읽어보았다. 사실 여러 일들이 겹쳐서 완독하는데는 꽤 오랜 시간이 걸렸다..

테스트는 귀찮다

언젠가 회사 동료 중 한 명과 이런 이야기가 나온 적이 있다. "테스트는 구현 내용이 바뀔 때마다 계속 바뀌어야 하고 귀찮잖아요. 결과만 확인할 수 있으면 되지 않을까요? 괜히 오버헤드만 늘어나는 느낌이에요." 어느 정도 공감은 되었다. 어떤 기능을 개발할 때 각종 예외상황을 생각하면서 테스트를 작성하여 통과시킨다는 건 어찌 보면 배보다 배꼽이 더 큰게 아닐까 하는 생각이 들었다. 그러다보니 점점 테스트 작성이 귀찮아지고 결국 눈 앞의 기능 구현에 더 관심이 가고.. 그런 순환이 이어졌다. 개인적으로는 안정성을 높이는 작업보다 새로운 기능이 생기는 것이 좀 더 성취감이 있기도 했고... 반대로 말하면 날림으로 했다는 이야기가 되기도 하지만 ㅎ

그러다가 몇몇 프로젝트를 진행하고 큰 버그와 씨름을 좀 하다보니 이거이거 일일히 재현하면서 개발하기가 여간 귀찮은게 아니다. 직접 데이터를 보면서 포스트맨 따위로 데이터를 쏴보는 것이 마음이 편했었지만 폐쇄적인 네트워크 안에 있거나 시간이 촉박하거나 하는 등의 환경에 처해보니 상황이 완전히 반대가 됐다. 뭔가 척하면 척하고 결과를 알 수 있는 테스트가 얼마나 소중한 것인지 점점 알아가고 있었다.

테스트는 쉬워야 한다

아니 그래, 테스트가 중요한 거 잘 알겠단 말이야. 근데 귀찮은걸 어떡해? 그리고 내가 충분히 많고 다양한 경우들을 모두 테스트 했는지 어떻게 알아? 그런 생각들 때문에 점점 미루던 테스트들을 이제라도 조금씩 해볼까?라고 생각할 수 있도록 이 책이 알려주었다. 테스트는 쉬워야한다는 것을. 나는 테스트라고 하면 뭔가 이렇게 삐까번쩍하게 잘 설계된 테스트 속에서 적절한 데이터를 적절한 순서로 적절히 돌려서... 짠! 하는거라고 생각했다. 그런데 책에서는 일단 초록막대부터 보자고 한다. 흔히 말하는 '가라 데이터'를 쓰자는 거다. 오잉? 이거 완전 날로 개발하네? 근데 보다보니 그런 것도 아니다. 일단 통과시켜서 마음의 안정을 찾은 다음에는 다양하게 접근해서 리팩토링을 하더라. 내용은 점점 복잡해졌지만 왠지 모르게 어렵겠다는 생각은 들지 않았다.

테스트는 작아야 한다

예전에 간단한 계정 시스템을 개발할 때 전체 테스트를 한 번 작성해서 사용한 적이 있었다. 전체 테스트를 거치고 나면 기존에 가입되어있던 더미 계정을 조회 후에 삭제하고, 다시 가입 신청을 한 뒤 확인 이메일이 도착했는지를 확인하면 끝인 플로우였다. 전체적으로 잘 동작했을 때는 문제 없는 나름 쓸만한 테스트였다. 하지만 중간에 문제가 생기면 원인 파악이 그리 쉽지는 않았다. 각 테스트가 덩어리가 너무 크고 반드시 정해진 순서로 돌아야만 성공하는 테스트였기 때문이다. 나는 결국 그 테스트를 유지보수 하는 것을 포기했다. 굉장히 씁쓸한 기억이다.

테스트는 작아야 한다. 그래야 하나하나 결과를 알기 쉽고 각각의 기능들을 독립적으로 돌리기 편하다. 말은 번지르르하게 했다만 그러면 어떻게 잘게 쪼갤 것인가? 솔직히 아직 잘 모르겠다. 지금은 기능별로 하나의 테스트 메소드를 만들고 있는데 이거보다 더 잘게 쪼갤 수 있다고 생각될 때 쪼개라고 책은 말한다.

테스트는 본질을 파악해야 한다

맨 처음 이야기 했던 회사 동료 이야기. 그 중에서 "구현 내용이 바뀔 때마다 계속 바뀌는 테스트"에 대해서 짚고 넘어가야 하는 것이 있다. 결국 테스트는 원하는 게 나오냐 안 나오냐를 알아보는 작업이다. 테스트가 구현 방식에 의존한다면 망한 테스트다. 테스트는 어떤 결과를 원하는지만 알아야한다. 구현 방식이 잘 되었는지를 확인하는 테스트라면 그 구현 로직 자체를 테스트 해야지 그 로직이 포함된 전체 플로우를 테스트해선 안된다. 여러 경우가 있을 수 있기 때문이다. 원하는 것이 무엇인가? 그 본질을 파악해야 한다.

테스트 먼저? 개발 먼저?

책은 테스트를 먼저 만든 후에 개발하는 정석적인 TDD를 말하고 있다. 하지만 이 방식이 사고 흐름적으로 잘 안맞다고 생각되는 사람도 많이 있을 것이다. 나도 그 중에 하나이다. 백기선님은 이 책을 언급하면서 테스트를 나중에 작성해도 된다고 하셨다. 결국 중요한 건 테스트를 하냐 안하냐의 차이인 듯하다. 일단 해보고 생각하자, 해보고.

'책 리뷰' 카테고리의 다른 글

자바 성능 튜닝 이야기  (0) 2019.03.19
실용주의 프로그래머 & 실용주의 디버깅  (0) 2019.02.27
클린코드 리뷰  (0) 2018.01.16
Comments