This course is specifically about software systems, systems where software plays a major role. However, software does not do anything without the hardware where it is installed and running, and software systems are usually part of a much wider context that involves not only other technical components, but also people, organisations and other social structures. The ‘whole’ of all these components is also known as a sociotechnical system. Sociotechnical systems are complex systems that need to be understood as a whole rather than as a sum of their isolated components.
In focusing on the software we will therefore be ignoring many other components of the whole system in which software is just a part. However, as a software engineer you will need to be aware of how software is used and the interactions with hardware, people and organisations. The popular press is full of reports of software failures, many of which may relate directly to problems with the software but may also relate to other issues of the wider sociotechnical systems context, as in Example 2.
You may find it interesting to read about other examples of software failures, such as the Therac 25 software-controlled radiation therapy machine, which was responsible for the death of several patients in the late 1980s (Leveson and Turner, 1993).
One well-studied case is that of the unmanned European Ariane 5 rocket, which failed on its launching flight due to a software problem. During the launch one of its computers stopped working due to a variable exceeding a limit – a data conversion resulted in an overflow software exception.
There is some controversy about where the exact blame should fall for the problems that occurred, but there is an agreement that they were related to the reuse of a module from a previous rocket without proper enforcement of constraints. This case became well known due to the huge expense of the rocket ($500 million), the amount of time it took to develop (10 years) and what it meant for European space projects (Lions, 1996).