본문 바로가기
Spring

테스트코드는 무엇이고 왜 작성해야 할까요?

by Jammini 2023. 5. 15.
728x90

목차

  1. 테스트코드란?
  1. 테스트 코드는 왜 작성해야 할까?
  1. 테스트 코드의 단점
  1. 결론

1. 테스트코드란?

  • 소스 코드가 의도된 대로 정확히 동작하는지 검증하고 오류를 찾는 절차에 사용된다.
  • 즉, 특정 기능이 제대로 작동하는지 확인하고, 변경사항이나 추가 기능이 기존 기능에 영향을 미치지 않는지 검증하는데 도움을 준다.

2. 테스트 코드는 왜 작성해야 할까?

  • (도서) 구글 엔지니어는 이렇게 일한다. 11장

    구글도 초창기에는 엔지니어에 의한 자동 테스트를 그다지 중요하게 생각하지 않았다. 그러나 2005년에 구글 웹 서버(GWS) 규모와 복잡성이 무척 커지면서 생산성이 급속도로 떨어지는 경험을 했다. GWS는 구글 검색 쿼리를 제공하는 웹 서버로, 구글 검생에 있어서는 마치 공항의 관제 시스템만큼 중요한 역할을 하는 서비스이다. 릴리즈 때마다 버그가 넘쳐났고 다음 릴리즈까지의 길이는 무한정 늘어났다. 서비스를 수정해야 할 때마다 팀원들은 불안해 했고 프로덕션 환경에서만 기능에 영향을 주는 버그도 너무나 자주 발생했다.

    이때 당시의 구글 테크리드는 엔지니어 주도의 자동 테스트를 정책 차원에서 도입하기로 결정했다. 결과적으로 1년만에 긴급하게 코드를 수정해 배포하는 건수가 '절반'으로 줄었고 이와 동시에 연중 처리 완료하는 이슈 개수도 계속해서 증가하는 추세가 되었다.

2005년에 위와 같이 구글이 고백한 사례에 따르면 구글이 테스트 코드가 없던 시절 많은 개발자를 투입해도 생상선이 크게 떨어지는 문제가 있었다고 말하며 자동 테스트 도입으로 인해 1년만에 긴급하게 코드를 수정하는 배포 건수를 절반으로 줄이는 효과도 얻을 수 있다고 한다.

  1. 버그 탐지 및 예방

    테스트코드는 기능과 동작을 확인하고, 오류를 탐지하여 수정을 할 수 있게 지원해준다. 예상되는 동작과 실제 동작이 일치하는지를 확인할 수 있으며 버그를 사전에 발견하여 심각한 문제가 발생하지 않도록 예방할 수 있다.

  1. 리팩토링 지원

    테스트 코드가 있는 경우 리팩토링 과정에서 기존 기능이 올바르게 작동하는지 확인할 수 있다. 코드 변경의 안전망 역할을 하고, 리팩토링 후에도 소프트 웨어의 기능이 올바르게 유지되는지 확인하는데 도움을 준다.

  1. 자동화된 테스트 수행

    테스트를 자동화하여 반복적으로 실행이 가능하다. 그래서 수동으로 테스트를 실행하는 것보다 자동화된 테스트로 인해 효율적이고 정확한 테스트로 시간을 절약할 수 있게 된다.

3. 테스트 코드의 단점

  1. 개발 시간 증가

    개발시간이 증가하며 초기 개발 비용이 증가하는 요인이 될 수 있다. 하지만 장기적으로 봤을때 버그 수정 및 유지보수 비용 절감으로 이어질 수 있다.

  1. 불완전한 테스트

    모든 시나리오를 고려한 테스트 코드를 작성하기 어렵다.

  1. 유지보수 비용

    기능이 변경되거나 확장될때마다 테스트코드도 함께 수정되어야 한다. 이로 인해 추가적인 유지보수 비용이 발생한다.

4. 결론

  • 테스트코드가 모든 버그를 방지할 수 있는 것은 아니다. 테스트 커버리지가 높아도 안정성 있는 애플리케이션이라고 보장하기도 어렵다.
  • 하지만, 구글에서 테스트 도입으로 인해 긴급하게 코드를 수정 배포건수를 ‘절반’으로 줄이는 효과 처럼 조금 더 안정적이고 품질 높은 개발을 위해선 테스트코드를 중요하게 생각해야 한다.

참고

반응형