All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.evosuite.testcase.execution.ExecutionTrace Maven / Gradle / Ivy

The newest version!
/**
 * 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.testcase.execution;

import java.util.*;

import org.evosuite.coverage.dataflow.DefUse;
import org.evosuite.setup.CallContext;
import org.evosuite.testcase.execution.ExecutionTraceImpl.BranchEval;

/**
 * This interface defines the trace data that is collected during execution.
 * 
 * @author Gordon Fraser
 */
public interface ExecutionTrace {

	/**
	 * Add branch to currently active method call
	 * 
	 * @param branch
	 *            a int.
	 * @param true_distance
	 *            a double.
	 * @param false_distance
	 *            a double.
	 * @param bytecode_id
	 *            a int.
	 */
	public void branchPassed(int branch, int bytecode_id, double true_distance, double false_distance);

	/**
	 * Retrieve minimum branch distance to false branch
	 * 
	 * @param branchId
	 *            a int.
	 * @return a double.
	 */
	public double getFalseDistance(int branchId);

	/**
	 * Retrieve minimum branch distance to true branch
	 * 
	 * @param branchId
	 *            a int.
	 * @return a double.
	 */
	public double getTrueDistance(int branchId);

	/**
	 * Retrieve set of branches that evaluated to true
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredTrueBranches();

	/**
	 * Retrieve set of branches that evaluated to false
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredFalseBranches();

	/**
	 * Retrieve set of branches that were executed
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredPredicates();

	/**
	 * Retrieve set of definitions that were executed
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredDefinitions();

	/**
	 * Retrieve execution counts for branches
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map getPredicateExecutionCount();

	/**
	 * Retrieve execution counts for methods
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map getMethodExecutionCount();

	/**
	 * Retrieve execution counts for definitions
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map getDefinitionExecutionCount();

	/**
	 * Determine if a branch has a true distance stored
	 * 
	 * @param predicateId
	 *            a int.
	 * @return a boolean.
	 */
	public boolean hasTrueDistance(int predicateId);

	/**
	 * Determine if a branch has a false distance stored
	 * 
	 * @param predicateId
	 *            a int.
	 * @return a boolean.
	 */
	public boolean hasFalseDistance(int predicateId);

	/**
	 * Retrieve map of all minimal true distances
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map getTrueDistances();

	/**
	 * Retrieve map of all minimal false distances
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map getFalseDistances();

	/**
	 * Retrieve map of all minimal true distances
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map> getTrueDistancesContext();

	/**
	 * Retrieve map of all minimal false distances
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map> getFalseDistancesContext();

	/**
	 * Retrieve map of all context method counts
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map> getMethodContextCount();

	/**
	 * Retrieve number of predicate executions
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map> getPredicateContextExecutionCount();

	/**
	 * Retrieve the set of line numbers covered
	 * 
	 * @param className
	 *            a {@link java.lang.String} object.
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredLines(String className);

	/**
	 * Retrieve the set of line numbers covered of
	 * {@link org.evosuite.Properties.TARGET_CLASS} class
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredLines();

	/**
	 * Retrieve the set of all line numbers covered
	 * 
	 * @return
	 */
	public Set getAllCoveredLines();

	/**
	 * Retrieve detailed line coverage count
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map>> getCoverageData();

	/**
	 * Retrieve return value data
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map>> getReturnData();

	/**
	 * Retrieve data definitions
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map>> getDefinitionData();

	/**
	 * Retrieve data definitions
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map>> getDefinitionDataObjects();

	/**
	 * Retrieve data uses
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map>> getUseData();

	/**
	 * Retrieve data uses
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map>> getUseDataObjects();

	/**
	 * Retrieve the data definitions for a given variable
	 * 
	 * @param variableName
	 *            a {@link java.lang.String} object.
	 * @return a {@link java.util.Map} object.
	 */
	public Map> getPassedDefinitions(String variableName);

	/**
	 * Retrieve the data uses for a given variable
	 * 
	 * @param variableName
	 *            a {@link java.lang.String} object.
	 * @return a {@link java.util.Map} object.
	 */
	public Map> getPassedUses(String variableName);

	/**
	 * Retrieve the exception thrown in this trace
	 * 
	 * @return a {@link java.lang.Throwable} object.
	 */
	public Throwable getExplicitException();

	/**
	 * Retrieve all traced method calls
	 * 
	 * @return a {@link java.util.List} object.
	 */
	public List getMethodCalls();

	/**
	 * Retrieve the names of all called methods
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredMethods();

	/**
	 * Retrieve the names of all covered branchless methods
	 *
	 * @return a {@link java.util.Set} object.
	 */
	public Set getCoveredBranchlessMethods();

	/**
	 * Retrieve the minimum infection distance for a mutant
	 * 
	 * @param mutationId
	 *            a int.
	 * @return a double.
	 */
	public double getMutationDistance(int mutationId);

	/**
	 * Retrieve all minimal infection distances
	 * 
	 * @return a {@link java.util.Map} object.
	 */
	public Map getMutationDistances();

	/**
	 * Determine is a mutant was executed
	 * 
	 * @param mutationId
	 *            a int.
	 * @return a boolean.
	 */
	public boolean wasMutationTouched(int mutationId);

	/**
	 * Retrieve IDs of all executed mutants
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getTouchedMutants();

	/**
	 * Retrieve IDs of all executed mutants with an infection distance == 0.0
	 * 
	 * @return a {@link java.util.Set} object.
	 */
	public Set getInfectedMutants();

	/**
	 * Reset to 0
	 */
	public void clear();

	/**
	 * Adds Definition-Use-Coverage trace information for the given definition.
	 * 
	 * Registers the given caller-Object Traces the occurrence of the given
	 * definition in the passedDefs-field Sets the given definition as the
	 * currently active one for the definitionVariable in the
	 * activeDefinitions-field Adds fake trace information to the currently
	 * active MethodCall in this.stack
	 * 
	 * @param caller
	 *            a {@link java.lang.Object} object.
	 * @param defID
	 *            a int.
	 */
	public void definitionPassed(Object object, Object caller, int defID);

	/**
	 * Add a new method call to stack
	 * 
	 * @param className
	 *            a {@link java.lang.String} object.
	 * @param methodName
	 *            a {@link java.lang.String} object.
	 * @param caller
	 *            a {@link java.lang.Object} object.
	 */
	public void enteredMethod(String className, String methodName, Object caller);

	/**
	 * Pop last method call from stack
	 * 
	 * @param classname
	 *            a {@link java.lang.String} object.
	 * @param methodname
	 *            a {@link java.lang.String} object.
	 */
	public void exitMethod(String classname, String methodname);

	/**
	 * Finish all method calls. This is called when a method is not exited
	 * regularly, but through an exception
	 */
	public void finishCalls();

	/**
	 * Returns a copy of this trace where all MethodCall-information traced from
	 * objects other then the one identified by the given objectID is removed
	 * from the finished_calls-field
	 * 
	 * WARNING: this will not affect this.true_distances and other fields of
	 * ExecutionTrace this only affects the finished_calls field (which should
	 * suffice for BranchCoverageFitness-calculation)
	 * 
	 * @param objectId
	 *            a int.
	 * @return a {@link org.evosuite.testcase.execution.ExecutionTrace} object.
	 */
	public ExecutionTrace getTraceForObject(int objectId);

	/**
	 * Returns a copy of this trace where all MethodCall-information associated
	 * with duCounters outside the range of the given duCounter-Start and -End
	 * is removed from the finished_calls-traces
	 * 
	 * finished_calls without any point in the trace at which the given
	 * duCounter range is hit are removed completely
	 * 
	 * Also traces for methods other then the one that holds the given targetDU
	 * are removed as well as trace information that would pass the branch of
	 * the given targetDU If wantToCoverTargetDU is false instead those
	 * targetDUBranch information is removed that would pass the alternative
	 * branch of targetDU
	 * 
	 * The latter is because this method only gets called when the given
	 * targetDU was not active in the given duCounter-range if and only if
	 * wantToCoverTargetDU is set, and since useFitness calculation is on branch
	 * level and the branch of the targetDU can be passed before the targetDU is
	 * passed this can lead to a flawed branchFitness.
	 * 
	 * 
	 * WARNING: this will not affect this.true_distances and other fields of
	 * ExecutionTrace this only affects the finished_calls field (which should
	 * suffice for BranchCoverageFitness-calculation)
	 * 
	 * @param targetDU
	 *            a {@link org.evosuite.coverage.dataflow.DefUse} object.
	 * @param wantToCoverTargetDU
	 *            a boolean.
	 * @param duCounterStart
	 *            a int.
	 * @param duCounterEnd
	 *            a int.
	 * @return a {@link org.evosuite.testcase.execution.ExecutionTrace} object.
	 */
	public ExecutionTrace getTraceInDUCounterRange(DefUse targetDU, boolean wantToCoverTargetDU, int duCounterStart,
			int duCounterEnd);

	/**
	 * Add line to currently active method call
	 * 
	 * @param line
	 *            a int.
	 * @param className
	 *            a {@link java.lang.String} object.
	 * @param methodName
	 *            a {@link java.lang.String} object.
	 */
	public void linePassed(String className, String methodName, int line);

	/**
	 * Record a mutant execution
	 * 
	 * @param mutationId
	 *            a int.
	 * @param distance
	 *            a double.
	 */
	public void mutationPassed(int mutationId, double distance);

	/**
	 * Record a return value
	 * 
	 * @param className
	 *            a {@link java.lang.String} object.
	 * @param methodName
	 *            a {@link java.lang.String} object.
	 * @param value
	 *            a int.
	 */
	public void returnValue(String className, String methodName, int value);

	/**
	 * Returns a String containing the information in passedDefs and passedUses
	 * 
	 * Used for Definition-Use-Coverage-debugging
	 * 
	 * @return a {@link java.lang.String} object.
	 */
	public String toDefUseTraceInformation();

	/**
	 * Returns a String containing the information in passedDefs and passedUses
	 * filtered for a specific variable
	 * 
	 * Used for Definition-Use-Coverage-debugging
	 * 
	 * @param targetVar
	 *            a {@link java.lang.String} object.
	 * @return a {@link java.lang.String} object.
	 */
	public String toDefUseTraceInformation(String targetVar);

	/**
	 * Returns a String containing the information in passedDefs and passedUses
	 * for the given variable
	 * 
	 * Used for Definition-Use-Coverage-debugging
	 * 
	 * @param var
	 *            a {@link java.lang.String} object.
	 * @param objectId
	 *            a int.
	 * @return a {@link java.lang.String} object.
	 */
	public String toDefUseTraceInformation(String var, int objectId);

	/**
	 * Adds Definition-Use-Coverage trace information for the given use.
	 * 
	 * Registers the given caller-Object Traces the occurrence of the given use
	 * in the passedUses-field
	 * 
	 * @param caller
	 *            a {@link java.lang.Object} object.
	 * @param useID
	 *            a int.
	 */
	public void usePassed(Object object, Object caller, int useID);

	/**
	 * Set the exception thrown in this trace
	 * 
	 * @param explicitException
	 *            a {@link java.lang.Throwable} object.
	 */
	public void setExplicitException(Throwable explicitException);

	/**
	 * Create a lazy copy
	 * 
	 * @return a {@link org.evosuite.testcase.execution.ExecutionTrace} object.
	 */
	public ExecutionTrace lazyClone();

	/**
	 * 

* getBranchesTrace *

* * @return a {@link java.util.List} object. */ List getBranchesTrace(); /** *

* getFalseDistancesSum *

* * @return a {@link java.util.Map} object. */ Map getFalseDistancesSum(); /** *

* getTrueDistancesSum *

* * @return a {@link java.util.Map} object. */ Map getTrueDistancesSum(); /** *

* getPassedUses *

* * @return a {@link java.util.Map} object. */ Map>> getPassedUses(); /** * Retrieve the set of all uses by id * * @return */ public Set getPassedUseIDs(); /** * Retrieve the set of all definitions by id * * @return */ @Deprecated public Set getPassedDefIDs(); /** * Record a PUTSTATIC statement * * @param classNameWithDots * @param fieldName */ public void putStaticPassed(String classNameWithDots, String fieldName); /** * Record a GETSTATIC statement * * @param classNameWithDots * @param fieldName */ public void getStaticPassed(String classNameWithDots, String fieldName); /** * Retrieve a list of those classes that were affected by a PUTSTATIC. * * @return */ public Set getClassesWithStaticWrites(); /** * Retrieve a list of those classes that were affected by a GETSTATIC. * * @return */ public Set getClassesWithStaticReads(); /** * Logs that a was completed during this test execution * * @param classNameWithDots */ public void classInitialized(String classNameWithDots); /** * Returns the list (with no repetitions) following the order in which the * method was finished during this test execution * * @return */ public List getInitializedClasses(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy