Maintenance & Reengineering
by Ronni Kahalani, Copenhagen School of Design & Technology.
With inspiration from the book Software Engineering - A Practitioner's Approach.
Regardless of its application domain, size or complexity,
computer software evolves over time.
Change drives this process and changes occurs continually.
Who am I?
Thank you for stopping by.
I’m Ronni. I hope you’re well and wish you a safe and worthy journey.
This presentation is part of the Software Engineering Series, from my lectures at Copenhagen School of Design & Technology.
You can view the Introducing Myself, if you want to know a little more about who I am.
All my presentations and materials are free and available at my blog post: Software Engineering.
Don’t let me uphold you,
continue your journey, go to next slide.
2
Agenda
Intro
Regardless of its application domain, its size, or its complexity, computer software will evolve over time.
Change drives this process and occurs when:
Intro
Detailed analyses of industry-grade software and systems in an effort to develop a unified theory for software evolution.
- by Manny Lehman and his colleagues over the past 40 years.
* 9th Edition
Quick Look
Quick Look
Why is it important?
What are the steps?
Quick Look
Software Maintenance
It begins almost immediately, as software is released to end users and…
Software Maintenance
It begins almost immediately, as software is released to end users and…
They'll need a few enhancements to make it work in their world.
Software Maintenance
Challenge of software maintenance has begun:
As time passes, your organization finds that it's spending more money and time maintaining existing programs than it is engineering new applications.
Software Maintenance
Software organization to expend as much as 60 to 70 % of all resources on software maintenance.
Why so much maintenance is required and why so much effort is expended?
Software Maintenance
Types of software maintenance
Software maintenance tasks
Software Maintenance
Both analysis and design lead to an important software characteristic that we call maintainability.
Challenges every senior software engineer has experienced:
Software Maintenance
Maintainability is a qualitative indication of the ease with which existing software can be corrected, adapted, or enhanced.
What is maintainability?
Reverse Engineering
Extracting design information from source code
Reverse Engineering
Reverse engineering can extract design information from source code, but the abstraction level, the completeness of the documentation, the degree to which tools and a human analyst interact together, and the directionality of the process are highly variable.
Reverse Engineering Process
Reverse Engineering
Abstraction level
Completeness
Reverse Engineering
Interactivity
Directionality
Reverse Engineering
Extract abstractions
Reverse Engineering to Understand Data
Occurs at different levels of abstraction
Internal data structures
Focus on the definition of classes of objects
For example, record structures, files, lists, and other data structures often provide an initial indicator of classes.
Database structure
Reengineering one database schema into another requires an understanding of existing objects and their relationships
Following may be used to define the existing data model as a precursor:
Finally, map the old database structure into a new database structure
Reverse Engineering to Understand Processing
Begins with an attempt to understand and then extract procedural abstractions represented by the source code.
The code is analyzed at varying levels of abstraction:
The overall functionality of the entire application must be understood before more detailed reverse engineering work occurs.
Reverse Engineering to Understand Processing
Look for sections of code that represent generic procedural patterns.
In almost every component…
Within each of these sections, you can encounter smaller patterns:
Reverse Engineering User Interfaces
Redevelopment of user interfaces are the most common types.
Merlo and his colleagues suggest 3 basic questions that must be answered:
Reverse Engineering User Interfaces
It is important to note that a replacement GUI may not mirror the old interface exactly, in fact, it may be radically different.
It is often worth while to develop a new interaction metaphor.
For example
Reverse Engineering – Software Tools
Helps software developers understand complex or legacy C and C++ software: https://www.imagix.com/
Help you understand, navigate and maintain source code�(Ada, Fortran, C, C++, C#, PHP, HTML, JavaScript, Python and Java�https://www.scitools.com/
Finally…
It has been created by software engineers who recognize that they may not be around when changes must be made.
Therefore, the design and implementation of the software must “assist" the person who is making the change.
Questions?
Anything? What’s on your mind? Come on ask me anything…
Feedback?
Thank you for your precious time.
I hope it was worth it and would love to get your feedback.