Software Engineering with Process Algebra

Software Engineering

The description below can be found on Wikipedia and stems from the Guide to the Software Engineering Body of Knowledge - 2004 Version.

Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.

We think this description is clear enough. However, there are some issues in software engineering that need some clarification.

Craftmanship versus Engineering

Is developing software craftmanship or engineering? The answer is in the description at the top of this page. Developing software by experience can lead us in the right direction. This is craftmanship. But experience can only take us to a certain point when we enter unknown territory. Then we have to go on making it better through a controlled process of refinement. This is engineering. Actually, software engineering is based on craftmanship. We need craftmanship to accomplish the smaller processes in developing software, as part of software engineering.

What is Software Design?

In our opinion the final document of the design phase in software engineering is the source code listing. This idea was coined by Jack W. Reeves in his articles What is Software Design? (1992) and What is Software Design: 13 Years Later.

We repeat here the summarization from the articles.

We like to generalize the last two, in that programming techniques become implementation techniques and programming languages are broadened to include specification languages.

What is Software Architecture?

There exist many definitions for software architecture, but none of them grasp the idea of abstraction in software design. In our opinion software architecture is the most abstract level of the software design, identifying components and their interactions without implementation details which can be decided upon on a lower (less abstract) level. Each component has its own architecture and each interaction can be refined into a component.

So, it is the structure that uphelds the system.