|
From: <mwl...@us...> - 2007-09-13 19:43:28
|
Revision: 522
http://cishell.svn.sourceforge.net/cishell/?rev=522&view=rev
Author: mwlinnem
Date: 2007-09-13 12:43:23 -0700 (Thu, 13 Sep 2007)
Log Message:
-----------
Added new fault analysis heuristic that gives converters that crash a higher chance of being at fault than the converters that precede them.
Modified Paths:
--------------
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/ConverterTester2.java
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/ChanceAtFault.java
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/FullTrustHeuristic.java
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/results/ConvResult.java
Added Paths:
-----------
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/WeightedFullTrustHeuristic.java
Modified: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/ConverterTester2.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/ConverterTester2.java 2007-09-13 18:47:33 UTC (rev 521)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/ConverterTester2.java 2007-09-13 19:43:23 UTC (rev 522)
@@ -22,7 +22,7 @@
import org.cishell.testing.convertertester.core.tester2.graphcomparison.NewGraphComparer;
import org.cishell.testing.convertertester.core.tester2.reportgen.ReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.faultanalysis.ChanceAtFaultHeuristic;
-import org.cishell.testing.convertertester.core.tester2.reportgen.faultanalysis.FullTrustHeuristic;
+import org.cishell.testing.convertertester.core.tester2.reportgen.faultanalysis.WeightedFullTrustHeuristic;
import org.cishell.testing.convertertester.core.tester2.reportgen.results.AllConvsResult;
import org.cishell.testing.convertertester.core.tester2.reportgen.results.AllTestsResult;
import org.cishell.testing.convertertester.core.tester2.reportgen.results.FilePassResult;
@@ -84,7 +84,8 @@
Converter[] allConverters = converterGraph.getAllConverters();
- ChanceAtFaultHeuristic faultHeuristic = new FullTrustHeuristic();
+ ChanceAtFaultHeuristic faultHeuristic =
+ new WeightedFullTrustHeuristic();
AllConvsResult allConvertersResult =
ConvResultMaker.generate(allTestsResult, allConverters,
faultHeuristic);
Modified: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/ChanceAtFault.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/ChanceAtFault.java 2007-09-13 18:47:33 UTC (rev 521)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/ChanceAtFault.java 2007-09-13 19:43:23 UTC (rev 522)
@@ -3,6 +3,7 @@
import java.util.Comparator;
import org.cishell.testing.convertertester.core.converter.graph.Converter;
+import org.cishell.testing.convertertester.core.tester2.reportgen.results.FilePassResult;
import org.cishell.testing.convertertester.core.tester2.reportgen.results.filepass.FilePassFailure;
public class ChanceAtFault {
@@ -10,11 +11,11 @@
public static final Comparator COMPARE_BY_LIKELIHOOD =
new CompareByLikelihood();
- private FilePassFailure failedFP;
+ private FilePassResult failedFP;
private Converter c;
private float chanceAtFault;
- public ChanceAtFault(FilePassFailure failedFP, Converter c, float chanceAtFault) {
+ public ChanceAtFault(FilePassResult failedFP, Converter c, float chanceAtFault) {
this.failedFP = failedFP;
this.c = c;
this.chanceAtFault = chanceAtFault;
@@ -32,7 +33,7 @@
return this.c;
}
- public FilePassFailure getFailedFilePass() {
+ public FilePassResult getFailedFilePass() {
return this.failedFP;
}
Modified: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/FullTrustHeuristic.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/FullTrustHeuristic.java 2007-09-13 18:47:33 UTC (rev 521)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/FullTrustHeuristic.java 2007-09-13 19:43:23 UTC (rev 522)
@@ -33,7 +33,7 @@
for (int ii = 0; ii < involvedCs.length; ii++) {
uniqueInvolvedCs.add(involvedCs[ii]);
}
- //eliminate converters that are not trusted
+ //eliminate converters that are trusted
List uniqueUntrustedCs = new ArrayList();
Iterator iter = uniqueInvolvedCs.iterator();
@@ -58,10 +58,10 @@
ChanceAtFault chanceAtFault = null;
if (uniqueUntrustedCs.contains(c)) {
chanceAtFault =
- new ChanceAtFault((FilePassFailure) failFP, c, chanceEachAtFault);
+ new ChanceAtFault(failFP, c, chanceEachAtFault);
} else {
chanceAtFault =
- new ChanceAtFault((FilePassFailure) failFP, c, 0.0f);
+ new ChanceAtFault(failFP, c, 0.0f);
}
chanceAtFaultList.add(chanceAtFault);
Added: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/WeightedFullTrustHeuristic.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/WeightedFullTrustHeuristic.java (rev 0)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/faultanalysis/WeightedFullTrustHeuristic.java 2007-09-13 19:43:23 UTC (rev 522)
@@ -0,0 +1,161 @@
+package org.cishell.testing.convertertester.core.tester2.reportgen.faultanalysis;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.cishell.testing.convertertester.core.converter.graph.Converter;
+import org.cishell.testing.convertertester.core.tester2.reportgen.results.FilePassResult;
+
+/**
+ *
+ * @author mwlinnem
+ *
+ * A less naive approach to assessing likelihood of fault,
+ * that gives higher weight to the converter that caused the error for
+ * failures in conversion, and increases chance at fault for converters
+ * involved more than once in the conversion path
+ */
+public class WeightedFullTrustHeuristic implements ChanceAtFaultHeuristic{
+
+ public static final Float TRUSTED_FAULT_SCORE = new Float(0);
+ public static final Float DEFAULT_FAULT_SCORE = new Float(1);
+ public static final Float FAILED_CONV_FAULT_SCORE = new Float(2);
+
+ public ChanceAtFault[] determine(FilePassResult failFP,
+ Converter[] involvedCs,
+ Converter[] trustedCs) {
+
+ List trustedCList = Arrays.asList(trustedCs);
+
+ //eliminate converters that are trusted
+
+ List unTrustedCs = new ArrayList();
+ for (int ii = 0; ii < involvedCs.length; ii++) {
+ Converter c = involvedCs[ii];
+
+ if (! trustedCList.contains(c)) {
+ unTrustedCs.add(c);
+ }
+ }
+
+ //assign fault scores to each untrusted converter
+
+ Map convToFaultScore = new HashMap();
+
+ float totalFaultScore = 0.0f;
+ for (int ii = 0; ii < unTrustedCs.size(); ii++) {
+ Converter untrustedC = (Converter) unTrustedCs.get(ii);
+
+ Float oldFaultScore = (Float) convToFaultScore.get(untrustedC);
+ Float newFaultScore;
+ if (oldFaultScore == null) {
+ //first occurrence of this converter
+
+ if (! isConvThatFailed(untrustedC, failFP)) {
+ newFaultScore = DEFAULT_FAULT_SCORE;
+ } else {
+ newFaultScore = FAILED_CONV_FAULT_SCORE;
+ }
+
+ } else {
+ //converter has occurred before
+
+ newFaultScore = new Float(oldFaultScore.floatValue() +
+ DEFAULT_FAULT_SCORE.floatValue());
+ }
+
+ convToFaultScore.put(untrustedC, newFaultScore);
+ totalFaultScore += newFaultScore.floatValue();
+ }
+
+ //return chance each converter is at fault, based on fault scores.
+
+
+ List resultCAFList = new ArrayList();
+
+
+
+
+ for (int ii = 0; ii < involvedCs.length; ii++) {
+ Converter involvedC = involvedCs[ii];
+
+ Float faultScore = (Float) convToFaultScore.get(involvedC);
+ //if there is no associated score...
+ if (faultScore == null) {
+ //this converter must have been removed because it was
+ //trusted, so give it the fault score for trusted converters.
+ faultScore = TRUSTED_FAULT_SCORE;
+ }
+
+ float normalizedFaultScore =
+ faultScore.floatValue() / totalFaultScore;
+
+ ChanceAtFault resultCAF = new ChanceAtFault(failFP, involvedC,
+ normalizedFaultScore);
+
+ resultCAFList.add(resultCAF);
+ }
+
+ return (ChanceAtFault[]) resultCAFList.toArray(new ChanceAtFault[0]);
+
+
+
+
+//
+// //easier to deal with as a list
+// List trustedCList = Arrays.asList(trustedCs);
+//
+// //eliminate converters involved twice in the file pass
+//
+// Set uniqueInvolvedCs = new HashSet();
+// for (int ii = 0; ii < involvedCs.length; ii++) {
+// uniqueInvolvedCs.add(involvedCs[ii]);
+// }
+// //eliminate converters that are trusted
+//
+// List uniqueUntrustedCs = new ArrayList();
+// Iterator iter = uniqueInvolvedCs.iterator();
+// while (iter.hasNext()) {
+// Converter c = (Converter) iter.next();
+// if (! trustedCList.contains(c)) {
+// //converter isn't trusted
+// //add it to the list
+// uniqueUntrustedCs.add(c);
+// } else {
+// //converter is trusted
+// //do nothing
+// }
+// }
+//
+// float chanceEachAtFault = 1.0f / uniqueUntrustedCs.size();
+//
+// List chanceAtFaultList = new ArrayList();
+// for (int ii = 0; ii < involvedCs.length; ii++) {
+// Converter c = involvedCs[ii];
+//
+// ChanceAtFault chanceAtFault = null;
+// if (uniqueUntrustedCs.contains(c)) {
+// chanceAtFault =
+// new ChanceAtFault((FilePassFailure) failFP, c, chanceEachAtFault);
+// } else {
+// chanceAtFault =
+// new ChanceAtFault((FilePassFailure) failFP, c, 0.0f);
+// }
+//
+// chanceAtFaultList.add(chanceAtFault);
+// }
+//
+// return (ChanceAtFault[])
+// chanceAtFaultList.toArray(new ChanceAtFault[0]);
+ }
+
+ private boolean isConvThatFailed(Converter c, FilePassResult failFP) {
+ return failFP.failedWhileConverting() &&
+ failFP.getFailedConverter() == c;
+ }
+}
Modified: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/results/ConvResult.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/results/ConvResult.java 2007-09-13 18:47:33 UTC (rev 521)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/reportgen/results/ConvResult.java 2007-09-13 19:43:23 UTC (rev 522)
@@ -88,11 +88,6 @@
this.failedInvolvedPasses.add(fpr);
}
}
-
- System.out.println(conv.getUniqueName() +
- " is involved in " + succeededInvolvedPasses.size() + " successful passes");
- System.out.println(conv.getUniqueName() +
- " is involved in " + failedInvolvedPasses.size() + " failed passes");
}
private void initializePercentPassed() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|