Software maintenance is a process to update the software started from specified tasks, implemented as a maintenance process (MaintenanceWare) to meet the selected quality and reliability (error-less) requirements for necessary the software.

Change request (CR) is a major driver for maintenance in typical situations. For changing code the following is a typical process:

  1. CR is formulated (MaintenanceWare)
  2. Necessary information about CR is collected (KnowledgeWare)
  3. Problem is recoqnized either using created models (ModelWare) or finding the patterns from code (Grammar related search)
  4. Problem area is analyzed (ofen simulated by SimulationWare) in order to validate the most relevant impacts and possible changes
  5. Changes are done.
  6. Software is checked again, using new tests and older regression tests.

The main data flow starts (rather often) from code (GrammarWare). Using it models are created (ModelWare) in order to create knowledge (KnowledgeWare), where simulation is needed in order to understand control flows, data flows and object oriented features. This simulation/excamination process (SimulationWare) can be made manually or by tools (Maintenance ToolWare). This process shows the developer the most critical parts for changes, the change candidates (CC).