제목: 회귀 테스트 전략 비교를 위한 비용 모델(A Cost Model to Compare Regression Test Strategies)
저자: Hareton Leung 외 1인, 캐나다
문서유형: IEEE 페이퍼(총 8페이지), 1991년
테스트 비용 모델을 제안하고 이를 기반으로 일부 테스트를 선택적으로 재테스트 하는 회귀 테스팅 전략이 전체를 재테스트 하는 회귀 테스팅 전략보다 더 경제적이기 위한 조건을 분석한 자료
소프트웨어 유지보수
- 대부분의 소프트웨어 시스템이 환경 변화, 요구사항 변화, 신 개념 및 신 기술 등장에 맞추어 변경이 되는 진화 과정을 거치게 된다. 즉, 소프트웨어의 기능(functions)/컴포넌트(components)/인터페이스(interfaces)의 수가 점차 증가하게 되며 기존 모듈이 원래 설계된 사용 의도를 넘어 확장되기도 한다.
- 소프트웨어 유지보수가 전체 소프트웨어 비용의 50~80%를 차지한다.
- 소프트웨어 재테스팅(the retesting of the software)이 유지보수의 주요 부분이므로 효율적이고 효과적인 회귀테스팅(regression testing )으로 유지보수 비용을 감소할 수 있다.
회귀 테스팅(Regression testing)이란
프로그램이 변경된 후에 적용되는 테스팅 프로세스로서, 프로그램이 명세서대로 수행되는지 재확신을 얻기 위해 일부 테스트 케이스를 사용하여 변경된 프로그램을 테스팅 하는 일이다.
회귀 테스팅 전략(Rgression testing strategies)
- 전체 재테스트 전략(the retest-all strategy): 이전에 수행한 테스트들을 저장했다가 변경이 생길 때마다 다시 수행(rerun) 시킨다.
- 선택적 재테스트 전략(a selective strategy): 이전 테스트를 전부 반복하는 대신에 일부분(a subset of the previous test)을 선택하여 실행하는 방법. 변경된 프로그램 부분과 관련된 테스트를 식별하기 위해 별도의 정보들이 테스트와 함께 저장되며, 대개 전체 재테스트 전략(the retest-all strategy)에 비해 적은 수의 테스트를 수행시킨다.
테스트 비용 모델(A Test Cost Model)
- 소프트웨어 시스템을 테스팅하는 비용을 직접 비용(direct costs)과 간접 비용(indirect costs)으로 구분
- 직접 비용: 테스팅 및 테스팅 자원(예, 컴퓨터, 테스팅 랩)과 관련된 모든 활동을 수행 하는데 소요되는 비용
- 간접 비용: 전체 테스팅 프로세스를 관리하는데 소요되는 관리 비용, 테스트 관련 정보(예, 테스트 케이스, 정적 분석 결과, 실행 이력)를 저장하는데 필요한 데이터베이스 비용, 테스트 도구 개발 비용 등을 포함
- 이 논문에서 제안된 회귀 테스팅 관련 비용 모델은 간접 비용이 결과에 크게 영향을 미치지 않는다는 가정하에 직접 비용에 중점을 두어 개발됨
소프트웨어 시스템 테스팅에 관련된 직접적인 활동(direct activities)으로 1) 대상 시스템 분석(test analysis), 2) 테스트 케이스 선택(test selection), 3) 테스트 실행(test execution), 4) 결과 분석(result analysis)을 들 수 있다. 따라서 일련의 테스트 케이스 집합을 테스트 대상 소프트웨어 시스템에 적용하는데 소요되는 비용은 아래 항목들로 구성된다.
- 시스템 분석 비용(System Analysis Cost, Ca): 테스트 대상 시스템의 동작을 이해하기 위해 여러 분석/설계 문서를 분석. 시스템 규모가 클수록 이 작업에 소요되는 시간도 증가한다.
- 테스트 케이스 선정 비용(Test Selection Cost, Cs): 테스트 대상 시스템의 동작을 테스팅 하기 위한 테스트 케이스를 선택. 테스트 입력값(the test input)과 예상 결과(the correct output or system behavior)를 식별하는데 드는 비용. 이 단계의 비용은 적용한 테스트 케이스 선정 전략이 무엇인지에 따라 크게 달라진다.
- 테스트 실행 비용(Test Execution Cost, Ce): 테스팅 환경(예, 필요한 모듈을 로딩하고 컴파일, 적절한 데이터 테이블 입력 등)을 만드는 비용과 테스트 대상 시스템을 실제로 실행시키는데 필요한 컴퓨팅 자원 비용이 포함된다. 애플리케이션 종류에 따라 이 단계의 비용이 높을 수도 있는데, 예를 들어 통신 분야에서 실제 통신 네트워크를 시뮬레이션 할 수 있는 테스팅 랩(a testing lab)을 세우는데 수백만 달러가 들기도 한다.
- 결과 분석 비용(Result Analysis Cost, Cr): 테스트 대상 시스템의 동작을 명세된 동작에 비교하는데 드는 비용으로, 테스터가 테스트 결과(the test outputs)를 수집하는 비용, 수집된 결과를 시스템 명세와 비교하는 비용, 테스트 대상 시스템의 동작을 레코딩하는데 필요한 컴퓨팅 자원(the computing resource) 비용 등이 포함된다. 이 논문에서는 결과 분석 비용 Cr을 두 개의 하위 컴포넌트로 세분화하여 Cu(프로그램의 동작/출력물이 정확한지 판단하기 위해 프로그램과 명세서를 이해하는데 드는 비용)와 Cc(각 테스트 결과를 예상 결과에 비교하는데 소요되는 비용)로 나눈다. 즉, Cr=Cu+Cc 이다.
위의 모든 테스트 비용 컴포넌트들은 테스트 케이스 수(the number of test cases)에 직접적인 영향을 받는 것으로 가정한다. 즉, 테스트 케이스 수가 많을 수록 비용도 증가한다. 따라서 테스트 케이스 집합 T를 이용하는 테스트 전략 S를 적용하는데 소요되는 비용은 아래처럼 표현된다.
C(S) = Ca(T)+Cs(T)+Ce(T)+Cu(T)+Cc(T)
회귀 테스팅 전략의 비용(Cost of Regression Strategies)
회귀 테스팅의 ‘전체 재테스트 전략’과 ‘선택적 재테스트 전략’의 비용을 비교하기 위해 아래와 같은 가정을 세운다.
- 테스트 효과성 측면에서 전체 재태스트 전략과 선택적 재테스트 전략이 동일하다. 즉, 두 전략이 동일한 테스팅 기법과 신규 테스트 케이스 도출 방법을 사용한다.
- 전체 재태스트 전략은 이전 테스트를 다시 적용하는데 있어 별도의 분석 노력이 요구되지 않는다.
- 선택적 재테스트 전략은 이전 테스트 케이스 집합에서 실행 할 테스트 케이스 부분 집합을 선택하는 일에 노력(공수)이 들어간다.
1) 전체 재테스트 전략의 테스팅 비용
전체 재테스트 전략은 To(기존 테스트 케이스들의 집합)와 Tn(변경된 명세나 코드를 테스트 하기 위한 신규 테스트 케이스들의 집합)의 두 개의 테스트 케이스 집합을 사용한다. 따라서 전체 재테스트 전략의 테스팅 비용은 아래와 같이 표현된다.
C(retest-all)= [Ca(To)+Cs(To)+Ce(To)+Cu(To)+Cc(To)] + [Ca(Tn)+Cs(Tn)+Ce(Tn)+Cu(Tn)+Cc(Tn)]
전체 재테스트 전략에서는 별도의 분석과 테스트 케이스 선정 노력 없이 기존 테스트를 다시 적용하므로 Ca(To)=Cs(To)=0 이다. 즉, 위 식은 아래와 같이 표현될 수 있다.
C(retest-all) = [Ce(To)+Cu(To)+Cc(To)] + [Ca(Tn)+Cs(Tn)+Ce(Tn)+Cu(Tn)+Cc(Tn)]
2) 선택적 재테스트 전략의 테스팅 비용
선택적 재테스트 전략에서는 기존 테스트 케이스 집합 To의 부분 집합인 Ts와 신규 테스트 케이스 집합 Tn'이 함께 적용된다. 전체 재테스트 전략과 선택적 재테스트 전략이 신규 테스트 케이스 도출에 있어 같은 방법을 사용한다고 가정했으므로 Tn'=Tn 이다. 따라서 선택적 재테스트 전략의 비용은 아래와 같이 표현된다.
C(selective) = [Ca(Ts)+Cs(Ts)+Ce(Ts)+Cu(Ts)+Cc(Ts)] + [Ca(Tn)+Cs(Tn)+Ce(Tn)+Cu(Tn)+Cc(Tn)]
3) 위 두 전략의 비용 비교
위의 두 경우 모두 유지보수 목적의 변경이 기존 테스트 케이스의 시스템 검증 능력에 미치는 영향을 이해하기 위한 테스트 분석가의 분석이 필요하므로 Ca(Ts)와 Cu(Ts)를 합한 비용이 Cu(To)의 비용과 대략 비슷해진다. 즉, Ca(Ts)+Cu(Ts)=Cu(To) 이다. 또한 C(retest-all)와 C(selective)의 우측에 위치한 수식은 동일하므로 상쇄가 가능하다. 따라서 선택적 재테스트 전략의 비용이 전체 재테스트 전략 비용보다 낮기 위한 조건을 아래처럼 표현할 수 있다.
C(selective) - C(retest-all) < 0
또는 [Cs(Ts)+Ce(Ts)+Cc(Ts)]-[Ce(To)+Cc(To)] < 0
또는 Cs(Ts) < [Ce(To)-Ce(Ts)]+[Cc(To)-Cc(Ts)]
선택적 재테스트 전략은 실행 할 테스트 케이스 수가 전체 재테스트 전략의 경우 보다 작기는 하지만 이 테스트 케이스 부분 집합을 선택하는데 시간과 노력이 필요하므로 무조건적으로 전체 재테스트 전략보다 비용이 감소된다고 볼 수는 없다. 즉, 두 전략간의 tradeoff가 존재하며, 선택적 재테스트 전략이 전체 재테스트 전략보다 더 경제적이기 위해서는 기존 테스트 케이스 집합의 부분 집합을 선정하는데 들어가는 비용이 전체 재테스트에는 포함되지만 선택적 재테스트에서는 빠지는 여분의 테스트 케이스들의 실행 및 결과 확인에 소요되는 비용보다 적어야 한다.
실제 비용 데이터 수집
위의 비용 모델에서 제시된 것처럼 회귀 테스팅 전략의 상대적 비용은 4가지 요인(테스트 케이스 선택, 테스트 실행, 테스트 결과 비교, 기존 테스트 케이스 집합 전체 규모 대비 선택된 부분 집합 규모의 비율)에 영향을 받는다. 실제 테스트 비용 산정을 위해 Cs, Ce, Cc의 비용 데이터를 수집해야 하는데 아래와 같은 두 가지 방법이 가능하다.
- 주별 비용 데이터 추적(a weekly tracking of the cost data): 테스트 분석가가 각 테스트 활동에 소요되는 비용을 추적하여 매 주 해당 데이터를 제공. 정확한 데이터를 수집할 수 있지만 작업 부담이 늘어나므로 작업자의 저항이 있을 수 있다.
- 사후 설문 조사(a post-mortem survey): 테스팅이 완료된 후 테스트 분석가가 각 활동에 들어간 노력 정도를 추정하여 데이터 제공. 정확성은 떨어지지만 테스팅 작업을 방해하지 않으면서 납득할 만한 데이터 생성이 가능하므로 작업자들이 쉽게 받아들일 수 있다.
Cs, Ce, Cc 값들은 프로젝트 유형, 적용된 테스트 전략, 개발 환경에 따라 달라진다. 여러 프로젝트를 통해 충분한 데이터가 수집되고 검증되면 이를 이용해 향후 유사한 성격의 프로젝트의 테스트 비용을 예측할 수 있다.
'개발생명주기단계별 > 유지보수_회귀 테스팅' 카테고리의 다른 글
페이퍼요약 - 소프트웨어 블랙 박스 장치 by He (0) | 2019.09.09 |
---|---|
페이퍼요약 - 회귀 테스트 케이스 선택 사례 연구 by Rothermel (0) | 2019.08.26 |
기본개념정리 - 소프트웨어 유지보수에서 프로그램 슬라이싱 (0) | 2019.08.21 |
문서요약 – 소프트웨어 유지보수 by Canfora (0) | 2019.08.12 |
문서요약 - 소프트웨어 생명 주기의 한 부분으로서의 소프트웨어 유지보수 by Erdil (0) | 2019.08.05 |