brunch

You can make anything
by writing

C.S.Lewis

by 이지원 Oct 01. 2022

15화 테스트 설계 기법 등가 분할(EP)

소프트웨어 테스팅

명세 기반 테스트 설계 기법 중에서 실무에 많이 활용하는 등가 분할 기법에 대해 알아보겠습니다. 테스트 설계 기법을 활용하여 디자인된 테스트 케이스는 테스트 케이스를 효과적으로 줄일 수 있습니다. 실무에서 중요한 핵심 개념에 대해서 다뤄보겠습니다.



어떤 예시를 들면 좋을까 싶어 모바일 앱을 살펴보던 중 친숙한 배달의민족 어플을 살펴봤습니다. 배달의민족 앱에 로그인하면 My배민이라는 화면이 있네요. 이곳에서 등급별 혜택을 터치하면 등급별 혜택 안내 화면이 나타나는데 '배민 VIP란?' 버튼이 보입니다. 터치하니 배민 VIP 팝업이 나타나네요. 설명을 보니 한 달 5회 이상 주문하면 누구나 배민 VIP가 될 수 있다고 합니다. 월 주문 횟수에 따라서 등급이 4단계로 나눠지네요.



사용자에게 꽤 중요한 기능이죠? 이곳에서 문제가 발생하면 고객에게 금전적 영향을 끼치기 때문이죠. 따라서 심각도와 우선순위도 치명적이고 높을 것 같습니다. 배민의 QA, Tester는 회원 등급에 대한 리그레션 테스트를 매 스프린트마다 진행할 것 같은데요. 어떻게 테스트 디자인할지 생각해보겠습니다. 등가 분할 핵심 개념 설명에만 집중하고자 하단 "바로 결제, 만나서 결제 주문 포함 전화주문은 제외" 테스트 조건과 그 외 회원 등급에 대한 조건들은 없다고 가정합니다. 실제 실무에서는 그러한 사항들까지 모두 고려해서 디자인해야 합니다. 그렇기 때문에 기법 동작 원리와 정의에 대한 이해가 필요합니다.



테스트 대상

무엇을 테스트해야 할까요? 바로 월 주문 횟수를 N회 이상 만족시켰을 때 올바른 회원 등급이 나타나고 적용되어야 합니다. 등급이 변화할 때 영향 가는 UI와 기능들 모두 살펴봐야겠죠. 그렇기 때문에 테스터는 서비스 중인 제품에 대한 이해도가 높아야 합니다. 테스트 대상은 테스트 목적이라 생각하면 도출하기 쉽습니다.


월 주문 횟수 별 등급 변경 테스트 EP 적용

배민 QA 환경에서 사용하는 수많은 테스트 계정이 있을 것 같은데요. 다수의 테스트 계정으로 월 0회~4회 주문에 해당하는 조건을 세팅하면 좋을 것 같습니다. 하지만 그러기엔 너무 번거로울 것 같은데요. 아마도 테스트 진행을 원활하게 하기 위해서 QA 툴이 별도로 있을 것 같습니다. 예를 들어 유저 아이디를 검색하면 해당 계정 정보가 나타나고 원하는 테스트 값으로 DB를 변경할 수 있게 하는 것이죠. QA팀에서 계정 세팅이 가능한 QA 툴 같은 환경이 구축되었다는 가정하에 기법 적용해보겠습니다.



우선 등가 분할 활용 이유에 대해 알아보겠습니다. 만약 등가 분할을 사용하지 않으면 몇 개의 테스트 케이스가 도출될까요? 월 주문 횟수별로 모든 상황을 테스트해봐야 할 것입니다. 그런데 천생연분이 마지막 등급이고 해당 등급은 월 20회 이상 주문 조건이 끝이네요. 마지막 등급에 해당하는 테스트 대상은 정말 많겠죠? 그런데 각 등급별로 특정 범위에서는 출력되는 값이 동일한데요. 그룹별로 값 1개를 선택해서 검증하는 게 효과적이지 않을까요? 등가 분할은 어떠한 값을 입력했을 때 동일한 결과가 나오는 그룹을 분류하고 대푯값 1개를 선택하여 검증하는 방법입니다.



월 0회부터 4회 주문까지는 일반회원입니다. 그렇다면 처음 생성한 계정도 일반 회원일 테고 1회, 2회, 3회, 4회 주문까지 모두 일반회원이네요. 이 중에서 대푯값 하나를 선택하면 됩니다. 3회로 하겠습니다. 아마 QA팀에서 내부적으로 테스트 규칙 같은 게 있을 겁니다. '이번 스프린트는 1회를, 다음 스프린트는 3회를..' 등의 내부 팀원들 간의 테스트 규칙이죠.



본론으로 들어가 귀한 분은 월 5회 이상 주문, 더 귀한 분은 10회 이상 주문, 천생 영분은 20회 이상 주문이네요. 해당 그룹의 대표 값을 각각 8회와 16회로 하겠습니다. 천생연분은 20회 이상만 하면 될 것 같은데 뭔가 내부적으로 테스트 필요한 특정 데이터가 있을 것 같은데요. 운영 환경에서 실 사용자들의 주문 횟수 데이터를 기반으로 사용자가 많이 분포한 곳의 데이터로 해도 될 것 같습니다. 등가 분할 설명을 해야 하니 데이터는 그냥 25회로 하겠습니다.



이것이 등가 분할의 전부라고 이해하시면 쉽습니다. 어떠한 값을 입력했을 때 특정 범위끼리는 동일한 출력 값이 나타나도록 설계된 로직들이 기법 활용 대상이겠죠. 4개 등급을 4개 그룹으로 나눴고 각 그룹별로 1개의 대푯값을 선택했습니다.



별로 유용하지 않을 것 같나요? 아닙니다. 정말 유용합니다. 게임을 예시로 들면 순위 보상 같은 기능들을 떠올려볼까요? 1위부터 100위까지 브론즈 등급 상자를 지급합니다. 각 브론즈 상자의 데이터 값은 동일합니다. 마찬가지로 101위부터 300위까지 실버 등급 상자를 지급합니다. 이러한 등급 상자가 수백수천 개가 있다면 어떻게 될까요? 데이터 검증하는 데에만 수천번을 테스트해야 합니다. 너무나 비효율적이고 반복적이고 정형화된 패턴이 보이는 작업이죠. 그렇기 때문에 등가 분할 기법을 적용하여 테스트 케이스를 효과적으로 줄이고 테스트 커버리지를 보완합니다.



그런데 등가 분할만 적용하니 테스트 커버리지가 미흡해 보이지 않나요? 코드를 작성할 때 경계되는 구간에서 로직 처리가 달라질 것 같은데요. 5회 이상 주문은 귀한 분 등급이고, 10회 이상 주문은 더 귀한 분 등급인데, 만약 9회나 10회 또는 11회를 해보면 어떻게 될까요? 4회 주문 상황도 테스트해보면 좋지 않을까요? 4회에서 1회를 더하면 등급이 바뀌기 때문이죠.



이러한 문제를 해결하기 위해 동등 분할의 확장 개념인 경곗값 분석(BVA)이 등장합니다. 다음장에서는 경곗값 분석(BVA)에 대해 알아보겠습니다.

keyword
매거진의 이전글 14화 Test Types API Testing
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari