Whenever we talk about reliability something always comes to mind – Hardware! We focus so much on hardware reliability that we often forget to pay some attention to software reliability. The fact is for most modern day equipment to fully function, there is a need for a perfect working synergy between the software and the hardware. Both have to be in order. A fault in a member part of the hardware could lead to downtime and so also would a fault in the software. Although software reliability is not as simple and straight-forward as its hardware counterpart, it is important that we possess a good knowledge and understanding of it.
In simple terms, by hardware, we mean the physical parts of a system or machine that we can see and touch. Your motors, rotors, generators, fuses and all manner of machines and machine components. By software, we mean the untouchable yet visible parts of the machine or system. They are the set of instructions encoded and programmed into the computer or the machine that enable the functioning of that machine.
Software reliability is defined as the probability of failure-free operation of a software system for a specified time in a specified environment. Although Hardware Reliability Engineering was first introduced as a discipline during World War II to evaluate the probability of success of ballistic rockets, the Software Reliability Discipline is much younger, beginning in the mid-1970’s when the software development environment was reasonably stable. Software Reliability has become important because software has become a part of everyday life. Smart phones, dishwashers, ovens and automobiles, banks, security agencies, governments, e-commerce, etc. all employ the use of software.
Many believe that once after the software can run correctly, it will be correct forever. This is not exactly true. A Software can also have small unnoticeable errors or drifts that can culminate into a disaster. Also, a software which was perfectly working may also break if the running environment changes. Although Software Reliability is defined as a probabilistic function and comes with the notion of time, we must note that different from traditional Hardware Reliability, Software Reliability is not a direct function of time.
Electronic and mechanical parts may become “old” and wear out with time and usage, but software, will not rust or wear out during its life cycle. Software, will not change over time unless intentionally changed or upgraded. Failures may be due to errors, ambiguities, oversights or misinterpretation of the specification that the software is supposed to satisfy, carelessness or incompetence in writing code, inadequate testing, incorrect or unexpected usage of the software or some other unforeseen problems.
Software Reliability Models
There is no single model that can be used in all situations to ascertain software reliability. One model may work well for a set of certain software, but may not work well for some other software problems. Most software models contain the following parts:
- Factors and
- A mathematical function that relates the reliability with the factors.
The mathematical function is usually higher order exponential or logarithmic.
Software modelling techniques can be divided into two subcategories: prediction modelling and estimation modelling. Both kinds of modelling techniques are based on observing and accumulating failure data and analysing with statistical inference. The major difference between the two models is that the prediction model uses historical data. Estimation models use data from the current software development effort. The prediction model is usually made prior to the development or test phases in the software development cycle. Estimation model is usually made later in the life cycle of the software majorly after some data have been collected. The prediction model predicts reliability at a future time while the estimation model estimates reliability at either present or future time.
Representative prediction models:
- Historical Data Collection Method
- Musa’s Execution Time Model
- Putnam’s Model and
- Rome Laboratory models: TR-92-51 and TR-92-15
Representative estimation models:
- Exponential distribution models
- Weibull distribution model
- Thompson and Chelson’s model, etc.
We have to carefully choose the right model that suits our specific case. Furthermore, the modelling results cannot be blindly believed and applied.
Software Reliability Improvement Techniques
Good engineering methods can largely improve software reliability. Before the deployment of software products, testing, verification and validation are necessary steps. As more and more software is creeping into embedded systems, we must make sure they don’t embed disasters. Ensuring software reliability is no easy task. More standard components and better process are introduced in software engineering field.
The services of a Software Reliability Engineer (SRE) should also be employed.