Graph Approaches for Software Engineeering


Wolfgang Fahl

<slideshow style="bitplan" headingmark="⌘⌘" incmark="…" scaled="true" font="Comic Sans MS, Calibri, cursive" >

title

Graph Approaches for Software EngineeringProfiwikiicon.png
author
Wolfgang Fahl Wolfgang Fahl info@bitplan.com
footer
Applying the OpenSource Project SimpleGraph and it's modules to Software Engineering
subfooter
sebis Oberseminar TUM

</slideshow>

⌘⌘ Wolfgang Fahl

Wfjuggling.png
Peugeot Ion
Peugeot Ion
Giant Explore
Giant Explore

⌘⌘ Wolfgang Fahl[edit]

Wfjuggling.png
Peugeot Ion
Peugeot Ion
Giant Explore
Giant Explore

⌘⌘ The World as a Graph[edit]

If the world is represented as a Graph it would be nice to have a Simple Graph Navigation Language

The file "mwstore://local-backend/local-public/diagrams/archive/20241121163056!Diagrams_bc452c46ed3a2bc487aef5a8e277ff12.png" already exists.

see SMWCon Fall 2018

⌘⌘ Why I am here[edit]

Twitter2018-08-26.png

⌘⌘ Prehistory[edit]

see also PreHistory (clickable)

The file "mwstore://local-backend/local-public/diagrams/archive/20241121163056!Diagrams_8b983f2c304b62ae30ef611e67d0d61a.png" already exists.

⌘⌘ Graph Kernels for Model Driven Software Engineering[edit]

5 Steps

  1. Decide how the model should be encoded into a graph
  2. Translate each of the models into a labeled graph
  3. Select the graph kernel algorithm to be used
  4. Load all the graphs and compute the graph kernel
  5. Exploit the information in the kernel matrix

⌘⌘ Use SimpleGraph for the 5 Steps[edit]

Toskana2019planning.png

⌘⌘ Step 1: Decide how the model should be encoded into a graph[edit]

Each SimpleGraph Module transforms data from some API to a Graph representation. The transformation is usually as "straight-forward" or "natural" as possible.

⌘⌘ Step 2: Translate each of the models into a labeled graph[edit]

Each SimpleGraph Module uses the following steps to translate from an API to the graph

  1. connect()
  2. moveTo()

⌘⌘ Step 3: Select the graph kernel algorithm to be used[edit]

Gremlin programming language.png

SimpleGraph is based on Apache Gremlin/Tinkerpop so all the algorithm and libraries around this graph environment are directly available. If a different graph kernel and or algorithm is needed than the graph can be translated / imported via standard graph import/export formats and or import/export adapters and utilities.

BITPlan e.g. often uses Semantic MediaWiki SemanticMediaWiki Logo.png as a suitable environment.

⌘⌘ Step 4: Load all the graphs and compute the graph kernel[edit]

HubAndSpoke.gif

Simplegraph is based on the Hub&Spoke approach. Any combination of modules/API can be applied. Currently there are some 20 different modules to choose from.

⌘⌘ Step 5: Exploit the information in the kernel matrix[edit]

There are two modes for exploiting the information:

  1. OLAP - Online Analytical Processing / Graph Query
  2. OLTP - Online Transaction Processing / Graph Traversal

GremlinOltp-and-olap.png

⌘⌘ What is SimpleGraph?[edit]

Simplegraph allows to work with "graphized" information source from a combination of APIs that are made available as modules.

Module System wrapped API exposed Description
Folder.svg FileSystem FileSystem java.io.File makes your FileSystem accessible via the Java FileSystem API
Octocat.png GitHub GitHub GitHub GraphQL Api v4 makes GitHub content accessible to Graph processing.
Java-Logo.svg Java Java javaparser makes Java code parse results accessible to Graph processing.
Email Icon.svg Mail Mail E-Mail access for rfc822 and MIME formatted Mailbox files (e.g. Thunderbird) makes Mail data available via Apache Mime4J
SemanticMediaWiki Logo.png SMW SMW SemanticMedia Wiki API makes Semantic MediaWiki accessible via the SMW API
Xml logo.svg XML XML org.w3c.dom makes XML dom parse results accessible to Graph processing.

⌘⌘ SimpleGraph Dragtop[edit]

DragTopExample1.png

The Dragtop Open Source Software makes the SimpleGraph modules available for direct access from your Desktop. By simple drag and drop of the input onto the dragtop and then dropping a "tool" onto the dragtop you can combine the module functionality as you see fit.

⌘⌘ Example: The 5 Steps in SimpleGraph[edit]

⌘⌘ Step 1: Decide how the model should be encoded into a graph[edit]

  • .java Source Files: FileSystem module
  • Java Classes: JavaSystem
  • .class Files: Filesystem module (Bytecode parser?)

⌘⌘ Step 2: Translate each of the models into a labeled graph[edit]

⌘⌘ Step 3: Select the graph kernel algorithm to be used[edit]

Gremlin programming language.png

FileSystem fs=new FileSystem();
FileNode start = (FileNode) fs.connect("").moveTo(aroot.getPath());
start.recursiveOut("files",Integer.MAX_VALUE);
List<Vertex> javaFileNodes=start.g().V().has("ext", "java").toList();
List<Vertex> classFileNodes=start.g().V().has("ext", "class").toList()

SemanticMediaWiki Logo.png

⌘⌘ Step 4: Load all the graphs and compute the graph kernel[edit]

⌘⌘ Step 5: Exploit the information in the kernel matrix[edit]

  1. Visualize
  2. Store
  3. Mix and match with other sources

⌘⌘ How to benefit and participate[edit]

⌘⌘ Ideas for SimpleGraph future Progress[edit]

  • more Software-Engineering related modules e.g. for Modelling,Requirements Engineering
  • more Visualization options e.g. like/with prefuse
  • Visualized Editor e.g. like/with blockly
  • better integration with other programming languages

⌘⌘ Questions/Discussion[edit]

Bitplanpartner.png

🖨 🚪