diff --git a/src/tool/Analyzer.java b/src/tool/Analyzer.java index d0d5a03..685276a 100644 --- a/src/tool/Analyzer.java +++ b/src/tool/Analyzer.java @@ -68,7 +68,7 @@ public class Analyzer { public Analyzer(String featureModel, String paramPath, ITimeCollector timeCollector, IFormulaCollector formulaCollector, IModelCollector modelCollector, int i) { this(new JADD(), featureModel, paramPath, timeCollector, formulaCollector, modelCollector, i); } - + public Analyzer(String featureModel, String paramPath, ITimeCollector timeCollector, IFormulaCollector formulaCollector, IModelCollector modelCollector, int i, boolean evol) { this(new JADD("variableStore.add"), featureModel, paramPath, timeCollector, formulaCollector, modelCollector, i); } @@ -95,11 +95,8 @@ private Analyzer(JADD jadd, String featureModel, String paramPath, ITimeCollecto this.featureModel = expressionSolver.encodeFormula(featureModel); // The feature model contains all used variables, so we expect to // be able to generate an optimal ordering right after parsing it. -// long reorderTime = System.currentTimeMillis(); -// if (i < 10) -// jadd.reorderVariables(); -// reorderTime = System.currentTimeMillis() - reorderTime; -// System.out.println ("++++++ Reorder Time: " + reorderTime + " ++++++"); + if (i < 10) + jadd.reorderVariables(); this.timeCollector = (timeCollector != null) ? timeCollector : new NoopTimeCollector(); this.formulaCollector = (formulaCollector != null) ? formulaCollector : new NoopFormulaCollector(); @@ -263,7 +260,7 @@ public void generateDotFile(ADD familyReliability, String outputFile) { public FeatureFamilyBasedAnalyzer getfeatureFamilyBasedAnalyzerImpl(){ return this.featureFamilyBasedAnalyzerImpl; } - + public JADD getJadd() { return this.jadd; } diff --git a/src/tool/analyzers/strategies/FeatureFamilyBasedAnalyzer.java b/src/tool/analyzers/strategies/FeatureFamilyBasedAnalyzer.java index bb51ea5..ac1c09e 100644 --- a/src/tool/analyzers/strategies/FeatureFamilyBasedAnalyzer.java +++ b/src/tool/analyzers/strategies/FeatureFamilyBasedAnalyzer.java @@ -113,14 +113,6 @@ public IReliabilityAnalysisResults evaluateReliability(RDGNode node, Concurrency System.out.println ("++++++ Sigma Time: " + sigmaTime + " ++++++"); timeCollector.stopTimer(CollectibleTimers.EXPRESSION_SOLVING_TIME); - - // Removendo a raiz e o capture da lista -// previousAnalysis.remove(node.getId()); -// previousAnalysis.remove("Capture"); - - /*if (dotOutput != null) { - generateDotFile(result, dotOutput); - }*/ return new ADDReliabilityResults(result); } @@ -155,18 +147,6 @@ public IReliabilityAnalysisResults evaluateReliabilityWithEvolution(RDGNode node timeCollector.stopTimer(CollectibleTimers.EXPRESSION_SOLVING_TIME); -// for(String s : previousAnalysis.keySet()){ -// generateDotFile(previousAnalysis.get(s), s + ".dot"); -// } - - // Removendo a raiz e o capture da lista -// previousAnalysis.remove(node.getId()); -// previousAnalysis.remove("Capture"); - -// if (true) { -// generateDotFile(result, "saida.dot"); -// } - return new ADDReliabilityResults(result); } diff --git a/src/ui/CommandLineInterface.java b/src/ui/CommandLineInterface.java index bfd2bf1..b454da9 100644 --- a/src/ui/CommandLineInterface.java +++ b/src/ui/CommandLineInterface.java @@ -100,7 +100,7 @@ public static void main(String[] args) throws IOException { RDGNode rdgRoot = buildRDG(options); memoryCollector.takeSnapshot("after model parsing"); - Analyzer analyzer = makeAnalyzer(options, 0); + Analyzer analyzer = makeAnalyzer(options, 0, reusePreviousAnalysis.NOT_REUSE_PREVIOUS_ANALYSIS); Stream> targetConfigurations = getTargetConfigurations(options, analyzer); memoryCollector.takeSnapshot("before evaluation"); @@ -128,21 +128,13 @@ public static void main(String[] args) throws IOException { long totalRunningTime = System.currentTimeMillis() - startTime; OUTPUT.println("Total analysis time: " + totalAnalysisTime + " ms"); OUTPUT.println("Total running time: " + totalRunningTime + " ms"); - - File directory = new File("BSN"); - if(!directory.exists()) - directory.mkdir(); - for(String i : previousAnalysis.keySet()){ - analyzer.getJadd().dumpADD(i, previousAnalysis.get(i),"BSN/" + i + ".add"); - } - - analyzer.getJadd().writeVariableStore("variableStore.add"); + storeAnalysis(previousAnalysis, analyzer, "BSN", "variableStore.add"); } else{ - Analyzer analyzer = makeAnalyzer(options, evolutionNumber, true); + Analyzer analyzer = makeAnalyzer(options, evolutionNumber,reusePreviousAnalysis.REUSE_PREVIOUS_ANALYSIS); evolveModel(options, analyzer, evolutionNumber, previousAnalysis); @@ -196,9 +188,6 @@ private static IReliabilityAnalysisResults evaluateReliabilityWithEvolution(Anal rdgRoot, options, idFragment, previousAnalysis); - /*for(String s : previousAnalysis.keySet()){ - analyzer.getfeatureFamilyBasedAnalyzerImpl().generateDotFile(previousAnalysis.get(s), s + ".dot"); - }*/ return results; } @@ -252,35 +241,32 @@ private static IReliabilityAnalysisResults evaluateReliability(BiFunction> getTargetConfigurations(Options option private static void printAnalysisResults(Map>> splitConfigs, IReliabilityAnalysisResults familyReliability) { OUTPUT.println("Configurations:"); OUTPUT.println("========================================="); -// String[] teste = {"ACC", "Temperature", "SQLite", "ECG", "TEMP", "Storage", "Oxygenation", "Monitoring"}; List> validConfigs = splitConfigs.get(true); // Ordered report validConfigs.sort((c1, c2) -> c1.toString().compareTo(c2.toString())); for (Collection validConfig: validConfigs) { try { String[] configurationAsArray = validConfig.toArray(new String[validConfig.size()]); -// OUTPUT.println(familyReliability.getResult(teste).toString()); printSingleConfiguration(validConfig.toString(), familyReliability.getResult(configurationAsArray)); } catch (UnknownFeatureException e) { @@ -525,7 +509,7 @@ private static void evolveModel(Options options, Analyzer analyzer, int numberOf long totalAnalysisTime = System.currentTimeMillis() - analysisStartTime; memoryCollector.takeSnapshot("after evaluation"); - + if (!options.hasSuppressReport()) { Map>> splitConfigs = getTargetConfigurations(options, analyzer) .collect(Collectors.partitioningBy(analyzer::isValidConfiguration)); @@ -537,26 +521,8 @@ private static void evolveModel(Options options, Analyzer analyzer, int numberOf } OUTPUT.println("Total analysis time: " + totalAnalysisTime + " ms\n\n"); - File directory = new File("BSN"); - if(!directory.exists()) - directory.mkdir(); + storeAnalysis(analysis, analyzer, "BSN", "variableStore.add"); - for(String i : analysis.keySet()){ - analyzer.getJadd().dumpADD(i, analysis.get(i),"BSN/" + i + ".add"); - } - - analyzer.getJadd().writeVariableStore("variableStore.add"); - - } - - private static String getFmFileName(int numberOfEvolutions){ - return ("fmBSN" + String.valueOf(numberOfEvolutions) + ".txt"); - //return ("tank" + String.valueOf(numberOfEvolutions) + ".txt"); - } - - private static String getUmlFileName(int numberOfEvolutions){ - return ("bmBSN" + String.valueOf(numberOfEvolutions) + ".xml"); - //return ("tank" + String.valueOf(numberOfEvolutions) + ".xml"); } private static String getFragmentId(int numberOfEvolutions){ @@ -581,4 +547,27 @@ public static Map getPreviousAnalysis(JADD jadd, String directoryNa return previousAnalysis; } + + public static void storeAnalysis(Map analysis, Analyzer analyzer, String directoryName, String variableStoreName){ + File directory = new File(directoryName); + if(!directory.exists()) + directory.mkdir(); + + //deleting ADDs from others analysis + File previousADDs[] = directory.listFiles(); + for(File file : previousADDs){ + file.delete(); + } + + //storing ADDs and variables + for(String i : analysis.keySet()){ + analyzer.getJadd().dumpADD(i, analysis.get(i),directoryName + "/" + i + ".add"); + } + + analyzer.getJadd().writeVariableStore(variableStoreName); + } + + public enum reusePreviousAnalysis{ + REUSE_PREVIOUS_ANALYSIS, NOT_REUSE_PREVIOUS_ANALYSIS; + } }