본문 바로가기
공부 기록

[리팩토링 1판] Chapter 04. 테스트 작성

by 매트(Mat) 2024. 3. 29.

Chapter 04. 테스트 작성

리팩토링을 실시하기 위한 필수 전제조건은 반드시 견고한 테스트를 해야 한다는 것이다.

자가 테스트 코드의 가치

테스트 코드를 작성하지 않으면 지금 당장은 개발을 빠르게 할 수 있겠지만, 나중가면 오히려 개발 속도가 현저하게 떨어진다. 심지어 속도뿐만 아니라 정확성, 신뢰성, 효율성 모두 떨어진다. 버그를 만날 확률이 높아지고, 버그를 찾느라 디버깅을 수행하지만 역시 시간이 오래 걸린다.

기능을 개발하면서 단계적으로 테스트 코드를 통해 본인이 작성한 로직에 대해서 검증할 수 있어야 한다.

테스트 코드의 장점은 데이터가 맞는지 화면으로 확인하지 않아도 된다. 테스트 코드를 작성하면 해당 테스트에 대한 성공이나 실패가 뜨므로, 직관적이다. 또한 버그를 쉽고 빠르게 찾을 수 있으니 안쓸 이유가 없다.

모든 테스트를 완전히 자동화하고 결과를 자체적으로 검사하게 하자.

테스트 코드를 작성하지 않은 사람에게는 와닿지 않을 수 있다. "그냥 수동 테스트로, 하나씩 해보는게 더 정확하지 않나.." 라고. 하지만 이러면 수동으로 하는 것이기 때문에 실수가 날 수 있다. 테스트가 자동일 땐 의외로 테스트를 작성하는 즐거움을 맞볼 수 있다.

테스트는 자주 실행해주는 것이 좋다. 로직을 추가하고, 테스트 코드를 작성하는 중에 다른 테스트 코드가 깨지지 않았는지 확인하기 위해서다.

테스트 코드를 작성할 때 성공 케이스도 중요하지만, 어떨 때 실패하게 되는지 실패 케이스를 작성하는 것 역시 중요하다. 뭔가 에러가 있다고 생각되면 그 예외가 정말로 발생하는지 꼭 테스트하자.

완벽한 테스트를 작성하려다 아예 테스트를 포기하느니, 차라리 불완전한 테스트를 작성해 실행하는 편이 낫다.

코드가 많아서 기능이 많아서 테스트 작성하기 두렵다면, 모든 테스트 코드 작성이 아니더라도 대부분의 버그는 잡아내므로 꼭 필요한 기능의 테스트 작성을 중단해서는 안된다.

만약 객체들의 의존관계가 복잡하게 되어있다면 단위테스트를 통해 테스트를 작은 단위로 분리하는 것이 좋다.

느낀 점

앞서 테스트 코드를 작성하는 것이 리팩토링에 꼭 필요한 과정이라는 것을 알게 되었다. 이전 회사에서는 테스트 코드라는 것이 없었다. 그래서 나도 테스트 코드를 왜 작성해야 하는지 고민조차 하지 않았고, 아래 과정을 반복해 계속 수동 테스트를 진행하였다.

  • 기능 로직 작성
  • 웹 애플리케이션 Tomcat 실행
  • 매번 로그인하여 해당 페이지로 접속
  • 데이터 값 입력
  • 제대로 동작하는지 확인
  • 에러 발생하면 다시 처음부터 위 과정 반복

위 과정에 있어서 개발말고 부가적인 시간이 꽤 많이 든다.

테스트 코드를 작성하지 않으면 또 안 좋은 점이 사이드 이펙트(Side Effect)가 많이 발생한다. 즉, 기능을 하나 수정하면 다른 곳에서 알게 모르게 에러가 발생하는 것이다. 하지만 테스트 코드를 작성했다면 빠르게 버그를 찾아낼 수 있었을 것이다.

위에서 말했던 것처럼 테스트 코드 작성을 완벽하게 할 필요는 없다. 본인이 "이 부분은 테스트가 꼭 필요한데?"" 라고 했던 부분만 필수적으로 작성해주면 좋다. 중요한 것은 테스트 코드 작성이 절대로 시간 낭비가 아니라 소프트웨어를 더욱 좋게 만들어주는 것이니 이 점에 대해서만 알아주면 좋겠다.

References

댓글