• No results found

Legacy System and Software Evolution

Chapter 2 Background and Related Work

2.3 Legacy System and Software Evolution

Software systems need continuous evolvement, in order to deal with constantly changing software requirements. As a process of conducting continuous software reengineering, software evolution is repeated software reengineering [183]. Software reengineering technology involves reverse engineering and forward engineering, and has becoming a practical solution to the problem in legacy system evolution.

Legacy systems pose many conventional challenges to software maintainers. Nevertheless, in order to reduce cost of software development, organisations have to maximise the benefits from legacy assets (software system). The increasing cost of managing legacy systems together with the need to preserve business knowledge has meant that renovating legacy systems has become an important research topic over the years. Thus, maintaining functionalities and keeping up with changing business or technical conditions are considered as two important and urgent tasks.

2.3.1 Legacy System

emerging operating software and hardware environments, they are subject to evolve. The maintenance scope has to cover not only maintenance of the existing functions, but also modifications to the current architecture and functions so that adding requirements will be fulfilled. In addition to such changes, non-functional changes especially when security as a requirement is concerned in this thesis may also be a consideration typically when software system entails adaption of a new computing environment. Bennet defines legacy systems informally as “large software systems that we don’t know how to cope with but that are vital to our organisation [14]”, while Brodie defined it as “any information system that significantly resists modification and evolution [18]”. Whichever, a legacy system is the one that is still valuable, but is difficult to maintain. A significant number of legacy systems remain in operation because they are critical to the business processes which they support. As Warren stated “the combination of extended lifetimes and poor maintainability means that legacy systems are expensive to change and in many cases, they cannot accommodate emerging requirements. This is clearly an undesirable situation which, until recently, has been tackled by replacing the system or attempting to maintain it [173].”

On one hand, it is dangerous to replace a legacy system since there may exist a risk that vital business knowledge may be lost since it is embedded in the old systems very well. On the other hand, legacy system is difficult to maintain and expensive to change. Reengineering as the process of software evolution is a relative new approach to solve the two extremes of system replacement and continued maintenance by improving the system in some way and results in a system which is more responsive to change.

Compared with replacement, the costs of reengineering a system are typically lower. Reengineering can also reduce the major risks resulted from replacement and continued maintenance. Reengineering starts from the current legacy system so as to the risk of losing vital business knowledge built in it can be reduced. Different from maintenance, the result of reengineering is an evolved system which can meet the new requirements in a cost effective manner [173].

2.3.2 Software Evolution and Reengineering

Software evolution is the process of modifying an existing software system to satisfy an enhanced set of requirements. Software reengineering is a systematic way to perform software evolution. In particular, Chikofsky and Cross define reengineering to be “the examination and alteration of a subject system to reconstitute it in a new form and the subsequent implementation of the new form [27]”. Altering existing systems involves the majority of all software development time and expense, and evolution comprises the majority of system alteration (maintenance) activities.

When evolving a legacy system, the artefacts of the system have to be taken into consideration which is different from developing a new system. The major challenges involve ensuring the new requirements are consistent with those of the existing system, maintaining system’s architecture, code review and understanding of the current system, and maintaining the design integrity in conceptual level. The legacy systems can be migrated to a new platform, language, hardware, operating system, or to a new software development paradigm, or integrating with other systems with the help of reengineering technology.

Software evolution comprises continuous reengineering process. The difference between them lies in that reengineering is a single change cycle, while evolution is a broader concept which implies the repeated reengineering activities and maintenance activities. Software reengineering technology is the practical solution to the problem of evolving legacy system to meet the ever-changing system requirements. There is a trend that the needs and costs of changing software are increasing with the rapid development of computer software and hardware.

Software reengineering is an integration of reverse engineering and forward engineering. Bachman [9] introduced a chart of software reengineering cycle for better understanding the process of software reengineering, shown as Figure 2-1.

Reverse engineering is the process of comprehending a target system by identifying the components and their inter-relationships within the system and creating representations of the system in another higher level of abstraction form.

from high level abstraction, design to the implementation. It aims to improve a software system by taking consideration of new functional and non-functional requirements for the migrant system. Forward engineering consists of a sequence of activities, including new requirements elicitation, system transformation, and finally system deployment in the new environment.

Requirements Design Implementation Requirements Design Implementation Respecify Redesign Reimplement Reverse Engineering (Examination) Forward Engineering (Reconstitution)

Existing System Target System

Functional restructuring (alteration)

Figure 2-1 Software Reengineering Process [9]

The following research areas fall into reverse engineering domain:

• Reengineering requirement aims to clearly identify the reengineering objectives in the legacy system to be migrated.

• System analysis involves source code analysis and abstraction models to evaluate the legacy systems from the functional, technical and architectural aspects points of view.

• Positioning involves improving the qualities of the legacy system by restructuring without changing the external behaviour.

• Re-documentation is the process of changing the legacy system in a different view while keeping it in a semantically equivalent representation for better understanding.

• Design recovery focuses on identifying the meaningful abstraction of the system in a higher level and associating code with specific function.