Our Directions
Our Technologies
We base on scientific knowledge, leverage our original findings, and create techniques usable in the real world.
Mutation Testing
Mutation testing is a technique to measure fault-detecting capability of test cases.
- Developers implement a program under test and its test cases. A question is: “Can the test cases detect faults in the program?”
- This technique artificially injects faults that developers can make into the program. These faulty version os the programs are called mutants. If the test cases have capability of detecting faults in the program, they must detect these artificial faults.
- This technique then runs the test cases on each mutant and determine whether the test cases fail on the mutant; that is, the test cases can detect the artificial fault.
- From the test results, this technique calculates mutation score. Developers can use this score to quantitively evaluate fault-detecting capability of the test case.
- Developers can also use the mutants that the test cases did not fail on. By redesigning the test cases so as to detect the not-detected mutants, developers can improve the fault-detecting capability.
Developers implement a program under test and its test cases. A question is: “Can the test cases detect faults in the program?”
This technique artificially injects faults that developers can make into the program. These faulty version os the programs are called mutants. If the test cases have capability of detecting faults in the program, they must detect these artificial faults.
This technique then runs the test cases on each mutant and determine whether the test cases fail on the mutant; that is, the test cases can detect the artificial fault.
From the test results, this technique calculates mutation score. Developers can use this score to quantitively evaluate fault-detecting capability of the test case.
Developers can also use the mutants that the test cases did not fail on. By redesigning the test cases so as to detect the not-detected mutants, developers can improve the fault-detecting capability.
Generate-and-Validate Program Repair
Automated program repair is a technique to generate patches that automatically make a faulty program pass all test cases when, at least one, the test cases fail.
- When developers face on test failures, their much effort is required to fix faults. A question is: “Can the faults be fixed automatically?”
- This technique generates patches by locating and mutating possibly-faulty statements in the program. Challenges at this phase are fault localization and proper program mutation.
- This technique runs the test cases on patched programs. If all the test cases pass on the patched programs, this technique outputs the patches as solutions for repairing the faulty program. Challenges at this phase are efficient repair-space search and mitigation of overfitting to given test cases.
When developers face on test failures, their much effort is required to fix faults. A question is: “Can the faults be fixed automatically?
This technique generates patches by locating and mutating possibly-faulty statements in the program. Challenges at this phase are fault localization and proper program mutation.
This technique runs the test cases on patched programs. If all the test cases pass on the patched programs, this technique outputs the patches as solutions for repairing the faulty program. Challenges at this phase are efficient repair-space search and mitigation of overfitting to given test cases.