1Introduction

Software is ubiquitous in today's world. It controls our home appliances, automobiles, phones, and many of our forms of entertainment. It increases our productivity at work, speeds our communications, and improves our medical care. It affects nearly every aspect of modern life. Software is also getting more complicated because of a number of reasons, such as an increase in the number and diversity of software applications, the more varied types of platforms for the software, and the increased reliance on other “third-party” software. Because of this, it is critical to produce reliable software. Software that fails often may mean that some entertainment application is not as entertaining as intended, or it could result in a life-or-death situation in a hospital or a mass transit system.

1.1 Description of the Problem

As mentioned above, software is everywhere and is becoming more and more complicated. It is largely “handmade” and subject to human errors. Also, most software contains, or at least interfaces with, software developed independently by other companies. As a result, software defects can be subtle and difficult to find, sometimes only manifesting themselves under very specific conditions. Unfortunately, when these conditions occur, the effects of a defect may be very serious, including loss of life. Even if lives do not depend on the software, litigations can seriously damage a company.

Software reliability tasks are often assigned to reliability engineering ...

Get Software Reliability Techniques for Real-World Applications now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.