최근 서점을 가보면 테스트 관련 서적이 많은 것을 볼 수 있다. 자바와 JUnit을 활용한 실용주의 단위 테스트, 테스트 주도 개발 시작하기, 테스트 주도 개발 등 단위 테스트와 TDD 관련 도서를 많이 볼 수 있었다. 그만큼 테스트 코드에 대한 관심과 중요성을 IT 종사자들이 인식하고 있다는 것이 아닐까라는 생각을 한다.
그렇다면 이런 의문이 들 수 있다. 왜 테스트 코드가 중요하며 왜 작성해야하는지! 이에 대한 나의 생각을 간단히 정리해본다.
왜 테스트 코드를 작성해야할까?
테스트 코드를 작성한다는 것은 곧 자동화된 테스트를 작성한다는 것이다. 내가 작성한 코드를 일일이 작동시켜보며 검증하는 것이 아닌 코드를 테스트 코드를 실행함으로써 동작을 검증하는 것이다. 그럼 이런 테스트 자동화를 왜 해야할까?
1. 사람은 실수를 한다.
테스트코드가 없다면 테스트 할 유스케이스를 일일이 실행해봐야한다. REST API 서버인 경우 Postman이나 Restlet과 같은 툴을 사용해서 각각의 유스케이스마다 원하는 응답이 나타나는지 확인해야하며 모놀리틱인 경우 뷰를 보면서 원하는 결과가 나타나는지 확인해야한다.
단, 위 경우 테스트해야 할 케이스를 놓칠 수 있으며 매번 코드의 변화가 있을 때마다 일일이 검증작업을 해야한다.
이런 문제를 자동화된 테스트 코드로 해결할 수 있다. 테스트 코드는 코드라는 기록으로 남아있기 때문에 수동 검증보다 실수할 여지를 줄여준다.
2. 기능 추가에 유연하게 대처할 수 있다.
기능을 추가하는 코드를 짜면 해당 결과가 다른 코드에 영향을 끼치는지 파악해야한다. 이때 자동화된 테스트가 없다면 수동으로 일일이 검증하면서 어디에 영향이 있는지 알아야한다. 이는 매우 귀찮은 일이며 예상치 못한 곳에서 영향을 받은 기능이 있을 수 있으므로 예상치 못한 버그가 발생할 수 있다. 이런 문제도 자동화된 테스트 코드가 해결할 수 있다.
테스트코드를 작성해놓는다면 간단히 영향받는 부분을 확인할 수 있다. 테스트 코드를 돌려보면서 실패하는 테스트가 있다면 해당 부분이 영향을 받고 있다는 것을 알 수 있기 때문이다.
3. 잘 짠 테스트는 작성한 코드의 문서 역할을 한다.
잘 짠 테스트는 그 자체로 코드의 문서 역할을 한다. 즉, 동료 개발자에게 해당 기능을 설명하는 역할도 할 수 있다. 이는 테스트를 잘 작성함으로써 얻을 수 있는 부수적인 효과이다. 정상흐름과 해당 기능의 예외상황 등을 작성해놓음으로 파악할 수 있다.
이를 위해서는 어떤 입력값이 작성됐을 때 문제가 되는지 그리고 그 결과는 어떻게 나타나는지를 잘 작성해야한다. 테스트가 하나의 문서 역할을 한다는 것을 염두해두면서 테스트를 작성한다면 좀 더 꼼꼼하고 알아보기 좋은 테스트로 이어질 수 있다고 생각한다.
조만간 시간이 된다면 테스트를 잘 짜는 방법에 대한 나의 생각을 정리해야겠다.