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. |