Software Reliability is the probability of failure-free software operation for a specified period of time in a specified environment. Software Reliability is also an important factor affecting system reliability. It differs from hardware reliability in that it reflects the design perfection, rather than manufacturing perfection. The high complexity of software is the major contributing factor of Software Reliability problems.
Software Reliability is not a function of time - although researchers have come up with models relating the two. The modeling technique for Software Reliability is reaching its prosperity, but before using the technique, we must carefully select the appropriate model that can best suit our case. Measurement in software is still in its infancy. No good quantitative methods have been developed to represent Software Reliability without excessive limitations. Various approaches can be used to improve the reliability of software, however, it is hard to balance development time and budget with software reliability.
A good software reliability engineering program, introduced early in the development cycle, will mitigate these problems by: Preparing program management in advance for the testing effort and allowing them to plan both schedule and budget to cover the required testing.
Continuous review of requirements throughout the life cycle, particularly for handling of exception conditions. If requirements are incomplete there will be no testing of the exception conditions.
SoHaR software reliability engineers are experienced in all the stages and tasks required in a comprehensive software reliability program. We can support or lead tasks such as:
1) Reliability Allocation
2) Defining and Analyzing Operational Profiles
3) Test Preparation and Plan
4) Software Reliability Models
Reliability allocation is the task of defining the necessary reliability of a software item. The item may be part of an integrated hardware/software system, may be a relatively independent software application, or, more and more rarely, a standalone software program. In either of these cases our goal is to bring system reliability within either a strict constraint required by a customer or an internally perceived readiness level, or optimize reliability within schedule and cost constraints.
SoHaR will assist your organization in the following tasks:
Derive software reliability requirements from overall system reliability requirements.
When possible, depending on lifecycle stage and historical data, estimate schedule and cost dependence on software reliability goals.
Optimize reliability/schedule/cost based on your constraints and your customer's requirements,
Defining and Analyzing Operational Profiles:-
The reliability of software, much more so than the reliability of hardware, is strongly tied to the operational usage of an application. A software fault may lead to system failure only if that fault is encountered during operational usage. If a fault is not accessed in a specific operational mode, it will not cause failures at all. It will cause failure more often if it is located in code that is part of an often used "operation" (An operation is defined as a major logical task, usually repeated multiple times within an hour of application usage). Therefore in software reliability engineering we focus on the operational profile of the software which weighs the occurrence probabilities of each operation. Unless safety requirements indicate a modification of this approach we will prioritize our testing according to this profile.
SoHaR will work with your system and software engineers to complete the following tasks required to generate a useable operational profile:
Determine the operational modes (high traffic, low traffic, high maintenance, remote use, local use etc).
Determine operation initiators (components that initiate the operations in the system).
Determine and group "Operations" so that the list includes only operations that are significantly different from each other (and therefore may present different faults).
Determine occurrence rates for the different operations.
Construct the operational profile based on the individual operation probabilities of occurrence.
Test Preparation and Plan:-
Test preparation is a crucial step in the implementation of an effective software reliability program. A test plan that is based on the operational profile on the one hand, and subject to the reliability allocation constraints on the other, will be effective at bringing the program to its reliability goals in the least amount of time and cost.
Software Reliability Engineering is concerned not only with feature and regression test, but also with load test and performance test. All these should be planned based on the activities outlined above.
The reliability program will inform and often determine the following test preparation activities:
Assessing the number of new test cases required for the current release.
New test case allocation among the systems (if multi-system).
New test case allocation for each system among its new operations.
Specifying new test cases
Adding the new test cases to the test cases from previous releases.
Software Reliability Models:-
Software reliability engineering is often identified with reliability models, in particular reliability growth models. These, when applied correctly, are successful at providing guidance to management decisions such as:
Test resource allocation
Time to market
Maintenance resource allocation