are here: Freetutes.com
Analysis and Design
Error Distribution with Phases in Software Development Life Cycles
A typical software product may take months to a few years for development, and
is in operation for five to twenty years before it is withdrawn. For software,
the cost of development is the incurred during requirement analysis, design, coding
and testing. Therefore, the development cost is the total cost incurred before
the product delivery. The cost of maintenance is the cost of modifying the software
due to residual faults in the software, for enhancing or for updating the software.
This cost is spread over the operational years of the software. Software engineers
generally agree that the total cost of maintenance is more than the cost of development
of software. The ratio of development to maintenance cost has been variously suggested
as 40/60, 30/70 or even lower. However, it is generally accepted that the cost
of maintenance is likely to be higher than the development cost, and are often
not at all concerned with the maintenance.
Since maintenance depends critically on the software characteristics that are
decided during development, maintenance cost can be reduced if maintenance concerns
are kept in forefront during development. One of the reasons why this is often
not done is that the development cost is done by the developers while maintenance
is often done by the users. Hence, the developers do not have much incentive for
increasing the development effort in order to reduce the maintenance cost. However,
for reduction in overall cost of software, it is imperative that the software
be developed so the maintenance is easy.
The development cost, a typical distribution of effort with the different phases
Requirement - 10%
Design - 20%
Coding - 20%
Testing - 50%
The exact number will differ with organization and the type of the project.
There are some observation we can make from the data given above. The first is
that the goal of design and coding should reduce the cost of design and coding,
but should be to reduce the cost of testing and maintenance, at the expense of
increasing design and coding cost. Both testing and maintenance depend heavily
in the design and coding of the software. And these costs can be considerably
reduced if the software is designed and coded to make testing and maintenance
easier. Therefore, during design and implementation, the issues in our minds should
be "can the design be easily tested", and "can it be easily modified".
These require alternate designs and may increase the cost of the design and coding.
But this additional costs pay dividends in the later phases.
The notion that programming is the central of activity during software development
is largely because normally programming has been considered to be difficult task
and sometimes an "art". Another consequence of this kind of thinking
is the belief that errors largely occur during programming, as it is the oldest
activity in software development and offers many opportunities for commiting errors.
It is now realized that errors can occur at any stage during development. A typical
distribution of error occurrences by is
Requirement Analysis - 20%
Design - 30%
Coding - 50%
As we can see, errors occur throughout the development process. However the
cost of correcting different phases is not the same and depends on when the error
is detected and correceted. As one old expect, the greater the delay in detecting
an error after it occurs, the more expensive it is to correct it. Error that occur
during the requirements phase, if corrected after coding is completed, can cost
many times more than correcting the error during the requirements phase itself.
The reason for this is fairly obvious. If there is an error in the requirements,
then the design and the code will get affected.
To correct the error, the coding that is done would require both the design
and the code to be changed there by increasing the correction. So we should attempt
to detect errors in the previous phase and should not wait until testing to detect
errors. This is not often practiced. In reality, sometimes testing is the sole
point where errors are detected. Besides the cost factor, reliance on testing
as the primary source for error detection, due to the limitations of testing,
will also result in unreliable software. Error detection and correction should
be a continous proces that is done throughout software development. In terms of
the development phases what this means is that we should try to validate each
phase before starting with the next.
Previous Page | Contents
| Next Page >>