The dictionary defines maintenance as, "The work of
keeping something in proper order." However, this
definition does not necessarily fit for software. Software
maintenance is different from hardware maintenance
because software doesn't physically wear out, but often gets
less useful with age. Software is typically delivered with
undiscovered flaws. Therefore, software maintenance is:
"The process of modifying existing operational software
while leaving its primary functions intact." Maintenance
typically exceeds fifty percent of the systems’ life cycle
cost1. Additionally, software is highly dependent on
defined maintenance rigor and operational life expectancy.
Software maintenance generally includes sustaining
engineering and new function development; corrective
changes (fixing bugs); adapting to new requirements (OS
upgrade, new processor); perfecting or improving existing
functions (improve speed, performance); enhancing
application with (minor) new functions (new feature.)
Since software maintenance costs can be somewhat set by
definition, the implications on cost and schedule must be
evaluated. Development decisions, processes, and tools can
impact maintenance costs. But, generally even a perfectly
delivered system quickly needs upgrades. While software
maintenance can be treated as a level of effort activity, there
are consequences on quality, functionality, reliability, cost
and schedule that can be mitigated through the use of
parametric estimation techniques.