22.03.02_뮤테이션테스트
본문 바로가기
CS Study/TestCode

22.03.02_뮤테이션테스트

by KyeongMin 2022. 3. 2.
728x90
반응형

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변경 규칙임

04.뮤테이션 테스팅 단점

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

https://github.com/3DPIT/study/blob/master/02.studyData/05.Csharp/2022/%EB%AE%A4%ED%85%8C%EC%9D%B4%EC%85%98%ED%85%8C%EC%8A%A4%ED%8A%B8/22.03.02_%EB%AE%A4%ED%85%8C%EC%9D%B4%EC%85%98%ED%85%8C%EC%8A%A4%ED%8A%B8.md

 

GitHub - 3DPIT/study

Contribute to 3DPIT/study development by creating an account on GitHub.

github.com

 

728x90
반응형

'CS Study > TestCode' 카테고리의 다른 글

22.03.03_EndToEndTest란  (0) 2022.03.04
22.03.03_3A란  (0) 2022.03.04
22.03.02_CI/CD  (0) 2022.03.02
22.02.16_CICD를위한E2ETEST  (0) 2022.02.16
22.02.09_머지소트알고리즘구현및테스트코드작성  (0) 2022.02.09

댓글