테스트 자동화의 핵심은 개발 소요 시간을 줄이는 것이라고 생각합니다. 개발 업무 중 시간을 효율적으로 쓰려고 노력하다 보니 자연스럽게 테스트 코드를 작성하면서 개발을 진행하는 습관이 생겼습니다. 실제로 낭비되는 시간을 줄이는 데 테스트 자동화가 도움이 되었습니다. 앞으로의 시간을 효율적으로 쓰기 위해 익힐 수 있는 유용한 기술 중 하나라고 생각합니다.

사실 테스트 코드 작성이 익숙하지 않을 때는 오히려 시간이 많이 소요되어 부담이 되었습니다. 하지만 어느 정도 익숙해지고 나니 시간 낭비가 줄어드는 것을 실감할 수 있었습니다. 자연스럽게 테스트 자동화에 더 흥미를 가지게 되었고, 계속해서 관련 지식을 쌓아 나가고 있습니다. 이제는 테스트 코드가 없으면 개발하기 힘들 것 같습니다. 여러분들도 테스트 자동화에 시간을 투자하셔서 조금 더 편한 개발 생활을 이어가셨으면 좋겠습니다.

테스트 코드를 작성하는 이유에 대한 제 생각이 궁금하시다면 테스트 코드를 작성하는 이유(테스트 자동화) (👈click!!) 이 글을 참조하세요.

단순한 통합 테스트의 이점

아주 단순한 테스트라도 괜찮습니다. 중요한 점은 한 번 작성해두면 관련 테스트를 개발자가 수동으로 반복할 필요가 없어진다는 것입니다. 핵심적인 테스트를 우선 작성하고 부족한 부분을 채워가면서 자동화된 테스트로 커버할 수 있는 범위를 늘려가야 합니다.

핵심 테스트를 기반으로 부족한 부분을 개선

테스트는 크게 단위 테스트와 통합 테스트로 나눌 수 있습니다. 단위 테스트는 좁은 부분을 격리 시킨 상태로 논리적 오류가 없는 지에 대해서 집중적으로 검증합니다. 반면, 통합 테스트는 실제 운영 환경에 가깝게 여러 개의 요소가 복합적으로 맞물려 돌아가는 상황을 테스트합니다. 단위 테스트에 비해서 통합 테스트는 한 번의 테스트를 수행하는 데 오래 걸리고, 테스트 환경을 만드는 데 더 많은 노력이 필요합니다. 하지만 환경을 한 번 갖춰 놓으면 통합 테스트를 통해서 좀 더 느슨하게 주요 기능의 흐름이 망가지지 않았는지 테스트할 수 있게 됩니다.

개발 초기 단계에는 단순한 통합 테스트를 작성하는 일이 들이는 노력에 비해서 얻는 이득이 큽니다. 프로젝트의 초반에는 요구 사항이 매우 활발하게 추가되고 변경되면서 프로젝트의 구조가 짧은 주기로 변경될 수 있습니다. 이런 상황에서 통합 테스트가 작성되어 있다면 개발자가 길을 잃지 않고 개발을 이어갈 수 있어요. 코드를 수정한 뒤에도 정상적으로 동작한다는 것을 확인할 수 있는 기준점이 생깁니다. 물론 테스트가 완벽할 수는 없겠지만 테스트 코드가 있는 것과 없는 것 사이에는 매우 큰 차이가 있습니다. 코드를 이곳 저곳 손 봤는데 테스트 코드가 없다면, 코드가 망가지지 않았는지 어떻게 확인할 수 있을까요? 어느 정도 확신을 가지기 위해서는 수정된 코드와 관련한 기능들을 직접 테스트 해봐야만 마음이 놓일 거예요. 출시가 완료된 후 유지 보수 과정에서도 자동화된 테스트가 있다면 많은 시간을 아낄 수 있을 겁니다.

수동 테스트의 단점

대표적인 통합 테스트는 REST API 요청이 들어왔을 때 원하는 대로 동작하는지 검증하는 테스트입니다. 매번 수동으로 테스트하면 불필요하게 많은 시간과 노력을 낭비하게 됩니다. 간단한 예시로 로그인 기능을 위한 REST API에 대해서 잠시 생각해 볼까요 ?

로그인 REST API 테스트 예시

테스트 코드가 없다면 로그인에 성공한 경우, 실패한 경우, 아이디가 틀린 경우 등 여러 가지 케이스들을 하나씩 직접 해보면서 결과를 직접 확인해야 합니다. 메세지가 의도한 대로 응답 되고 있는지, 상태 코드는 맞는지, 세션 ID가 쿠키에 잘 세팅 되고 있는지 등 눈으로 봐야만 알 수 있죠. 하지만 결과를 확인할 수 있는 테스트 코드를 작성해 두면 클릭 한 번에 어떤 테스트가 성공했고, 어떤 테스트가 실패했는지 한 눈에 확인할 수 있게 됩니다.

뿐만 아니라 수동으로 테스트 할 경우 반드시 확인해야 할 케이스를 놓치고 지나가서 나도 모르는 사이에 버그를 만들 수도 있습니다. 문제가 있는 코드를 인지하지 못한 채로 릴리즈 하게 될 수 있습니다. 경험에 따르면 그렇게 생겨난 버그는 나중에 발견되었을 때 원인을 찾기 어렵습니다. 그렇게 되면 적지 않은 소중한 시간을 또 낭비하게 되는 셈입니다.

테스트 케이스를 기반으로 품질 점검을 수행하는 인력이 별도로 있다면 테스트 코드를 작성할 필요가 없어질까요? 저는 그렇지 않다고 생각합니다. 테스트 코드는 개발 시간을 단축해주는 든든한 지원군입니다. 테스트 자동화가 아까운 시간만 잡아먹는 골칫덩어리가 아닌 든든한 지원군으로서 제 역할을 해주려면 개발자가 먼저 마음을 열고 개발과 테스트를 분리된 일로 생각하지 않아야 합니다.

스스로 경험하며 얻은 깨달음을 공유하기 좋아하며, 세상이 필요로 하는 코드를 작성하기 위해 노력하는 개발자입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다