회귀 테스트를 위한 최적화된 테스트 케이스 관리 방법
The Technique of Test Cases Maintenance for Regression Test
본 논문에서는 회귀 테스트에 사용하는 테스트 케이스를 효과적으로 관리하는 방안에 대해서 조사한 논문을 소개한다. 그리고 이들 논문에서 제시하는 방법을 보다 효과적으로 적용하기 위한 방안을 구체적으로 제시한다.
Abstract
This paper introduces the technique of test cases maintenance for regression test by reviewing others’ paper and supplements those in a concrete way which help to use test case maintenance more efficiently.
Key words : regression test, test case, test case maintenance
1. 서 론
과거에는 소프트웨어 소스코드를 개발하고 테스트를 위해서 새로 테스트 케이스를 개발하는 것이 일반적이었다. 그러나 소프트웨어 공학적 방법론이 적용되면서 기존에 작성한 테스트 케이스를 가능한 최대한으로 재사용하려는 움직임이 일어났다. 그리고 기존의 테스트 케이스들 가운데 필요한 테스트 케이스만을 최적화된 개수로 추출하는 노력 또한 시도되었다. 특히 회귀테스트를 행할 때에는 기존에 사용한 테스트 케이스를 그대로 사용하는 것이 효율적이다. 그리고 모든 테스트 케이스를 수행하는 것이 아니라 필요한 테스트 케이스들만을 추출하여 수행할 수 있다면 보다 효율을 기할 수 있을 것이다. 이를 위해서는 테스트 케이스와 소스코드 간의 상관 관계를 항시 알고 있어야 한다. 본 논문은 테스트 케이스와 소스코드와의 상관 관계를 실시간으로 파악할 수 있는 방안을 제시한다.
2. 기존의 연구
2.1. 소프트웨어 유지보수를 위한 리테스팅 방법론과 테스트 케이스 재사용에 관하여[1]
게재된 논문은 회귀테스트에 사용할 테스트 케이스의 개수를 가장 최소한으로 가져갈 수 있는 방안을 제시한다. 이를 위해서 D-D경로와 테스트 케이스와의 상관관계를 나타내는 참조 매트릭스를 제시한다. 그리고 D-D경로간의 연관 관계를 나타내는 연결 매트릭스를 제시한다. 그리고 D-D경로와 해당 경로에서 사용되는 변수들이 무엇이고 이들이 선언되었는지 혹은 사용되었는지를 나타내는 Set/Use 매트릭스를 소개한다. 특정 D-D경로가 수정되었을 때 세가지 매트릭스를 분석하여 데이터 흐름 그리고 제어 흐름적 관점에서 영향을 받는 D-D경로를 계산한다. 그리고 이를 기반으로 수행해야 할 테스트 케이스의 수를 최적화한다. 본 논문의 방법을 적용하기 위해서는 논문에서 제시하는 세 개의 매트릭스를 회귀테스트를 수행할 때마다 새로 갱신해야 한다. 만일 갱신에 소요되는 비용이 크다면 시간적인 부담을 남기게 될 수 있다.
2.2. Reverse Engineering of Test Cases for Selective Regression Testing[2]
본 논문에서는 테스트 케이스와 소스 코드와의 상관 관계를 분석하는 방법을 제시한다. 그러나 본 논문에서 제시하는 방법을 적용하기 위해서는 준비된 모든 테스트 케이스를 수행해 보아야 한다. 때문에 테스트 케이스의 수가 많고 수행시간이 오래 걸릴 경우에는 시간적인 부담을 남기게 될 수 있다.
3. 연구 내용
본 논문에서는 2.1의 논문에서 사용되는 세 개의 매트릭스를 실시간으로 갱신하는 방안을 제시한다.
3.1. 참조 매트릭스 계산
기존 참조 매트릭스를 기반으로 테스트 케이스가 수정된 D-D경로를 수행하는지를 확인하고 아래와 같이 계산한다.
3.1.1. 수정된 D-D경로를 수행하지 않는 경우
테스트 케이스는 수정된 D-D경로에 영향을 받지 않는다. 때문에 참조 매트릭스를 업데이트하지 않아도 된다.
그림 1 수정된 D-D경로를 수행하지 않는 경우
그림 1에서 DD2가 수정이 되었을 때 TC1 그리고 TC3를 다시 수행할 필요는 없다. 때문에 참조매트릭스를 갱신할 때에는 TC2만을 반영한다.
3.1.2. 수정된 D-D경로를 수행하는 경우
해당 테스트 케이스를 다시 수행하고 지나가는 D-D경로를 다시 계산해야 할 것이다. 그러나 이 방법을 사용할 경우 시간적인 면에서 목적보다 수단의 비용이 더 커진다. 예를 들어 그림 1에서 D-D2가 수정이 되었기 때문에 TC2와 D-D경로 간의 상관 관계를 분석하기 다시 계산하기 위해서는 TC2를 다시 수행해야 할 것이다. 그리고 TC2는 DD0, DD1, DD2, DD3, DD4를 수행하게 될 것이다. 만일 그림 2와 같이 TD1이라는 모듈을 별도로 준비하여 TC2를 수행하지 않고 TD1을 수행한다면 TD1은 DD2, DD3 그리고 DD4만을 수행하기 때문에 보다 빠르게 TC2와 D-D경로간의 상관 관계를 분석할 수 있을 것이다. 때문에 이를 위해서 다음과 같은 방안을 제시한다.
3.1.2.1. D-D경로를 호출하는 테스트 드라이버 구현
특정 D-D경로가 수정되면 D-D경로를 수행하는 테스트 케이스가 아닌 D-D경로를 호출하는 테스트 드라이버를 호출한다. 각각의 테스트 드라이버는 테스트 케이스들과 매핑이 되어야 할 것이다. 이 경우 별도의 테스트 드라이버를 구현하고 테스트 케이스와의 관계를 매트릭스로 만들어야 하는 번거로운 작업이 요구된다. 그러나 테스트를 처음 수행할 때만 이러한 작업을 하게 되면 회귀테스트에 대한 시간은 줄일 수 있다. 물론 D-D경로가 흐름의 앞에 위치하면 그 시간을 크게 줄이지는 못할 것이다. 그러나 뒤에 위치하면 크게 줄일 수 있을 것이다.
그림 2 테스트 드라이버를 사용하는 경우
3.2. 연결 매트릭스 계산
모든 D-D경로들 대상으로 수정된 D-D경로와 의존 관계를 가지는지 확인하여 계산한다. 이를 위해서는 수정된 D-D경로만을 분석하여 호출하는 D-D경로를 확인한다. 그리고 기존의 연결 매트릭스를 사용하여 수정된 D-D경로와 연결되는 D-D경로들을 계산하고 연결 매트릭스를 업데이트한다.
그림 3 D-D2 수정
예를 들어 그림 3에서는 D-D2가 수정되었고 이에 따라 D-D경로들간의 연관 관계가 갱신되어야 한다. 기존의 연결 매트릭스는 표1과 같다.
표 1 D-D2수정 이전
D-D2가 수정되고 D-D2는 D-D3이 아닌 D-D5를 호출하게 된다. 그리고 D-D5는 D-D4를 호출한다. 따라서 D-D2는 D-D5와 D-D4와 도달 관계를 가지게 된다. 이를 반영하여 연결 매트릭스는 표2과 같이 갱신된다.
표 2 D-D2수정 이후
3.3. Set/Use 매트릭스 계산
수정된 D-D경로만을 분석하고 Set/Use 매트릭스를 업데이트 할 수 있다.
4. 회귀테스트를 위한 최적화된 테스트 케이스 도출 프로세스
2.2절의 논문에서 제시하는 방안을 적용하여 소스 코드에 대한 instrumentation작업을 한다. 이를 기반으로 각 테스트 케이스와 각 D-D경로가 수행되는 시간을 확인하여 상호 연관 관계를 계산할 수 있다. 즉, 테스트 케이스와 D-D경로간의 상관 관계를 나타내는 참조 매트릭스와 D-D경로들간의 상관 관계를 나타내는 연결 매트릭스를 계산한다. 그리고 각 D-D경로에서 사용 혹은 정의되는 변수들을 분석하여 Set/Use 매트릭스를 작성한다. 또한 테스트 케이스를 수행하여 각 D-D경로에 대해서 테스트 드라이버를 생성한다. 예를 들어서 그림 3에 TC2에 대한 D-D2의 테스트 드라이버는 TC2를 수행하였을 때 수행되는 DD1이 될 것이다. 표2는 테스트 케이스와 D-D경로 그리고 테스트 드라이버간의 상관 관계를 나타낸다. 표3에서 예를 들어 TD32는 TC2에서 D-D3에 대한 테스트 드라이버를 가리킨다. 공란은 해당 경로를 테스트 케이스가 해당 경로를 수행하지 않는 것을 나타낸다.
표 3 테스트 드라이버 참조 매트릭스
특정 D-D경로가 수정이 되면 기존의 참조 매트릭스를 분석하여 관련된 테스트 케이스들을 확인한다. 그리고 각 테스트 케이스를 대행하는 테스트 드라이버를 수행하여 호출되는 D-D경로들을 확인하고 이를 참조매트릭스에 반영하여 갱신한다. 또한 갱신 내역을 참고하여 테스트 드라이버 참조 매트릭스를 갱신하고 필요할 경우에는 테스트 드라이버를 새로 작성한다. 그리고 수정된 D-D경로가 호출하는 D-D경로가 바뀌었는지 확인하고 바뀌었을 경우 기존의 연결매트릭스를 갱신한다. 또한 수정된 D-D경로를 분석하여 기존의 변수들의 상태 변이를 확인하고 Set/Use 매트릭스에 반영한다.
그림 4 준비단계 플로우
그림 5 참조 매트릭스 갱신
그림 6 연결 매트릭스 갱신
그림 4, 5, 6은 각각의 작업 흐름을 나타낸다. 이들을 기반으로 2.1절에서 제시한 방법을 적용하여 최적화된 테스트 케이스들을 도출할 수 있다.
5. 결론
본 논문에서는 2.1절에서 설명하는 제어흐름과 데이터 흐름에 근간하여 회귀테스트에 사용할 테스트 케이스를 최적화하는 방안을 구체화하였다. 2.1절의 논문에서는 최적화를 위해서 참조 매트릭스, 연결 매트릭스 그리고 Set/Use매트릭스를 작성하고 사용하였다. 그러나 해당 매트릭스를 어떻게 계산하여 작성할지에 대한 설명을 하지는 않았다. 매번 회귀테스트시마다 해당 매트릭스를 새로 작성해야 하기 때문에 이들 매트릭스를 작성하는데 소요되는 시간이 길어지면 최적화된 테스트 케이스를 산출하고 수행하는데 소요되는 시간적 비용이 전체 테스트 케이스를 수행하는 것과 비교하여 별다른 차이를 나타내지 못할 가능성이 크다. 본 논문에서는 이를 감안하여 해당 매트릭스를 빠른 시간 내에 매번 회귀테스트 시마다 작성하는 방안을 제안하였고 플로우 차트로 그 과정을 정형화하였다. 또한 2.2절의 논문에서 제시하는 Instrumentation방법을 소개하여 그 방법을 구체적으로 설명하였다. 소프트웨어의 사이즈가 커지면서 이에 대한 테스트 케이스의 수도 그 수가 작게는 수 천개부터 수만개 이상으로 크게 늘어날 수 있다. 이 때 특정 소스코드의 수정에 따라 필요한 테스트 케이스만을 선별하여 수행하는 방법은 매우 효과적이다. 차후 연구에서는 본 논문에서 제안한 방법을 실제 자동화 도구로 구현하여 그 시간적인 효율성을 보이고자 한다. 또한 계속해서 발표되는 여러 관련 논문들을 참조하여 테스트 케이스를 효율적으로 관리할 수 있는 최적의 방안에 대해서 계속해서 연구를 하고자 한다.
참 고 문 헌
[1] 황선명, 진영택, 소프트웨어 유지보수를 위한 리테스팅 방법론과 테스트 케이스 재사용에 관하여, 한국정보처리학회 논문지 A, Vol.02 No.01 pp. 0045~0055. 01
[2] Harry M. Sneed, Reverse Engineering of Test Cases for Selective Regression Testing, Proceedings of the Eighth European Conference on Software Maintenance and Reengineering (CSMR’04)
'잡담' 카테고리의 다른 글
VOB (0) | 2007.06.08 |
---|---|
DVD의 이론적 이해 (0) | 2007.06.08 |
실용적인 단위 테스트 (0) | 2007.05.29 |
testability (0) | 2007.05.10 |
소프트웨어 유지보수를 위한 리테스팅 방법론과 테스트 케이스 재사용에 관하여 (0) | 2007.05.05 |