Kieker Graph API¶
Many algorithms work on graphs in computer science. This includes user behavior observation, code analysis, architectue analysis and many more. There are different graph frameworks available, one is the Google graph framework which is part of Guava.
Kieker relies on the Google Graph Library (GGL) which is also used by other developers making the integration easier.
Graph Classes and Interfaces¶
Kieker uses MutableNetwork and ImmutableNetwork for its graphs. This is necessary, as we use annotations to nodes and edges. GGL allows to use any class as node and edge. However, to be able to implement algorithms, we require to implement the
IEdge interfaces for nodes and edges, respectively.
As GGL does not support annotations to the graph itself, we created the
IGraph interface to allow to set properties and a label to the graph. This also allows to nest graphs.
For these three interfaces, Kieker also provides a generic implementation in
kieker.analysis.generic.graph.impl. The corresponding factory is implemented in
Allows to flatten nested graphs.
The graph clustering is based on the graph edit distance, implemented in
GraphEditDistance, which can compute the edit distance between flat graphs using a cost function. The
BasicCostFunction only assigns certain values for node and edge insertion. However, for the behavior graph clustering, the cost function can be replaced by a specific implementation that also honors parameters.
We borrowed an MTree implementation by Eduardo R. D’Avila.
The main stage for clustering is the
kieker.analysis.generic.graph.clustering. The input port requires an
OpticsData containing the
MutableNetwork of a graph and the
OPTICSDataGED instance which provides the
Allow to travers the graph including flat graphs and nested graphs.