티스토리 뷰

 

소프트웨어 개발 생명 주기에서 테스팅 활동은 개발 활동과 밀접하게 연관되어 있으며, 생명 주기의 유형에 따라 테스팅 방식이 달라진다. 전통적인 생명 주기(예: V-모델이나 RUP와 같은 반복적 모델)와 애자일 생명 주기에서 테스팅이 어떻게 다르게 이루어지는지 이해하는 것은 테스터가 효과적이고 효율적으로 작업하는 데 중요한 요소이다. 이번 글에서는 두 접근법의 주요 차이를 다루며 테스터가 알아야 할 핵심 내용을 살펴본다.

테스팅과 개발 활동

전통적 생명 주기와 애자일 생명 주기의 주요 차이점 중 하나는 매우 짧은 반복 주기를 가진다는 점이다. 각 반복 주기는 비즈니스 이해관계자에게 가치를 제공하는 기능이 포함된 작동 가능한 소프트웨어로 이어진다. 프로젝트 초반에는 릴리즈 계획 기간이 존재하며, 이후 여러 반복이 순차적으로 이루어진다. 각 반복 시작 시에는 반복 계획이 수립되며, 반복의 범위가 정해진 후에는 선택된 사용자 스토리가 개발, 시스템 통합, 그리고 테스트 과정을 거치게 된다. 이러한 반복 주기는 개발, 통합, 테스트 활동이 병렬적이고 중첩적으로 이루어지는 매우 역동적인 환경이다.

예를 들어, 한 모 스타트업은 매 반복 주기에 사용자가 요구한 기능을 빠르게 개발하고 테스트하는 과정을 통해 시장 진입 속도를 가속화하였다. 이러한 접근법은 시장에서 경쟁 우위를 확보하는 데 중요한 역할을 했다.

전통적인 생명 주기와 마찬가지로 애자일에서도 테스터, 개발자, 비즈니스 이해관계자가 모두 테스팅에 참여한다. 개발자는 사용자 스토리를 기반으로 기능을 개발하면서 단위 테스트를 수행한다. 이후 테스터는 해당 기능을 테스트하고, 비즈니스 이해관계자는 구현 중인 스토리를 실험적으로 사용하거나 피드백을 제공하여 팀에 빠르게 의견을 전달한다.

일부 경우, 기술적 부채와 결함을 해결하기 위해 하드닝(hardening) 또는 안정화(stabilization) 반복 주기가 주기적으로 실행되기도 한다. 그러나 가장 좋은 방식은 기능이 시스템과 통합되고 테스트를 완료한 후에만 완료된 것으로 간주하는 것이다. 예를 들어, 한 모 프로젝트에서는 모든 기능이 통합 테스트를 성공적으로 통과하지 못할 경우 "완료"로 간주하지 않도록 프로세스를 설정하여 품질을 엄격히 관리했다.

리스크 기반 테스팅과 우선순위 설정

리스크 기반 테스팅은 애자일 팀에서 사용되는 주요 전략 중 하나이다. 릴리즈 계획 중 테스터는 고수준의 리스크 분석을 주도하며, 특정 반복에서는 각 기능과 관련된 품질 리스크를 식별하고 평가한다. 이러한 리스크 분석은 개발 순서, 테스팅 우선순위, 그리고 각 기능의 테스팅 깊이와 노력 추정에 영향을 미친다.

예를 들어, 한 모 기업은 새롭게 출시될 금융 관리 소프트웨어에서 리스크 기반 테스팅을 활용했다. 이 기업은 사용자 데이터 보안과 관련된 기능을 최우선으로 테스트하도록 우선순위를 설정했다. 이를 통해 민감한 사용자 정보를 처리하는 기능이 문제없이 작동하도록 보장했으며, 동시에 사용자 인터페이스와 같은 덜 중요한 영역은 후순위로 테스트하였다. 이러한 방식은 리소스를 효과적으로 활용하면서도 중요한 품질 목표를 충족하는 데 기여했다.

또 다른 사례로, 한 모 프로젝트에서는 의료 기기 소프트웨어 개발 중 리스크 기반 접근법을 사용하여 생명과 직결된 기능의 안정성을 가장 먼저 검증하였다. 이 프로젝트에서는 환자 데이터를 다루는 핵심 기능을 집중적으로 테스트했으며, 결과적으로 규제 기관의 요구 사항을 충족하고 제품 출시를 성공적으로 완료할 수 있었다. 이는 리스크 분석이 어떻게 실제 테스트 전략에 통합될 수 있는지를 보여주는 사례이다.

 

전통적 접근법과 애자일 접근법에서의 테스팅 차이

페어링과 협업

Extreme Programming(XP)와 같은 일부 애자일 관행에서는 페어링(pairing)이 사용된다. 페어링은 두 명의 테스터가 함께 특정 기능을 테스트하거나, 테스터와 개발자가 협업하여 기능을 개발하고 테스트하는 방식이다. 분산된 팀에서는 페어링이 어려울 수 있지만, 이를 지원하는 도구와 프로세스가 점점 발전하고 있다. 예를 들어, 한 모 기업에서는 원격 협업 도구를 활용하여 전 세계에 분산된 팀원이 동일한 기능을 테스트할 수 있도록 프로세스를 간소화했다. 이러한 협업은 팀 내 품질 보증 작업을 지원하고 테스트 지식을 공유하는 데 기여한다.

테스트 자동화와 경험 기반 테스팅

애자일 팀에서는 모든 테스트 수준에서의 자동화가 일반적이다. 테스터는 자동화된 테스트를 생성, 실행, 모니터링, 유지보수하는 데 많은 시간을 할애한다. 자동화의 비중이 높아짐에 따라 수작업 테스트는 주로 경험 기반 및 결함 기반 기법(예: 탐색적 테스팅, 오류 추정)을 사용하여 수행된다. 개발자는 주로 단위 테스트를 생성하며, 테스터는 통합 테스트, 시스템 테스트, 그리고 시스템 통합 테스트의 자동화에 집중한다. 따라서 애자일 팀에서는 기술적이고 테스트 자동화에 강한 배경을 가진 테스터를 선호하는 경향이 있다.

경량 문서화와 변화 관리

애자일의 핵심 원칙 중 하나는 프로젝트 진행 중 변화가 발생할 수 있다는 점이다. 따라서 애자일 프로젝트에서는 경량화된 산출물 문서화가 선호된다. 기존 기능에 대한 변경 사항은 회귀 테스트를 포함하여 추가적인 테스팅을 필요로 한다. 자동화된 테스트는 변화 관리와 관련된 테스트 노력을 줄이는 데 유용하지만, 변화 속도가 팀의 처리 능력을 초과하지 않도록 관리하는 것도 중요하다.

실제 사례

한 모 스타트업은 스크럼 방법론을 채택하여 빠른 시장 진입을 실현하였다. 이 스타트업은 스크럼을 통해 개발 주기를 단축하고 지속적인 고객 피드백을 반영하여 제품을 개선함으로써 경쟁사보다 빠르게 시장에 진입하고 점유율을 확대할 수 있었다.

또 다른 사례로, 모 그룹은 전통적인 워터폴 모델에서 벗어나 애자일 개발 방식을 도입하여 고객 요구 변화에 유연하고 신속하게 대응하였다. 이를 통해 개발 과정의 효율성과 창의적 제품 개발을 촉진할 수 있었다.

추가적으로, 한 모 프로젝트에서는 새로운 기능 개발 외에도 자동화 테스트를 통해 기존 기능의 품질을 지속적으로 유지하였다. 이러한 방식은 팀이 지속적인 변화를 수용하면서도 안정성을 유지할 수 있도록 도왔다.

개인적인 의견과 전망

애자일 환경에서 테스터의 역할은 단순히 결함을 찾는 것을 넘어 팀과 협력하여 품질을 보증하고 최적의 사용자 경험을 제공하는 데 있다. 앞으로는 AI 및 머신러닝 기반의 테스트 자동화 도구와 분산 팀 협업 도구가 발전함에 따라 애자일 테스팅의 효율성과 효과성이 더욱 향상될 것으로 예상된다. 이러한 변화는 테스터의 기술적 역량뿐만 아니라 협업과 문제 해결 능력의 중요성을 더욱 부각시킬 것이다.

특히, 소규모 스타트업에서 애자일 접근법의 도입은 필수적인 전략으로 자리 잡고 있다. 빠른 시장 변화에 대응하며, 제한된 리소스 내에서 최대의 효율성을 끌어내는 데 애자일의 유연성과 테스트 자동화의 결합이 핵심 역할을 하고 있다. 다만, 애자일 접근법이 모든 상황에 적용 가능한 만능 해결책은 아니므로, 팀과 프로젝트의 특성을 고려한 균형 잡힌 접근이 중요하다.