Artificial neural network (ANN) has proven to be a universal approximator for any non-linear continuous function with arbitrary accuracy. This book presents how to apply ANN to measure various software reliability indicators: number of failures in a given time, time between successive failures, fault-prone modules and development efforts. The application of machine learning algorithm i.e. artificial neural networks application in software reliability prediction during testing phase as well as early phases of software development process is presented as well. Applications of artificial neural network for the above purposes are discussed with experimental results in this book so that practitioners can easily use ANN models for predicting software reliability indicators.
Computer systems controlled by software play a major role in day-to-day activities of the modern society. Applications of software has now reached diverse fields such as home appliances, hospital health care unit, industrial control, nuclear reactor plant, air traffic control, aircraft, shopping and many more. Many commercial and government organizations depend on software to increase their efficiency and effectiveness. The demand for application of software is increasing day-by-day. The failures in the software may lead to minor inconvenience and customer dissatisfaction, economic loss, loss of life and total system failure. Some of the tragic consequences of software failures are: i) Therac-25 accident: It is a computer controlled radiation therapy machine. Software failures led to death of six patients due to therapeutic overdose ii) Obama care health insurance portal: Due to software failures, this portal shallows one third insurance applications which leads to customer dissatisfaction iii) Social network: Due to automatic generation and recommendation of add friend request, private data of six million members of the network was made public iv) 22 people wrongly arrested in Australia due to failures in "NZ million courts computer system" v) Telephone outage: After changing three lines of code in a signaling program which contains millions lines of code, the local telephone systems in California stopped. Therefore, software professionals are constantly trying to develop software which are not only functionally attractive but also safe and reliable.
According to ANSI (American National Standards Institute), software reliability is defined as the probability of failure-free software operation for a specified period of time in a specified environment. It is also an important attribute of software quality, together with functionality, usability, performance, serviceability, capability, install ability, maintainability and documentation.
Software reliability prediction is an important step in the development of reliable software. It aids to develop reliable software within given time and budget constraints. Software reliability prediction is carried throughout software development process. Different terminologies such as fault, error, failure, bug, mistake, malfunction and defect are associated with software reliability problems. A fault is created when programmer makes some error during requirement, design, coding and testing phase. Software contains fault, if for some input, the output is incorrect. It can be removed by correcting the erroneous part of the software. Failure occurs in software, if the faulty part is executed. Wrong input, incorrect printing of output and misinterpretation of output may cause failures in software. The failures are classified as transient, permanent, recoverable and unrecoverable depending upon severity. Transient failures occur only for certain input values while permanent failures occur for all input values. When recoverable failure occurs, the system recovers with or without operator intervention. The system may have to be restarted when unrecoverable failure occurs.
Software reliability measurement is gaining importance in software industry. So, various techniques have been developed to predict software failures with time, which characterize the software failure behavior. The existing software reliability prediction models are divided into two categories. First category of methods utilize failure data recorded during testing to estimate current reliability of the software and assess the efforts required to achieve certain level of software reliability before releasing it. These models generally model the software reliability growth considering impact of testing and debugging efforts. Second category of models assess development efforts to achieve a certain level of reliability utilizing software quality indices. These models are generally called early software reliability prediction models as they try to assess software reliability before testing phase allowing better planning and utilization of resources. These models allow to monitor software reliability throughout development process and provide feedback at right time during development resulting in lesser development cost and achieving quality and reliable software within budget and time constraint. However, early software reliability prediction models show larger prediction errors, in general, compared to growth models as the testing data provides more information about software reliability built in the system.
Predicting cumulative number of failures and time between successive software failures help software professionals for determining release time of software. If the number of failures are not increasing after testing the software for a certain period of time and the time between successive failures are very high, then software managers can stop testing and release the software. Large and complex software systems are developed by integrating various software modules. All modules are neither equally important nor do they contain an equal amount of faults. Therefore, researchers started focusing on the classification of software modules as fault-prone (FP) and not fault-prone modules (NFP). Fault-proneness of a module can be determined from software quality metrics. Some metrics are interrelated and redundant with each other. Therefore, determination of important software metrics is required to predict fault-pone modules. Software development efforts need to be accurately predicted during early phases of software development process using software quality metrics affecting efforts known as effort multipliers. It helps to produce reliable software within time and budget constraint. If a software is released with higher reliability than the desired reliability, additional testing resources are required which reduces the profit margin for the developer and delay in development schedule. If a software is released with lower reliability than the desired reliability, then the maintenance cost will be more than testing cost.
This book presents prediction of above software reliability applications: number of failures in a given time, time between failures, classification of fault-prone modules and development efforts prediction. The major content of this book are as follows:
- Predicting Cumulative Number of Software Failures in a Given Time: In this work, two artificial neural network (ANN) models are presented to predict cumulative number of failures in software. These models use single input (testing time), single output (failure count) and experimented with multiple data sets. The results show better prediction accuracy. These models help to determine time to stop testing and release time of software.
- Predicting Time between Successive Software Failures: In this work, two ANN based models using time series approach are presented to predict time between successive software failures. These models use multiple delayed inputs, single output and their application on multiple data sets also show better prediction accuracy.
- Predicting Software Fault-Prone Modules: In this work, ANN models are presented to predict fault-prone modules in software. These models are configured as multiple inputs (software quality metrics) and single output to predict fault-prone modules. Sensitivity analysis and principal component analysis (PCA) are studied for the purpose of input dimension reduction and PCA is found to be providing better accuracy.
- Predicting Software Development Efforts: In this work, ANN models are presented to predict software development efforts from effort multipliers. Effect of optimizing ANN architecture using genetic algorithm (GA) on prediction accuracy is studied and found to be providing better accuracy.
This chapter explains the overview and necessity of software reliability. The overview of software reliability modeling and its limitations are also described in this chapter. This chapter defines objectives of this book. Finally, organization of the book is presented in this chapter.
The rest of this chapter is organized as follows. Overview of software reliability modeling and its limitations are discussed in Section 1.1. The objectives and overview of the book are presented in Section 1.2. The organization of book is presented in Section 1.3.
1.1 Overview of Software Reliability Prediction and Its Limitation
In this section, an overview of software reliability prediction and its limitations are presented.
In software industry, time, budget and testing resources are limited. So, it is necessary to develop reliable software within budget and time constraint. Software reliability is hard to achieve, because the complexity of software tends to be high. Software reliability is measured to determine quality of current product, to predict quality of product and to improve quality of a product. However, it is a difficult problem to measure software reliability because we do not have a good understanding of the nature of software. It can be measured as estimation, prediction and certification of software reliability. Software reliability estimation is used to quantify current reliability level. Some statistical inferences are applied to failure data obtained during software testing to determine whether the applied reliability model is good enough for the current software project. Software reliability prediction is used to forecast the future reliability. The future failure behavior is predicted from present and past failures. Software reliability...