160 likes | 414 Views
Reengineering. Horseshoe Model. Reverse Engineering. Forward Engineering. High-level (Abstract) View. New System. Existing System. Reengineering Process. Reengineering Process. 1. Reverse Engineering (Program Understanding) Reverse Engineering Collect Data Browsing
E N D
Horseshoe Model Reverse Engineering Forward Engineering High-level (Abstract) View New System Existing System Reengineering Process
Reengineering Process • 1. Reverse Engineering (Program Understanding) • Reverse Engineering • Collect Data • Browsing • 2. Forward Engineering (Software Evolution) • Redocumentation • Restructuring • Remodularization [
Reverse Engineering • “Reverse engineering is the process of analyzing a subject system to • identify the systems’ components and their interrelationships and • create representations of the system in another form or at a higher level of abstraction” • Simply: Extract and Abstract and Present • Does not change the system.
Reverse Engineerin • Information Sources: • Code • Documents • Database Schema • User Interviews • Recovered Knowledge • Business Rules • Control flow • Classes and Patterns • Modules and Dependencies • Architecture
Reverse Engineering Strategies - Top Down • Top-down • Take high-level information (e.g. the documented architecture) and use it as the basis for reverse engineering the lower levels • Unpopular - Usually costly because it requires analysis of the application domain. • Knowledge based - searches a database of domain concepts and looks to match it with code.
Reverse Engineering Strategies - Bottom-up • Bottom-up • Start with the source code and apply various techniques to create high level abstractions • Examples • Rigi- After gathering facts about the source code, organize based on basic software engineering principles. • Pattern-based • Concepts from File names • Extensive Research in Automating Reverse Engineering at this level. Limits to Success? Missing semantics not explicit in the source code.
Reverse Engineering Strategies - Hybrid • Hybrid Approach • Take information from the high-level, take facts from the source and works toward making a model that matches both. • PBS Bookshelf - start with a conceptual model and facts about the system. Create a model around this information.
Reverse Engineering- Tools • Maintenance Workbenches • Typically consist of a DB containing an abstract syntax of the source • provides static analysis (e.g. call graphs) • a debugger • filters - show only relevant information, limited querying abilities. • Navigation tools or Browser • Program Slicing • Transformations (porting)
Forward Engineering • Strategies for moving forward: • Ignore • Replace • Rewrite (“Cold Turkey”) • Incremental (“Chicken Little”) • Evolutionary (“Butterfly”)
Forward Engineering (cont’d) • Ignore • Don’t do anything. No other alternatives currently feasible. • Replace • Scrap old system in favor of an OTS system. (Popular Option) • Rewrite • Scrap old system and start coding from scratch - high cost, high risk
Forward Engineering (cont’d) • Incremental • Develop a ‘skeleton’ for the new system • Incrementally phase out parts of the old system and replace with the new one. • Using Gateways and Wrappers • Evolutionary • Phase in new features over time • New functionality is added bit by bit.
Forward Engineering-Development • Different from new development • Already existing implementation that (usually) works. • Similar to new development • Usually a manual process • Not many good tools available • On-going Research
Forward Engineering - Tools • Making Changes • Transformation systems • Essentially search and replace • Some Y2K Tools • Planning tools • McCabe Reengineer (http://www.mccabe.com) [OhWo98] • Classify Modules / Files on a complexity scale (red, yellow, green) • Restructuring tools • C to C++, C++ to Java. • At code level, simply follow specification • Still not simple, semantic differences between languages, inheritance issues, etc…
Reengineering Tools & Technology • The Simple Tools that can also help out: • grep • cscope • cxref
examples • Recent prominence because of Y2K problem • Transition from Mainframe to Client/Server • Object-oriented Programming • Large demand from industry • Lot of research areas • Visualization • Machine recognition of ‘concepts’ and ‘semantics’ above programming level • More powerful automated reengineering tools