---- *Definitions* Software maintenance is defined by the ANSI/IEEE Std. 729-1983 and IEEE Std. 1219-1998 as: * _modification of a software product after delivery to correct faults, to improve performance or other attributes, or to adapt the product to a changed environment._ The ISO Std. 12207-1995 defines software maintenance as follows: * The software product undergoes modification to code and associated documentation due to a problem or the need for improvement. The objective is to modify the existing software while preserving its integrity. The textbook PracticalSoftwareMaintenance (p, 356) provides a more elaborate definition: * _the totality of activities required to provide cost-effective suport to a software system. Activites are performed during the predelivery stage as well as the postdelivery stage. Predelivery activities include planning for postdelivery operations, supportability, and logistics determination. Postdelivery activities include software modification, training, and operating a help desk._ ---- *Resources* [[EvolutionResources][A detailed list of resources on software maintenance and evolution]] Other resources on software maintenance include: * JournalOfSystemsAndSoftware * Chapter 6 of the SWEBOK guide gives an overview of the field. ---- *Phases of software evolution* KeithBennett and VaclavRajlich ( _A Staged Model for the Software Lifecycle_ , IEEE Computer, July 2000, pp 66-71) argue that software maintenance is not a single phase, but should be thought of as consisting of several _stages_: * Initial development (before maintenance) * SoftwareEvolution: the engineers extend the capabilities and functionality of the system to meet needs of its users, possibly in major ways * Servicing: minor defect repairs * Phase out: no more servicing, but still generating revenues * Close down: death. _Evolution could well be a phase in which ExtremeProgramming would be adopted (and XP would make initial development as short as possible, at most a couple of weeks)._ --ArieVanDeursen ---- *Research areas* Software maintenance research areas from the SoftwareMaintenanceAndEvolutionARoadmap include: * System dynamics, modeling changes over time * SoftwareProcess * Impact analysis * ProgramUnderstanding * Management and people issues * ReverseEngineering * Validation and SoftwareTesting. ---- CategorySoftwareEvolution | Contributions by ArieVanDeursen and TomMens