what is mutation testing
이 튜토리얼은 Mutation Testing이 무엇인지, 어떻게 수행하는지, 그리고 Mutation Testing 유형을 예제와 함께 설명합니다.
돌연변이 테스트 란 무엇입니까?
돌연변이 테스트는 소프트웨어 프로그램의 변형이 테스트 데이터 세트에 적용되는 결함 기반 테스트 기술입니다. 이는 편차를 분리 할 때 테스트 세트의 효율성을 결정하기 위해 수행됩니다.
좀 복잡하게 들리지 않나요?
학습 내용 :
돌연변이 테스트
MT (Mutation Testing)는 학교 프로젝트로 처음 제안 된 70 년대로 거슬러 올라갑니다. 자원 집약적이기 때문에 작성되었습니다. 그러나 인간이 계속해서 더 진보 된 컴퓨터를 개발함에 따라 서서히 복귀하여 현재 가장 인기있는 테스트 기술 중 하나가되었습니다.
돌연변이 테스트 정의
MT는 다음과 같이 알려져 있습니다. 오류 기반 테스트, 프로그램 변형, 오류 기반 테스트, 또는 돌연변이 분석 .
이름에서 알 수 있듯이 돌연변이 테스트는 변경 또는 돌연변이를 기반으로하는 소프트웨어 테스트 유형입니다. 정의 된 테스트 케이스가 코드에서 오류를 감지 할 수 있는지 확인하기 위해 소스 코드에 미세한 변경이 도입됩니다.
이상적인 경우는 어떤 테스트 케이스도 통과하지 않는 것입니다. 테스트에 통과하면 코드에 오류가 있음을 의미합니다. 우리는 돌연변이 (우리 코드의 수정 된 버전)가 살았다 고 말합니다. 테스트가 실패하면 코드에 오류가없고 돌연변이가 죽었습니다. 우리의 목표는 모든 돌연변이를 죽이는 것입니다.
돌연변이 테스트는 또한보다 효과적인 테스트 케이스를 작성하기위한 입찰로 정의 된 테스트 케이스 또는 테스트 스위트의 품질을 테스트하는 데 도움이됩니다. 우리가 죽일 수있는 돌연변이가 많을수록 테스트의 품질이 높아집니다.
돌연변이 테스트 개념
돌연변이 테스트에 대해 더 논의하기 전에 우리가 접하게 될 몇 가지 개념을 살펴 보겠습니다.
# 1) 돌연변이 : 단순히 소스 코드의 변형 된 버전입니다. 미세한 변화를 담고있는 코드입니다. 테스트 데이터가 돌연변이를 통해 실행될 때 이상적으로는 원래 소스 코드와 다른 결과를 제공해야합니다. 돌연변이는 또한 돌연변이 프로그램 .
다양한 유형의 돌연변이가 있습니다. 다음과 같습니다.
- 생존 한 돌연변이 : 앞서 언급했듯이 이들은 소스 코드의 원본 및 변형 된 변형을 통해 테스트 데이터를 실행 한 후에도 여전히 살아있는 돌연변이입니다. 이것들은 죽여야합니다. 그들은 또한 살아있는 돌연변이로 알려져 있습니다.
- 죽인 돌연변이 : 이들은 돌연변이 테스트 후 죽는 돌연변이입니다. 원본 코드와 변경된 버전의 소스 코드에서 다른 결과를 얻을 때 이러한 결과를 얻습니다.
- 동등한 돌연변이 : 이들은 살아있는 뮤턴트와 밀접한 관련이 있습니다. 테스트 데이터를 통해 실행 한 후에도 '살아있다'는 점입니다. 다른 것과 다른 점은 구문이 다를 수 있지만 원본 소스 코드와 동일한 의미를 가지고 있다는 것입니다.
# 2) 돌연변이 / 변이 연산자 : 이것이 돌연변이를 가능하게하는 것입니다. 그들은 '운전석'에 있습니다. 그들은 기본적으로 돌연변이 버전을 갖도록 소스 코드를 변경하거나 변경하는 종류를 정의합니다. 그들은 결함 또는 돌연변이 규칙 .
# 3) 돌연변이 점수 : 이것은 돌연변이 수에 따른 점수입니다.
아래 공식을 사용하여 계산됩니다.
참고로 돌연변이 점수를 계산할 때 동등한 돌연변이는 고려되지 않습니다. 돌연변이 점수는 다음과 같이 알려져 있습니다. 돌연변이 적절성 . 우리의 목표는 높은 돌연변이 점수를 달성하는 것입니다.
돌연변이 테스트 방법
1 단계: Jasmine 단위 테스트를 작성해 보겠습니다.
테스트 스위트 (Jasmine)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
2 단계: 원래 코드를 작성하십시오.
원본 코드 (자바 스크립트)
const user_info = () => { mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age > daughter_age) { alert(`Daughter's age is ${daughter_age}. Mother's age is ${mother_age}. Welcome to the Mother-Daughter program`) } else { alert(`Daughter's age: ${daughter_age}, is more than mother's age: ${mother_age}. Please enter correct ages`) } } user_info();
3 단계 : 그런 다음 원래 코드를 통해 테스트를 실행하여 처음부터 테스트에 실패하지 않았는지 확인합니다. 실제로 실패가없는 테스트를 작성했음을 알리는 출력이 있어야합니다.
예를 들면 :
0.019 초에 완료 1 개 사양, 0 개 실패, 시드 31435로 무작위 배정
원래 코드의 결과 :
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
4 단계 : 돌연변이를 소개합니다. 이 경우 우리는 보다 큰 연산자 (mother_age> daughter_age)를 보다 작음 연산자 (mother_age 돌연변이 코드 (자바 스크립트) 5 단계 : 그런 다음 돌연변이 코드를 통해 테스트를 실행합니다. 테스트 결과는 다음과 같습니다. 0.017 초 1 개 사양, 0 개 실패, 시드 89555로 무작위 화됨 돌연변이 코드의 결과 : 6 단계 : 원래 버전과 돌연변이 버전의 결과를 비교합니다. 이 경우 동일한 테스트 스위트를 사용하더라도 서로 다릅니다. 따라서 우리는 돌연변이를 죽였습니다. 따라서 테스트 스위트는 사용하기에 좋습니다. 몇 가지 유형의 돌연변이가 있습니다. 아래에 설명되어 있습니다. 여기서는 일반적으로 +/- 1만큼 매개 변수 및 / 또는 상수 값을 변경하여 돌연변이를 소개합니다. 예 : 원본 코드 (자바 스크립트) 위의 코드가 짝수를 곱하려는 경우 나는<4 , 값 변형은 초기화를 다음으로 변경하는 것을 의미합니다. 내가 = 1하자 . 예 : 돌연변이 코드 (자바 스크립트) 여기서는 코드 블록에서 문을 삭제하거나 복제합니다. 코드 블록에서 명령문을 재정렬 할 수도 있습니다. 예를 들어 if-else 블록에서 else 부분 또는 전체 if-else 블록을 삭제할 수 있습니다. 예 : 원본 코드 (자바 스크립트) 예 : 돌연변이 코드 (자바 스크립트) 여기서 목표는 결정을 내리는 코드입니다. 예를 들면 가치 비교. 우리는 바꿀 수 있습니다 > ~< 모녀 프로그램 예 에서처럼. 전환 할 수있는 다른 연산자는 다음과 같습니다. Mutation Testing (MT)의 장점은 다음과 같습니다. 돌연변이 테스트 (MT)의 단점은 다음과 같습니다. 도구는 돌연변이 생성 과정을 가속화하는 데 유용합니다. 다음은 MT에서 사용할 수있는 몇 가지 도구입니다. Stryker, Jumble, PIT 및 Insure ++. 예를 통해 배우자: 새로운 사용자가 등록 할 수있는 병원 사이트가 있다고 가정 해 보겠습니다. 환자의 생년월일 또는 나이를 읽습니다. 14보다 크면 일반 의사를 주 의사로 지정합니다. 이를 위해 사용 가능한 의사를 찾는 '일반 의사'기능을 호출합니다. 이제 다른 기능이있을 수 있습니다. 아마도 13 세 미만의 환자는 소아과 의사에게 배정 될 수 있습니다. 그러나 우리는 14 세 이상 사건 만 받아 들일 것입니다. 코드는 다음과 같습니다. 1) 읽기 연령 위의 코드 줄은 프로그래밍 언어에 국한되지 않으며 실행되지 않습니다. 그것은 단지 가상입니다. 테스터로서 내 데이터 세트가 14, 15, 0, 13이면 임의의 숫자입니다. 목표는 4 개 값 (14, 15, 0, 3)의 데이터 세트가이 코드의 모든 가능한 문제를 식별하는 데 적합한 지 확인하는 것입니다. 또한 읽기 => 테스트 케이스를 실행하기 전에 테스트 데이터를 디자인하기위한 팁 Mutation Testing은이를 어떻게 달성합니까? 가장 먼저, 프로그램의 변형 인 돌연변이를 만듭니다. 돌연변이는 일탈로 작성된 프로그램 일뿐입니다. 자체 시드 오류가 포함되어 있습니다. 예 : 이러한 대체품은 '변이 연산자.' 예를 보여 드리겠습니다. 돌연변이 # 1 : 관계 연산자바꿔 놓음 1) 읽기 연령 돌연변이 # 2 : 1) 읽기 연령 돌연변이 # 3 : 1) 읽기 연령 돌연변이 # 4 : 1) 읽기 연령 돌연변이 # 5 : 진술 제거 1) 읽기 연령 돌연변이 # 6 : 절대 값 삽입 1) 읽기 연령 돌연변이 # 7 : 잘못된 구문 1) 읽기 연령 Mutant # 8 : 원래 테스트와 동일한 작업을 수행합니다. 1) 읽기 연령 일단 모든 돌연변이가 생성됩니다. 그들은 테스트 데이터 세트의 적용을받습니다. 우리의 세트는 14, 15, 0, 13입니다. 데이터 세트가 찾을 돌연변이는 무엇입니까? 아래 표에서 알아보십시오. (확대 된 이미지를 보려면 이미지를 클릭하십시오) 보시다시피 데이터 값 14는 돌연변이 2, 3 및 4에 대해 실행될 때 실패를 찾습니다. 또는 14는 돌연변이 2, 3 및 4를 죽입니다. 그러나 1, 6 및 8에 대해서는 효과가 없습니다. 데이터 세트가 모든 돌연변이를 죽이면 효과적입니다. 그렇지 않으면 더 많거나 더 나은 테스트 데이터를 포함하십시오. 데이터 세트의 각 값이 모든 돌연변이를 죽일 필요는 없습니다. 하지만 함께라면 모두 죽여야합니다.예를 들면 :14는 2, 3, 4를 죽입니다. 15는 1, 2, 4를 죽입니다. 5, 7, 8은 어떻습니까? 돌연변이 # 5 – 제공 한 데이터 값에 관계없이 실패하는 프로그램 인스턴스입니다. 유효한 값과 유효하지 않은 값 모두에 대해 프로그래밍을 수행하지 않기 때문입니다. 돌연변이 # 7 - 컴파일 오류가됩니다. 또는 스크립팅 언어의 경우 실행을 방해하는 오류입니다. 돌연변이 # 8 - 메인 프로그램과 동일합니다. 보시다시피 위의 돌연변이는 전혀 유용하지 않습니다. 따라서 피해야 할 돌연변이는 다음과 같습니다. 이렇게 많은 노력이 필요하다면 대량의 코드 샘플을 테스트해야 할 때 어떤 일이 일어날 것이라고 생각하십니까? 돌연변이 테스트는 다음 두 가지에 의존합니다. 그래서, 가장 작은 코드 단위에 초점을 맞추고 돌연변이 테스트를 더 큰 프로그램으로 확장하는 프로그래머의 기술을 믿습니다. 이 튜토리얼에서는 예제를 통해이 테스트를 수행하기위한 Mutation 테스트 정의, 유형 및 단계를 자세히 다뤘습니다. 이 흥미로운 테스트 기법 인 Mutation Testing을 읽고 배우 셨기를 바랍니다. 저자 정보 : 이 기사는 STH 팀원 Swati S가 작성했습니다. 아래에 귀하의 의견, 질문 및 생각을 공유하십시오. const user_info = () =>{ mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age
Daughter's age: 5, is more than mother's age: 20. Please enter correct ages
돌연변이 테스트 유형
# 1) 가치 변이
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=1; i
# 2) 문 변형
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=0; i
# 3) 결정 돌연변이
원래 연산자 돌연변이 연산자 1 <= > = 두 > = == 삼 === == 4 과 또는 5 || &&
돌연변이 테스트 도구
돌연변이 테스트에 대해 더 알아보기
두) 만 14 세 이상인 경우
삼) 의사 = 일반의 ()
4) 종료
2) 나이가 들면<’
3) 의사 = 일반의 ()
4) 경우 종료
2) 나이 = 14 인 경우 '=로> 변경'
3) 의사 = 일반의 ()
4) 경우 종료
2) 나이> = 14 인 경우 '> =로> 바꾸기'
3) 의사 = 일반의 ()
4) 경우 종료
2) 나이가 들면<=’
3) 의사 = 일반의 ()
4) 경우 종료
2) 나이 = 14 인 경우
3)‘의사 지정 문 삭제’
4) 경우 종료
2) 만 14 세 이상인 경우
3) 의사 = Mr.X (절대 값 삽입-X가 소아과 의사라고 가정 해 봅시다)
4) 경우 종료
2) age %% 14 인 경우 (잘못된 구문)
3) 의사 = 일반의 ()
4) 경우 종료
2) 만 14 세 이상 14 세 이상 '만 14 세 이상'인 경우
3) 의사 = 일반의 ()
4) 경우 종료
참고 사항
DVD를 하드 드라이브에 무료로 복사
결론
추천 도서