인수 테스트 설명과 용어의 의미 알아보기
인수 테스트(Acceptance Test)는 우리 팀에서 전구간 기능을 검증하는 목적으로 아주 유용하게 사용되고 있다. 대부분의 기능이 인수 테스트와 함께 만들어지는데, 이렇게 만들어진 인수 테스트는 이후 이어질 다른 작업들의 사이드 이펙트를 막는데 도움을 주고, 기능을 파악하는 다른 사람들에게 훌륭한 길잡이가 되어준다. 구현할 때 조금 귀찮은 점이 있긴 하지만 아주 활용도나 만족도가 아주 높다.
자연스럽게 인수 테스트에 대해 더 알아가고 싶다는 마음이 들었다. 보편적으로 사용되는 단어가 아니다 보니 용어 자체에 대한 궁금증도 함께 생겼다. 어느 날, 내가 많이 즐겨보는 블로그에서 인수 테스트에 대한 내용을 다루었다는 것을 알게 되어 글을 읽게 되었는데 내용은 다음과 같다.
The higher you move up in your test pyramid the more likely you enter the realms of testing whether the features you're building work correctly from a user's perspective.
The Practical Test Pyramid
이 블로그에서 인수 테스트를 사용자 관점에서 올바르게 작동하는지 여부를 테스트라고 설명한다. 어렴풋이 이해하고 있던 내용과 크게 다르지는 않았지만, 왜 사용자 관점으로 기능을 동작시켜야 하는지에 대한 의문이 들었다. 신기하게도 내가 실제로 작성하던 인수 테스트도 사용자 관점으로 작성이 되어 있었다. 다음은 초창기에 구현했던 인수 테스트의 예시이다.
수강 신청이라는 기능을 검증하기 위한 인수 테스트다. 사용자를 우선으로 정의하고 시나리오 상 필요한 사용자가 특정 행위를 하도록 작성되었다. 이를 계기로 인수 테스트의 유래는 무엇이고 인수라는 단어의 뜻과 인수 테스트에서는 어떤 의미로 사용되는지에 대해서 알아보기로 했다.
인수 테스트는 엔지니어링 및 다양한 분야에서 사용되는 테스트로, 주로 사양(명세) 또는 계약의 요구 사항이 충족되는지를 확인하기 위해 수행된다. 이러한 테스트는 소프트웨어 개발을 비롯하여 다른 분야에서도 활용된다.
In engineering and its various subdisciplines, acceptance testing is a test conducted to determine if the requirements of a specification or contract are met.
Wikipedia - Acceptance testing
다양한 분야라는 설명이 있는데, 사실 인수 테스트라는 용어를 찾아보면 소프트웨어 이외에 다른 분야에서도 찾아볼 수 있다. 네이버 국어사전에서는 다음과 같이 설명되어 있다.
[군사] 현장에 새로 설치된 장비를 실제로 운영하기에 앞서 기능과 성능의 적합성 여부를 살펴보는 일
네이버 국어사전 - 인수 테스트
위 소개글을 참고하여 용어들을 정리해 보면 요구사항에 따라 잘 동작하는지 최종적으로 검증하는 테스트라고 정리할 수 있다. 소프트웨어 개발 프로젝트에서는 소프트웨어 제작을 의뢰한 클라이언트가 개발된 소프트웨어를 인수할 때, 계약 명세에 따라 소프트웨어가 제대로 동작하는지를 결정할 때 수행하는 검증이라고 생각하면 이해하는데 도움이 된다. 따라서 "수락, 받아들임"이라는 의미를 가진 "Acceptance"를 인수로 해석한 것으로 생각할 수 있다. 실제로 수용 테스트라는 이름으로 해석하여 사용하는 경우도 많이 보았다.
가지고 있던 궁금증은 많이 해소되었지만, 이해하고 있던 인수 테스트를 명쾌하게 설명해주지는 못했다. 사용자 관점에서 테스트를 하는 것과 최종 단계에서의 검증하는 것의 연관성을 찾기가 어려웠다. 그래서 더 많은 자료를 찾아보았고, 결국 익스트림 프로그래밍에서의 인수 테스트 설명에서 그 해결책을 찾았다.
Acceptance testing is a term used in agile software development methodologies, particularly extreme programming, referring to the functional testing of a user story by the software development team during the implementation phase. The customer specifies scenarios to test when a user story has been correctly implemented.
Wikipedia - Acceptance testing (Acceptance testing in extreme programming)
인수 테스트는 애자일 소프트웨어 개발 방법론, 특히 익스트림 프로그래밍에서 사용되는 용어로, 소프트웨어 개발 팀이 구현 단계에서 사용자 스토리를 기능적으로 테스트하는 것을 의미한다. 고객은 사용자 스토리가 올바르게 구현된 경우, 해당 스토리를 테스트하기 위해 시나리오를 지정한다.
익스트림 프로그래밍에서 사용자 스토리를 기능적으로 테스트를 인수 테스트라고 부르게 되는 이유는 무엇일까? 익스트림 프로그래밍에서는 고객과 개발자 간의 원활한 소통과 요구 사항을 명확하게 이해하기 위해 사용자 스토리가 활용된다. 따라서, 사용자 스토리를 기반으로 개발된 소프트웨어가 실제로 고객의 요구 사항을 만족시키는 것이 최종 목표로 설정된다. 인수 테스트는 최종 단계에서 검증하는 테스트라는 점을 감안할 때, 우리는 이 테스트를 인수 테스트라고 부를 수 있다.