Why software design is more complex than you might think
Software design and engineering are two fundamental processes in the creation of an application. There are also other important steps like code writing, testing and maintenance, but the design and engineering processes are considered the most crucial as they determine the efficiency and quality of the end product.
It is not at all easy to establish correct logical parameters for a new software, or to set out what its functionalities should be and how they will interact. That is why software engineering may be considered a discipline which explores and determines the various design phases.
Description of the problem and requirements analysis
Before commencing the development of any software (whether a program, an app or a website), it is essential to prepare a description of the problem to be resolved. Once this has been done, the initial specifications can be drawn up and the requirements identified, enabling the application to find real solutions to the problem.
During this phase, the engineers try to determine the most important features required to carry out the main functionalities. In order to provide a logical order to follow, these features are divided into the following categories:
- Functional specifics, for all requirements that must definitely be included in the software;
- Non-functional specifics, which constitute an extra option, which is not essential to achieve the objective for which the application was developed.
The easiest way of doing this is by using the MosCow table. It is a simple list, in which the functional parameters are listed as ‘Must Have’, while optional ones are listed as ‘Should Have’.
After this preparatory phase, it is time for one of the most important phases in software design and engineering: requirements analysis. Considering that an error in this process could lead to a considerable waste of time and money, it is advisable to take the utmost care during this phase.
Writing up a list of the fundamental requirements of the software means providing important data relating to all its aspects (a really detailed description). The most significant can be summarised as follows:
- The program’s application domains
- Application data;
- Functionalities;
- Expected performance;
- Interfaces the software uses.
There are many different diagrams and logical schemes designed to help developers identify the requirements more easily, which also set out the characteristics and interactions. The most well-know are the UML diagrams and the Alloy and Gellish systems.
Software design
Once the requirements have been determined, it is time to begin actual software design. During this phase, the data structure, functions and behaviours that the single elements must have are defined, in full respect of existing restrictions. The most common instruments used in this phase are the class diagram, OCL language and Petri nets.
More specifically, the OCL design language (Object Constraint Language) is ideal for facilitating code writing. It is based on the representation of the objects which make up the system and defines their respective attributes, behaviours and limits.
Petri nets are considered one of the most powerful instruments available for software design and engineering. Their main purpose is to show the program’s logic in its entirety, using specific elements such as places, transitions, arcs and tokens.
By using this special diagram, it is possible to obtain a more definite idea of how each part of the software interacts with the others. Once all the elements have been clearly defined, it is time to move onto the code writing phase, followed by the testing and maintenance phases.
Translated by Joanne Beckwith
