240 likes | 377 Vues
This comprehensive guide explores the critical phases of software evolution, focusing on the transition, deployment, maintenance, and re-engineering of software systems. It addresses key activities during the transition phase, including user training and technical support, as well as the importance of consistent maintenance to ensure longevity and efficiency. The guide emphasizes utilizing deployment diagrams for effective communication of architectures and outlines the significance of re-engineering legacy systems to adapt to modern environments. Gain insights into best practices for managing the software lifecycle strategically.
E N D
Software Evolution • The Transition Phase • The show hits the road: • Deployment • Maintenance • Re-engineering • A final word… • An airplane is nothing more than a collection of parts having an inherent tendency to fall to earth, and requiring constant effort and supervision to stave off that outcome. – K. Gorlen UNIX System V
The Transition Phase • In the UP transition phase, the system is transferred to the user community. • It’s activities include: • Deployment • Technical support and training • Maintenance • Software Systems evolve over time.
Relative Effort: Phases data from Schach, 2002
System Deployment • Deployment is not the end of the road. • Packaging/distribution • Installation • Systems are deployed as an architecture of physical devices and software environments.
Deployment Diagrams • Their physical architectures have the following elements: • Physical devices • Software execution environments • Software artifacts • Communication lines • UML Deployment Diagrams can be used to communicate these architectures.
Example: Deployment Diagram Example adapted from Fowler, 2003
Outline • Deployment Diagrams • Nodes • Artifacts • Associations • Using Deployment Diagrams
Nodes • Deployment diagram nodes can represent: • Physical devices • Software execution environments • These stereotypes are helpful, but are not standardized.
Artifacts • Artifacts are the physical manifestations of software components. • They are stored on/in nodes.
Assocations • Associations represent communication paths and protocols.
Using Deployment Diagrams • Use deployment diagrams to show: • what is deployed where; • how the communication flows. • Any non-trivial deployment can benefit from their use.
Legacy Systems • Systems can eventually become legacy systems. • Legacy systems: • are entrenched; • have ceased to evolve; • continue to be used because their replacement cost is too high.
System Maintenance • Maintenance sustains a software system throughout its life-cycle. • Software deteriorates as it evolves. • Reasons for post-delivery modification: • Corrective maintenance • Perfective maintenance • Adaptive maintenance
Relative Effort: Maintenance Types data from: Schach et al, 2003
The Joy of Maintenance • Maintenance is seen as • an after-the-fact activity • unrelated to the software development • Problems: • Users are usually dissatisfied. • Problems are frequently caused by someone else. • You’re on the bottom rung of the life-cycle food-chain. • There are limited support tools.
Change Management Tools • Managing defects • Fixing defects • Testing fixes
Regression Testing re·gres·sion (re -greh shun) n. Relapse to a less perfect or developed state. • Changing software tends to break things. • Regression testing checks that the system still operates properly after change.
Engineering for Evolution • Good software engineering should anticipate evolution. • Silver bullets? • “Heavy” software engineering? • Object-Oriented design? • Agile development?
Re-Engineering • Re-implementing an existing system, with minimal analysis and design, e.g.: • Re-documenting a system • Re-structuring a system • Translating a system code to a newer language • Porting a system to a new platform • This can be cheaper than developing a new system or fixing an old one.
Reasons to Re-Engineer • To support a more modern platform • To move to a better supported language • To improve efficiency • To make the system more understandable in order to support maintenance
Types of Re-Engineering Automated Code conversion Manual program/data restructuring CheapExpensive Automated Program restructuring Manual architectural restructuring from: Sommerville, 2001
Reverse Engineering • The process of deriving abstract formal specifications from the source code of a legacy system • This is used to support: • System re-engineering • System replacement
What’s the Big Idea Fredrick P. Brooks (1931- )The Mythical Man-Month • Brooks considered evolution to be one of the essential characteristics of software systems. • He gives the following advice to young managers: Numquam incertus; semper apertus image from: http://www.unc.edu/