잡담

소프트웨어 유지보수를 위한 리테스팅 방법론과 테스트 케이스 재사용에 관하여

tomato13 2007. 5. 5. 14:41

1. 소프트웨어의 수정에 따른 리테스팅 과정을 보다 체계적으로 타당성 있는 기준을 통하여 수행하기 위하여 본 논문은 제어 흐름 분석과 자료 흐름 분석에 의한 방법을 제안

2. 제어 흐름 분석 자료로 제어흐름 그래프, 테스트 케이스/참조 매트릭스, 연결 매트릭스, 도달 가능 매트릭스 생성

3. 자료 흐름 분석 자료로 Set/Use 매트릭스를 구하여 수정이 이루어진 코드 영역과 영향을 주고 받는 관계를 발견

4. 목적 함수(Z)의 제한 조건을 결정하여 최소의 목적함수 값을 구하고 리테스트시에 재사용할 테스트 케이스와 그 개수를 최소화

 

* 저자는 regression test를 할 때 test case를 최소한의 개수로 가져가는 방안을 설명한다. 이를 위해서는 목적함수를 정의하고 이에 따른 제약사항(constrains)을 정의한다. 즉, 하나의 수식과 조건을 구성하는 것이다. 그리고 목적함수 Z의 값을 최소화시키면서 필요로 되는 테스트 케이스들을 추출한다. 저자가 제시하는 regression test의 범위는 다음과 같다. 수정된 코드가 도달하고 수정된 데이터를 사용하는 D-D블록과 수정된 코드에 도달하고 수정된 데이터를 정의하는 D-D블록으로 가장 최적화된 영역이라고 설명한다.

 

5/10

아래와 같은 경우 위의 논문은 오류를 범하게 된다. D1-D2-D3, D1-D4-D3, D1-D5-D3의 연결상태를 가정한다. 이 때 D2가 수정이 되었다. 테스트 케이스란 일련의 시나리오이며 D1-D4-D3와 같은 테스트케이스는 수행을 할 이유가 없다. D1-D5-D3 또한 수행할 필요가 없다. D1-D2-D3는 수행을 해야할 것이다. 그러나 이러한 케이스는 논문에서 설명하는 참조 매트릭스만으로도 최적화된 개수로 추출할 수 있을 것이다.

 

5/12

위의 설명 역시 문제가 있을 수 있다. 논문에서 설명하는 제어흐름(sequence flow), 자료흐름(data flow) 두 가지 관점에서 바라보는 것이 안정적이라고 생각을 한다.

 

5/20

5/10설명에 대한 문제는 다음과 같다. D1과 D2간의 데이터 의존성이 전혀 없다면 D1-D2-D3 또한 테스트할 필요가 없게 된다. 그러나 참조 매트릭스만으로는 이를 확인할 수가 없다. 때문에 제어흐름에 의한 의존관계와 자료흐름에 의한 의존관계 모두를 동시에 고려해야 한다. 혹자는 자료흐름의 관계만 정확하게 분석하면 제어흐름의 관계를 분석할 필요가 없다고 설명할지도 모르겠다. 왜냐하면 자료흐름이란 것이 결국은 제어흐름에 의존적이기 때문이다. 하지만 객체지향프로그램에서는 상호 어느정도 독립적이기에 각각의 별도로 분석해야할 것이다.

 

6/2

5/20설명의 문제는 다음과 같다. D2가 수정되면 D1-D2-D3를 수행하는 TC는 수행되어야 한다. D2에 수정이 일어나면 D2를 수행하는 TC는 모두 수행되어야 한다. 그리고 해당 TC들은 논문에서 설명하는 자료흐름과 제어흐름의 AND연산으로 추출되는 TC들과 같다. 왜냐하면 전자는 후자를 포함한다. 그리고 후자는 결국 전자를 포함하기 때문이다. 그러나 논문에는 오류가 있다. D2가 수정되면 참조매트릭스는 바뀌어야 한다. 왜냐하면 각각의 TC가 수행한느 D-D경로와의 매핑이 바뀔 여지가 있기 때문이다. 그리고 D-D경로간의 의존관계도 바뀔 수 있다. D2는 자체 수정될 수도 있가. sub D-D모듈로 나뉘어질 수도 있다. 새로운 D-D경로가 추가될 수도 있고 D2자체가 빠질 수도 있다.

때문에 D2가 수정되면 참조매트릭스를 새로 계산해야 한다. 그리고 D2 그리고 D2의 수정으로 추가된 D-D경로를 수행하는 TC들을 추출하여 수행할 수 있어야 할 것이다.

 

6/3

논문의 문제는 다음과 같다. 6/2설명에 이어 설명하겠다. 참조매트릭스를 만들기 위한 방안이 구체적으로 설명되지 않았다. 만일 모든 TC를 수행하여야 한다면 이에 소요되는 시간은 너무크다. 즉, 논문에서 제시하는 최적화된 TC를 구할 수 없다. 방안은 다음과 같이 제시한다. 모듈(유닛)별 단위 테스트 케이스 혹은 integration tc를 활용한다. 만일 D3이 수정되었다면 D1에 대한 TC1는 유효하다. 그러나 TC1이 D3를 수행하는지 여부는 다시 계산되어야 한다. 이에 대해서는 논문에서 제시하는 제어흐름과 데이터흐름분석을 사용한다. 그리고 TC1의 수행여부를 결정한다. TC1이 D3를 수행한다면 이를 참조매트릭스에 반영하도록 한다.