돌연변이 테스트
Mutation testing돌연변이 테스트(또는 돌연변이 분석 또는 프로그램 돌연변이)는 새로운 소프트웨어 테스트를 설계하고 기존 소프트웨어 테스트의 품질을 평가하기 위해 사용됩니다.돌연변이 테스트는 작은 방법으로 [1]프로그램을 수정하는 것을 포함한다.각 돌연변이 버전은 돌연변이라고 불리며 원래 버전의 동작이 돌연변이와는 다르게 하여 돌연변이를 검출하고 거부합니다.이건 돌연변이를 죽이는 거야테스트 스위트는 그들이 죽인 돌연변이의 비율로 측정됩니다.새로운 테스트는 추가 돌연변이를 죽이기 위해 고안될 수 있다.돌연변이는 일반적인 프로그래밍 오류(잘못된 연산자 또는 변수 이름 사용 등)를 모방하거나 귀중한 테스트(각 식을 0으로 나누는 등)를 강제로 생성하는 잘 정의된 변환 연산자를 기반으로 합니다.그 목적은 테스터가 효과적인 테스트를 개발하거나 프로그램에 사용된 테스트 데이터 또는 실행 중에 거의 또는 전혀 접근하지 않는 코드 섹션의 약점을 찾는 데 도움을 주기 위함입니다.돌연변이 테스트는 화이트 박스 [2][3]테스트의 한 형태입니다.
서론
이 기사의 대부분은 프로그램이 수정되는 "프로그램 변환"에 관한 것입니다.돌연변이 분석의 보다 일반적인 정의는 구문 구조에 정의된 명확한 규칙을 사용하여 소프트웨어 [4]아티팩트를 체계적으로 변경하는 것입니다.돌연변이 분석은 다른 문제에 적용되어 왔지만, 일반적으로 테스트에 적용됩니다.돌연변이 테스트는 돌연변이 분석을 사용하여 새로운 소프트웨어 테스트를 설계하거나 기존 소프트웨어 [4]테스트를 평가하는 것으로 정의됩니다.따라서 프로그램 변환이 가장 [5]일반적이지만 변환 분석과 테스트는 설계 모델, 사양, 데이터베이스, 테스트, XML 및 기타 유형의 소프트웨어 아티팩트에 적용할 수 있습니다.
개요
특정 소프트웨어 시스템 구현의 정확성을 검증하기 위해 테스트를 작성할 수 있지만 테스트 작성은 테스트가 정확한지 여부 및 [6]구현을 시작한 요건을 충분히 충족시키는지에 대한 의문을 제기합니다.(이 기술적인 문제 자체는 "Quis custriet ipsos custodes?"라는 더 깊은 철학적 문제의 인스턴스입니다.["Who will guards?"]라는 이름의 "guards?"라는 이름의 이면의 아이디어는 돌연변이가 도입되면 보통 테스트에서 찾아야 할 프로그램 기능에 오류가 발생한다는 것입니다.이 방법으로 테스트는 테스트됩니다.돌연변이가 테스트 스위트에 의해 검출되지 않는 경우 이는 일반적으로 테스트 스위트가 돌연변이에 의해 나타나는 장애를 찾을 수 없음을 나타내지만 변환에 의해 장애가 발생하지 않음을 나타낼 수도 있습니다.즉, 변환은 기능에 영향을 주지 않는 유효한 변경입니다.돌연변이가 유효한 방법 중 하나는 변경된 코드가 실행되지 않는 "dead code"라는 것입니다.
돌연변이 테스트가 규모에 맞게 기능하기 위해서는 보통 많은 수의 돌연변이가 도입되어 매우 많은 수의 프로그램 복사본이 컴파일되고 실행됩니다.이 돌연변이 테스트 비용 문제는 소프트웨어 테스트 방법으로서의 실제 사용을 감소시켰다.그러나 객체 지향 프로그래밍 언어와 유닛 테스트 프레임워크의 사용이 증가함에 따라 애플리케이션의 개별 부분을 테스트하는 돌연변이 테스트 툴이 생성되었습니다.
목표들
돌연변이 테스트의 목적은 다음과 같습니다.
- 약하게 테스트된 코드 조각(변이가 죽지 [1]않는 코드)을 식별한다.
- 약한 테스트(변이를 [7]죽이지 않는 테스트)를 특정한다.
- 돌연변이 [4]점수를 계산합니다. 돌연변이 점수는 죽은 돌연변이 수 / 총 돌연변이 수입니다.
- 프로그램의[8] 오류 전파 및 상태 감염에 대해 학습하다
역사
돌연변이 테스트는 1971년 [9]리처드 립튼이 학생으로 처음 제안했으며, DeMillo, Lipton, Sayward가 [1]처음 개발하고 발표했다.돌연변이 테스트 툴의 최초의 실장은 1980년 예일 대학에서 [10]박사학위 연구(제목 돌연변이 분석)의 일환으로서 Timothy Budd에 의해 이루어졌습니다.
최근에는 컴퓨터 사이언스 커뮤니티 내에서 돌연변이 분석이 부활하면서 객체 지향 프로그래밍 언어 및 XML, SMV, 유한 상태 머신 등의 비프로시저 언어에 돌연변이 테스트를 적용하는 방법을 정의하는 작업이 이루어지고 있습니다.
2004년에 Certess Inc.(현재는 Synopsys의 일부)라는 회사가 많은 원칙을 하드웨어 검증 영역으로 확장했습니다.돌연변이 분석은 생성된 출력의 차이만 탐지할 것으로 예상하는 반면, Certess는 테스트벤치의 체커가 실제로 차이를 탐지하는 것을 확인함으로써 이 차이를 확장합니다.이 확장은 검증의 세 단계, 즉 활성화, 전파 및 검출이 모두 평가된다는 것을 의미합니다.그들은 이것을 기능 자격이라고 불렀다.
퍼징은 돌연변이 테스트의 특별한 경우로 간주할 수 있습니다.퍼징에서는 데이터 처리의 장애 또는 차이를 포착하기 위해 통신 인터페이스(내부 및 소프트웨어 인스턴스 간) 내부에서 교환되는 메시지 또는 데이터를 변환한다.Codenomicon[11](2001)과 Mu Dynamics(2005)는 완전한 상태 저장 돌연변이 테스트 플랫폼으로 퍼징 개념을 진화시켰으며, 프로토콜 구현을 철저히 수행하기 위한 모니터가 완비되었다.
돌연변이 테스트의 개요
돌연변이 테스트는 두 가지 가설을 기반으로 합니다.첫번째는 유능한 프로그래머 가설이다.이 가설은 유능한 프로그래머가 [1]정확에 가까운 프로그램을 작성한다는 것입니다."닫기"는 구문이 아닌 동작을 기반으로 합니다.두 번째 가설은 결합 효과라고 합니다.결합 효과는 단순한 결함이 계단식 또는 결합되어 다른 긴급 [12][13]고장을 형성할 수 있다고 주장한다.
고차 돌연변이에도 미묘하고 중요한 결함이 드러나 결합 효과를 [14][15][7][16][17]더욱 뒷받침합니다.고차 돌연변이는 여러 변이를 가진 돌연변이를 생성함으로써 활성화됩니다.
돌연변이 테스트는 일련의 돌연변이 연산자를 선택한 후 소스 코드의 적용 가능한 각 조각에 대해 한 번에 하나씩 소스 프로그램에 적용함으로써 이루어집니다.프로그램에 하나의 돌연변이 연산자를 적용한 결과를 돌연변이라고 합니다.테스트 스위트가 변화를 검출할 수 있는 경우(즉, 테스트 중 하나가 실패), 돌연변이는 죽임을 당한다고 한다.
예를 들어, 다음의 C++ 코드 fragment에 대해 생각해 보겠습니다.
한다면 (a & & b) { c = 1; } 또 다른 { c = 0; } 조건 변환 연산자가 대체됩니다.&&와 함께 다음과 같은 돌연변이를 생성합니다.
한다면 (a b) { c = 1; } 또 다른 { c = 0; } 이 돌연변이를 죽이는 테스트를 위해서는 다음 세 가지 조건이 충족되어야 합니다.
- 테스트는 변환된 문장에 도달해야 합니다.
- 테스트 입력 데이터는 돌연변이 프로그램과 원래 프로그램에 다른 프로그램 상태를 발생시켜 프로그램 상태를 감염시켜야 합니다.예를 들어 다음과 같은 테스트입니다.
a = 1그리고.b = 0이렇게 할 거예요. - 잘못된 프로그램 상태('c' 값)는 프로그램 출력으로 전파되고 테스트에서 확인해야 합니다.
이러한 상태를 통칭하여 RIP [9]모델이라고 부릅니다.
약한 돌연변이 테스트(또는 약한 돌연변이 포함)는 첫 번째와 두 번째 조건만 만족해야 한다.강력한 돌연변이 테스트에서는 세 가지 조건이 모두 충족되어야 합니다.강력한 돌연변이는 테스트 스위트가 실제로 문제를 포착할 수 있도록 하기 때문에 더욱 강력합니다.약한 돌연변이는 코드 커버리지 방식과 밀접하게 관련되어 있습니다.테스트 스위트가 강력한 돌연변이 테스트보다 약한 돌연변이 테스트를 충족시키는 데 필요한 컴퓨팅 능력이 훨씬 적습니다.
그러나 이 돌연변이를 죽일 수 있는 테스트 케이스를 찾을 수 없는 경우가 있다.결과 프로그램은 원래 프로그램과 동작적으로 동일합니다.이런 돌연변이를 동등한 돌연변이라고 한다.
등가 돌연변이 검출은 돌연변이 테스트의 실제 사용에 있어 가장 큰 장애물 중 하나이다.돌연변이가 동일한지 여부를 확인하는 데 필요한 노력은 작은 [18]프로그램에서도 매우 높을 수 있습니다.등가 돌연변이[19] 문제를 극복하기 위한 광범위한 접근방식의 체계적 문헌 검토는 17개의 관련 기술(22개 기사에서)과 검출(DEM), 제안(SEM), 그리고 등가 돌연변이 생성(AEMG) 회피의 세 가지 범주로 식별되었다.실험은 일반적으로 고차 돌연변이와 특히 JudyDiffOp 전략이 등가 돌연변이 문제에 대한 유망한 접근을 제공한다는 것을 나타냈다.
변환 연산자
많은 돌연변이 연산자들이 연구자들에 의해 탐구되어 왔다.명령어 변환 연산자의 예를 다음에 나타냅니다.
- 전표삭제
- 문장의 중복 또는 삽입(예:
goto fail;[20] - 부울 하위식을 true 및 false로 대체
- 일부 산술 연산을 다른 연산으로 대체한다.
+와 함께*,-와 함께/ - 일부 부울 관계를 다른 부울 관계(예:
>와 함께>=,==그리고.<= - 동일한 범위의 다른 변수와 대체(변수 유형은 호환 가능해야 함)
- Pitest에서[22] 구현된 메서드 [21]본문 제거
이러한 돌연변이 연산자를 전통적인 돌연변이 연산자라고도 합니다.오브젝트 지향 언어,[23] 동시 [24]구성,[25] 컨테이너와 같은 복잡한 오브젝트에 대한 변환 연산자도 있습니다.용기의 연산자를 클래스 수준 돌연변이 연산자라고 합니다.예를 들어 muJava 도구는 Access Modifier Change, Type Cast Operator Insertion, Type Cast Operator Deletion 등 다양한 클래스 수준의 변환 연산자를 제공합니다.프로그램의 [26]보안 취약성 테스트를 수행하기 위해 변환 연산자도 개발되었습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b c d 리처드 A.드밀로, 리처드 J. 립튼, 프레드 G.세이워드.테스트 데이터 선택에 대한 힌트:연습 중인 프로그래머를 위한 도움.IEEE 컴퓨터, 11(4): 34-41.1978년 4월
- ^ Ostrand, Thomas (2002), "White-Box Testing", Encyclopedia of Software Engineering, American Cancer Society, doi:10.1002/0471028959.sof378, ISBN 978-0-471-02895-6, retrieved 2021-03-16
- ^ Misra, S. (2003). "Evaluating four white-box test coverage methodologies". CCECE 2003 - Canadian Conference on Electrical and Computer Engineering. Toward a Caring and Humane Technology (Cat. No.03CH37436). Montreal, Que., Canada: IEEE. 3: 1739–1742. doi:10.1109/CCECE.2003.1226246. ISBN 978-0-7803-7781-3. S2CID 62549502.
- ^ a b c 폴 암만과 제프 오푸트.소프트웨어 테스트의 개요.케임브리지 대학 출판부, 2008.
- ^ Jia, Yue; Harman, Mark (September 2009). "An Analysis and Survey of the Development of Mutation Testing" (PDF). CREST Centre, King's College London, Technical Report TR-09-06. 37 (5): 649–678. doi:10.1109/TSE.2010.62. S2CID 6853229. Archived from the original (PDF) on 2017-12-04.
- ^ Dasso, Aristides; Funes, Ana (2007). Verification, Validation and Testing in Software Engineering. Idea Group Inc. ISBN 978-1591408512.
- ^ a b Smith B., "변환 분석을 통한 자동 테스트 스위트 확대 가이드", 2008
- ^ Musco, Vincenzo; Monperrus, Martin; Preux, Philippe (2016). "Mutation-Based Graph Inference for Fault Localization". 2016 IEEE 16th International Working Conference on Source Code Analysis and Manipulation (SCAM) (PDF). pp. 97–106. doi:10.1109/SCAM.2016.24. ISBN 978-1-5090-3848-0. S2CID 10789030.
- ^ a b 변이 2000: 직교 A를 결합합니다. 제퍼슨 오퍼트와 롤랜드 H.빼다.
- ^ Tim A. Budd, 프로그램 테스트 데이터의 변환 분석.박사학위 논문, 예일대학교 뉴헤이븐 CT, 1980.
- ^ 카크소넨, 라울리프로토콜 구현 보안을 평가하기 위한 기능적 방법(라이센스 논문).특히 2001년
- ^ A. Jefferson Offutt, 1992.소프트웨어 테스트 커플링 효과 조사.ACM 트랜스소프트. Eng메서돌. 1, 1(1992년 1월), 5-20.
- ^ A. T. Acree, T. Budd, R. A. DeMillo, R. J. Lipton 및 F. G. Sayward, 조지아 공과대학, 애틀랜타, 조지아, 테크닉 리포트 GIT-ICS-79/08, 1979.
- ^ Yue Jia; Harman, M., 소스 코드 분석 및 조작, 2008년 제8회 IEEE 국제 워킹 컨퍼런스 on, vol., no., 페이지 249,258, 28-29.
- ^ Maryam Umar, "An Evaluation of Mutation Operators For Equivalent Mutants", MS 논문, 2006
- ^ Polo M. and Piattini M., "음성 테스트: 실용적인 측면과 비용 분석", Castilla-La Mancha 대학교(스페인), 프레젠테이션, 2009
- ^ Anderson S., "음성 테스트", 에든버러 대학 정보학부, 프레젠테이션, 2011
- ^ P. G. Frankl, S. N. Weiss, C.Hu. 만능 대 돌연변이 테스트:효과의 실험적인 비교.시스템 및 소프트웨어 저널(Journal of Systems and Software), 38:235~253, 1997.
- ^ 등가 돌연변이 문제 해결: L. Madeyski, W. Orzzyna, R.의 2차 돌연변이의 체계적 문헌 검토 및 비교 실험.토르카, M. 조잘라소프트웨어 엔지니어링에서의 IEEE 트랜잭션
- ^ Adam Langley에 의한 Apple의 SSL/TLS 버그.
- ^ Niedermayr, Rainer; Juergens, Elmar; Wagner, Stefan (2016-05-14). "Will my tests tell me if I break this code?". Proceedings of the International Workshop on Continuous Software Evolution and Delivery. CSED '16. Austin, Texas: Association for Computing Machinery: 23–29. arXiv:1611.07163. doi:10.1145/2896941.2896944. ISBN 978-1-4503-4157-8. S2CID 9213147.
- ^ Vera-Pérez, Oscar Luis; Monperrus, Martin; Baudry, Benoit (2018). "Descartes: a PITest engine to detect pseudo-tested methods: tool demonstration". Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering - ASE 2018. Montpellier, France: ACM Press: 908–911. arXiv:1811.03045. doi:10.1145/3238147.3240474. ISBN 9781450359375. S2CID 52068474.
- ^ MuJava: Mu-Sung Ma, Jeff Offutt, Yong Rae Kwo의 자동 클래스 변환 시스템.
- ^ Jeremy S. Bradbury, James R.의 동시 자바 변환 연산자(J2SE 5.0)코디, 위르겐 딩겔
- ^ Roger T에 의한 Java 객체의 변환.알렉산더, 제임스 M.바이만, 수딥토고시, 빅샤지
- ^ H에 의한 버퍼 오버플로우, SQL 주입 및 포맷 문자열 버그의 변환 기반 테스트샤흐리아와 줄커닌.