The process of modifying a software system or component. There are three classes.
Perfective maintenance incorporates changes demanded by the user; these may, for example, be due to changes in requirements or legislation, or be for embedded applications in response to changes in the surrounding system. Adaptive maintenance incorporates changes made necessary by modifications in the software or hardware (operational) environment of the program, including changes in the maintenance environment. Corrective maintenance is the successful repair of faults discovered in the software.
Maintenance for software always involves a change in the software. This may be effected at the coding level, or may require significant changes in design. Regression testing of the software follows maintenance as part of a reverification and revalidation activity. Software maintenance is a prodigious source of new software faults, so good quality control through software engineering is essential.