grep

Engineering

페어와이즈 기법을 활용하여 전략적 테스트 설계하기 (feat. PICT)

Kaia 카야여기어때

2024년 4월 25일

원문에서 보기 ↗

안녕하세요, 여기어때컴퍼니 QA팀 카야입니다! 저는 여기어때에서 높은 품질의 서비스를 제공하기 위해 최선을 다하고 있습니다.

Copyright 2024. 여기어때컴퍼니 All Right Reserved. Graphic by 김제린(Riny).

들어가기 전,

최근에는 ‘숙박세일 페스타’ 프로모션을 검증하고 오픈하게 되었습니다. 이 프로모션은 5만원 초과 숙박 상품 예약 시 3만원 할인해주는 혜택을 제공했습니다. 이벤트를 성공적으로 운영하기 위해서는 다양한 조건을 고려해야 했습니다.

먼저, 쿠폰은 본인인증을 통해 1인당 1매만 발급되었으며, 비수도권이면서 국내숙박 카테고리 제휴점에서 5만원 초과 숙박 상품 예약 시 3만원 할인이 적용되는 등의 제약들이 있었습니다. 이러한 제약조건들을 잘 이해하고 효과적인 테스트를 진행하는 것이 중요했습니다.

무사히 프로모션을 오픈하기 위해서는 어떤 것들이 중요할까요?

ㄴ 무사히 오픈되기를 바라는 기도 🙏 ➡️️️ 🙅‍♀️

ㄴ 효과적이고 적절하게 설계된 테스트케이스 ➡️ 🙆‍♀️

소프트웨어 테스트는 제품의 품질을 보장하는 과정으로, 테스트 케이스 설계는 테스트 단계에서 중요한 역할을 합니다. 다양한 입력과 그 입력들에 대한 설정 테스트를 예시로 들어 설명해 보겠습니다. 설정 테스트 시 모든 요소에 대해 가능한 모든 조합을 다 테스트 하는 건 효과적이지 않습니다. 이 때 제한된 시간 내에 실행할 수 있도록 조합 테스트 기법을 사용하게 됩니다. 저는 오늘 이러한 테스트 케이스를 설계하는 기법 중 하나인 페어와이즈 테스트 기법을 소개하려고 합니다.

1. 페어와이즈란 ?

대부분의 소프트웨어 결함은 두 변수 간의 상호작용으로 인해 발생한다는 점에서 착안하여, 각 변수들 간 최소 한 번씩 조합을 이루게 하는 테스트 기법입니다.

무한정으로 시간이 제공된다면 모든 가능성을 테스트할 수 있겠지만, 현실에서는 제한된 시간과 리소스 안에서 테스트를 진행해야 하기 때문에, 테스트 설계가 필요합니다. 이 때 테스트 케이스의 수와 품질을 적절히 관리하면 테스트를 더욱 효율적이고 효과적으로 진행할 수 있습니다.

페어와이즈 테스트 기법은 이런 문제를 해결하기에 효과적인 방법 중 하나입니다. 여러 입력 변수들 간의 가능한 모든 쌍을 테스트하며, 테스트 케이스 수를 줄이면서도 테스트의 효율성을 높여줍니다.

페어와이즈를 사용해서 얻을 수 있는 효과들은 어떤 게 있을까요?

2. 페어와이즈 기법으로 테스트케이스 도출하기

여기어때 쿠폰 서비스에 새로운 기능이 추가되어 도메인 별로 쿠폰 관련 테스트를 해야하는 상황을 가정해보겠습니다. 이런 경우 ‘쿠폰 유형’, ‘할인율’, ‘적용 가능한 서비스’ 라는 세 가지 변수를 가진 쿠폰 시스템의 테스트를 진행할 수 있을 것 같은데요.

쿠폰 적용 서비스

- 국내숙소

- 해외숙소

- 레저∙티켓

- 렌터카

- 공간대여

쿠폰 할인

- 쿠폰 A

- 쿠폰 B

쿠폰 조건

- 앱+웹

- 앱 전용

- 웹 전용

테스트가 필요한 각 변수에 대한 값을 정리해보았습니다.

**이 경우, 모든 가능한 조합을 테스트하려면 **총 30개(3x2x5)의 테스트 케이스가 필요합니다. 그러나 페어와이즈 테스트 기법을 사용하면, 중요한 조합에 집중하여 테스트 케이스 수를 크게 줄일 수 있습니다.

페어와이즈를 사용하면, 다음과 같은 15개의 테스트 케이스를 고려해 볼 수 있습니다.

만약 이 변수들에 조건이 있다면 어떨까요? 위 예시에서 렌터카 서비스의 경우 앱 전용만 적용이 가능하다는 추가 조건을 적용하면 이런 테스트 케이스를 도출할 수 있을 것입니다.

**이때 페어와이즈 테스트 케이스를 쉽게 생성하기 위해 사용할 수 있는 도구들이 여러가지 있는데, 제가 소개할 도구는 바로 **PICT(Pairwise Independent Combinatorial Testing)입니다. PICT는 사용자가 입력한 모델에 대해 가능한 모든 조합을 고려하여 테스트 케이스를 생성해주는 도구로, 페어와이즈 테스트 케이스를 효율적으로 도출할 수 있습니다.

3. PICT 설치 & 사용하기

  1. 만약 Homebrew가 설치되어 있지 않다면 Homebrew를 먼저 설치해줍니다.

https://brew.sh/ko/

사이트의 Install Homebrew 밑 명령어를 터미널에 입력해주면 됩니다

/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"

2. 설치확인을 위해 brew 버전 확인을 해줍니다.

brew --version

위 명령어를 입력해서 버전 확인이 되면 설치 완료입니다.

(설치 완료!)

3. Homebrew 설치가 완료되었다면 brew로 PICT를 설치해줍니다.

brew install pict

위 명령어를 터미널에 입력해주면 됩니다.

+) 아래 깃헙 링크를 통해 설치도 가능합니다.

https://github.com/Microsoft/pict

4. PICT를 설치한 후에는 터미널에서 pict 명령을 실행해서 PICT가 제대로 설치되었는지 확인할 수 있습니다.

pict

PICT에서 사용할 수 있는 옵션들이 노출됩니다.

짜잔! 설치는 끝났으니 바로 적용해보겠습니다.

5. 우선, 텍스트 파일에 테스트 셋을 작성해줍니다.

[Pairwise_test.txt]

쿠폰 적용 서비스 : 국내숙소, 해외숙소, 레저∙티켓, 렌터카, 공간대여

쿠폰 할인 : 쿠폰A, 쿠폰B

쿠폰 조건 : 앱+웹, 앱 전용, 웹 전용

위에서 봤던 예시를 정리해서 텍스트 파일에 저장해줍니다.

6. 텍스트 파일을 작성해주면 다음과 같이 입력하여 페어와이즈 테스트 케이스를 도출할 수 있습니다.

pict Pairwise_test.txt(텍스트 파일)

이 결과를 바탕으로 통합 테스트 케이스를 작성하면 됩니다!

위와 같이 작성할 수 있습니다 👆

이렇게 페어와이즈 테스트 기법을 사용하면, 모든 가능한 변수 조합을 테스트하지 않아도 각 변수 간의 상호작용을 효과적으로 테스트할 수 있습니다.

4. PICT에 조건 적용하기

테스트 데이터를 도출하는 과정에서 바로 적용이 가능할때도 있지만, 제약이 주어지는 경우들도 있을 것입니다. 그럴때는 아래와 같은 명령어를 추가해서 테스트 케이스를 도출할 수 있습니다.

IF ~ THEN 예시

만약 위 조건에서 렌터카 서비스의 경우 앱 전용만 적용이 가능하다는 추가 조건이 있다면 이것 또한 적용이 가능합니다.

텍스트 파일에 아래와 같은 조건을 추가해줍니다.

if [쿠폰 적용 서비스] = "렌터카" then [쿠폰 조건] = "앱 전용";

그러고 실행해보면 조건이 적용된 것을 볼 수 있습니다.

pict testfile.txt > result_file.txt

위 명령어처럼 작성하면 조합결과파일인 result_file.txt 파일이 생성됩니다. 파일로 저장해서도 확인이 가능합니다.

추가적으로 조건을 작성해서 제약 표시를 할 수 있는 예시를 알려드리자면 다음과 같습니다.

- IF ~ THEN, ELSE

ㄴ NOT, AND, OR - LIKE (* - any character, ? – one character)

- IN

- =, <>, >, >=, <, <=

[할인금액] < 10000 // 할인금액이 10000보다 작아야 함
[상태] = "OFF" // 상태가 OFF
[쿠폰명] LIKE "Abc*" // "Abc"으로 시작하는 쿠폰명
IF [쿠폰명] in {"GC", "GC24"} THEN [상태] = "OFF"; //쿠폰명이 GC, GC24인 경우 상태는 OFF
IF [사용처_1] <> [사용처_2] THEN [쿠폰_1] = [쿠폰_2] OR [COU_1] = [COU_2]; 
//사용처_1과 사용처_2가 다르다면 쿠폰_1, 쿠폰_2가 서로 같거나 COU_1, COU_2가 서로 같아야 한다

다양한 제약들을 적용해보고 싶으시다면,

https://github.com/Microsoft/pict/blob/main/doc/pict.md 해당 문서를 참고해보시면 좋습니다.

5. 비설치형 페어와이즈 Tool

PICT 도구는 설치형으로 사용할 수도 있지만, 설치하지 않고 웹으로도 사용이 가능합니다.

Pairwise Pict Online

Generate pairwise testcases onlinepairwise.yuuniworks.com

위 링크를 통해 접속이 가능합니다.

해당 사이트에서도 조건문 사용이 가능합니다.

6. 사용후기 및 PICT 툴의 사용 후기

📌 사용하면서 좋았던 점

📌 사용하면서 더 고민해본 점들

페어와이즈 테스트 기법을 사용하여 테스트 케이스를 도출하고, 때로는 테스트 케이스 간의 관계를 더 명확하게 파악하고자 할 때가 있습니다. 이때 결정테이블 테스팅기법을 결합하여 사용하면 어떨까요? 🙄

위에서 도출한 페어와이즈 테스트 케이스에 대해 결정테이블을 적용하여 테스트 케이스 간의 관계를 더 명확하게 파악할 수 있습니다. 예를 들어, 쿠폰 적용 서비스 가 ‘렌터카 ’이면서 쿠폰 조건 이 ‘앱 전용’일 때의 동작을 결정테이블에 나타내면 각 조건들 간의 관계를 더 쉽게 이해할 수 있습니다. 결정테이블을 사용하여 테스트 케이스를 보완함으로써, 테스트의 품질을 높일 수 있습니다. 이를 통해 테스트 케이스 간의 상호작용을 명확히 파악하고 테스트 커버리지를 높일 수 있습니다.

이렇게 결합하여 사용하게 되면 테스트 과정뿐만 아니라 기획서를 분석하고 확인하는데에도 중요한 도구로 활용할 수 있을 것 같다고 느꼈습니다.

마무리

지금까지 페어와이즈 기법과 PICT 툴 설치 및 사용방법에 대해 소개해 드렸습니다. 여러가지 테스팅 기법 중 한 가지를 소개해드렸는데, 실무에서는 더 많은 테스팅 기법을 사용하고 있습니다. 항상 사용자의 입장에서 생각하고, 철저한 검증을 통해 높은 품질의 서비스를 제공하기 위해 노력하겠습니다!

이 글이 페어와이즈 기법과 PICT 툴을 사용하시려는 분들께 도움이 되었으면 좋겠습니다. 읽어주셔서 감사합니다.

Ref.