
[ Summary | Objectives & Results | Work Packages | Deliverables | Partners | EC Projects | Re-Engineering Links ]
Managing and changing existing systems is critical to industry because more and more of their activities are dependant on their software systems. As the business environment changes, these systems must reflect these changes. Furthermore, organisations now realise that their software systems are valuable assets and they wish to increase their return on investment in these assets. This requires the reuse of significant sub-systems across many different applications. These sub-systems must therefore evolve to meet a range of different requirements. Finally, systems must evolve as new business processes are developed. Indeed, the difficulties of changing existing software is perhaps the most significant barrier to process change in current industrial, commercial and public organisations.
The scale of this problem is immense. It has been estimated (Ulrich 1990, The evolutionary growth of software re-engineering and the decade ahead, W.M. Ulrich, American Programmer, Oct 1990), that there were approximately 120 billion lines of source code in current operational systems which must be maintained. This number has undoubtably increased and is increasing at an accelerating rate. Organisations spend an increasing proportion of their resources (65%+ of software effort) on system evolution so that, in Europe alone, the annual costs of system evolution are of the order of 16 BECUs (based on a Europe-wide software project spend of 25 BECUs).
The market for tool support for software evolution which has resulted has been addressed by a number of research projects and commercial products which have focused on software re-engineering. Software re-engineering is principally concerned with code comprehension and evolution. Tools are available which allow information to be extracted from existing undocumented source code and which reorganise code with a tangled control structure into a more structured form. These products e.g. IBM Cobol SF (IBM), Retrofit (Peat Marwick), have mostly been concerned with COBOL programs in the business domain although language-independant meta-tools, such as REFINE (Reasoning Systems) are also available. There are also tools available, such as Bachman re-engineering Product Set (Bachman Information Systems), which may be used for database re-engineering from hierarchical or CODASYL databases to more modern relational systems.
Some CASE systems (e.g. HoodNICE with the ReverseNICE capability) include reverse engineering facilities where a system design can be recreated (with some manual assistance) from source code. However, we do not know of any current tools which can handle the reverse engineering of system families. System families are created when systems evolve and new versions are created. In source code, these different versions are often represented using conditional compiler directives. The lack of support for system family re-engineering represents a significant gap in the current market for CASE and re-engineering tools.
Most existing re-engineering products are based on source-code analysis and restructuring. However, we perceive a number of market trends which require support which goes beyond the facilities offered by code-oriented re-engineering tools. These trends are:
These trends constitute the fundamental rationale for the work which we propose here. While code analysis tools are important, they provide only a partial solution to the problems of evolution. Organisations urgently need support and guidance on how to impprove their evolution processes. They are reluctant, however, to make large capital investments in specialised tool support which may have a limited lifetime and applicability as they may have already invested in CASE tools and code re-engineering support.
The application partners in the RENAISSANCE project are already involved in providing re-engineering solutions but they identified a number of key problems which they face and which are not addressed by current technology:
We strongly believe that the most cost-effective way to address these problems is to provide an evolution method which addresses these problems. This should exploit existing CASE support and should not require high capital investment in new tools. Because of the very high costs of evolution, even a 5% reduction in costs from such a method would be very significant. Of equal importance, the use of an evolution method will speed up the evolution process thus allowing software development groups to be more responsive to their customers' needs.