Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions src/tool/Analyzer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand All @@ -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();
Expand Down Expand Up @@ -263,7 +260,7 @@ public void generateDotFile(ADD familyReliability, String outputFile) {
public FeatureFamilyBasedAnalyzer getfeatureFamilyBasedAnalyzerImpl(){
return this.featureFamilyBasedAnalyzerImpl;
}

public JADD getJadd() {
return this.jadd;
}
Expand Down
20 changes: 0 additions & 20 deletions src/tool/analyzers/strategies/FeatureFamilyBasedAnalyzer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
}

Expand Down
119 changes: 54 additions & 65 deletions src/ui/CommandLineInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Collection<String>> targetConfigurations = getTargetConfigurations(options, analyzer);

memoryCollector.takeSnapshot("before evaluation");
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -252,35 +241,32 @@ private static IReliabilityAnalysisResults evaluateReliability(BiFunction<RDGNod
* @param options
* @return
*/
private static Analyzer makeAnalyzer(Options options, int i) {
File featureModelFile = new File(options.getFeatureModelFilePath());
String featureModel = readFeatureModel(featureModelFile);

String paramPath = options.getParamPath();
Analyzer analyzer = new Analyzer(featureModel,
paramPath,
timeCollector,
formulaCollector,
modelCollector,
i);
analyzer.setConcurrencyStrategy(options.getConcurrencyStrategy());
return analyzer;
}

private static Analyzer makeAnalyzer(Options options, int i, boolean evol) {
File featureModelFile = new File(options.getFeatureModelFilePath());
String featureModel = readFeatureModel(featureModelFile);

String paramPath = options.getParamPath();
Analyzer analyzer = new Analyzer(featureModel,
paramPath,
timeCollector,
formulaCollector,
modelCollector,
i,
evol);
analyzer.setConcurrencyStrategy(options.getConcurrencyStrategy());
return analyzer;
private static Analyzer makeAnalyzer(Options options, int i, reusePreviousAnalysis evolvecase) {
File featureModelFile = new File(options.getFeatureModelFilePath());
String featureModel = readFeatureModel(featureModelFile);

String paramPath = options.getParamPath();
if(evolvecase == reusePreviousAnalysis.REUSE_PREVIOUS_ANALYSIS){
Analyzer analyzer = new Analyzer(featureModel,
paramPath,
timeCollector,
formulaCollector,
modelCollector,
i,
true);
analyzer.setConcurrencyStrategy(options.getConcurrencyStrategy());
return analyzer;
}
else{
Analyzer analyzer = new Analyzer(featureModel,
paramPath,
timeCollector,
formulaCollector,
modelCollector,
i);
analyzer.setConcurrencyStrategy(options.getConcurrencyStrategy());
return analyzer;
}
}

/**
Expand Down Expand Up @@ -325,14 +311,12 @@ private static Stream<Collection<String>> getTargetConfigurations(Options option
private static void printAnalysisResults(Map<Boolean, List<Collection<String>>> splitConfigs, IReliabilityAnalysisResults familyReliability) {
OUTPUT.println("Configurations:");
OUTPUT.println("=========================================");
// String[] teste = {"ACC", "Temperature", "SQLite", "ECG", "TEMP", "Storage", "Oxygenation", "Monitoring"};
List<Collection<String>> validConfigs = splitConfigs.get(true);
// Ordered report
validConfigs.sort((c1, c2) -> c1.toString().compareTo(c2.toString()));
for (Collection<String> 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) {
Expand Down Expand Up @@ -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<Boolean, List<Collection<String>>> splitConfigs = getTargetConfigurations(options, analyzer)
.collect(Collectors.partitioningBy(analyzer::isValidConfiguration));
Expand All @@ -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){
Expand All @@ -581,4 +547,27 @@ public static Map<String, ADD> getPreviousAnalysis(JADD jadd, String directoryNa

return previousAnalysis;
}

public static void storeAnalysis(Map<String, ADD> 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;
}
}