Using models in software development
posted Jun 7, 2020, 4:30 AM by Alar Raabe [updated 4 Sept, 2023, 5:15 PM]

Compared to the beginning of software engineering, the current practice tends to diminish or completely drop the use of models (formal represenation of requirements towards the software system).

But if there's any wish to automate the software development activities beyond the simple pipelines of build tools, there is need for the strong formal models that specify what to automate.

I see more and more, that the usage of models (referring to traditionally used qualitative, often graphical, models and modeling languages) and model building is diminishing in the software engineering (if we can talk about the software "engineering" anymore at all).

The reason seems to be that developers do not want to use the models and therefore making or maintaining these is perceived as "no-value" overhead. Behind the reluctance of developers to use models is often the agile movement's argument that everything could be seen/found from the code, and because in DevOps same team that does the development, does also maintenance, thereís also no need to communicate between different teams.

But actually:

  • it is very difficult, if not impossible, to write code so that all the requirements or high-level design decisions would be presented directly in the code (not to mention being easily readable/understandable for the ones that did not write the code),
  • it costs time and money if developers make mistakes because they are not able to understand from the code the requirements it implements and the design intents/constraints, and
  • it costs even more time and money if developers go away and need to be replaced by new ones who donít know anything what has been said "atthe water-cooler" (possibly two or more years ago).

Because additional information (same that has been traditionally represented by the models) is needed and because code isnít usually very much commented and often also not very readable, so often developers and others, involved in the software development activities, try to find other ways to collect and maintain this additional information, representing it usually in non-formalized textual form in their work-organization tools (e.g. Confluence wiki and in Jira tasks).

Additional reason to drop models in the software development in favor of informal textual descriptions, seems to be the inability to automate anything in software development process apart from the simple "automation" of build tools to manipulate software artifacts in correct succession (thing that has been around already past 60 years) Ė so thereís no perceived value to have requirements or high-level abstract knowledge about the software tobe represented in machine-readable form.

Today still a very big partof the development of business software is solving rather standard/common problems and is filled with the repeating tasks, which are very easily automated (like development of GUIs (where they are not the distinguishing factor), integrations, transformations, reports, etc.), and doing so would economize a lot of development time, but this will be only possible, if the requirements and high-level design would be formally specified and represented in a machine readable form.

So, the main question is "Do we want/need to automate also our software developmentactivities?", or do we just want to automate only the various business activities and continue with manual software development?

If we want to automate software development (i.e. digitalize the software development), we need a formal, machine readable, representation of requirements and high-level designs (with the focus on formalization and machine readability, not just some pictures with "boxes and arrows"), in the sameway as for example to automate the credit origination, we need formal representation of customer, loan, collateral, sales process, involved business rules, etc.

Lately the question of automating the development of software has turned towards AI (using large language models trained on the existing code).

The problem with this approach is, that because the models developed by the machine learning are non human-readable and non-transparent to the users, the way to control and guide the generative AI is via prompts, which quickly becomes rathere similar problem as controlling and guiding the human developers through the natuaral language (which is ambiguous by nature).

Copyright © by A.Raabe