반응형

출처: Standard for Software Component Testing Working Draft 3.4, produced by the British Computer Society Specialist Interest Group in Software Testing (BCS SIGIST), 2001, 47~50페이지

 

 

이차방정식 근을 구하는 Ada 소스 코드를 대상으로 데이터 흐름 테스팅을 적용하여 테스트 케이스를 설계하는 예를 보여준다.

 


 

데이터 흐름 테스팅

데이터 흐름 테스팅은 각 변수가 정의된 지점에서 참조되는 지점까지 하위경로(subpaths)를 실행하는 것을 목표로 하는 구조적 테스트 기법이다. 이러한 하위경로를 ‘정의-사용 쌍(definition-use pairs: du-pairs)’이라고 한다. 테스트 케이스는 변수의 정의(definitions)와 사용(uses) 간의 제어 흐름 경로를 실행하도록 설계된다. 여러 다른 데이터 흐름 커버리지 기준(data flow coverage criteria)에 따라 서로 다른 du-pairs 및 하위경로가 실행되며, 각 기준에 대해 (가능한 경우) 100% 커버리지를 달성하도록 테스트 세트를 생성한다.

 

 

데이터 흐름 테스트 케이스 설계 예

Ada 언어로 작성된 아래 소스 코드에 데이터 흐름 테스트를 적용한다고 가정하자. 아래 코드는 이차방정식 판별식 체크를 하고 근의 공식을 사용해 실근을 구하는 프로그램이다.

코드 라인 2는 변수 R1R2의 정의(definition)가 아니라 선언(declaration)인 점에 유의한다(디폴트 초기화를 하는 언어의 경우라면 이것이 정의가 된다). 

 

 

단계1: 해당 단위 프로그램에서 사용되는 변수를 나열한다.

우리 예제 프로그램에서 사용되는 변수가 A, B, C, Discrim, Is_Complex, R1, R2이다.

 

단계2: 프로그램에 변수가 등장할 때마다 나열하고 상응하는 카테고리(definition, predicate-use 또는 computation-use)를 할당한다.

 

단계3: 정의 열의 각 항목에서 c-use 또는 p-use 열의 해당 변수에 대한 각 항목으로의 링크를 식별하여 du-pairs와 그 타입(c-use 또는 p-use)을 식별한다.

변수 R1R2는 프로그램 내에 정의(definition)만 있기 때문에 du-pairs를 형성할 수 없음에 유의한다.

 

 

 

All-definitions 커버리지 기준을 충족하는 테스트 세트

100% All-definitions 데이터 흐름 커버리지를 달성하려면 각 변수 정의에서 해당 정의의 일부 사용(p-use 또는 c-use 중에서 아무거나)으로의 하위경로가 적어도 하나 이상 실행되어야 한다. 다음 테스트 세트는 이 커버리지 요구사항을 충족한다.

여러 테스트 케이스가 하나 이상의 변수에 대한 요구사항을 충족할 수 있고, 또한 동일한 테스트 입력 값이 여러 du-pairs에 대한 하위경로 실행 기준을 충족하는 것에 유의한다.

 

 

All-c-uses 커버리지 기준을 충족하는 테스트 세트

100% All-c-uses 데이터 흐름 커버리지를 달성하려면 각 변수 정의에서 해당 정의의 모든 c-use까지의 하위경로가 하나 이상 실행되어야 한다. 다음 테스트 세트는 이 요구사항을 충족한다.

 

 

All-p-uses 커버리지 기준을 충족하는 테스트 세트

100% All-p-uses 데이터 흐름 커버리지를 달성하려면 각 변수 정의에서 해당 정의의 모든 p-use로의 하위경로가 하나 이상 실행되어야 한다. 다음 테스트 세트는 이 요구사항을 충족한다.

 

 

All-uses 커버리지 기준을 충족하는 테스트 세트

100% All-uses 데이터 흐름 커버리지를 달성하려면 각 변수 정의에서 해당 정의의 모든 사용(p-use와 c-use 둘 다)에 대한 하나 이상의 하위경로를 실행해야 한다. 다음 테스트 세트는 이 요구사항을 충족한다.

 

 

All-du-paths 커버리지 기준을 충족하는 테스트 세트

100% All-du-paths 데이터 흐름 커버리지를 달성하려면 각 변수 정의에서 해당 정의의 모든 사용에 이르는 모든 단순 하위경로(every simple subpath)를 실행해야 한다. 이것과 All-uses와의 차이는 du-pairs 간의 모든 단순 하위경로를 실행해야 한다는 점에 있다. 우리 예에서는 All-Uses에서 식별하지 못한 하위경로가 두 개 있는 데, 0-1-4-5-9-10와 1-4-5-9-10이다. 그러나 이 두 하위경로는 ‘실행불가능(infeasible)’하므로 이를 실행하기 위한 테스트 케이스를 생성할 수 없다(따라서 위 표에 있는 8건의 테스트 케이스로 All-uses와 All-du-paths 기준 둘 다 충족됨).

 

 

NOTE.
이러한 형태의 테스트는 고려하는 데이터 오브젝트(data objects)를 정의할 필요가 있다. 툴(Tools)은 일반적으로 배열(array)이나 레코드(record)를 여러 구성 요소를 가진 복합 항목(composite item)으로 간주하지 않고 단일 데이터 항목(single data item)으로 간주한다. 복합 오브젝트의 구성 요소를 무시하는 것은 데이터 흐름 테스팅의 효과를 떨어트린다.

 

반응형

+ Recent posts