단위 테스트(Unit Test)를 왜 작성해야할까요?

배찬우·2023년 3월 18일
1

시작하기 전에..

제 주변 많은 전공자(학생)들이 단위 테스트에 대해 잘 모르기 때문에 제 글이 도움이 될 것 같아 글을 작성하게 되었습니다. 단위 테스트에 대해 관심을 가지게 되는 계기가 되었으면 좋겠습니다

유닛 테스트란

먼저 위키의 정의롤 볼까요?

(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다. 즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.

출처 위키

단위 테스트의 목표

소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것 - 출처 : 책 단위테스트

여기서 ‘지속 가능하다’ 가 핵심입니다. 유지보수의 관점에서 보아야합니다.

지속 가능한 성장에 대하여

유지 보수를 해보지 않은 많은 대학생들은 “유지 보수”의 중요성을 잘 깨닫지 못할 수 있습니다. 보통 대학생들은 한 프로덕트를 완성하면 대개 상용으로 서비스하지 않을 뿐더러 기획을 추가하지 않고, 새로운 프로젝트를 다시 작업합니다.

위와 같은 상황이 잘못되었다는 뜻은 아닙니다. (보통 연습용 프로젝트니까) 하지만 지속 가능성, 유지 보수의 개념에 큰 공감을 하지 못할 수 있습니다.

코드 프로덕트는 하나의 유기체로 볼 수 있습니다.(출처 책 소프트웨어 장인) 완성되면 코드를 더이상 수정하지 않는 완성품이 아니죠. 계속해서 바뀌는 기획, 추가되는 기획, 바뀌는 정책 등에 따라 코드는 계속해서 추가되고 수정됩니다. 프로덕트는 지속 가능한 성장이 필요합니다. 단위 테스트는 이 목표를 위해서 존재합니다.

테스트가 없는 프로덕트에서 작업을 한다면?

소프트웨어 엔트로피

테스트 없는 프로젝트 초기엔 빨리 개발이 가능하나 시간이 지날수록 개발 속도가 현저히 느려지게 됩니다. 결국 전혀 진행하지 못할 정도로 느려질 수 있습니다

단위테스트 안하면
그림 출처 - 책 단위테스트

위의 그림과 같은 현상을 소프트웨어 엔트로피 라고 합니다. 코드베이스에서 무언가를 변경할 때 코드의 무질서도가 증가합니다. 지속적 정리, 리팩토링 등으로 무질서도의 상승을 최대한 막지 않으면 한 버그를 수정하면 더 많은 버그를 양산하고, 소프트웨어의 한 부분을 수정하면 다른 부분이 고장납니다. 도미노 현상과 같아지고 결국 코드베이스를 신뢰할 수 없습니다.

실제 경험

전 회사에서 단위테스트가 없는 레거시 코드를 수정할 일이 있었습니다. 해당 코드를 수정하며 드는 생각은,

  1. 이 메서드는 제대로 동작하는 메서드일까?
  2. 이 메서드는 어떤 역할을 하며 어떤 경우의 수가 있을까?
  3. 내가 이 메서드의 일부 로직을 수정하면 메서드가 동작한다는 것이 보장이 될까?
  4. 다른 메서드, 로직에서 버그가 발생하지 않을까?

위의 걱정을 안고 코드를 수정하는 것은 굉장히 어렵습니다. 위 네 가지 의문사항(특히 3,4번)에 불안을 갖고 작업하게되고 결국 속도는 느려지게 됩니다. 만약 테스트 코드가 있다면 위와 같은 의문이 발생할 수 있을까요?

확신

테스트가 존재한다면 위의 물음표들에 대한 확신을 가질 수 있습니다. 추가되는 기획에 따른 코드 수정, 개선을 확신을 가지고 작업을 할 수 있게 됩니다.

코드 수정 → 테스트 → 리팩토링 → 테스트 → 끝 (사이클 다 돌면)

테스트를 돌려서 초록색이 나온다면 확신을 가지고 또 작업을 해 나가면 됩니다.

단위 테스트의 장점 정리

  • 단위테스트는 회귀에 대한 보험을 제공함
    • 안전한 테스트망을 가지고 있기 때문에 코드 베이스에 큰 변화를 줄 자신감을 줌 (Kent Beck)
  • 코드에 대한 변경사항이 기존의 동작을 파괴하지 않도록 보장하는 좋은 방법임 (Martin Fowler)
    • 새로운 기능을 도입하거나 새로운 요구사항에 더 맞게 리팩토링 후 기능이 잘 작동하는지 확인, 확신할 수 있음
  • 조기 버그 발견 가능 (수 초 만에)
  • 테스트 하기 좋은 코드로 설계 개선
  • 문서화의 역할도 함

위의 장점들이 지속 가능한 성장을 보장하고 프로젝트 지속에 있어 시간과 비용을 절약할 수 있습니다

그렇다면 단점은?

  • 초반에 노력이 들어감
    • 장기적으로 보면 그 비용을 메울 수 있음
  • 좋지 않은 테스트 코드를 만들면 유지 보수 비용만 늘어남

그럼 이제 테스트를 어떻게 작성해야할까?

좋은 테스트 작성을 고려해야합니다.
잘못된 테스트는 오류 발견에 도움이 되지않고 유지보수고 어렵고 느립니다.

해당 내용은 추가로 업데이트 할 수도 있겠지만 좋은 단위 테스트를 공부하고 싶다면 저도 읽고 있는 “단위 테스트” 라는 책을 추천드립니다. (인프런 이동욱님도 추천한 책)

책 단위 테스트

참고 출처

  • 책: 단위 테스트 (블라디미르 코리코프)
  • 책: 소프트웨어 장인 (산드로 만쿠소)
  • 책: 리팩토링 (Martin Fowler)
  • 책: 더 클린 코더 (로버트 C. 마틴 )
  • 개인적인 경험
  • 위키
profile
성장하는 BE 배찬우입니다

0개의 댓글