SW개발/개발이야기

[테스트]테스트 커버리지 0%에서 98%까지의 경험기 2

테스트 코드는 실제로 가치가 있나요?

 

테스트 코드의 장점

테스트 코드를 작성하면서 실제로 느낀 장점들은 정말 무수히 많습니다. 그 중 대표적인 몇가지에 대해 이야기해보도록 하겠습니다.

 

클린 아키텍처

먼저, 테스트 코드를 작성하면 클린한 아키텍처를 지향하게 됩니다.

테스트 코드 작성과 함께 기능을 개발해나가다보니 문득 이런 생각이 들었습니다.

 

"내가 지금 작성하는 코드는 의존도가 너무 높아 뭔가 테스트가 어려울 것 같은데 ?"

 

평소대로라면 저는 기존에 프로젝트 내에서 사용되고 있는 방법, 스타일을 그대로 사용하여 개발을 하였습니다. 또한, 이미 잘 작동하는 부분일 경우에는 더더욱 코드를 유심히 살펴볼 일이 없었습니다. 하지만 버그 픽스와 같이 소스를 수정하는 경우는 필연적이기 마련인데, 항상 문제가 되는 부분은 side effect 였습니다.

 

버그를 수정하였는데 수정한 코드로 인하여 또 새로운 버그가 생기는 상황이죠. 즉, 코드간의 의존도가 높아 어디서 무엇이 변경되는지 알기 힘들다는 뜻입니다.

 

저는 테스트를 작성하면서 이러한 부분을 고려하게 되었습니다. 과연 내가 지금 작성하는 코드가 단위 테스트에 용이한가, 또는 코드간의 의존도는 높지 않는가 등을 말이죠. 이렇게 사소한 부분들의 노력들이 쌓이다보면 비로소 클린한 아키텍처가 되는 것이 아닐까 생각했습니다.

 

불필요한 코드 제거

프로덕션의 코드는 운영 기간이 길어지면 길어질수록 레거시한 코드는 많이 생기기 마련입니다. (자연의 섭리와 같습니다..)

개발을 할때 항상 고민이 되는 부분이 이미 잘 작동하는 부분에 대해 리팩토링을 할 것이냐, 그대로 갈 것이냐에 대한 문제입니다.

그대로 두자니에 찜찜하고, 고치자니 버그가 생길까 두려운 사람들이 대부분일 것이라고 생각합니다.

 

이러한 부분 또한 테스트 코드를 작성함으로써 명확하게 불필요한 부분들을 제거해나갈 수 있습니다. (테스트를 하려면 기능이 어떻게 동작하는지 모든 부분을 알아야 하기 때문입니다.)

 

자신감 있는 리팩토링

위의 장점들과 마찬가지로 테스트를 작성하게 되면 무언가 든든함 같은 것이 생깁니다. 테스트코드가 보장해주니 편하게 리팩토링을 할 수 있다는 자신감 같은 것이 말이죠. 리팩토링 후 테스트에 실패한다면 다시 고치면 됩니다.

 

버전 업그레이드

언젠가는 사용중인 프레임워크의 버전을 업그레이드하는 날이 찾아올 것입니다. 이 때 역시 테스트코드는 굉장한 도움을 줍니다. 실제로 동작하는 것 처럼 보일지라도 안되는 부분에 대해서 테스트 코드를 통해 검증이 가능하기 때문입니다. 

저 역시도 장고 버전을 1 -> 3으로 올리면서 테스트를 통해 작동되지 않는 기능을 파악하고 수정할 수 있었습니다.

 

테스트 코드의 단점

생각보다 높은 진입장벽

실제 프로덕션 수준에서의 테스트를 작성하는데까지 생각보다 오랜 시간과 노력이 들었습니다. 

아래와 같은 문제점들이 저의 발목을 잡았었습니다.

  1. 기존에 동작하고 있는 로직의 의도를 정확히 이해해야 테스트를 작성할 수 있다. (이해되지 않는 로직이 다수 존재)
  2. 테스트가 중요한건 알겠는데 어떻게 무엇을 작성할지 몰랐다.
  3. 생각보다 테스트가 어려운 부분들이 꽤 존재한다. (의존도가 높은 부분)

하지만, 꾸준히 작성하면서 경험치가 쌓아가다보니 테스트를 작성하는 것은 점점 쉬워졌고, 테스트를 작성하기 쉬운 형태로 코드를 작성하게 되었습니다.

 

테스트 코드의 유지보수

테스트 코드를 많은 노력을 들어 작성하였음에도 불구하고 유지보수가 되지 않는 경우가 상당히 많이 있을 것 입니다.

처음에는 의지를 갖고 테스트를 작성하지만 거대해져가는 테스트로 인해 때로는 테스트 코드의 유지보수에 더 많은 시간이 들기도 합니다.

테스트 코드 또한 "코드" 이기 때문에 깔끔하게 작성하여야 하고, 유지보수 하기 쉽도록 만들어야 합니다.

 

의미없는 테스트 케이스의 작성 가능성

이 부분은 저 역시도 아직까지 답을 찾아가는 과정에 있습니다. 생각보다 라인 커버리지만 올리는 의미없는 테스트를 많이 작성하게 될 가능성이 많이 존재합니다. 또한, 올바르지 않은 테스트 케이스를 작성할수도 있구요.

여러 오픈 소스의 테스트 코드를 참고하면서 보완해보면 좋을 것 같습니다.

 


 

프로덕션 수준에서의 테스트를 작성하면서 느꼈던 생각들과 장단점에 대해 이야기해보았습니다. 이 포스팅을 작성하는 현 시점에서도 테스트 코드를 작성하는 것은 매우 중요하다고 생각합니다. 진행중인 프로젝트에 시간이 된다면 아니, 무조건 테스트 코드를 한번씩 작성해보는 것을 추천드립니다. (불필요하다고 판단이 될 때 그만두어도 상관없습니다.)

 

긴 게시글 읽어주셔서 감사합니다 :)

 

728x90