public static LocalSearchBudget getInstance() { if(instance == null) instance = new LocalSearchBudget(); return instance; }
/** * Add new fitness function (i.e., for new mutation) * * @param function * a {@link org.evosuite.ga.FitnessFunction} object. */ public void addFitnessFunction(FitnessFunction<T> function) { fitnessFunctions.add(function); localObjective.addFitnessFunction(function); }
private boolean removeCharacters(LocalSearchObjective<TestChromosome> objective, TestChromosome test, StringPrimitiveStatement p, int statement) { boolean improvement = false; backup(test, p); for (int i = oldValue.length() - 1; i >= 0; i--) { String newString = oldValue.substring(0, i) + oldValue.substring(i + 1); p.setValue(newString); logger.info(" " + i + " " + oldValue + "/" + oldValue.length() + " -> " + newString + "/" + newString.length()); if (objective.hasImproved(test)) { logger.info("Has improved"); backup(test, p); improvement = true; } else { logger.info("Has not improved"); restore(test, p); } if(LocalSearchBudget.getInstance().isFinished()) break; } return improvement; }
private void runArrayExample(int length, double expectedFitness) throws ClassNotFoundException, ConstructionFailedException, NoSuchMethodException, SecurityException { TestCase test = getArrayTest(length); System.out.println("Test: "+test.toCode()); TestSuiteChromosome suite = new TestSuiteChromosome(); BranchCoverageSuiteFitness fitness = new BranchCoverageSuiteFitness(); BranchCoverageMap.getInstance().searchStarted(null); assertEquals(4.0, fitness.getFitness(suite), 0.1F); suite.addTest(test); //assertEquals(1.0, fitness.getFitness(suite), 0.1F); TestSuiteLocalSearch localSearch = TestSuiteLocalSearch.selectTestSuiteLocalSearch(); LocalSearchObjective<TestSuiteChromosome> localObjective = new DefaultLocalSearchObjective<TestSuiteChromosome>(); localObjective.addFitnessFunction(fitness); localSearch.doSearch(suite, localObjective); System.out.println("Fitness: "+fitness.getFitness(suite)); System.out.println("Test suite: "+suite); assertEquals(expectedFitness, fitness.getFitness(suite), 0.1F); BranchCoverageMap.getInstance().searchFinished(null); }
private boolean removeCharacters(LocalSearchObjective<TestChromosome> objective, TestChromosome test, StringPrimitiveStatement p, int statement) { boolean improvement = false; backup(test, p); for (int i = oldValue.length() - 1; i >= 0; i--) { String newString = oldValue.substring(0, i) + oldValue.substring(i + 1); p.setValue(newString); logger.info(" " + i + " " + oldValue + "/" + oldValue.length() + " -> " + newString + "/" + newString.length()); if (objective.hasImproved(test)) { logger.info("Has improved"); backup(test, p); improvement = true; } else { logger.info("Has not improved"); restore(test, p); } } return improvement; }
private double getFitness(TestSuiteChromosome suite) { for (FitnessFunction<? extends Chromosome> ff : objective.getFitnessFunctions()) { TestSuiteFitnessFunction tff = (TestSuiteFitnessFunction) ff; tff.getFitness(suite); } return suite.getFitness(); }
/** * Indicates if the fitness of the individual has improved with respected to * parameter <code>fitnessBefore</code> * * @param fitnessBefore * the previous fitness of the individual * @param individual * the individual * @param objective * the local search objective * @return true if fitness improved, false otherwise */ private boolean hasImproved(double fitnessBefore, TestSuiteChromosome individual, LocalSearchObjective<TestSuiteChromosome> objective) { return objective.isMaximizationObjective() ? fitnessBefore < individual.getFitness() : fitnessBefore > individual.getFitness(); }
/** * Constructor * * @param factory * a {@link org.evosuite.ga.ChromosomeFactory} object. */ public GeneticAlgorithm(ChromosomeFactory<T> factory) { chromosomeFactory = factory; addStoppingCondition(new MaxGenerationStoppingCondition()); if (Properties.LOCAL_SEARCH_RATE > 0) addListener(LocalSearchBudget.getInstance()); // addBloatControl(new MaxSizeBloatControl()); }
private void runFloatExample(float x, float y) throws ClassNotFoundException, ConstructionFailedException, NoSuchMethodException, SecurityException { TestCase test = getFloatTest(x, y); TestSuiteChromosome suite = new TestSuiteChromosome(); BranchCoverageSuiteFitness fitness = new BranchCoverageSuiteFitness(); BranchCoverageMap.getInstance().searchStarted(null); assertEquals(4.0, fitness.getFitness(suite), 0.1F); suite.addTest(test); assertEquals(1.0, fitness.getFitness(suite), 0.1F); TestSuiteLocalSearch localSearch = TestSuiteLocalSearch.selectTestSuiteLocalSearch(); LocalSearchObjective<TestSuiteChromosome> localObjective = new DefaultLocalSearchObjective<TestSuiteChromosome>(); localObjective.addFitnessFunction(fitness); localSearch.doSearch(suite, localObjective); System.out.println("Fitness: "+fitness.getFitness(suite)); System.out.println("Test suite: "+suite); assertEquals(0.0, fitness.getFitness(suite), 0.1F); BranchCoverageMap.getInstance().searchFinished(null); }
char[] characters = oldValue.toCharArray(); for (char replacement = 9; replacement < 128; replacement++) { if(LocalSearchBudget.getInstance().isFinished()) return improvement; if (objective.hasImproved(test)) { backup(test, p);
private boolean iterate(long delta, LocalSearchObjective<TestChromosome> objective, TestChromosome test, NumericalPrimitiveStatement<T> p, int statement) { boolean improvement = false; T oldValue = p.getValue(); ExecutionResult oldResult = test.getLastExecutionResult(); p.increment(delta); logger.info("Trying increment " + delta + " of " + p.getCode()); while (objective.hasImproved(test)) { oldValue = p.getValue(); oldResult = test.getLastExecutionResult(); improvement = true; delta = 2 * delta; p.increment(delta); logger.info("Trying increment " + delta + " of " + p.getCode()); } logger.info("No improvement on " + p.getCode()); p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); logger.info("Final value of this iteration: " + p.getValue()); return improvement; }
/** * Applies DSE on the test case of the suite * * @param suite * @param testIndex * @param test * @param objective * @return */ private boolean applyDSE(TestSuiteChromosome suite, int testIndex, TestChromosome test, LocalSearchObjective<TestSuiteChromosome> objective) { TestSuiteLocalSearchObjective testSuiteObject = TestSuiteLocalSearchObjective .buildNewTestSuiteLocalSearchObjective(objective.getFitnessFunctions(), suite, testIndex); DSETestCaseLocalSearch dseTestCaseLocalSearch = new DSETestCaseLocalSearch(suite); boolean improved = dseTestCaseLocalSearch.doSearch(test, testSuiteObject); return improved; }
private void runDoubleExample(double x, double y) throws ClassNotFoundException, ConstructionFailedException, NoSuchMethodException, SecurityException { TestCase test = getDoubleTest(x, y); TestSuiteChromosome suite = new TestSuiteChromosome(); BranchCoverageSuiteFitness fitness = new BranchCoverageSuiteFitness(); BranchCoverageMap.getInstance().searchStarted(null); assertEquals(4.0, fitness.getFitness(suite), 0.1F); suite.addTest(test); assertEquals(1.0, fitness.getFitness(suite), 0.1F); TestSuiteLocalSearch localSearch = TestSuiteLocalSearch.selectTestSuiteLocalSearch(); LocalSearchObjective<TestSuiteChromosome> localObjective = new DefaultLocalSearchObjective<TestSuiteChromosome>(); localObjective.addFitnessFunction(fitness); localSearch.doSearch(suite, localObjective); System.out.println("Fitness: "+fitness.getFitness(suite)); System.out.println("Test suite: "+suite); assertEquals(0.0, fitness.getFitness(suite), 0.1F); BranchCoverageMap.getInstance().searchFinished(null); }
char[] characters = Arrays.copyOf(oldValue.toCharArray(), position + 1); for (char replacement = 9; replacement < 128; replacement++) { if(LocalSearchBudget.getInstance().isFinished()) return improvement; if (objective.hasImproved(test)) { backup(test, p); improvement = true; char[] characters = (" " + oldValue).toCharArray(); for (char replacement = 9; replacement < 128; replacement++) { if(LocalSearchBudget.getInstance().isFinished()) return improvement; if (objective.hasImproved(test)) { backup(test, p); improvement = true;
private boolean iterate(double delta, double factor, LocalSearchObjective<TestChromosome> objective, TestChromosome test, NumericalPrimitiveStatement<T> p, int statement) { boolean improvement = false; T oldValue = p.getValue(); ExecutionResult oldResult = test.getLastExecutionResult(); logger.info("Trying increment " + delta + " of " + p.getCode()); p.increment(delta); while (objective.hasImproved(test)) { oldValue = p.getValue(); oldResult = test.getLastExecutionResult(); test.setChanged(false); improvement = true; delta = factor * delta; //if (delta > 1) // return improvement; logger.info("Trying increment " + delta + " of " + p.getCode()); p.increment(delta); } p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); return improvement; } }
/** * Applies AVM on the test case in the suite * * @param suite * @param testIndex * @param test * @param localSearchObjective * @return */ private boolean applyAVM(TestSuiteChromosome suite, int testIndex, TestChromosome test, LocalSearchObjective<TestSuiteChromosome> objective) { logger.debug("Local search on test " + testIndex + ", current fitness: " + suite.getFitness()); final List<FitnessFunction<? extends Chromosome>> fitnessFunctions = objective.getFitnessFunctions(); TestSuiteLocalSearchObjective testCaseLocalSearchObjective = TestSuiteLocalSearchObjective .buildNewTestSuiteLocalSearchObjective(fitnessFunctions, suite, testIndex); AVMTestCaseLocalSearch testCaselocalSearch = new AVMTestCaseLocalSearch(); boolean improved = testCaselocalSearch.doSearch(test, testCaseLocalSearchObjective); return improved; }
private void runIntExample(int x, int y) throws ClassNotFoundException, ConstructionFailedException, NoSuchMethodException, SecurityException { TestCase test = getIntTest(x, y); TestSuiteChromosome suite = new TestSuiteChromosome(); BranchCoverageSuiteFitness fitness = new BranchCoverageSuiteFitness(); BranchCoverageMap.getInstance().searchStarted(null); assertEquals(4.0, fitness.getFitness(suite), 0.1F); suite.addTest(test); assertEquals(1.0, fitness.getFitness(suite), 0.1F); TestSuiteLocalSearch localSearch = TestSuiteLocalSearch.selectTestSuiteLocalSearch(); LocalSearchObjective<TestSuiteChromosome> localObjective = new DefaultLocalSearchObjective<TestSuiteChromosome>(); localObjective.addFitnessFunction(fitness); localSearch.doSearch(suite, localObjective); System.out.println("Fitness: "+fitness.getFitness(suite)); System.out.println("Test suite: "+suite); assertEquals(0.0, fitness.getFitness(suite), 0.1F); BranchCoverageMap.getInstance().searchFinished(null); }
/** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public boolean doSearch(TestChromosome test, int statement, LocalSearchObjective<TestChromosome> objective) { PrimitiveStatement<Boolean> p = (PrimitiveStatement<Boolean>) test.getTestCase().getStatement(statement); ExecutionResult oldResult = test.getLastExecutionResult(); oldValue = p.getValue(); p.setValue(!oldValue); if (!objective.hasImproved(test)) { // Restore original p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); return false; } else { return true; } }
/** {@inheritDoc} */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public boolean doSearch(TestChromosome test, int statement, LocalSearchObjective<TestChromosome> objective) { EnumPrimitiveStatement p = (EnumPrimitiveStatement) test.getTestCase().getStatement(statement); ExecutionResult oldResult = test.getLastExecutionResult(); oldValue = p.getValue(); for (Object value : p.getEnumValues()) { p.setValue(value); if (!objective.hasImproved(test)) { // Restore original p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); } else { logger.debug("Finished local search with result " + p.getCode()); return true; } } return false; }
@Override public boolean doSearch(TestChromosome test, int statement, LocalSearchObjective<TestChromosome> objective) { NullStatement nullStatement = (NullStatement) test.getTestCase().getStatement(statement); TestCase newTest = test.getTestCase(); TestCase oldTest = newTest.clone(); ExecutionResult oldResult = test.getLastExecutionResult(); //double oldFitness = test.getFitness(); Map<FitnessFunction<?>, Double> oldFitnesses = test.getFitnessValues(); Map<FitnessFunction<?>, Double> oldLastFitnesses = test.getPreviousFitnessValues(); try { TestFactory.getInstance().attemptGeneration(newTest, nullStatement.getReturnType(), statement); if (!objective.hasImproved(test)) { test.setTestCase(oldTest); test.setLastExecutionResult(oldResult); //test.setFitness(oldFitness); test.setFitnessValues(oldFitnesses); test.setPreviousFitnessValues(oldLastFitnesses); } else { return true; } } catch (ConstructionFailedException e) { // If we can't construct it, then ignore } return false; }