김영민 와이즈스톤 팀장

▲ 김영민 와이즈스톤 팀장

 

[컴퓨터월드] 지난 호에서는 테스트 계획의 중요성과 필요성에 대해 알아보았다. 테스트 계획은 단순한 문서가 아니라 고객과의 의사소통 도구이며, 테스트 수행에 있어서 가장 핵심이 되는 성공요소라는 점을 강조했다. 이번 호에는 테스트 수행 전에 수행하는 테스트 설계와 테스트 환경에 대해 이야기 하고자 한다.

우리가 건물을 지을 때 가장 먼저 하는 활동은 고객의 요구 사항을 수집하고, 그것을 바탕으로 건물을 짓기 위해 필요한 건축 설계도를 작성하는 것이다. 건축 설계도가 없다면 건물의 크기, 높이, 위치 등의 정보를 알 수 없기 때문에 고객이 원하는 건물을 지을 수 없다.

테스트 활동도 건물을 짓는 것과 비슷하다. 고객의 요구 사항을 도출한 명세서를 바탕으로 테스트 설계를 진행하고, 설계된 테스트 케이스와 테스트 프로시저로 테스트 환경에 대한 구축 및 확인 작업이 필요하다. 테스트 설계가 필요한 이유는 테스트 수행을 통해 고객의 요구 사항에 따라 잘 개발(Validation)되었는지, 요구 사항 대로 잘 동작하는지 확인(Verification)하기 위해 테스트 케이스와 테스트 프로시저를 이용하기 때문이다.

테스트 설계(Test Design) 단계에서는 일반적으로 테스트 케이스 명세서(Test Case Specification)와 테스트 프로시저 명세서(Test Procedure Specification)를 작성한다. 아래 그림은 ISO/IEC/IEEE 29119-2 (2013)의 Test Design and Implementation Process 의 순서를 나타내고 있다.

일반적인 V-Model을 기반으로 테스트를 수행할 경우 각 테스트 레벨(Test Level)인 단위 테스트(Unit Testing), 통합 테스트(Integration Testing), 시스템 테스트(System Test), 인수 테스트(Acceptance Testing)별로 테스트 케이스와 테스트 프로시저를 작성해야 한다. 물론, 프로젝트의 규모, 예산, 인력 및 기간 등에 따라 변경될 수 있으며, 이러한 내용은 사전 테스트 계획서에 명시돼 있어야 한다.

▲ V-Model

▲ Test Design and Implementation Process


제품의 품질 측정을 위한 테스트 설계

테스트 설계는 요구 사항 명세서(Requirement Specification), 스토리보드(Story Board), 정책서, 매뉴얼 등을 기반으로 테스트케이스와 테스트 프로시저를 설계하는 것을 의미한다.

테스트 설계는 다양한 테스트 설계 기법(Test Design Techniques)을 적용해 진행하는데, 일반적으로 테스트 설계 기법은 블랙박스(Black Box) 테스트 설계 기법과 화이트박스(White Box) 테스트 설계 기법으로 구분된다. 현재 소프트웨어 테스팅 국제 표준 ISO/IEC/IEEE 29119에서는 명세 기반 테스팅 기법(Specification-Based Testing Techniques), 구조 기반 테스팅 기법(Structure-Based Testing Techniques) 그리고 경험 기반 테스팅 기법(Experience-Based Techniques)으로 구분을 하고 있다.

테스트 설계 시 다양한 테스트 설계 기법을 사용하지만 모든 테스트 설계 기법이 적용되는 것은 아니다. 각 사업장과 도메인의 특성에 적합한 테스트 설계 기법을 적용해 테스트 설계를 진행해야 한다.

한 예로 E-Commerce의 경우 일반적인 값에 대한 테스트 수행을 위해 경계값 분석(Boundary Value Analysis)을 사용하고, 정책에 대한 이해 및 오류를 찾기 위해 결정 테이블 테스팅(Decision Table Testing)을 사용하거나, 다양한 조건에 대한 결제 수행을 위해 페어와이즈 테스팅(Pairwise Testing) 등의 블랙박스 설계 기법이 적용된다.

▲ E-Commerce 분야 테스트 설계기법 사용 예시

실제로 통합테스트를 수행하는 경우 아래와 같이 결정 테이블을 통해 논리적인 오류를 판별할 수 있으며, 이후 페어와이즈 테스팅을 통해 다양한 조합을 생성하여 테스트 커버리지를 만족시킨다. 이 결과를 바탕으로 통합테스트 케이스를 생성해 테스트를 수행할 수 있다.


 

▲ 통합 테스트케이스 작성 사례


물론 테스트 엔지니어들은 위에서 언급한 테스트 설계 기법 외에 보다 다양한 테스트 설계 기법을 적용해 요구 사항의 커버리지를 높이고 보다 효율적인 테스트 수행하고 있다. 하지만 프로젝트 진행 시 가장 큰 문제는 제품 개발 과정에서 테스트 수행에 대한 충분한 시간을 보장해 주지 않는다는 것이다. 또한 개발 단계에서 요구 사항 변경이나 프로젝트 이슈가 발생해 기간이 늘어날 경우 보통 다른 일정은 그대로 두고 테스트 수행에 대한 일정을 줄이는 경향이 있다. 이런 이유로 다양한 테스트 설계 기법을 적용해 효율적인 테스트 수행을 하는데 어려움이 있다.

프로젝트 매니저, 기획자 등 프로젝트 관련자들이 품질의 중요성에 대해 좀 더 고민하지 않는다면, 이러한 문제는 해결되기 어렵다고 할 수 있다.

또한 테스트 설계를 진행할 때 다양한 도구의 도움을 받을 수도 있는데, 특히 E-Commerce 분야에서 가장 많이 사용하는 페어와이즈 테스팅의 경우 Allpairs나 PICT 등과 같은 오픈 소스 도구(Open Source Tool)를 활용하기도 한다. 이러한 도구를 활용하게 되면 설계 기법에 대한 신뢰성을 확보할 수 있으며, 테스트를 설계하는데 시간을 단축할 수 있다.


테스트 결과의 신뢰성을 높이기 위한 테스트 환경 구축

테스트 설계를 완료했어도 테스트를 위한 환경이 구축돼 있지 않으면 테스트를 수행하는데 많은 문제가 발생될 수 있다. E-Commerce, Mobile App, Smart TV, 기타 Embedded 시스템 등 도메인 분야에 따라 다양한 테스트 환경이 존재한다. 테스트 환경이 중요한 이유는 테스트 환경에 따라 테스트를 수행할 수 있는 기능이 다르며 테스트 환경이 테스트의 결과에 많은 영향을 미치기 때문이다. 아래의 그림은 일반적으로 사용되고 있는 E-Commerce의 테스트 서버 구성 환경이다.

E-Commerce의 경우 위에서 언급한 V-Model의 각 레벨별 테스트 수행이 가능하도록 구성한다. 단위 테스트의 경우 개발자가 진행하기 때문에 개발 데이터베이스(Database)와 개발자 PC로 환경을 구축하고, 통합 테스트는 전용 개발 서버로 환경을 구축한다. 시스템 테스트의 경우에는 테스트 서버와 테스트 데이터베이스로 환경을 구축하며, 일반적으로 테스트 서버에서는 기능과 비기능 테스트 수행이 가능하도록 구축한다. 또한 실제 운영되고 있는 운영 데이터베이스는 주기적으로 개발 데이터베이스와 테스트 데이터베이스에 동기화해 최신 데이터를 유지시켜 주어야 한다.


▲ E-Commerce 테스트 전용 서버 구성안

테스트 전용 서버 구성안에서 가장 중요한 서버는 테스트 서버이다. 단위 테스트나 통합 테스트는 하나의 서버로 하는 경우가 있지만, 테스트 서버의 경우는 반드시 서버와 테스트 데이터베이스가 독립되어 있어야 한다. 만약 독립되어 있지 않다면, 개발자가 소스를 임의로 변경하거나 데이터를 조작할 수 있기 때문에, 추후 테스트 결과에 영향을 미치며, 결과에 대한 신뢰성을 보장할 수 없게 된다.

그리고 테스트 수행을 위해 클라이언트를 위한 테스트 베드를 구축해야 한다. 인터넷 및 모바일 브라우저 테스트가 가능하도록 테스트 베드를 구축하고, 이렇게 구축된 환경은 테스트 설계에도 반영해야 한다. 임베디드 소프트웨어는 하드웨어에 종속되기 때문에 장비 내부의 소프트웨어가 잘 동작하는지 확인하는 기능성을 중시해야 한다. E-Commerce는 기능성도 중요하지만, 특정 단말기와 운영체제(Operating System)에서 동작하는 것이 아니기 때문에 호환성에 대한 테스트가 매우 중요하다. 이런 이유로 다양한 환경에서의 테스트 수행을 위한 클라이언트 테스트 베드(Test Bed)가 잘 구축되어 있어야 한다.


▲ E-Commerce 테스트 베드 구성안


테스트 분야에서는 보다 효율적으로 테스트 설계를 하기 위한 다양한 방법들을 추구하고 있다. 테스트 업계의 이러한 노력을 통해 테스트 시간을 단축시키고, 테스트의 커버리지를 높여나가고 있으며, 더 나아가 테스트 자동화에도 많은 영향을 미치고 있다. 공통적인 기능이나 반복적인 기능에 대해서는 테스트 자동화를 통해서 시간과 비용을 줄일 수 있다.

테스트 설계는 단순한 테스트케이스와 테스트 프로시저를 설계하는 활동이라기보다는 테스트를 효율적으로 수행하기 위한 사전 활동이라 생각해야 하며 제품의 품질을 결정하는 최초의 작업임을 잊지 말아야겠다.

저작권자 © 컴퓨터월드 무단전재 및 재배포 금지