티스토리 뷰

왜 테스트코드를 작성하는가

프로그래밍을 좀 공부해본다면 테스트 코드를 작성하는 것이 중요하다는 내용을 많이 듣게 된다. "테스트 코드를 작성하면서 코드를 짜야 버그가 적다", "유닛 테스트 코드를 꼭 추가해야한다", "TDD를 도입해 테스트를 통해 기능구현을 해야한다" 등의 이야기를 들었을 것이다.

 

그동안 나는 사실 테스트 코드에 대한 큰 효용을 못느끼는 사람이었다. 기능 구현하는데도 시간이 부족한데, 테스트 코드를 언제 작성하고 있으며, 기능 구현을 눈으로 하면 되지 않나? 기능에 대해서는 이미 요구사항 명세로 나와있고 이를 구현만 하면 되지 않는가? 라는 생각을 가지고 있었다.

 

하지만 최근에 생각이 많이 바뀌었다. 회사에서 In-House 툴을 개발하게 되었는데 일단 먼저 기능을 쭉쭉 구현다가보니 툴이 복잡해지면서 특정 기능이 잘 동작하지 않을때 이를 개발단계에서 찾고 디버깅하는데 어려움이 있었다. 또한 급하게 구현된 코드를 리팩토링을 할 때에도 구현된 기능을 해치지 않고 리팩토링이 되고 있는지 알기 어려웠다.

 

위와 같은 시행착오를 통해 나름대로 왜 테스트 코드를 작성하는지, 왜 TDD가 관심을 받았는지에 대해 적어보고자 한다.


내가 생각하는 테스트 코드를 작성하는 3가지 이유는 다음과 같다.

 

첫번째는 기능검증을 위해,

두번째는 리팩토링을 위해,

세번째는 더 나은 코드를 위해.

 

테스트 코드의 가장 첫번째 목적인 기능 검증이다. 내가 작성한 기능이 요구사항대로 잘 작성되었는지 확인하기 위함이다. 목업 데이터 등을 이용해서 내가 작성한 기능이 올바르게 동작하는지, 나의 예상대로 작성되었는지 확인하기 위한 목적이 첫번째 이다.

 

위 목적은 리팩토링을 위한 목적을 위해서도 필요하다. 리팩토링을 하다보면 소스코드의 수정이 많을 수 있고, 로직을 변경하거나 새로운 클래스나 함수를 생성할 수 있다. 그런 코드의 변화 속에서도 기능의 동작이 문제가 생기면 안되기 때문에 테스트 코드를 리팩토링을 위해서 작성한다고 봐도 된다.

 

마지막으로는 테스트 코드를 작성하다보면 코드를 더 나은 구조로 작성할 수 있게 해준다. 이 부분은 테스트 코드에 대해서 처음 공부를 해보고 시도해볼 떄는 잘 알지 못하는 내용이었다. 실제 프로젝트로 넘어와서 프로덕션에 사용될 테스트 코드를 작성하게 되면서 이에 대해 깨닫게 되었다.

 

사실상 마지막 목적 때문에 이 글을 작성하게 되었는데, 테스트 코드를 통해 특정 기능만 검증을 하고 싶을 때 이 목적에 대해서 알 수 있다. 테스트 코드를 작성하다보면 내가 특정 기능만 검사하고 싶은데 하나의 함수에 너무 많은 기능이 들어가서 테스트가 어려운 경우가 있다. 이런 상황에서 테스트 코드를 위해 리팩토링을 하게 되는데, 그러면 "1함수 1기능"과 같은 철학을 지키지 못했던 코드들이 리팩토링 되는 효과를 얻을 수 있다. 실제로 이번에 테스트 코드를 적극적으로 도입하면서 개발을 하면서 이런 헛점들을 많이 발견했고, 좀 더 확장 가능하고 유연한 코드로 변화되는 것을 체감할 수 있었다.


테스트 코드의 도입을 고려하고 있거나, 왜 테스트 코드를 작성하는지 궁금했던 분들은 필자의 글을 읽고 조금이나마 힌트를 얻을 수 있었길 바란다. 이번글이 생각보다 두서없이 작성된듯한데... 기회가 되면 좀 이 글을 리팩토링 해보는걸로...

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함