Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/**
* Copyright (C) 2010-2018 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see .
*/
package org.evosuite.statistics;
import org.evosuite.ClientProcess;
import org.evosuite.Properties;
import org.evosuite.coverage.ambiguity.AmbiguityCoverageSuiteFitness;
import org.evosuite.coverage.branch.BranchCoverageSuiteFitness;
import org.evosuite.coverage.branch.OnlyBranchCoverageSuiteFitness;
import org.evosuite.coverage.cbranch.CBranchSuiteFitness;
import org.evosuite.coverage.exception.ExceptionCoverageSuiteFitness;
import org.evosuite.coverage.io.input.InputCoverageSuiteFitness;
import org.evosuite.coverage.line.LineCoverageSuiteFitness;
import org.evosuite.coverage.method.MethodCoverageSuiteFitness;
import org.evosuite.coverage.method.MethodNoExceptionCoverageSuiteFitness;
import org.evosuite.coverage.method.MethodTraceCoverageSuiteFitness;
import org.evosuite.coverage.mutation.OnlyMutationSuiteFitness;
import org.evosuite.coverage.mutation.WeakMutationSuiteFitness;
import org.evosuite.coverage.io.output.OutputCoverageSuiteFitness;
import org.evosuite.coverage.rho.RhoCoverageSuiteFitness;
import org.evosuite.ga.Chromosome;
import org.evosuite.result.TestGenerationResult;
import org.evosuite.rmi.MasterServices;
import org.evosuite.rmi.service.ClientState;
import org.evosuite.rmi.service.ClientStateInformation;
import org.evosuite.runtime.util.AtMostOnceLogger;
import org.evosuite.statistics.backend.*;
import org.evosuite.testsuite.TestSuiteChromosome;
import org.evosuite.utils.Listener;
import org.evosuite.utils.LoggingUtils;
import org.evosuite.utils.Randomness;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
/**
* A singleton of SearchStatistics collects all the data values reported by a single client node.
*
* @author gordon
*
*/
public class SearchStatistics implements Listener{
private static final long serialVersionUID = -1859683466333302151L;
/** Singleton instance */
private static Map instances = new LinkedHashMap();
private static final Logger logger = LoggerFactory.getLogger(SearchStatistics.class);
/** Map of client id to best individual received from that client so far */
private TestSuiteChromosome bestIndividual = null;
/** Backend used to output the data */
private StatisticsBackend backend = null;
/** Output variables and their values */
private Map> outputVariables = new TreeMap>();
/** Variable factories to extract output variables from chromosomes */
private Map> variableFactories = new TreeMap>();
/** Variable factories to extract sequence variables */
private Map> sequenceOutputVariableFactories = new TreeMap>();
/** Keep track of how far EvoSuite progressed */
private ClientState currentState = ClientState.INITIALIZATION;
private long currentStateStarted = System.currentTimeMillis();
private long searchStartTime = 0L;
private long startTime = System.currentTimeMillis();
private List> results = new ArrayList>();
private SearchStatistics() {
switch(Properties.STATISTICS_BACKEND) {
case CONSOLE:
backend = new ConsoleStatisticsBackend();
break;
case CSV:
backend = new CSVStatisticsBackend();
break;
case HTML:
backend = new HTMLStatisticsBackend();
break;
case DEBUG:
backend = new DebugStatisticsBackend();
break;
case NONE:
default:
// If no backend is specified, there is no output
backend = null;
}
initFactories();
setOutputVariable(RuntimeVariable.Random_Seed, Randomness.getSeed());
sequenceOutputVariableFactories.put(RuntimeVariable.CoverageTimeline.name(), new CoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.FitnessTimeline.name(), new FitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.SizeTimeline.name(), new SizeSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.LengthTimeline.name(), new LengthSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.TotalExceptionsTimeline.name(), new TotalExceptionsSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.IBranchGoalsTimeline.name(), new IBranchGoalsSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.BranchCoverageTimeline.name(), new BranchCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.OnlyBranchFitnessTimeline.name(), new OnlyBranchFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.OnlyBranchCoverageTimeline.name(), new OnlyBranchCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.CBranchFitnessTimeline.name(), new CBranchFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.CBranchCoverageTimeline.name(), new CBranchCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.MethodTraceFitnessTimeline.name(), new MethodTraceFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.MethodTraceCoverageTimeline.name(), new MethodTraceCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.MethodFitnessTimeline.name(), new MethodFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.MethodCoverageTimeline.name(), new MethodCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.MethodNoExceptionFitnessTimeline.name(), new MethodNoExceptionFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.MethodNoExceptionCoverageTimeline.name(), new MethodNoExceptionCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.RhoScoreTimeline.name(), new RhoFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.AmbiguityScoreTimeline.name(), new AmbiguityFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.LineFitnessTimeline.name(), new LineFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.LineCoverageTimeline.name(), new LineCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.OutputFitnessTimeline.name(), new OutputFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.OutputCoverageTimeline.name(), new OutputCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.InputFitnessTimeline.name(), new InputFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.InputCoverageTimeline.name(), new InputCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.ExceptionFitnessTimeline.name(), new ExceptionFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.ExceptionCoverageTimeline.name(), new ExceptionCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.WeakMutationCoverageTimeline.name(), new WeakMutationCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.OnlyMutationFitnessTimeline.name(), new OnlyMutationFitnessSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.OnlyMutationCoverageTimeline.name(), new OnlyMutationCoverageSequenceOutputVariableFactory());
sequenceOutputVariableFactories.put(RuntimeVariable.DiversityTimeline.name(), new DiversitySequenceOutputVariableFactory());
// sequenceOutputVariableFactories.put("Generation_History", new GenerationSequenceOutputVariableFactory());
if(MasterServices.getInstance().getMasterNode() != null)
MasterServices.getInstance().getMasterNode().addListener(this);
}
public static SearchStatistics getInstance() {
return getInstance(ClientProcess.DEFAULT_CLIENT_NAME);
}
public static SearchStatistics getInstance(String rmiClientIdentifier) {
SearchStatistics instance = instances.get(rmiClientIdentifier);
if (instance == null) {
instance = new SearchStatistics();
instances.put(rmiClientIdentifier, instance);
}
return instance;
}
public static void clearInstance() {
clearInstance(ClientProcess.DEFAULT_CLIENT_NAME);
}
public static void clearInstance(String rmiClientIdentifier) {
instances.remove(rmiClientIdentifier);
}
/**
* This method is called when a new individual is sent from a client.
* The individual represents the best individual of the current generation.
*
* @param individual best individual of current generation
*/
public void currentIndividual(Chromosome individual) {
if(backend == null)
return;
if(!(individual instanceof TestSuiteChromosome)) {
AtMostOnceLogger.warn(logger, "searchStatistics expected a TestSuiteChromosome");
return;
}
logger.debug("Received individual");
bestIndividual = (TestSuiteChromosome) individual;
for(ChromosomeOutputVariableFactory> v : variableFactories.values()) {
setOutputVariable(v.getVariable((TestSuiteChromosome) individual));
}
for(SequenceOutputVariableFactory> v : sequenceOutputVariableFactories.values()) {
v.update((TestSuiteChromosome) individual);
}
}
/**
* Set an output variable to a value directly
*
* @param variable
* @param value
*/
public void setOutputVariable(RuntimeVariable variable, Object value) {
setOutputVariable(new OutputVariable