360 likes | 964 Views
Software Evolution . Managing the processes of software system change Objectives To explain different strategies for changing software systems Software maintenance Architectural evolution Software re-engineering To explain the principles of software maintenance. Software change.
E N D
Software Evolution • Managing the processes of software system change • Objectives • To explain different strategies for changing software systems • Software maintenance • Architectural evolution • Software re-engineering • To explain the principles of software maintenance
Software change • Software change is inevitable • New requirements emerge when the software is used • The business environment changes • Errors must be repaired • New equipment must be accommodated • The performance or reliability may have to be improved • A key problem for organisations is implementing and managing change to their legacy systems
Software change strategies • Software maintenance • Changes are made in response to changed requirements but the fundamental software structure is stable • Architectural transformation • The architecture of the system is modified • Generally from a centralised to a distributed architecture • Software re-engineering • No new functionality is added to the system but it is restructured and reorganised to facilitate future changes • These strategies may be applied separately or together
Software maintenance • Modifying a program after it has been put into use • Maintenance does not normally involve major changes to the system’s architecture • Changes are implemented by modifying existing components and adding new components to the system
Types of maintenance • Corrective • Maintenance to repair software faults • Adaptive • Maintenance to adapt software to a different operating environment • Perfective • Maintenance to add to or modify the system’s functionality
Maintenance costs • Usually greater than development costs (2* to 100* depending on the application) • Affected by both technical and non-technical factors • Increases as software is maintained • Maintenance corrupts the software structure, making further maintenance more difficult • Ageing software can have high support costs (e.g. old languages, compilers etc.) • Think of your software as continuously evolving
Maintenance cost factors • Team stability • Maintenance costs are reduced if the same staff are involved with them for some time • Contractual responsibility • The developers of a system may have no contractual responsibility for maintenance so there is no incentive to design for future change • Staff skills • Maintenance staff are often inexperienced and have limited domain knowledge • Program age and structure • As programs age, their structure is degraded and they become harder to understand and change
Architectural evolution • There is a need to convert many legacy systems from a centralised architecture to a distributed (e.g., client-server) architecture • Change drivers • Hardware costs. Servers are cheaper than mainframes • User interface expectations. Users expect graphical user interfaces • Distributed access to systems. Users wish to access the system from different, geographically separated, computers
Legacy system structure • Ideally, for distribution, there should be a clear separation between the user interface, the system services and the system data management • In practice, these are usually intermingled in older legacy systems
Distribution options • The more that is distributed from the server to the client, the higher the costs of architectural evolution • The simplest distribution model is UI distribution where only the user interface is implemented on the server • The most complex option is where the server simply provides data management and application services are implemented on the client
Software re-engineering • Reorganising and modifying existing software systems to make them more maintainable • Re-structuring or re-writing part or all of a legacy system without changing its functionality • Applicable where some but not all sub-systems of a larger system require frequent maintenance • When to re-engineer • When system changes are mostly confined to part of the system then re-engineer that part • When hardware or software support becomes obsolete • When tools to support re-structuring are available
Re-engineering advantages • Reduced risk • There is a high risk in new software development. There may be development problems, staffing problems and specification problems • Reduced cost • The cost of re-engineering is often significantly less than the costs of developing new software
Source code translation • Involves converting the code from one language (or language version) to another e.g. FORTRAN to C • May be necessary because of: • Hardware platform update • Staff skill shortages • Organisational policy changes • Only realistic if an automatic translator is available
Program restructuring – Condition simplification -- Complex condition if not (A > B and (C < D or not ( E > F) ) )... -- Simplified condition if (A <= B and (C>= D or E > F)...
Program modularisation • The process of re-organising a program so that related program parts are collected together in a single module • Usually a manual process that is carried out by program inspection and re-organisation
Recovering data abstractions • Many legacy systems use shared tables and global data to save memory space • Causes problems because changes have a wide impact in the system • Shared global data may be converted to objects or ADTs • Analyse common data areas to identify logical abstractions • Create an ADT or object for these abstractions • Use a browser to find all data references and replace with reference to the data abstraction
Reverse engineering • Analysing software with a view to understanding its design and specification • May be part of a re-engineering process but may also be used to re-specify a system for re-implementation • Builds a program data base and generates information from this • Program understanding tools (browsers, cross-reference generators, etc.) may be used in this process
Why reverse engineer • Reverse engineering often precedes re-engineering but is sometimes worthwhile in its own right • The design and specification of a system may be reverse engineered so that they can be an input to the requirements specification process for the system’s replacement • The design and specification may be reverse engineered to support program maintenance
Key points • Software change strategies include software maintenance, architectural evolution and software re-engineering • Lehman’s Laws are invariant relationships that affect the evolution of a software system • Maintenance types are adaptive, perfective, and corrective
Key points • The costs of software change usually exceed the costs of software development • Factors influencing maintenance costs include staff stability, the nature of the development contract, skill shortages and degraded system structure • Architectural evolution is concerned with evolving centralised to distributed architectures • Re-engineering reorganizes and modifies existing software systems to make them more maintainable