QA를 조금 더 Smart하게 하기 위한 QA 가이드북
🚀 QAing의 오픈채팅방에 참여하세요! 프로덕트팀을 위한 인사이트를 공유하고 소통할 수 있어요! [참여하기]
국내외 IT 스타트업의 세계에서는 혁신적인 아이디어가 끊임없이 탄생하고 있습니다. 높은 수준의 서비스를 개발한 후에 그것을 타겟 고객의 발 앞까지 전달하는데까지 성공했다면, 이제 최종 성공과 실패는 고객의 손에 달려 있죠. 소비자가 서비스에 만족하느냐, 실망하느냐의 그 기로 앞에 섰을 때 중요한 건 고객이 요구하는 품질 요구 수준입니다. 그렇기 때문에 IT 스타트업의 경우 품질에 대한 최종 사용자의 요구 사항을 이해하는 것이 무엇보다 중요합니다. 스타트업은 경쟁사와 차별화하기 위해 양질의 사용자 경험을 갖춘 서비스를 제공하기 위해 노력해야 하죠. 그러나 문제는 그리 간단치가 않습니다. 스타트업 업계에서 시간과 리소스는 무척이나 제한적이기 때문입니다.
IT 스타트업이 직면한 과제
기술과 비즈니스 환경이 유독 더 급변하는 요즘, QA는 서비스를 향한 신뢰와 그에 기반한 성공을 결정짓는 중요한 요소로 자리 잡았습니다. 이러한 추세 속에 QA는 이제 단순한 테스트를 위한 역할을 넘어 조직의 중요한 전략적 축으로 성장하고 있죠. 이같은 변화는 QA의 역할이 최종 사용자에게 가치를 제공하는 데 중요한 역할을 한다는 인식의 변화를 반영합니다. 물론, 높은 품질을 추구하면서도 제한된 자원을 효율적으로 활용해야 하는 다소 챌린지한 도전이 남아있긴 하지만 말입니다.
Quality 와 Resources 사이에서의 균형
QA의 주요 도전 중 하나는 높은 품질을 유지하려는 목표와 제한된 자원 사이의 균형을 맞추는 것입니다. 이상적인 세계에서는 무한한 자원으로 모든 가능한 문제를 사전에 찾아내고 해결할 수 있겠지만, 실제로는 QA 팀이 엄격한 마감 시한과 예산 제약 속에서 작업해야 하는 경우가 많습니다. 이러한 현실 속에서 품질을 저하시키지 않으면서 효율적으로 작업을 진행하는 것이 필수적입니다.
QA를 바라보는 전략적 사고의 필요
QA에서의 전략적 사고는 기술적인 측면뿐만 아니라 품질이 비즈니스에 미치는 영향을 포괄적으로 이해하는 것을 의미합니다. 이는 QA를 제품 출시 전 마지막 단계로 보는 관점에서 벗어나, 제품 개발 생명주기 전반에 걸쳐 품질 관리를 내재화하는 패러다임의 전환을 필요로 합니다. 이러한 전략적 통합은 사용자의 요구, 시장의 수요, 그리고 QA 목표가 비즈니스의 광범위한 목표와 어떻게 일치하는지를 깊이 이해하려는 노력에서 출발하죠. 특히 여기서 중요한 건 QA를 격리된 기능으로 보지 않고, 개발 과정의 핵심적인 부분으로 삼는 것입니다. 이를 위해 부서 간의 효과적인 의사소통과 협력이 중요하며, 이를 통해 품질이 모든 단계에서 중요하게 다뤄지도록 해야 합니다.
보다 효과적인 QA 테스트 방법을 위한 연구
자원의 제약 속에서도, 애자일 및 DevOps 방법론의 도입은 QA 분야에서 혁신을 가져왔습니다. 이러한 방법론은 지속적 통합 및 지속적 배포(CI/CD)의 문화를 촉진하여 작고 점진적인 변경사항을 빠르게 테스트하고 배포할 수 있게 합니다. 이는 개발 주기를 가속화할 뿐만 아니라, QA 팀이 중요한 영역에 집중할 수 있게 하고, 자동화를 통해 반복적인 작업을 효율적으로 처리할 수 있게 합니다.
인공지능(AI)과 기계학습(ML)이 QA에 점점 더 활용되면서, 테스트 노력을 최적화할 새로운 기회가 마련되었습니다. 이 기술들은 잠재적인 품질 문제를 예측하고, 테스트 커버리지를 최적화하며, 과거 데이터를 기반으로 가장 효과적인 테스팅 전략을 식별할 수 있습니다. 이러한 예측 능력은 제한된 자원을 가장 큰 영향을 미칠 수 있는 영역에 집중할 수 있게 하여, 품질과 사용자 만족도를 향상시키는 데 큰 도움이 됩니다.
더 Smart한 QA를 위한 가이드
더 나은 품질의 서비스를 위해 결국 중요한 건, 제한된 일정 안에서 최대의 효율을 발휘할 수 있는 전략과 그 전략에 입각한 QA 실행 방법론입니다. 따라서 그 방법론들과 관련하여 QA환경에 영향을 미치는 다양한 요소를 감안한 테스트 최적화에 집중하여 설명하고자 합니다. 먼저, 테스트에 필요한 자원의 대부분은 테스트 케이스를 준비하고 테스트를 실행하는 데에 들어갑니다. 테스트 실행에 소요되는 자원과 시간은 테스트 케이스의 질과 양에 좌우되기 때문에 테스트 케이스를 최적화하면 자연스럽게 테스트 실행을 최적화할 수 있습니다. 이제 테스트 케이스를 최적화할 수 있는 몇 가지 방법에 대해 살펴보도록 하죠.
테스트 최적화 방안
우리는 사용자의 기대를 충족시키기 위해, 사용자가 떠나가지 않게 하기 위해 많은 범위를 신경써야 합니다. 가능한 한 많은 기기를 지원해야 하고, 여러 OS의 각기 다른 브라우저 역시 지원해야 하죠. 그러나, 테스터 인원은 한정적이고 출시일은 정해져 있기 때문에 늘 시간이 부족합니다.
여기에 작업을 시작할 때 몇 가지 불편한 조건이 추가됩니다. 예를 들어, 서비스의 배포는 정해진 시작 일자에 되어 있지 않거나 그날 자정 즈음에나 진행됩니다. 예상했던 것보다 훨씬 많은 버그가 나타나기도 하고, 그 많은 버그들이 처리해도 다시 나타나고, 또 처리해도 다시 나타나고, 계속 반복해서 다시 나타나기도 합니다. 이런 악조건들은 테스트를 진행하는 것과 동시에 계속 오류를 확인하며 회귀 테스트를 진행하는 데에 많은 시간이 걸리게 만듭니다. 할 일은 많고 여러 악조건이 겹치죠. 그러나 우리는 이를 극복해야 합니다.
테스트 최적화에 앞서 우리는 왜 테스트를 설계해야 하는가
테스트 케이스를 만드는 방식에는 두 가지가 있습니다. 첫 번째는 각자의 경험에 기반해서 만드는 방식입니다. 이 방식은 테스터가 보유한 시스템과 도메인에 대한 지식과 테스트 케이스를 작성하는 스킬에 의존합니다. 두 번째는 테스트 케이스 설계 기법에 기반한 방식입니다. 설계 기법에는 각 개인보다 훨씬 많은 사람들의 경험이 집약돼 있어서 설계 기법을 적용해 테스트 케이스를 작성하면 각자의 경험에 기반한 것보다 더 많은 도메인과 프로젝트에 적용할 수 있습니다. 같은 노력으로 더 큰 영역을 커버할 수 있는 것입니다. 따라서 각자의 제한된 경험에 의지하지 않고 설계 기법을 적용하면 테스트 케이스를 좀 더 효율적으로 작성할 수 있습니다.
물론, 아주 간단한 소프트웨어를 시간 제약 없이 만드는 것은 실무자 개개인의 경험만으로도 가능하겠지만, 복잡한 기능을 갖추고 성능에도 신경 써야 하는 소프트웨어를 제한된 시간 내에 만들어야 할 때에는 구조적인 틀을 먼저 설정하는 등의 설계 과정이 수반되어야 합니다. 이런 설계는 개발할 때뿐 아니라 유지하고 관리할 때도 필요합니다. 버그를 수정하거나 기능을 변경할 때 해당 소프트웨어에 기반이 되는 설계가 없다면 변경 영향을 예측하고 버그를 다시 확인하고 회귀 테스트를 수행하는 데에 훨씬 많은 시간이 필요하고, 이는 결국 자원과 시간의 낭비로 이어지게 되죠. 테스트 케이스도 마찬가지입니다. 테스트 케이스에 설계가 없다면 이해하기 어렵고 유지 관리가 어려우며, 이 역시 시간과 자원의 낭비로 연결될 것입니다. 적절한 설계가 없다면 아무리 테스트 케이스가 많다고 하더라도 실제로 커버리지가 얼마나 되는지 쉽게 알 수 없으며, 설계가 적용된 더 적은 수의 테스트 케이스보다 오히려 커버리지가 낮을 수도 있습니다. 이런 이유로 우리는 설계에 기반한 테스트 케이스 최적화에 대해 진지하게 고민하고 시도해 봐야 합니다.
어떤 설계 기법을 적용할 것인가
적절한 설계 기법을 효율적으로 적용하는 것은 쉬운 일이 아닙니다. 언제, 어떤 설계 기법을 적용할 것인가에 대해서 아직 누구도 명확한 답을 제시하긴 어렵지만, 각 사례마다의 접근한 방식을 통해 무엇이 조금은 더 효율적인지에 대해선 가늠해볼 수 있을 것 같습니다.
1. EP-BVA 적용 사례
EP-BVA에 대해 간략히 설명드리자면, 먼저 EP는 동등 분할(Equivalence Partitioning) 기법으로 프로그램의 입력값과 출력값이 특정 그룹으로 돼 있고 분류된 그룹의 값들을 시스템에서 동일하게 취급한다는 특성을 이용한 테스트 기법입니다. BVA는 경곗값 분석(Boundary Value Analysis) 기법으로 동등 분할의 확장 형태입니다. 입력값이 많지 않은 간단한 페이지에는 EP-BVA 기법을 적용하는 것이 용이합니다.
EP-BVA를 사용하는 테스트 설계 기법의 구체적인 절차는 다음과 같습니다.
- 입력값을 동등한 그룹으로 분할(Equivalence Partitioning)한다.
- 각 그룹의 경계값을 식별하고 분석(Boundary Value Analysis)한다.
- 각 그룹의 경계값을 포함하는 테스트 케이스를 설계하고 실행한다.
- 시스템이 경계값에서 올바르게 작동하는지 확인한다.
- 테스트 결과를 문서화하고 결함을 추적하여 수정 및 재테스트한다.
결국, 만약 가능한 모든 조합을 테스트한다면 수십 수백개의 테스트 케이스 조합이 나올 수 있는 환경을 가정해 봤을 때, 이 모든 조합을 테스트 할 경우 테스트하는 데 시간이 많이 걸려서 다른 중요한 화면이나 기능을 놓칠 수 있습니다. 그러나 EP-BVA 기법을 적용하여 경계값을 기준으로 몇 가지의 동등 분할로 특정한다면 시간과 노력을 상당 부분 줄일 수 있습니다. 입력값과 출력값의 구분이 명확하고 각 그룹의 값들이 동일하게 취급되는 간단한 페이지들의 경우 BVA의 사용이 최선일 수 있습니다.
2. 페어와이즈 적용 사례
입력과 출력이 많은 페이지를 테스트할 때는 페어와이즈(pairwise) 기법을 사용하는 것이 효율적입니다. 페어와이즈(pairwise)란, 가능한 모든 입력값의 조합을 테스트하는 대신 짝들의 조합으로 테스트하는 방법입니다. 관련해서 Line에서 진행한 바 있던 Fortune 프로젝트의 적용을 통한 사례를 살펴보도록 하죠.
Fortune 프로젝트
먼저 Fortune 프로젝트(LINE 占い)입니다. LINE 占い는 점술가와 사용자를 연결해 주는 서비스로 사용자는 전문가를 선택해 운세를 확인할 수 있습니다. Fortune 시스템의 아웃풋은 여러 조건과 값에 영향을 받습니다. 예를 들어 사용자들의 순위(기본, 백금, 골드, 다이아몬드)는 가격에 영향을 미칩니다. 사용자는 프로모션 패널을 통해 무료 티켓을 받을 수도 있고 이후 티켓을 더 구매하거나 티켓을 구매하는 대신 신용 카드로 비용을 지불할 수도 있습니다. 사용자는 점술가에게 컨설팅을 받은 후 리뷰를 남길 수도 있고 그렇지 않을 수도 있습니다. 컨설팅 시간은 10분 이내가 될 수도 있고 그 이상으로 매우 긴 시간이 될 수도 있습니다. 이런 조건을 생각해 볼 때 만약 설계 없이 테스트 케이스를 작성한다면 얼마나 많은 케이스가 도출될지 예측할 수 없습니다. 가능한 모든 조합을 계산해 보면 총 테스트 케이스는 1000개가 넘는데요.
두 개의 입력값을 가진 X, Y, Z를 받아들이는 시스템 환경
X = 1, 2
Y = Q, R
Z = !, #
간단한 예시를 들어보자면, 각각 두 개의 입력값을 가진 X / Y / Z 를 받아들이는 시스템 Q를 테스트하는 상황을 가정해봤을 때, 일반적인 테스트 조합의 개수는 8가지로 산출(2 X 2 X 2)됩니다만, 페어와이즈 테스팅 기법을 적용한다면 각 짝들의 조합으로만 테스트를 진행하게 되죠. 결국, 아래와 같은 4가지의 테스트 조합만 도출이 됩니다.
페어와이즈 기법에서 도출되는 테스트 조합
- 1 - Q - !
- 1 - R - #
- 2 - R - !
- 2 - Q - #
간단한 테스트 조건에서 이 정도의 효율이라고 한다면 수백 수천개의 테스트 조합의 경우 수 십개의 테스트 조합으로 압축이 가능합니다. 또한 단순히 숫자만 줄인 것이 아니라 테스트 커버리지도 높았고 추적하기도 용이하기에 효율과 효과 모두를 충족시키는 테스트기법으로 활용되고 있죠. Line 역시 페어와이즈 기법의 적용을 통해 시간과 리소스 모두 비약적으로 절약할 수 있었습니다.
3. 상태 전이(state transition) 적용 사례
시스템의 흐름을 테스트할 때는 상태 전이 기법을 사용하는 것이 효과적일 때가 많습니다. 상태 전이(state transition)는 어떤 이벤트가 발생했을 때 테스트 대상이 다른 상태로 전이되는 경우의 수를 테스트하는 방법입니다. 보유한 테스트 역량으로 감당하기 어려운 긴 비즈니스 흐름이나 이벤트 배열을 테스트할 때 사용하는 기법이기도 하죠. 이 기법을 적용한 사례를 통해 설명해보도록 하겠습니다.
사용자가 잘못된 비밀번호를 세 번 입력하면 계정이 잠기는 온라인 은행 시스템을 생각해 보겠습니다. 이 시스템에서는 사용자가 처음 세 번의 시도 중 하나라도 유효한 비밀번호를 입력하면 성공적으로 로그인됩니다. 사용자가 첫 번째 또는 두 번째 시도에서 잘못된 비밀번호를 입력하면 사용자에게 비밀번호를 다시 입력하라는 메시지가 표시됩니다. 그리고 마지막으로, 사용자가 잘못된 비밀번호를 입력한 경우 시간이 지나면 계정이 차단됩니다.
이와 같은 프로젝트의 경우 테스트 케이스를 작성하면서 설계 기법을 적용하지 않는다면 도출된 테스트 케이스의 커버리지를 예측하는 것이 매우 어렵습니다. 그렇다고 모든 조합을 테스트하려면 테스트하는 데에만 꽤 많은 이상이 걸릴 수 있는데요. 이렇듯 상태 전이 기법을 사용하여 테스트 대상 애플리케이션의 오퍼레이션을 시각화하는 것은 테스트케이스를 식별하는 매우 효과적인 방법이며, 특히 부정적 테스팅(Negative Testing)이 목적인 경우에도 효과적입니다. 이를 통해 테스트 품질은 물론 시간을 비약적으로 절약할 수 있게 됩니다.
각자의 상황에 맞는 해답을 찾아나가는 최적화된 QA 방법론
IT 스타트업은 적합한 가장 유효한 QA 테스트 전략 설정에 대한 요구와 함께 예산과 일정, 인적 자원 관리를 비롯한 제한된 리소스에 노출되어 있습니다. 물론 급변하는 요즘 시대 속에서 더 나은 서비스와 품질을 위한 올바른 접근 방식과 전략을 찾기란 결코 쉽지 않은 과제입니다만, 효과적인 QA 프로세스를 구현하고 테스트를 최적화 한다면, 제한된 자원과 시간으로도 최고의 서비스 품질을 얻을 수 있습니다.
QA 분야는 기술 발전과 시장 변화에 따라 지속적으로 변화하고 있습니다. 이러한 환경에서 성공하기 위해서는 적응력과 혁신이 필수적입니다. QA 프로세스의 효과를 높일 수 있는 새로운 방법론, 도구, 기술을 탐구하는 것이 중요합니다. 또한, 품질을 중시하는 문화를 조성하고, 부서 간 협력을 촉진하며, 모든 과정에서 사용자를 중심에 두는 것 역시 필요하죠.
더 나은 QA 방법론을 위한 태도와 자세
- 새로운 방법론, 도구, 기술을 탐구
- 품질을 중시하는 문화를 조성
- 부서 간 협력을 촉진
- 모든 과정에서 사용자를 중심에 두는 문화
더 나아가 QA 분야에서의 지속적인 성장과 발전을 위해서는, 우리가 직면한 제약 조건 속에서도 품질을 최우선으로 생각하고, 사용자의 경험을 중심에 두는 동시에, 비즈니스 목표와의 조화를 이루어야 합니다. 그런 의미에서 QA 분야의 발전은 단순히 테스트 기법이나 도구의 변화에만 있는 것이 아닙니다. 이는 더 넓은 관점에서 제품의 품질을 개선하려는 노력의 일환으로, 사용자와 비즈니스 모두에게 가치를 제공하는 지속 가능한 개발 문화를 조성하는 것입니다. 이 과정에서 QA 전문가들은 단지 기술자가 아닌, 전략적 파트너로서 중요한 역할을 수행해야 합니다. 이는 QA가 비즈니스 성공에 기여하는 중요한 수단임을 인식하고, 이를 실현하기 위한 전략적 사고와 혁신적인 접근이 필요함을 의미합니다.
Share article