| The Management and Science of Legacy Systems |
|
|
|
A good place to start developing a conceptual view of legacy system maintenance is to review the four types of maintenance as currently defined by the ISO:
Others have attempted to identify more types of maintenance activities, but these have served well to cover the activities of most business IT activities.
Another useful model for looking at maintenance work is defined in terms of software evolution. Professor Meir Lehman, working with others, attempted to define Eight Laws of Software Evolution. In my opinion the first two of these laws are typically the most relevant:
Technical understanding refers to the ability of a developer to understand where and how a program change needs to be made, particularly in programs the developer did not personally author. It is worth noting that studies have documented that 40-60% of maintenance developers’ time is spent trying to understand the programs to be modified. There are two general categories of tools that assist this effort:
Impact Analysis is the process of analyzing the source code to identify the full extent of modifications needed to fulfill Change Requests without adding new defects to the system. Typically this is begun in a project planning phase that identifies the scope of modifications, work effort and risks, and is then completed in the coding phase. Organizations typically have little in the way of defined processes around this critical task - Codelyzer has features that assist in this task and support its systemization.
Testing in software maintenance is divided into feature testing and regression testing. Feature testing is similar to testing for new development but can have the added complexity of coordinating multiple developers performing simultaneous work on the same sections of code, typically due to production support needs. The primary issue in software maintenance testing is that of regression testing – repeatedly re-testing sections of the system to ensure that new defects have not entered the system in areas that were previously performing correctly. This carries three main challenges:
Maintainability is foremost something that needs to be designed into a system when it is first built. It is difficult and costly to improve after the fact, however, preventing the maintainability of a system from degrading is an important aspect of preserving the system's value and should be an explicit and measured goal of maintenance operations. Codelyzer has analytical measurement features that assist in measuring and monitoring a system's maintainability.
|
Knowledge 
