private double getSumDistance(ExecutionTrace orig_trace, ExecutionTrace mutant_trace) { // TODO: Also sum up differences in branch distances as part of impact! // double sum = getCoverageDifference(getCoverage(orig_trace), // getCoverage(mutant_trace)); logger.debug("Calculating coverage impact"); double coverage_impact = getCoverageDifference(orig_trace.getCoverageData(), mutant_trace.getCoverageData()); logger.debug("Coverage impact: " + coverage_impact); logger.debug("Calculating data impact"); double data_impact = getCoverageDifference(orig_trace.getReturnData(), mutant_trace.getReturnData()); logger.debug("Data impact: " + data_impact); double branch_impact = 0.0; for (Integer predicate : orig_trace.getCoveredPredicates()) { if (mutant_trace.hasTrueDistance(predicate)) { branch_impact += normalize(Math.abs(orig_trace.getTrueDistance(predicate) - mutant_trace.getTrueDistance(predicate))); } else { branch_impact += 1.0; } if (mutant_trace.hasFalseDistance(predicate)) { branch_impact += normalize(Math.abs(orig_trace.getFalseDistance(predicate) - mutant_trace.getFalseDistance(predicate))); } else { branch_impact += 1.0; } } logger.debug("Branch impact: " + branch_impact); return normalize(coverage_impact) + normalize(data_impact) + branch_impact; }