01.뮤테이션 테스팅(Mutation Testing)
02.뮤테이션 오퍼레이터
03.뮤테이션 오퍼레이터
04.뮤테이션 테스팅 단점
- 결함 기반 테스팅 기법 중 하나
- 이미 작성된 테스트 케이스들의
테스트 적정성
을 평가하는 기법 - 프로그램 소스 코드의 한부분을 약간 변경하여 의도적으로 오류가 있는 프로그램 버전을 만들고,
- 이미 준비된 테스트 케이스로 원본 프로그램과 변형된 프로그램 버전들을 함께실행하여
- 현 테스트 케이스가 원본 프로그램과 변형된 버전들을 구별해 낼 수 있는지 확인하는 것
1.원본 프로그램을 일정한 변경 규칙에 따라 변경하여 여러 변형된 프로그램 버전을 생성
-
뮤테이션 오퍼레이터
는 원본 프로그램의 구문을 변경하는 사전 정의된 변경 규칙 -
뮤턴트
는 뮤테이션 오퍼레이터를 적용하여 생성된 원본과 약간 달라진 프로그램 버전 -
원래의 소스 코드가 개발자가 의도한 정확한 버전으로 프로그램이라고 할때,
- 각 뮤턴트는 잘못 프로그래밍된 오류 버전(가상의 결함이 포함되어 있는 프로그램)을 나타냄
-
원본 프로그램
if (a>b){ c = c + 1; } else { c =0; }
-
관계연산자를 변경하는 뮤테이션 오퍼레이터 적용
-
뮤턴트1
if (a>=b){ //> 이것이 >=으로 변경됨 c = c + 1; } else { c =0; }
-
뮤턴트2
if (a<b){ //>이것이 <으로 변경됨 c = c + 1; } else { c =0; }
-
-
산술 연산자를 변경하는 뮤테이션 오퍼레이터 적용
-
뮤턴트3
if (a>b){ c = c - 1; //+에서 -로 변경 } else { c =0; }
-
위와 같이 뮤테이션 오퍼레이터의 수와 타입에 따라 하나의 원본 프로그램에 대해
- 무수히 많은 수의 뮤턴트가 생성됨
- 각 뮤턴트는 한번에 한 개의 에러만을 포함하고 있음
-
2.이미 준비된 일련의 테스트 케이스 집합으로 원본 프로그램과 뮤턴트를 실행하여 실행결과를 비교
- 주의할점: 이미 준비된 테스트 케이스들이 원본 프로그램 자체를 제대로 실행 못하거나
- 그 결과가 부정확하거나 하는 문제가 있으면 안됨
- 뮤턴트가 실행하기 앞서 이런 문제가 해결된 테스트 케이스들이 준비되어 있어야함
3.뮤턴트의 실행 결과가 원본프로그램의 실행 결과와 다르면 현 테스트 케이스로 뮤턴트 프로그램을 구별해 낼 수 있다는 의미
- 이 경우에 해당하는 뮤턴트 프로그램은 죽은 것으로 처리되어 관심 대상에서 정상적으로 빠짐
4.이미 준비된 모든 테스트 케이스에서 뮤턴트의 실행 결과가
- 원본 프로그램의 실행 결과와 동일하면 해당 뮤턴트를
라이브 뮤턴트
라고 부름 - 라이브 뮤턴트는 현 테스트 케이스 집합이 해당 뮤턴트를 kill하기에 충분하지 않다는 것을 나타내므로
- 라이브 뮤턴트를 kill 할 수 있는 신규 테스트를 추가로 작성하여 다시 실행을 반복함
- 프로그래머가 범하기 쉬운 구문에러를 흉내냄
- 이런 뮤턴트들은 사전 정의된 일련의 뮤테이션 오퍼레이터를 원본 소스 코드에 적용함으로써 자동 생성
- 즉, 뮤테이셔 오퍼레이터는 소스코드의 syntax변경 규칙임
- 이런 뮤턴트들은 사전 정의된 일련의 뮤테이션 오퍼레이터를 원본 소스 코드에 적용함으로써 자동 생성
- 높은 컴퓨팅 비용
- 생성된 무수히 많은 수 많은 수의 뮤턴트를 테스트 스위트에 포함된 무수히 많은 테스트 케이스로 실행하고 결과를 확인하는데 많은 컴퓨팅 리소스가 소요되면 성능 문제도 바생
- 높은 인적 비용
- 동등 뮤턴트를 식별하거나 , 원본 프로그램 실행 결과가 각 테스트 케이스마다 정확한지 확인하는 일에 사람의 개입이 필요