Software Maintenance: Concepts And Practice, Second Edition

Given the problems of the maintenance crisis, it is important to learn the lessons of the past and to build new systems that will avoid past problems. This section of the book looks at how to build maintainability into systems and what tools are available to help both the developer and the maintainer to provide better and more reliable systems.
If there is one thing we have learnt as the disciplines of Computer Science, Software Engineering and Software Maintenance have developed, it is that software systems evolve. A program only ever ceases to evolve when it is no longer used.
Given that evolution is an integral part of software systems, we need no longer waste time in the unattainable ideal of the finished system , but can instead aim for the program that can change without loss of quality. Experience has shown what sorts of things compromise the integrity of a program quick fixes causing unforeseen ripple effects, inadequate resources to address the problem of quick fixes, badly written or misunderstood code, inadequate resources, out of date documentation and so on.
In all areas we can look at both prevention and cure, but we must be realistic. We could say that resources must be available to allow all changes to be implemented via a more sophisticated model than quick-fix, but that doesn t address the case where quick-fix is the only option. The live system...