Dependability of embedded systems

Almost all modem, engineered systems depend on computers for their correct operation. The cost, size, and power requirements of microprocessors have dropped to a point where it is both feasible and desirable to embed computers into everything from people to toasters. Obviously computers embedded in people must operate correctly because they are providing what is presumably some form of medical service. But even computers embedded in toasters have to operate correctly because incorrect operation might cause a fire. A serious though less obvious issue with embedded computers, even in appliances, is the financial loss from failure. Recalling a mass-produced appliance to repair a defective embedded computer, correcting the software for example, can be financially devastating for the manufacturer. Embedded systems control external equipment, and significant physical damage can occur as a result of defective software. It is important that software engineers understand the major elements of current technology in the field of dependability as it applies to embedded systems, yet this material tends to be unfamiliar to researchers and practitioners alike. Researchers are often concerned in one way or another with some aspect of what is mistakenly called software "reliability". All practitioners are concerned with the "reliability" of the software that they produce but researchers and practitioners tend not to understand fully the broader impact of their work. A lot of research, such as that on testing, is concerned directly with software dependability. Understanding dependability more fully allows researchers to be more effective. Similarly, practitioners can direct their efforts during development more effectively if they have a better understanding of dependability. Software by itself is benign. Only when it is being used in an application system does the role of software become fully defined. Thus software is just a component of a system, and the dependability of an embedded system depends on how systems engineering information is used in software specification and development.