Software development life cycles involve complex processes using a hierarchy of
activities and their documentation and maintenance is the last stage of the software
life cycle.
Software maintenance includes all activities associated with changing, modifying
or altering existing software applications. After the product has been released,
the maintenance phase keeps the software up to date with environment changes
and changing user requirements. One of the most important criteria in good software
development is that all the phases of the software life cycle project should
be done in such a way that final product is easily maintainable. Maintenance
can only happen efficiently if the earlier phases are done properly. The major
problems that can slow down the maintenance process are unstructured code, maintenance
programmers having insufficient knowledge of the system, documentation being
absent, out of date, insufficient, and software maintenance personnel not having
the required attributes for the job. For maintenance to be successful, these
problems should be taken care off in the earlier stages of a life cycle project.
Maintenance plays an important role in the life cycle of a software product.
There are a large number of software projects most of which are unstructured
and not well documented. Maintenance can lessen these problems.
Maintenance phase is a very expensive phase costing the developers lot of time,
effort, and money. Thus, the maintenance phase should be as efficient as possible.
There software maintenance phase involves steps like, understanding the design
that already exists, the studying the structure of the existing product and
finally test and debug the product and make the new changes work properly. As
products age it becomes more difficult to keep them updated with new user requirements.
There are three categories of software maintenance:
- Perfective maintenance deals with revise the software according to
changes in user requirements, improving documentation, and making the code
easier to understand. Perfective maintenance mainly deals with accommodating
to new or changed user requirements. Perfective maintenance concerns functional
enhancements to the system and activities to increase the system's performance
or to enhance its user interface.
- Adaptive maintenance deals with adapting the software to new environments
like new version of OS, system compiler, DB.
- Corrective maintenance deals with fixing bugs in the code; basically
it is fire fighting. It is generally known as the 'traditional maintenance'.
Corrective maintenance deals with the repair of faults or defects found.
There are certain program qualities like system size, system age, application
type, programming language, and the degree of structure that make a software
system more difficult to maintain. Older systems require more maintenance effort
than do younger systems, because software systems are generally expected to
grow larger with age, become less organized due to the changes over time, and
become less understandable to the personnel as new teams are recruited over
long periods of time.
The degree of complexity of development process and its documentation, and alteration
of the documentation during maintenance are important problems for improvement
of quality. Documentation provides communication between all groups concerned
with development on the one hand, and the control of project process on the
other. Because of complex relationships between planning documentation, test
requirement, and different phases of development life cycle elements, documentation
is difficult to evaluate and ensure that all activities have been sufficiently
addressed.
Traditional methods for verification of quality, such as checklist can fail
in most complex software development processes. Audits and review which assist
in identifying compliance with standards and procedure should be performed by
the developers of the software.
The goals of reuse during maintenance are to increase productivity, increase
quality, facilitate code transportation, reduce maintenance time and effort,
and improve maintainability. Software reuse is basically reapplication of a
variety of kinds of knowledge about one system to another similar system in
order to reduce the effort of development or maintenance of that other system.