프로젝트를 진행하다보면 새로운 API나 사용해 본 적 없는 라이브러리를 사용해야 하는 때가 찾아온다. 기존 프로젝트에서 사용해 본 익숙한 라이브러리라면 API를 어떻게 사용하면 되고, 이 API가 어떻게 동작할 지 예측할 수 있다. 하지만 처음 사용해 보는 것이라면 얘기가 다르다. 이 라이브러리가 프로젝트의 요구사항에 부합하는지, 예상한 대로 동작하는지 확인해 볼 필요가 있다. 이런 경우에 개발자들은 어떻게 라이브러리를 검증해야 할까? 다음과 같은 선택지가 있다.

  1. 제품 코드에 직접 적용하여 테스트 해본다.
  2. 연습용 프로젝트를 만들어서 테스트 해본다.
  3. 학습 테스트를 작성한다.

1, 2번은 나같이 경험이 적은 개발자들이 쉽게 생각할 수 있는 선택지이다. 1번에 대해 얘기해보자. 이미 잘 동작하는 코드도 있고, 내가 주로 하는 일이 이 프로젝트를 실행시켜서 디버깅하는 일이다. 자주 수정하고, 실행해보던 코드에 새로운 라이브러리를 적용해보면 라이브러리의 동작을 빨리 확인해 볼 수 있다. 탈없이 라이브러리의 기능을 확인하고 라이브러리가 예상과 같이 동작한다면 제품에 바로 적용이 되므로 좋을 것 같다. 하지만 개발자에게 이러한 행운이 따르리란 보장은 없다. 보통은 새로운 API를 사용하는 데 서툴러 이것 저것 고치게 된다. 그러다보면 기존에 잘 동작하던 코드까지 망칠 수 있으므로 좋은 방법이라 볼 수 없다.

2번은 어떨까. 우선 1번의 문제는 피해갈 수 있다. 예제용 프로젝트를 따로 만들어서 테스트하면 기존 프로젝트에 영향은 없다. 예제 프로젝트를 새로 만드는 것이 어려운 것도 아니다. IDE를 몇 번 클릭하면 새로운 프로젝트가 뚝딱 생겨난다. 하지만 이 방법도 그리 영리한 것이라고 볼 순 없다. 실제 프로젝트는 많은 라이브러리와 직접 작성한 모듈들이 맞물려 동작한다. 실제 프로젝트와 같은 환경의 예제 프로젝트를 만드는 것은 생각보다 간단한 일이 아닐 수 있다. 실제 프로젝트와 같은 환경을 구축하는 데 시간을 허비하면 그만큼 테스트 코드를 작성하는 시간이 줄어든다. 또한 예제 프로젝트는 관리가 어렵다는 단점이 있다. 예제 프로젝트를 버전 관리 시스템에 올려 놓기는 조금 찝찝하다. 그렇다고 로컬에만 저장해놓으면 팀원들과 공유도 되지 않고, 시간이 지나면 자신도 그 존재를 잊게 될 것이다.

1, 2번의 문제를 깔끔하게 해결할 수 있는 것이 바로 학습 테스트를 작성하는 것이다. 학습 테스트는 말그대로 새로운 라이브러리를 학습 하기 위한 테스트이다. 테스트 코드는 다른 단위 테스트, 통합 테스트 코드와 마찬가지로 프로젝트 내에서 작성한다. 다른 테스트와 차이라면 내가 작성한 모듈이 아닌 외부 라이브러리의 동작을 확인하는 데 쓰인 다는 것이다. 테스트 코드는 테스트 할 때만 동작하므로 제품 코드의 동작에 전혀 영향을 주지 않는다.
(사실 가끔 테스트 코드가 제품 코드에 영향을 주기도 한다. 만약 제품 코드가 테스트하기 어려운 구조로 작성되어 있다면 테스트하기 쉽도록 리팩토링을 해줘야 한다. 이것은 옳은 방향이므로 학습 테스트의 부작용이라고 할 순 없다.)
또한 학습 테스트는 실제 프로젝트 안에 작성하게 되므로 실제 프로젝트와 같은 환경을 만드려는 노력을 하지 않아도 된다. 테스트 내에서 기존에 쓰던 라이브러리와 기존에 작성된 모듈을 그대로 사용할 수 있으므로 연습용 프로젝트를 만드는 것 보다 더 정확한 테스트를 수행할 수 있다. 마지막으로 학습 테스트는 프로젝트의 자산이 된다는 장점이 있다. 실제 프로젝트 내에 존재하므로 학습 테스트도 버전 관리가 가능하다. 그러면 필요에 따라 학습 테스트에 추가적인 케이스를 추가할 수 있고, 팀원들과 공유도 가능해진다. 테스트하고자 하는 라이브러리의 새 버전이 릴리즈되었을 때도 학습 테스트는 유용하게 쓰인다. 새 버전이 이전 버전과 호환이 되는지, 우리 팀이 기대하는 대로 동작하는지 학습 테스트가 알아서 해준다.

위와 같이 학습 테스트는 장점이 아주 많다. 문제는 나처럼 경험이 적은 개발자들이 학습 테스트를 작성하는 데 익숙하지 않다는 것이다. 다른 사람이 작성한 라이브러리를 우리 프로젝트에서 테스트 한다는 것이 조금 생소할 수 있다. 이제부터 익숙해지면 된다. 프로젝트는 내가 책임져야 하므로 내가 테스트를 해야 한다. 그리고 위와 같이 장점이 많은데도 학습 테스트를 작성하지 않을 이유가 없다. 혹시 지금 1, 2번과 같은 작업을 하고 있다면 다시 생각해보자. 그리고 학습 테스트를 작성하자!