Mutation Test(비버깅)

개념
- 의도적으로 프로그램의 원시 부호(source code)을 변형시키고 이에 맞게 디자인된 테스트 데이터를 실행시켜 프로그램 코드 내에 존재할 수 있는 애매모호한 부분을 찾아내기 위한 테스트 기법 또는 테스트 과정(process) - 일반적으로 작은 결함까지도 발견하여 테스트한 결과에 신뢰감을 부여하기 위해 실시함 - 테스트를 디자인하고 테스트 케이스를 작성하는 것에 지나친 노력이 들어가고,자동화 도구도 개발되지 않았기 때문에 현재까지도 학계에서 논의만 하고 있는 실정이며 실무에서 폭넓게 사용은 못하고 있음

1. Mutation Test 개요

- 의도적으로 프로그램의 원시 부호(source code)을 변형시키고 이에 맞게 디자인된 테스트 데이터를 실행시켜 프로그램 코드 내에 존재할 수 있는 애매모호한 부분을 찾아내기 위한 테스트 기법 또는 테스트 과정(process)

- 일반적으로 작은 결함까지도 발견하여 테스트한 결과에 신뢰감을 부여하기 위해 실시함

- 테스트를 디자인하고 테스트 케이스를 작성하는 것에 지나친 노력이 들어가고,자동화 도구도 개발되지 않았기 때문에 현재까지도 학계에서 논의만 하고 있는 실정이며 실무에서 폭넓게 사용은 못하고 있음

 

2. Mutation Test 개념도 및 Process

  가. Mutation Test 개념도

 

1)    원본 프로그램(P)에 뮤턴트 연산자 삽입(M) 하여 뮤턴트 생성

2)    원본 프로그램에서 테스트 케이스(T)를 실행하여 오류 검출시 원본 오류 수정

3)    수정된 원본 프로그램(P)에 대해 뮤턴트 재생성하여 TEST 실행

4)    Kill Mutant가 아닌 상태인 경우, 분석하여 동등 뮤턴트(Equivalent Mutant)를 마크, 제외하고 테스트 재수행

  -  뮤턴트(M)에 대해 원본 프로그램(P)와 다른 결과값의 테스트 케이스(T)가 존재 시 Kill Mutant 상태가 되며, Dead Mutant의 개수에 포함이 됨.

 

 

  나. Mutation Test Process

절차

설명

컴포넌트 변용

컴포넌트 선택,변용, 통합단계 중 Mutation Test를 위한 변용작업 수행

오류형태 파악

검출하고자 하는 오류형태를 파악(사용자 변용오류,컴포넌트 자체결함)

연산자 결정

속성변용,서비스변용, 입력값변용,출력값변용에 필요한 연산자 결정

테스트 수행

식별된 결함을 피드백하여 컴포넌트의 재변용 및 재시험 실시

 

3. Mutation 변환 연산자 및 평가 방법

  가. Mutation 변환 연산자

유형

설명

예시

속성변경

컴포넌트 속성값이나 사용자 속성 값 변경

Setcolor(Red).Width=15

서비스변경

서비스영역 변경이나 서비스 호출순서 변경

Fun(float),A()-C()-B()

입력값 변경

서비스 입력값 변경이나 순서 변경

Fun(a+1), Fun(b,a)

출력값 변경

출력값 변경이나 삭제

Result ++, Result값 삭제

 

유형

설명

구조적

상수대치

- 상수를 다른 상수로 대치 ( C → C+1 )

 

변수대치

- 변수를 다른 변수로 대치 ( A → B )

 

상수↔변수

- 상수를 변수로, 변수를 상수로 대치함

객체

상속

IHD

- (Inheritance) Hiding variable Deletion

지향적

IOD

- (Inheritance) Overriding method Deletion

 

IOR

- (Inheritance) Overriding method Rename

 

다형

OMD

- Overloading method deletion

 

PCD

-(Polymorphism) type Cast operator Deletion

 

나. 테스트 데이터 커버리지 평가 방법

   - 뮤테이션 점수 MS(P,T) = Number of Dead M / (Number of Mutant - Number of equivalent Mutant)

 

4. Mutation 테스트유형과 비버깅과의 비교

가. 테스트유형

구분

설명

Do fewer

- 일부 뮤턴트만 사용하는 샘플링과 선택된 뮤테이션

연산자에 의한 뮤턴트를 사용하는 선택적 뮤테이션 기법

Do Faster

- 여러 뮤턴트의 동일한 컴파일러를 사용하는 뮤테이션 기법

- 여러 뮤턴트를 묶어 하나의 뮤턴트로 생성하는 MSG 기법

- JAVA 의 바이트 코드(Compile) 에 직접 Mutant 삽입

Do Smarter

- Test 수행을 여러 기계에 분산 수행함

 

나. 뮤테이션 테스트 vs 비버깅

구분

뮤테이션 테스트

비버깅

개념

- 의도적인 변경(Mutant)을 가하여

테스트 케이스의 적합성 판단

- 의도적인 오류코드 삽입하고

테스트를 통해 잔존오류를

도출하는 작업

방식

뮤턴트(돌연변이) 생성

의도적 오류코드 삽입

목적

테스트 결과의 신뢰성 확보

잔존 오류 추정

 

다.  샘플예제

 

 

 

. t3의 경우는 foo(t)=0 , M1(t)=2, M2(t)=1로 모두 다른 결과를 나타내며 즉 M1, M2의 뮤턴트가 동등 뮤턴트가 아님을 알 수 있으며, T3의 테스트 케이스의 점수가 최고 높음

 M(P,T1) = 1/3  , M(P,T2) = 1/3,   M(P,T3) = 3/(3-0)

 

댓글