반응형

제목: 회귀 테스트 케이스 선택 사례 연구(Experience With Regression Test Selection)

저자: Gregg Rothermel 1, Oregon State University, 미국

문서유형: 컨퍼런스 페이퍼( 11페이지)

 

회귀 테스팅의 선택적 재테스트 알고리즘을 제안하고 이를 도구로 구현하여 실제 프로그램에 적용한 실험 결과를 기술한 자료



회귀 테스팅 전략

  • 전체 재테스트: 기존 테스트 케이스 집합(test suite) 전체를 실행하여 유지보수된 시스템을 테스트한다.
  • 선택적 재테스트: 프로그램의 기존 테스트 케이스 집합의 일부만을 재사용하여 회귀 테스팅 비용을 줄인다.


제안된 선택적 재테스트 기법

유지보수된 프로그램의 테스팅을 위해 기존의 테스트 케이스 집합에서 신규 및 변경된 코드와 관련된 테스트 케이스를 골라내는 알고리즘은 아래와 같다.

  • 프로그램 P와 변경된 버전 P’의 컨트롤 플로우 그래프(control flow graphs)를 구축
  • P의 컨트롤 플로우 그래프상의 에지(edges)와 테스트 케이스 집합 T의 테스트 케이스를 연결하는 테스트 추적 정보(test traces)를 수집
  • PP’의 컨트롤 플로우 그래프에서 깊이 우선 탐색(depth-first traversals)을 동시에 수행. 탐색 시 양쪽 그래프에서 동시에 도달하는 노드를 서로 비교한다. , 노드가 나타내는 PP’의 프로그램 문장(program statements) 비교한다.
  • PP’의 노드인 NN’의 프로그램 문장 어휘가 일치하지 않으면(not lexically identical), P의 기존 테스트 케이스 집합인 T에서 노드 N과 관련 있는 모든 테스트 케이스들을 선택한다.


회귀 테스팅 도구 DejaVu

  • 위에서 설명된 컨트롤 플로우 기반 선택적 재테스트 알고리즘을 1,220 라인의 C 코드로 구현한 도구를 DejaVu라 부른다.
  • DejaVu로 현실적인 프로그램을 대상으로 실험을 수행하여 제안된 선택적 재테스트 기법이 실무에서 효과적인지를 평가한다(원활한 실험 수행을 위해 DejaVu 외에도 프로그램 분석 및 인스트루멘테이션을 지원하는 도구, 테스트 케이스를 관리하는 도구, 테스트 실행을 자동화를 하는 캡쳐 앤드 플레이백 도구를 활용)


실험 방법

제안된 알고리즘에 의해 선택된 테스트 케이스 집합의 규모(size), 제안된 알고리즘을 적용하는데 소요되는 비용, 제안된 알고리즘으로 얻을 수 있는 테스트 비용 절약 효과, 제안된 알고리즘의 효과성 및 효율성을 결정하는 패러미터 등을 파악하기 위해 3가지 유형의 실험을 수행한다.


실험 1 방법

  • 데이터 플로우 및 컨트롤 플로우 기반 테스트 적정성 기준(test adequacy criteria)의 효과성을 평가한 Hutchins(1994)의 연구에서 사용된 C 프로그램과 테스트 케이스를 활용. 실험에 사용된 프로그램과 테스트 케이스 정보는 아래 표와 같다.

  • 각 오리지널 프로그램에 대해 테스트 케이스 집합에 있는 모든 테스트 케이스를 실행하고 테스트 결과와 테스트 추적 정보(test traces)를 저장

  • 오리지널 프로그램과 변경된 프로그램 버전의 컨트롤 플로우 그래프를 구축하는 시간 측정

  • 오리지널 프로그램과 해당 프로그램의 변경된 버전을 한 쌍으로 만들어 DejaVu에 적용. 이 때 DejaVu 실행에 걸리는 시간을 측정

  • 변경된 프로그램 버전을 세 개의 테스트 케이스 집합으로 실행한다(1) DejaVu에 의해 선택된 테스트 케이스들의 집합, 2) DejaVu에 의해 선택되지 않은 테스트 케이스들의 집합, 3) 기존 테스트 케이스들의 전체 집합). 이 때 각 테스트 실행에 걸리는 시간을 측정

  • 원본 프로그램과 변경 버전의 각 쌍에 대한 실험을 5번 반복하여 평균값을 실험 결과로 한다.

 

프로그램명

프로시져 수

코드 라인 수

버전 개수

테스트 케이스 수

프로그램 설명

Replace

21

512

32

5542

패턴 교체

usl.123

20

472

7

4056

어휘 분석기

usl.128

21

399

10

4071

어휘 분석기

sched2

16

301

10

2680

우선순위 스케쥴러

sched1

18

292

9

2650

우선순위 스케쥴러

Totinfo

16

440

23

1054

정보 측정

Tcas

8

141

41

1578

고도(altitude) 분리


실험 1 결과

  • 아래 그래프는 전체 테스트 케이스 대비 DejaVu가 선택한 테스트 케이스들의 비중(%)를 나타낸다. 전반적으로 회귀테스팅에서 수행할 테스트 케이스 수가 줄어들었고, 평균적으로 44.4%의 테스트 케이스가 제거(재테스트에서 빠짐) 되었다.


  • 아래 그래프는 기존 테스트 케이스 전체를 재테스트 하는 시간 대비 DejaVu에 의해 선택된 기존 테스트 케이스의 부분 집합으로 재테스트 하는 시간(분석에 걸리는 시간도 포함)을 보여준다. 선택적 재테스트의 테스트 케이스가 수가 줄어들었기 때문에 테스트 실행 시간도 감소되었다. 평균적으로 9 46초에서 5 45초로 테스팅 시간이 감소됨.


실험 2 방법

  • 인터넷 기반 게임 Empire의 소프트웨어 배포 컴포넌트인 player 프로그램을 이용하여 실험 1과 유사하게 제안한 선택적 재테스트 알고리즘의 효과성을 평가
  • Empire는 여러 개의 실행 파일(executables)로 구성되는데 그 중 가장 큰 것이 트랜잭션 처리를 담당하는 player 프로그램
  • 이 프로그램은 기 작성된 테스트 케이스가 가용하지 않아서 player 실행 파일의 154개 명령어(commands)와 각 명령어의 패러미터 및 주의해야 할 부작용 등을 기술한 정보 파일을 참고해 총 1,035개의 기능 테스트 케이스를 직접 작성함
  • Empire 소프트웨어는 1986년 개발된 이후로 여러 차례 재작성되었으며, 가장 최근의 주요 변경 버전은 1990년 초반에 릴리즈됨. 이 릴리즈 이후에도 버그 수정이나 기능 추가를 위해 여러 수정 버전이 만들어졌는데 대부분이 player 프로그램에서 변경이 발생
  • 아래 표는 player 프로그램 관련 정보를 보여준다.


  • 아래는 실험에 사용된 player 프로그램의 다섯 개의 변경 버전에 대한 정보를 보여준다.


실험 2 결과

  • 아래 그래프에 보이는 것처럼 DejaVu가 기존 테스트 케이스 집합에서 선택한 테스트 케이스들의 규모가 평균 95% 이상 감소함
  • Player 프로그램의 오리지널 버전과 변경 버전의 컨트롤 플로우를 생성하는데 23 17 소요
  • 컨트롤 플로우 그래프 생성과 별도로 player 프로그램에 DejaVu 도구를 수행하는데 1 28초 소요


  • 아래 그래프는 player 프로그램의 변경 버전을 회귀테스팅 할 때 전체 테스트 케이스로 재테스트 하는 경우와 제안된 알고리즘으로 추려낸 테스트 케이스들로 테스트 할 때의 실행 시간을 비교한다.
  • 선택적 재테스트에서 Player 프로그램을 분석하는데 24 45초가 소요되는 것을 가정했을 때 제안된 알고리즘이 최소 82%의 회귀 테스팅 시간 감소 효과를 가져온다.


실험 3 방법

  • 회귀 테스팅 테스트 케이스 집합과 9개의 변경 버전을 가진 소규모 상용 프로그램(commercial program)을 이용해 DejaVu의 효과성 평가
  • 아래 표는 실험에 사용된 프로그램에 대한 정보를 보여준다.


  • 9개의 변경 버전의 정보는 아래와 같다.


실험 3 결과

  • DejaVu가 테스트 케이스 집합 규모의 약 67%를 감소하는 효과를 가져옴
  • 9개의 변경 버전 중 두 개 버전(버전2와 버전 5)에서는 DejaVu가 재실행할 테스트 케이스를 전혀 선택하지 않음. , 기존 테스트 케이스 집합의 테스트 케이스들 중 해당 버전에서 변경된 코드 부분을 실행하는 테스트 케이스가 없다는 의미. 따라서 해당 버전에서는 전체 재테스트 회귀 테스팅 전략을 사용해도(, 기존 테스트 케이스 집합 전체로 재테스트를 하여도) 변경된 코드 부분에 있는 문제를 발견하기 어렵다.



반응형

+ Recent posts