Skip to content

Latest commit

 

History

History
108 lines (78 loc) · 4.27 KB

22.03.02_뮤테이션테스트.md

File metadata and controls

108 lines (78 loc) · 4.27 KB

22.03.02_뮤테이션테스트

목차

01.뮤테이션 테스팅(Mutation Testing)

02.뮤테이션 오퍼레이터

03.뮤테이션 오퍼레이터

04.뮤테이션 테스팅 단점

01.뮤테이션 테스팅(Mutation Testing)

  • 결함 기반 테스팅 기법 중 하나
  • 이미 작성된 테스트 케이스들의 테스트 적정성을 평가하는 기법
  • 프로그램 소스 코드의 한부분을 약간 변경하여 의도적으로 오류가 있는 프로그램 버전을 만들고,
    • 이미 준비된 테스트 케이스로 원본 프로그램과 변형된 프로그램 버전들을 함께실행하여
    • 현 테스트 케이스가 원본 프로그램과 변형된 버전들을 구별해 낼 수 있는지 확인하는 것

02. 뮤테이션 테스팅 절차

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 할 수 있는 신규 테스트를 추가로 작성하여 다시 실행을 반복함

03.뮤테이션 오퍼레이터

  • 프로그래머가 범하기 쉬운 구문에러를 흉내냄
    • 이런 뮤턴트들은 사전 정의된 일련의 뮤테이션 오퍼레이터를 원본 소스 코드에 적용함으로써 자동 생성
      • 즉, 뮤테이셔 오퍼레이터는 소스코드의 syntax변경 규칙임

image-20220302222257591

04.뮤테이션 테스팅 단점

  • 높은 컴퓨팅 비용
    • 생성된 무수히 많은 수 많은 수의 뮤턴트를 테스트 스위트에 포함된 무수히 많은 테스트 케이스로 실행하고 결과를 확인하는데 많은 컴퓨팅 리소스가 소요되면 성능 문제도 바생
  • 높은 인적 비용
    • 동등 뮤턴트를 식별하거나 , 원본 프로그램 실행 결과가 각 테스트 케이스마다 정확한지 확인하는 일에 사람의 개입이 필요