Search in sources :

Example 6 with ControlFlowEdge

use of org.evosuite.graphs.cfg.ControlFlowEdge in project evosuite by EvoSuite.

the class ControlDependenceGraph method retrieveControlDependencies.

private Set<ControlDependency> retrieveControlDependencies(BasicBlock insBlock, Set<ControlFlowEdge> handled) {
    Set<ControlDependency> r = new LinkedHashSet<>();
    for (ControlFlowEdge e : incomingEdgesOf(insBlock)) {
        if (handled.contains(e))
            continue;
        handled.add(e);
        ControlDependency cd = e.getControlDependency();
        if (cd != null)
            r.add(cd);
        else {
            BasicBlock in = getEdgeSource(e);
            if (!in.equals(insBlock))
                r.addAll(retrieveControlDependencies(in, handled));
        }
    }
    return r;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ControlFlowEdge(org.evosuite.graphs.cfg.ControlFlowEdge) BasicBlock(org.evosuite.graphs.cfg.BasicBlock) ControlDependency(org.evosuite.graphs.cfg.ControlDependency)

Example 7 with ControlFlowEdge

use of org.evosuite.graphs.cfg.ControlFlowEdge in project evosuite by EvoSuite.

the class PrimePathInstrumentation method analyze.

/* (non-Javadoc)
	 * @see org.evosuite.cfg.MethodInstrumentation#analyze(org.objectweb.asm.tree.MethodNode, org.jgrapht.Graph, java.lang.String, java.lang.String, int)
	 */
/**
 * {@inheritDoc}
 */
@Override
public void analyze(ClassLoader classLoader, MethodNode mn, String className, String methodName, int access) {
    RawControlFlowGraph graph = GraphPool.getInstance(classLoader).getRawCFG(className, methodName);
    Queue<PrimePath> path_queue = new LinkedList<PrimePath>();
    for (BytecodeInstruction vertex : graph.vertexSet()) {
        if (graph.inDegreeOf(vertex) == 0) {
            PrimePath initial = new PrimePath(className, methodName);
            initial.append(vertex);
            path_queue.add(initial);
        }
    }
    while (!path_queue.isEmpty()) {
        PrimePath current = path_queue.poll();
        for (ControlFlowEdge edge : graph.outgoingEdgesOf(current.getLast())) {
            if (!current.contains(graph.getEdgeTarget(edge))) {
                PrimePath next = current.getAppended(graph.getEdgeTarget(edge));
                path_queue.add(next);
            }
        }
        if (current.getLast().isReturn() || current.getLast().isThrow()) {
            logger.warn("New path:");
            for (int i = 0; i < current.getSize(); i++) {
                if (current.get(i).isBranch() || current.get(i).isLabel())
                    logger.warn(" -> " + current.get(i));
            }
            logger.warn(current.toString());
            PrimePathPool.add(current);
        }
    }
    logger.info("Found " + PrimePathPool.getSize() + " prime paths");
}
Also used : ControlFlowEdge(org.evosuite.graphs.cfg.ControlFlowEdge) PrimePath(org.evosuite.coverage.path.PrimePath) BytecodeInstruction(org.evosuite.graphs.cfg.BytecodeInstruction) LinkedList(java.util.LinkedList) RawControlFlowGraph(org.evosuite.graphs.cfg.RawControlFlowGraph)

Example 8 with ControlFlowEdge

use of org.evosuite.graphs.cfg.ControlFlowEdge in project evosuite by EvoSuite.

the class LCSAJGraph method generate.

/**
 * <p>
 * generate
 * </p>
 *
 * @param file
 *            a {@link java.io.File} object.
 */
public void generate(File file) {
    if (fitnessGraph)
        System.out.println("Generating Graph for uncoverd LCSAJ No: " + lcsaj.getID() + " in " + lcsaj.getClassName() + "/" + lcsaj.getMethodName());
    else
        System.out.println("Generating Graph for LCSAJ No: " + lcsaj.getID() + " in " + lcsaj.getClassName() + "/" + lcsaj.getMethodName());
    Graph lcsaj_graph = new Graph();
    ArrayList<Node> allNodes = new ArrayList<Node>();
    for (BytecodeInstruction b : graph.vertexSet()) {
        Node n = new Node().attr("label", b.toString());
        lcsaj_graph = lcsaj_graph.node(n);
        allNodes.add(n);
    }
    for (ControlFlowEdge edge : graph.edgeSet()) for (Node source : allNodes) for (Node target : allNodes) {
        BytecodeInstruction b1 = graph.getEdgeSource(edge);
        BytecodeInstruction b2 = graph.getEdgeTarget(edge);
        if (source.attr("label").equals(b1.toString()) && target.attr("label").equals(b2.toString())) {
            if (b1.isBranch()) {
                Edge newEdge = new Edge(source, target).attr("label", edge.toString());
                lcsaj_graph.edge(newEdge);
            } else
                lcsaj_graph.edge(source, target);
        }
    }
    BytecodeInstruction l1 = lcsaj.getStartBranch().getInstruction();
    BytecodeInstruction l2 = lcsaj.getLastBranch().getInstruction();
    if (fitnessGraph)
        l2 = lcsaj.getBranch(lcsaj.getdPositionReached()).getInstruction();
    for (Node source : allNodes) for (Node target : allNodes) {
        if (source.attr("label").equals(l1.toString()) && target.attr("label").equals(l2.toString())) {
            if (!fitnessGraph || lcsaj.getdPositionReached() == lcsaj.length() - 1) {
                Edge newEdge = new Edge(source, target).attr("color", "green").attr("label", "LCSAJ No." + lcsaj.getID());
                lcsaj_graph.edge(newEdge);
            } else {
                Edge newEdge = new Edge(source, target).attr("color", "red").attr("label", " LCSAJ No." + lcsaj.getID() + ". Covered till:");
                lcsaj_graph.edge(newEdge);
            }
        }
    }
    ArrayList<String> commandos = new ArrayList<String>();
    commandos.add("dot");
    try {
        lcsaj_graph.generateTo(commandos, file);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Also used : Graph(org.kohsuke.graphviz.Graph) RawControlFlowGraph(org.evosuite.graphs.cfg.RawControlFlowGraph) ControlFlowEdge(org.evosuite.graphs.cfg.ControlFlowEdge) Node(org.kohsuke.graphviz.Node) ArrayList(java.util.ArrayList) BytecodeInstruction(org.evosuite.graphs.cfg.BytecodeInstruction) IOException(java.io.IOException) Edge(org.kohsuke.graphviz.Edge) ControlFlowEdge(org.evosuite.graphs.cfg.ControlFlowEdge)

Aggregations

ControlFlowEdge (org.evosuite.graphs.cfg.ControlFlowEdge)8 BasicBlock (org.evosuite.graphs.cfg.BasicBlock)4 LinkedHashSet (java.util.LinkedHashSet)3 Branch (org.evosuite.coverage.branch.Branch)2 BytecodeInstruction (org.evosuite.graphs.cfg.BytecodeInstruction)2 RawControlFlowGraph (org.evosuite.graphs.cfg.RawControlFlowGraph)2 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 Set (java.util.Set)1 PrimePath (org.evosuite.coverage.path.PrimePath)1 ActualControlFlowGraph (org.evosuite.graphs.cfg.ActualControlFlowGraph)1 ControlDependency (org.evosuite.graphs.cfg.ControlDependency)1 Edge (org.kohsuke.graphviz.Edge)1 Graph (org.kohsuke.graphviz.Graph)1 Node (org.kohsuke.graphviz.Node)1