Software evolution l Software evolution is the term used in software engineering (specifically software maintenance) to refer to the process of developing software initially, then repeatedly updating it for various reasons.
Software Evolution2 Importance of evolution l Organizations have huge investments in their software systems - they are critical business assets. l To maintain the value of these assets to the business, they must be changed and updated. l The majority of the software budget in large companies is devoted to evolving existing software rather than developing new software. l Studies indicate that up to 75% of all software professionals are involved in some form of maintenance/evolution activity.
Software Evolution3 Software change l Software change is inevitable New requirements emerge when the software is used; The business environment changes; Errors must be repaired; New computers and equipment is added to the system; The performance or reliability of the system may have to be improved. l A key problem for organizations is implementing and managing change to their existing software systems.
Software Evolution4 l Repair software faults Changing a system to correct deficiencies in the way meets its requirements. l Adapt software to a different operating environment Changing a system so that it operates in a different environment (computer, OS, etc.) from its initial implementation. l Add to or modify the system’s functionality Modifying the system to satisfy new requirements. l Improve the program structure and system performance Rewriting all or parts of the system to make it more efficient and maintainable. Types of changes
Software Evolution5 Software evolution and software maintenance l No standard definitions. l Broad definition of evolution: Generally, software evolution refers to the study and management of the process of making changes to software over time. In this definition, software evolution comprises: Development activities Maintenance activities Reengineering activities l Narrow definition of evolution: Sometimes, software evolution is used to refer to the activity of adding new functionality to existing software. l Maintenance refers to the activity of modifying software after it has been put to use in order to maintain its usefulness.
Software Evolution6 l Repair software faults Changing a system to correct deficiencies in the way meets its requirements. l Adapt software to a different operating environment Changing a system so that it operates in a different environment (computer, OS, etc.) from its initial implementation. l Add to or modify the system’s functionality Modifying the system to satisfy new requirements. l Improve the program structure and system performance Rewriting all or parts of the system to make it more efficient and maintainable. Types of changes “Maintenance” “Evolution” “Reengineering”
Software Evolution7 Evolution processes l Processes for evolving a software product depend on The type of software being maintained; The development processes used; The skills and experience of the people involved. l Proposals for change are the drivers for system evolution. Change identification and evolution continue throughout the system lifetime. Sommerville, Ch. 21
Software Evolution8 Change identification and evolution Sommerville, Ch. 21
Software Evolution9 The system evolution process Release planning Change implementation System release Impact analysis Change requests Platform adaptation System enhancement Fault repair Sommerville, Ch. 21
Typess of maintenance l Corrective maintenance: Reactive modification of a software product performed after delivery to correct discovered problems. l Adaptive maintenance: Modification of a software product performed after delivery to keep a software product usable in a changed or changing environment; Software Evolution10
Cont………….. l Perfective maintenance: Modification of a software product after delivery to improve performance or maintainability. l Preventive maintenance: Modification of a software product after delivery to detect and correct latent faults in the software product before they become effective faults. Software Evolution11