Mutation testing has long been used as a powerful testing technique to evaluate the test suite quality as well as to analyse the program under test. However, it still has issues of scalability and applicability due to the high cost of running tests against mutants. To improve its efficacy even on large programs, this dissertation explores mutant's relationship with code, faults, and patches that have not been explored much but are likely to be useful. First, we investigate the mutant's relationship with code to assist predicting the kill of a mutant without running the tests. By exploring the natural language channel of the code around the mutant, we build a deep neural network to learn and predict the mutant's killability. Second, we explore the mutant's relationship with the faults to localise the faults. We propose several statistical inference techniques that can learn the mutant-fault relationships in advance, in terms of their similarity of test executions. Lastly, we investigate the mutant's relationship with the patches. We hypothesise that the mutants (faults) and patches do not syntactically differ from each other and conduct various empirical studies to show how much they are similar. Our empirical results suggest that exploiting those relationships makes mutation analysis more viable and effective.
뮤테이션 테스팅 기법은 오랫동안 소프트웨어의 테스트 품질을 검증하는 데에 좋은 성능을 보였으며 이를 통해 프로그램 자체를 분석하는 데에도 널리 사용되었다. 하지만 이 기법은 수많은 뮤턴트에 대한 테스트 실행을 동반하여 많은 시간과 컴퓨팅 리소스를 소모하게 되어, 아직까지도 큰 스케일의 프로그램에 대해서는 적용될 수 없다는 문제점을 가지고 있다. 이러한 문제점을 완화하기 위해, 본 논문에서는 뮤턴트와 코드, 결함, 패치와의 관계성을 탐구한다. 첫번째로, 뮤턴트 주변의 코드에서 자연 언어 채널을 분석하여 테스트 실행을 하지 않고 뮤턴트 탐지 여부를 예측하는 방법을 제시한다. 두 번째로, 뮤턴트의 결함과의 관계성을 분석하여 결함 위치 추정 정확도를 높이는 방법을 제시한다. 다양한 통계 추정 모델과 과거 뮤테이션 정보를 활용하여 현재 결함 위치를 뮤턴트에 대한 테스트 실행 없이 예측한다. 마지막으로 뮤턴트와 패치의 관계성을 분석한다. 본 논문에서는 뮤턴트와 패치가 구문적으로 다르지 않다고 가정하고, 서로가 얼마나 비슷하며 각자를 대체할 수 있는지를 보이는 다양한 실험을 수행한다. 이러한 실험 통해 본 논문에서 제시한 세 가지 관계 분석이 뮤테이션을 넓은 범위에서 적용될 수 있게 하고 더욱 효과적으로 할 수 있게 할 수 있다는 것을 확인한다.