1.2 The nature of software
Software is often spoken of as being invisible or intangible, and hence is thought of as being different from physical artefacts, which can be measured, touched, broken, and so on. This invisibility can lead to unrealistic expectations concerning the capabilities of software, which in turn may contribute to some of the myths that surround software and its development, for example, that accommodating change is straightforward.
Software can, and does, contain errors. There are three important characteristics of software that affect its development and the likelihood of errors:
- Malleability. Software is easy to change (programmers are often tempted to tweak their code). This malleability creates a constant pressure for software to be changed rather than replaced. Every change introduces the possibility of new errors.
- Complexity. Software is often complex. Complexity can usually be recognised, but it is less easy to define. One item of software can be considered more complex than another if it requires more explanation. Part of that complexity arises from the potential variety of pathways between the components of a system. The number of errors is likely to depend on the complexity of a system.
- Size. It is likely that there will be more errors in a large piece of software than in a small one.
You have already encountered an aspect of the intangible nature of software if you have programmed in, for example, Java. The instructions and statements that you write in Java are translated into bytecode, which you do not see.
You might think that, because it is ‘invisible’, software is inherently more difficult to develop than a physical artefact. However, various techniques can be used to model software and its behaviour – just as an industrial designer uses geometric abstractions and other tools to model a physical product before it is built.
Activity 2 Problems with software systems
For each of the three characteristics of software mentioned above, explain why errors might arise in a piece of developed software.
Malleability. As change is easy to make, often changes are introduced without thorough consideration of the full consequences of each new change introduced.
Complexity. The more complex a piece of software becomes, the more chances there are of a change affecting other parts of the software.
Size. The greater the number of lines of code in a piece of software, the greater the number of likely errors.