With the increasing integration of computer systems into various aspects of our lives, the repercussions of system and software failures are growing. Failures, such as server software malfunction in e-commerce or errors in embedded control systems in vehicles, can lead to significant financial losses and safety hazards. Malware infections in company PCs not only require costly cleanup operations but also pose risks to sensitive information. Given the criticality of software-intensive systems, trustworthiness is paramount, encompassing attributes like availability, reliability, safety, and security. Laprie (1995) proposed the term 'dependability' to encapsulate these interconnected properties, recognizing their interdependence.
The dependability of systems is now usually more important than their detailed functionality for the following reasons:
System failures affect a large number of people:- Many systems include functionality that is rarely used. If this functionality were left out of the system, only a small number of users would be affected. System failures, which affect the availability of a system, potentially affect all users of the system. Failure may mean that normal business is impossible.
Users often reject systems that are unreliable, unsafe, or insecure:- If users find that a system is unreliable or insecure, they will refuse to use it. Furthermore, they may also refuse to buy or use other products from the same company that produced the unreliable system, because they believe that these products are also likely to be unreliable or insecure.
System failure costs may be enormous:- For some applications, such as a reactor control system or an aircraft navigation system, the cost of system failure is orders of magnitude greater than the cost of the control system.
Undependable systems may cause information loss:- Data is very expensive to collect and maintain; it is usually worth much more than the computer system on which it is processed. The cost of recovering lost or corrupt data is usually very high.
The software executes in an operational environment that includes the hardware on which the software executes, the human users of that software, and organizational or business processes where the software is used. When designing a dependable system, you, therefore, have to consider:
Hardware failure:- System hardware may fail because of mistakes in its design because components fail as a result of manufacturing errors, or because the components have reached the end of their natural life.
Software failure:- System software may fail because of mistakes in its specification, design, or implementation.
Operational failure:- Human users may fail to use or operate the system correctly. As hardware and software have become more reliable, failures in operation are now, perhaps, the largest single cause of system failures.
Failures in software-intensive systems are often interconnected. For instance, a hardware failure can lead to stress on system operators, resulting in mistakes that further exacerbate software failures. This creates a cycle of increased workload and stress. Therefore, designers must adopt a holistic approach, considering hardware, software, and operational processes together. Separately designed components without accounting for potential weaknesses in other parts increase the likelihood of errors at system interfaces.