JMUSE: Java 프로그램을 위한 돌연변이 기반 오류 추적 시스템 연광흠, 김문주 Software Testing & Verification Group (SWTV) CS Dept., KAIST 2014-07-29 1 Motivation: Finding Cause of SW Error is Difficult • Developers have spent a large amount of time in debugging. • One of the most laborious task of debugging activities is to locate the cause of failures (i.e., fault), which is called fault localization. Test case #1 : assertEquals(3, Example. setMax(3,1)) 1: 2: 3: 4: 6: 7: 8: public class Example { public int SetMax(int x, int y) { int max ‐= x; // should be ‘max=x;’ if(max<y){ max = y; return max; } return max; } Inspecting line by line == Laborious task Test result: pass Test result: fail • Research Goal: To develop automated fault location techniques that assist developers effectively locate the cause of program failures (i.e., fault) 0 2014-07-29 JMUSE: Java 프로그램을 위한 돌연변이 기반 오류 추적 시스템 1/5 Key Idea of jMUSE • Utilize differences between testing result changes of mutating – correct statements Conjecture 2 – faulty statements Test 1 1: stmt 𝒔 ′ 𝟏 … k: stmt 𝑠k … n: stmt 𝑠n : Failed test : Passed test 1: stmt 𝑠1 … f: stmt 𝑠𝑓 … n: stmt 𝑠n Test 1 Test 2 Test 3 Test 4 Test 5 Test 6 What is the mutation? single syntactic code change Ex.: if(a) if(!a) a+b a–b 0 2014-07-29 .. . Test 2 Test 3 Test 4 Test 5 Test 6 Conjecture 1 1: stmt 𝑠1 … k: stmt 𝒔𝒌 ′ … n: stmt 𝑠n JMUSE: Java 프로그램을 위한 돌연변이 기반 오류 추적 시스템 Test 1 Test 2 Test 3 Test 4 Test 5 Test 6 2/5 jMUSE Overall Test suite T Source code of program P Step1 PITEST Execution Coverage analysis Test result1 mn Exec. Test resultn Step2 Test result Processing Exec. Mutation Stmts. Covered by tests Byte code of Program P m1 Calc. Susp. Step3 Susp. & Rank 1. Testing the program and analyzing the coverage 2. Generating and testing the mutants 3. Processing data and calculating suspiciousness using the MUSE metric 0 2014-07-29 JMUSE: Java 프로그램을 위한 돌연변이 기반 오류 추적 시스템 3/5 결과가 좋은 경우 Faulty statement • 41 failing test cases out of 94 test cases (35 array index out of bounds exceptions and 6 null pointer exceptions) jMUSE result: jMUSE generates a golden mutation ‘result[i+namespaces.length]’ The generated mutation은the faulty program이 정상적인 동작을 수행하도록 만든다. • Test cases를 the golden mutation에 대해 수행하면 정상적인 프로그램에서 실 행했던 것과 같은 test case results를 얻게 된다. 따라서, 모든 failing test cases 가 passing test cases로 변하기 때문에 높은 suspiciousness를 얻게 된다. 0 JMUSE: Java 프로그램을 위한 돌연변이 기반 오류 추적 시스템 2014-07-29 4/5 결과가 좋지 않은 경우 Faulty statement • 2 failing test cases out of 94 test cases (2 assert failed errors) jMUSE result: jMUSE generates a mutation ‘return null’ The generated mutation은the faulty program이 더 많은 error를 발생하도록 만든다. • Test cases를 the generated mutation에 대해 수행하면 null pointer exception이 발생하면서 기존 failing test cases를 포함한 더 많은 test cases들이 fail하게 된다. 0 JMUSE: Java 프로그램을 위한 돌연변이 기반 오류 추적 시스템 2014-07-29 5/5