Maintenance activities include all work carried out post-delivery
and should be distinguished from block
modifications which represent significant design and
development effort and supersede a previously released
software package. These maintenance activities can be
quite diverse, and it helps to identify exactly what post delivery
activities are to be included in an estimate of maintenance effort. Maintenance activities, once defined,
may be evaluated in a quite different light than when called
simply “maintenance”. Software maintenance is different
from hardware maintenance because software doesn't
physically wear out, but software often gets less useful with
age and it may be delivered with undiscovered flaws. In
addition to the undiscovered flaws, it is common that some
number of known defects pass from the development
organization to the maintenance group. This bow wave of
unclosed bugs is exacerbated when multiple versions of the
same deliverable exist simultaneously. Accurate estimation
of the effort required to maintain delivered software is aided
by the decomposition of the overall effort into the various
activities that make up the whole process.
In his book Software Engineering Economics, Barry Boehm
defines maintenance as the process of modifying existing
operational software while leaving its primary functions
intact. The definition includes the following types of
activity within the category of software maintenance: