Graph-based software engineering

A generic square placeholder image with rounded corners in a figure.
Figure 1: Graph model of the finite-element method shown as one main model, denoted as [1], and three nested models: [S1] for preprocessing, [S2] for solving and [S3] for postprocessing.

Software design has been of great importance since the very first programs. Even though it is not affecting the code performance, the quality of validation and verification as well as code support are greatly dependent on the code organisation. It is thus of prime interest for any coder to follow some ideology while designing and writing the code. While a great deal of approaches have been developed in the industial programming, there is no systematic approach to writing scientific code which is additionally complicated by the complexity of the application domain. The latter fact negatively contributes to another important quality of any code, namely, readability.

To tackle these issues, we develop a graph-based approach to the implementation of complex computational methods. It stems from the well-known concepts of finite-state machines, data flow diagrams and functional programming. The graph-based approach to software engineering has three levels: categorical level (data transformations as object morphisms), graphical level (representation of the algorithm as a directed graph), and interface level (software implementation of tools for graph models creation).

Related publications