Computing and SE II Chapter 13: Software Maintenance Er-Yu Ding Software Institute, NJU Main Contents 1. 2. 3. 4. 5. What is software maintenance? Life cycles and maintenance Problems of software maintenance The maintenance process Legacy Systems, Reverse Engineer and Re-engineering 1. What is Software Maintenance? • Software Evolution ‘Software development does not stop when a system is delivered but continues throughout the lifetime of the system’ . (Sommerville, 2004) • The system changes relate to changing business and user needs • The system evolves throughout its lifetime through a seamless process • The process is a spiral process involving requirements, design & implementation throughout the lifetime of the system 1. What is Software Maintenance? • IEEE91 Definition: – the process of modifying the software system or component after delivery to correct faults, improve performance or other attributes, or adapt to a change in the environment. • SM is concerned with modifying software once it is delivered to a customer • 1. What is Software Maintenance? Four categories: 1. Perfective maintenance: changes required as a result of user requests (a.k.a. evolutive maintenance) 2. Adaptive maintenance: changes needed as a consequence of operated system, hardware, or DBMS changes 3. Corrective maintenance: the identification and removal of faults in the software 4. Preventative maintenance: changes made to software to make it more maintainable • The majority of SM is concerned with evolution deriving from user requested 1. What is Software Maintenance? 2. Life cycles and maintenance 2. Life cycles and maintenance 2. Life cycles and maintenance 2. Life cycles and maintenance ---Initial development • first version of the software system is developed – may be lacking some features • software architecture is established – likely to persist thought the rest of the life of the program • in one documented instance, we studied a program that underwent substantial changes during its 20 years of existence, but it still possesses the architecture of the original first version. • programming team acquires the knowledge of – application domain, user requirements, role of the application in the business process, solutions and algorithms, data formats, 2. Life cycles and maintenance --- challenges for initial • To build evolvable software development – in the evolvable architecture, ‘the cost of making the change is proportional to the size of the change, not to the size of the overall software system’ – evolvable software can handle unanticipated changes • ‘design for change’ should be predominantly aimed at strategic evolution, not code level servicing 2. Life cycles and maintenance --- Design for change • A strategy to set a certain rules during the Software development. • It eases the maintainability of the system • Three main Factors that we have to ensure during the design of the Software: – Understandability, – Modifiability, – Stability. 2. Life cycles and maintenance --- Evolution • goals – to adapt the application to the ever-changing user and operating environment – to correct the faults in the application – to respond to both developer and user learning • inevitability of evolution [Lehman] • program grows during evolution [Lehner, Lehman] • business setting of evolution – – – – user demand is strong the organization is supportive return on investment is excellent both software architecture and software team knowledge make evolution possible 2. Life cycles and maintenance ---Servicing • the program is no longer evolvable • changes are limited to patches and wrappers – they are less costly – they further deteriorate the architecture. • Senior designers and architects do not need to be available • Tools and processes are very different from evolution • A typical engineer will be assigned only part of the software to support – will have partial knowledge of the system. 2. Life cycles and maintenance --- Phase-out and close down • phase-out stages – no more servicing is being undertaken, but the system still may be in production – the users must work around known deficiencies • close-down – the software use is disconnected – the users are directed towards a replacement. • business issues: – Can any of the software be re-used? – ‘exit strategy’ is needed. – once an organization commits to a system, changing to another is expensive, technically difficult, and time consuming. – What to do with corporate data? 2. Life cycles and maintenance --- System Assessment • To determine whether a business still needs a system the system needs to be assessed for: • business value and system quality • Low quality, low business value – system should be scrapped • Low quality, high business value – should be re-engineered or replaced • High quality, low business value – normal maintenance unless maintenance expensive then scrap • High quality, high business value – normal maintenance 2. Life cycles and maintenance --- Strategic Guidelines for Implementing Alternatives • Scrap the system completely The system is not making an effective contribution to business processes • Leave the system unchanged and continue with regular maintenance Choose when the system is still required, is relatively stable and has few change requests 2. Life cycles and maintenance --- Strategic Guidelines for Implementing Alternatives • Complete redesign and rewrite » Use when: more than 20% of the program must be changed program is being upgraded to new technology » Do not use when: the design and function of the program is not known • Restructuring to improve maintainability » use on highly maintenance prone programs 2. Life cycles and maintenance --- Strategic Guidelines for Implementing Alternatives • Partial restructuring integrated with adaptive maintenance » use for orderly improvement with each system release • Retirement of the system and complete redevelopment » Use when: moving to a new technology the costs of maintaining the software and the hardware exceed the cost of re-development 3. Problems of software maintenance ---Software Maintenance is • Direct software costs – Major economic importance: 40 – 90% important of the total lifecycle costs – 50-80% of the time of an estimated one million programmers or programming managers spent on maintenance. ... [Corbi89] – for every $1 allocated for a new development project, $9 will be spent on maintenance for the life cycle of the project. [Mit] • 3. Problems of software maintenance It ---Software is necessary to add, to the direct costisof Maintenance maintenance, the consequences of the important maintenance... – Deterioration of software • Lost of software structure because of maintenance • May imply software “death” and its benefits • May have catastrophic consequences – Client dissatisfaction • Difficulty to deal with all the modification requests • Even if indirect costs are difficult to 3. Problems of software maintenance --- Software maintenance is • Problems of software maintenance – a neglected topic ! problematic – Too many factors – Maintainability is difficult to measured – Requirements is volatile 3. Problems of software maintenance No interest --- A neglected topic • • Industry – Do you want to work in a software maintenance project ? – Few resources devoted to software maintenance teams – 90% of managers complain about the employees lack of interest • Research – Projects focus on development – Only few conferences and books on software maintenance • University 3. Problems of software maintenance • What Influences Maintainability? ---Too many factors – Application type – System novelty – Turnover of maintenance staff – System life span – Hardware characteristics – Design, code, documentation, and testing 3. Problems of software maintenance --- Maintainability is difficult to • Respect of Metrics measured – Software maintenance should be measured and managed using metrics to reach a quality software. – However, we don't know how to measure maintainability because it’s a service. 3. Problems of software maintenance • Requirements are the foundation --- Requirements is volatileof the software release process. – Changing requirements during the software maintenance process impacts the cost, schedule, and quality of the resulting product. – Build model to make planning of customer communications (predictions). • A focus is made on non volatile requirements. 4. The Maintenance Process begins when a request for change is initiated by a user ends when the system passes testing, is accepted by the user and is released for operation in between there are many activities that must be planned and coordinated by use of Change Management 4. The Maintenance Process Seven-step approach [IEEE-1219]: – Step 1 - Problem/modification identification, classification, and prioritization. • Change Management – Step 2 - Analysis • Step 2.1 feasibility analysis – Impact Analysis • Step 2.2 detailed analysis – System Release Planning – Step 3 – Design (the Changes) – Step 4 - Implementation • Code the Changes – Step 5 - Regression/system testing – Step 6 - Acceptance testing. – Step 7 - Delivery • System Release 4. The Maintenance Process ---Step 1 - Change Management – to uniquely identify, describe and track the status of each requested change – in an organisation » change requests are recorded and tracked through all stages of the maintenance process in a Change Management Tracking System » Project Management and the Quality Assurance team receive information about the status of the Change Requests 4. The Maintenance Process --- Step 1 - Change Management … Change Request » basic tool (manual or electronic) of change management » documents all information about changes » updated throughout the maintenance process to help manage the system release for the analysis of the types and frequency of defects to communicate to maintainers, managers and clients 4. The Maintenance Process --- Step 2.1 - Impact Analysis An Impact Analysis – identifies all systems/system products affected by a change request – develops an estimate of the resources needed to accomplish the change Steps: 1. Evaluate Change Requests 2. Estimate Resources 4. The Maintenance Process --- Step 2.1 - Impact Analysis ... Aims: • to determine the scope of the requested change for planning and implementation of the change • to develop accurate estimates of resources • to analyse cost/benefits of the change • to communicate the complexity of the change 4. The Maintenance Process --- Step 2.1 - Impact Analysis ... 1. Evaluate Change Requests • look for potential impact on: - • existing systems, other systems, hardware, documentation, data structures and humans without analysis of the changes the change may insert defects that are not immediately apparent Problems: • documentation doesn’t exist and must be created • documentation is out of date or incorrect leading to incorrect design decisions 4. The Maintenance Process --- Step 2.1 - Impact Analysis ... 2. Estimate Resources In an organisation, a project manager must estimate: – – – – Number of people required to complete the system The equipment required eg PCs, printers, copiers etc Other facilities such as offices, support staff etc Cost of the system etc 4. The Maintenance Process --- Step 2.1 - Impact Analysis ... To Estimate Resources need to know: – Size of required changes measured as – – – LOC and/or Function Points and/or Proxies such as classes and routines (Impact Analysis will give this information) – Historical information – – eg Productivity Rate, Average LOC per Routine Time required to complete the system changes – Size of system and productivity rate 4. The Maintenance Process --- Step 2.2 - System Release Planning Aims: » to establish the schedule of system releases » to determine the contents of a system release System Release/Version Description Document » describes the contents / timing of a system release » communicates between maintainers and users » used by operations to plan hardware, operational procedures and backup procedures 4. The Maintenance Process --- Step 3 - Design Changes Aims: • to develop a revised logical and physical design analyse and design the changes update the documentation update the configuration management system update the change request for management • to design the changes for each of the different types of maintenance 4. The Maintenance Process --- Design Changes … For Corrective Maintenance: – includes all repairs of defects in an existing system Defects can stem from: » requirements specification errors » design errors » coding errors About 80% of all problems stem from requirements and design 4. The Maintenance Process --- For Corrective Maintenance … Problems repairing defects: » cleanly repairing a defect repairing a defect has a 20-50% change of introducing another defect because: Ripple-effect may be overlooked person who makes the repair is not generally the person who wrote the code » increased testing Every solution causes new problems 4. The Maintenance Process --- Design Changes ... For Adaptive Maintenance: Aims to evolve systems to meet user and business needs – Essentially the same as a new development except that system understanding is needed first » Requirements then Design: - Systems, Data, Program and Module At each stage conduct design and code reviews. 4. The Maintenance Process --- Design Changes ... For Perfective Maintenance ... – includes all efforts to polish or refine the quality of the software or the documentation – includes re-engineering » rewriting and upgrading documentation » restructuring poorly written code – important that the improvement reduces the system maintenance costs 4. The Maintenance Process --- Step 4 – Code the Changes Aim: to clarify existing code and simplify changing it Re-Engineering Source Code • Restructuring • Redesign and rewrite code • Remember design and code reviews 4. The Maintenance Process --- Step 5,6 – Test the Changes Maintenance / Development Differences For Maintenance: only changes need to be reviewed only new test cases that exercise the changes need to be developed existing and new test cases are required to test the changes test results are compared against previous test results (Regression Testing) 4. The Maintenance Process --- Step 7 - System Release Aims: • package the system for release including: documentation software training other products hardware • deliver the system to the user install with backup procedures 5. Legacy Systems, Reverse Engineer and Reengineering ---Legacy Systems • Legacy problems – a legacy system is typically: – – – – – very old and large has been heavily modified based on the old technology documentation not be available none of the original members of the software development team may still be around – often support very large quantities of live data – the software is often at the core of the business and replacing it would be a huge expense. • Dealing with legacy system is very hard and there are some solutions. 5. Legacy Systems, Reverse Engineer and Reengineering --- Legacy Systems • Solutions for the legacy system: – discarding the legacy system and building a replacement system; – freezing the system and using it as a component of a new larger system; – carrying on maintaining the system for another period; – modifying the system to give it another lease of life – Reverse Engineer the legacy system and develop a new software suite. the most fruitful solution! 5. Legacy Systems, Reverse Engineer and Reengineering • --Reverse Engineering Definition: Reversing Engineering – The process of analyzing a subject system to identify the system’s components and their interrelationships, and to create representations of the system in another form or at higher levels of abstraction.( by Chikofsky & Cross) • Two types of Reverse Engineering: 1. Redocumentation: the creation or revision of a semantically equivalent representation within the same relative abstraction layer; 2. Design Recovery: involves identifying meaningful higher level abstractions beyond those obtained directly by examining the system itself. • The main motivation is to provide help in program comprehension 5. Legacy Systems, Reverse Engineer and Reengineering • --Reverse Engineering reverse engineering has been successfully applied include – identifying reusable assets – finding objects in procedural programs – discovering architectures – deriving conceptual data models – detecting duplications – transforming binary programs into source code – renewing user interfaces – parallelizing sequential programs – Translating, downsizing, migrating and wrapping legacy code 5. Legacy Systems, Reverse Engineer and Reengineering --- Re-engineering • “Software Re-engineering is any activity that: (1) improves one’s understanding of software, or (2) prepares or improves the software itself, usually for increased maintainability, reusability, or evolvability.” • Re-engineering can involve: • Re-documenting • Organising and restructuring the system • Translating to a more modern programming language • Modifying the structure of the data • The old system forms the specification for the new system 5. Legacy Systems, Reverse Engineer and Reengineering ---Reverse engineering and reengineering. The End • Recommend papers – 《software maintenance》 • The next lecture – Project Management