Software Reliability

The three of the most important Software product characteristics are – Quality, Cost and Schedule. Quantitative measures exist for cost and schedule. But quantification of Quality is difficult. The lack of quantitative measure for Quality is the main reason for quality problems in Software products.

Reliability is the most important of characteristics inherent in the concept of Software Quality. It is intimately concerned with defects, defects represents the largest cost element in programming. Software reliability concerns with how well the software functions to meet the requirements of the customer. It is the probability that the software will work without failure for a specified period of time. Failure means the program in its functioning has not met user requirements in some way. Software reliability is thus the probability of failure free operation of a computer program for a specified time in a specified environment.

Reliability consists of totally or partially many properties that are often quoted as aspects of quality. eg:- Correctness, Behavior etc of a program. Certain properties like software safety are actually specialized aspects of Software Reliability.

Two aspects of Software Quality that probably cannot be related to reliability are Modifiability and Understandability of documentation. Thus, Software reliability can be treated as the most readily quantifiable of the attributes of Software Quality.

Reliability represents a user oriented view of Software quality. Initial approaches to measuring Software quality were based on attempting to count the faults or defects found in the program/software system/software function. This approach is developer oriented one. Also what was actually counted there either failures or repairs of which are equivalent to faults. Even if faults found are certainly counted, they are not good status indicators. Faults found can only be used to make a rough comparison with other projects. Such comparisons are commonly made in terms of faults/KLOC.

Reliability is to be mainly customer or user oriented rather than developer oriented. It relates to operations rather than design of the program, hence is to be dynamic rather than static. It takes account of frequency with which problems occurs. It relates directly to operational experience and influence of faults on that experience. Hence it is easily associated with costs. It is more suitable for examining the significance of trends for setting objective and for crediting when these objectives will be met.

Software reliability permits us to analyse in common terms, the effect on software quality of hardware and software, both of which are present in any real time system. Thus reliability measures are much more useful than fault measures. The faults can act as predictors of reliability. Therefore a better understanding of faults and human error processes can lead to strategies to avoid, detect and remove or compensate for them. Cost of implementation of a reliable software project is around 0.1 – .02% of project development cost.

Software and Hardware reliability

Reliability depends on environment. The source of failures in software is design faults while principal source in hardware is generally physical deterioration. However concepts and theories developed for software reliability could really be applied to factors including hardware design.

Failure usually occurs only when the program is exposed to an environment that it was not developed or tested for. Although manufacturing can affect the quality of physical components, the replication of software design is trivial standard of quality. Since introduction and removal of software faults occurred during software development, software reliability is expected to vary in this period. In case of the probability of failure due to wear and tear and other physical cases will be much greater than that due to unrecognized design problems. It is possible to keep hardware design failures log, because hardware is less complex logically that software, hardware design failures also to be kept low because redeveloping of manufactured items in the field is very expensive.

One characteristic of software reliability is that it tends to change continually for the testing period. This happens either as new problems are introduced when new code is written or new repair action removes problems that hardware reliability may change during certain periods such as end of useful life. However, it has a much greater tendency than software towards a constant value.

Significance of Software Reliability

The following are some of the factors that advocates the significance of software reliability –

  1. Unreliable software is liable to be discarded by users and the Software Company gets a bad reputation.
  2. System failure costs due to unreliable software may be enormous and in many cases higher than the cost of control systems.
  3. Unreliable systems are difficult to improve since the unreliability tends to be distributed throughout the system.
  4. Inefficiency is predictable while unreliability is not as evident for eg: in the case of an unreliable computer aided design software which creates design errors that are unnoticed, the faults might be undiscovered until there have been several plane crashes.
  5. Unreliable systems leads to loss or disruption of valuable enterprise information.

Methods to achieve reliability of Software System

The various methods for achieving reliability of the software system are as follows –

  1. Fault avoidance by devising strategies and plans during design and implementation stages with the object of producing fault-free systems
  2. Fault tolerance by devising a strategy that assumes that residual faults exist in a system and this provide alternate methods by which the system shall remain functioning under unreliable operations.
  3. Fault detection involves the process applying various static and dynamic software procedures that aids in detecting software faults before implementation.
  4. For exclusive hardware reliability, we may use redundant components and fault tolerant systems.