What do we mean by software for engineers?
In this post I’m presenting a very broad overview of what I consider to be tooling for engineers, which is the main subject of this blog. Software for engineers has many names, some people call them modelers, others, IDE, and others just “tools”. In this blog post we will stick with the generic label “software for engineers”.
In the grand scheme of things, software for engineers requires mostly the same principles of design that other software. As most business software, software for engineers uses a layered architecture. The main difference is that, for standard business software the three standard layers: presentation, business logic, and back-end contain some common and standard components, while software for engineers uses another set of components.
For example, for standard business applications you usually have some form UI components in the presentation layer, standard classes in the business logic layer and some persistence technology on the back-end side. Software for engineers can of course have the same elements, forms, some database, etc, but it usually contains a bit more than that or some uncommon components that are usually not a standard component in vanilla business applications. So, let us enumerate the different parts of the presentation.
In the presentation layer of software for engineers we usually find different kinds of editors:
- Textual editors
- Diagram (Graphical Editors)
- Property editors
- Tabular editors
These editors are specially suited for editing large and complex models. Textual editors are specially good for describing behavior in the form of custom programming languages. Diagram editors allow to visualize the model and the relationships that are contained in it. Property editors are good for editing the parts of the model that are mostly a big record, and tabular editors allow to edit large amounts of data in an efficient manner.
The business layer equivalent in software for engineers is the model layer. This layer is used to validate the model and make sure that the model respects the constraints it must respect. Usually, in this layer, the model, which can be a collection of smaller models, is consolidated into a unique model that reflects whatever the engineer is describing. Tools, such as EMF are used to describe this layer and generate its code. Tools like EMF enable the user to describe a model of the model (also known as metamodel), and from that generate the standard parts of the model layer.
The back-end layer usually includes one of the following:
- Code generators
- Verification Engines
- Processing Engines
- Static Analyzers
These are the tools that are usually employed with a valid model. Code generators allow to transform a higher level representation of the problem into lower level code that can be executed directly or through a processing engine. Simulators enable to model to be executed without the need to generate code. Verification engines can perform more advanced verification of properties in the model, and static analyzers can perform advanced verification beyond the basic validations that are done at the validation stage.
This has been a very rough overview of what software for engineers is. I hope it is useful and I’ll try to go deeper into the different parts in future posts.