The document defines software maintenance and categorizes it. Software maintenance involves changes to software away from the previous implementation, rather than just restoring it to its original state. There are three main types of maintenance: corrective, adaptive, and perfective. Software maintenance can also be abstracted into two broad categories: corrective and enhancement. Corrective maintenance leaves functional specifications unchanged, while enhancement maintenance changes original specifications but leaves primary functions intact. The document notes that correcting bugs is a small part of actual maintenance effort, and that successful maintenance depends on gaining an understanding of the software system through reviewing code, documentation, and user requests.