Search This Blog

Wednesday, November 14, 2007

Software Reengineering

The Myth of Software Reengineering

What is Software Reengineering?

Software systems development is never complete. Changes even though not mandatory, but remain desirable even after the product kicks off the market. Reengineering is the analysis of existing Software system and modifying them to constitute a new form. The goal of reengineering is to understand the functionality and implementation of existing Software and re implement to improve System functionality, performance. System Replacement cost is expensive. Hence Reengineering is often a better choice.

The four general re-engineering objectives:

· Improve maintainability
· Migration
· Improve reliability
· Functional enhancement


As systems grow, maintainability cost also increases. An objective of reengineering is to re-design the system to improve the functionality, performance of the system. The software’s we use are getting outdated every now and then. Software must also accommodate the need to migrate to new hardware platform, operating system, or language.

As maintenance and change introduces new bugs, software reliability should be enhanced for he re-designed software. Reengineering is not targeted for functionality enhancement but it can be used as an opportunity for adding functionality for the existing system.

Re-engineering Steps

Several models are available for re-engineering but from the scratch our ultimate goal is to analyze the system, understand the functionalities (Primary and Contributory). Primary functionalities define the basic functionality the system should exhibit. Ex: changing font size is a primary functionality for any word document but importing an excel sheet into a word document is a secondary functionality. While analyzing the system we will identify the functionalities. Also, the Requirements documents and other documents will be used for this process. The ultimate objective of analyze is to get familiarized with it.

We have software in different domains Banking, Finance, Insurance…We have several Life cycle models. Some models may be conventionally applied to certain domains. So, The next step would be selection of appropriate model to re-work the code.

We will arrive at a generalized model that would be used as a model for re-engineering any software

ANALYSIS AND REDESIGN
Redesign
Implementation
Testing


ANALYSIS AND REDESIGN

Analysis is concerned with identifying the functionalities. It’s closely associated with reverse Engineering. Reverse engineering seeks to retrieve information such as design information and code. Reverse Engineering is the first stage of re-engineering process to explore the software system, identifying the interrelationships between different parts of that system, identifying reusable components. The goal of reengineering is minimization of expenditure and software reuse.

The initial stage of analysis is a reverse engineering activity and the later stage would deal with proper analysis and thereby proper understanding of the software. The Reengineering team will identify the needs and reshape these into requirements. Like the ordinary Software Analysis the results are also monitored, documented. Analysis may also reveal new functionalities. A well documented analysis will contribute quality design, helping development team in building reliable Software.

After the requirements have been specified as output of analysis, the next activity re-designing takes place.

Redesign

Redesign may add new design elements to add functionality to the system. Effective and better solution is the objective of redesign. Redesign has similar activities as the design phase any Software Engineering Project. The difference lies in how we are considering old design elements and integrating them in the new design. Re-design of object oriented system would focus on identifying relations between parts of the system and how they are related. If the design is compatible then the time required to deliver the Software would be short.

Implementation

Implementation here is a forward engineering process. Forward Engineering is similar to normal software development process, staring from traditional process of moving from high-level abstractions and logical implementation independent designs to the physical implementation of a system.

Forward Engineering uses new design developed during analysis and design phase to move from high level design to low level implementation of desired system.

The difference between reverse engineering and forward engineering given by Sommerville is illustrated in the figure








Forward Engineering moves from a high-level abstraction and design to a low level design implementation. Forward Engineering consists of modularization, coding and testing steps.

Modularization: The extent to which Software can be divided into modules which have high internal cohesion and low coupling. The result of modularization is maintainable code and reduced program complexity.

Implementation: The process of converting design into executable Software System by programming and related activities. Quality cannot be added during test or maintenance phase. We must strive to produce quality code in this stage.

Testing: Testing is not limited to finding bugs. Testing should be used to ensure quality and modify the system through feedback so that errors are prevented, rather than corrected. We have discussed enough about testing in the previous issues.

So far we have discussed Re-engineering, Reverse Engineering and Forward Engineering. Three of them are related in the following manner.




Fig. 1 Reeingineering model


So far we have discussed reengineering of a system. The root cause for reengineering is BPR (Business Process Reengineering). BPR may occur to better compete in market, experience, management decisions to use alternative approaches. BPR may also be result of growth or rearrangement of company.

Epilogue

“Software Never Dies”. The wrong perception is “Software is easy to Change”. This article is a tip of the iceberg about Software Reengineering. Software Development requires creativity, precision, willingness to learn and analyze new things.

No comments:


Google