Chapter 9 – Software Evolution
Lecture 1
                   Chapter 9 Software evolution   1
Topics covered
 Evolution processes
    Change processes for software systems
 Program evolution dynamics
    Understanding software evolution
 Software maintenance
    Making changes to operational software systems
 Legacy system management
    Making decisions about software change
                         Chapter 9 Software evolution   2
Software change
                  Chapter 9 Software evolution   3
Importance of evolution
                    Chapter 9 Software evolution   4
A spiral model of development and evolution
                    Chapter 9 Software evolution   5
Evolution and servicing
                    Chapter 9 Software evolution   6
Evolution and servicing
 Evolution
    The stage in a software system’s life cycle where it is in
     operational use and is evolving as new requirements are
     proposed and implemented in the system.
 Servicing
    At this stage, the software remains useful but the only changes
     made are those required to keep it operational i.e. bug fixes and
     changes to reflect changes in the software’s environment. No
     new functionality is added.
 Phase-out
    The software may still be used but no further changes are made
     to it.
                           Chapter 9 Software evolution                  7
Evolution processes
                      Chapter 9 Software evolution   8
Change identification and evolution processes
                    Chapter 9 Software evolution   9
The software evolution process
                    Chapter 9 Software evolution   10
Change implementation
                  Chapter 9 Software evolution   11
Change implementation
 Iteration of the development process where the revisions
  to the system are designed, implemented and tested.
 A critical difference is that the first stage of change
  implementation may involve program understanding,
  especially if the original system developers are not
  responsible for the change implementation.
 During the program understanding phase, you have to
  understand how the program is structured, how it
  delivers functionality and how the proposed change
  might affect the program.
                       Chapter 9 Software evolution         12
Urgent change requests
                   Chapter 9 Software evolution   13
The emergency repair process
                   Chapter 9 Software evolution   14
Agile methods and evolution
 Agile methods are based on incremental development so
  the transition from development to evolution is a
  seamless one.
    Evolution is simply a continuation of the development process
     based on frequent system releases.
 Automated regression testing is particularly valuable
  when changes are made to a system.
 Changes may be expressed as additional user stories.
                          Chapter 9 Software evolution               15
Handover problems
 Where the development team have used an agile
  approach but the evolution team is unfamiliar with agile
  methods and prefer a plan-based approach.
    The evolution team may expect detailed documentation to
     support evolution and this is not produced in agile processes.
 Where a plan-based approach has been used for
  development but the evolution team prefer to use agile
  methods.
    The evolution team may have to start from scratch developing
     automated tests and the code in the system may not have been
     refactored and simplified as is expected in agile development.
                          Chapter 9 Software evolution                16
Program evolution dynamics
                   Chapter 9 Software evolution   17
Change is inevitable
                       Chapter 9 Software evolution   18
Lehman’s laws
Law                 Description
Continuing change   A program that is used in a real-world environment must necessarily
                    change, or else become progressively less useful in that
                    environment.
Increasing          As an evolving program changes, its structure tends to become more
complexity          complex. Extra resources must be devoted to preserving and
                    simplifying the structure.
Large program       Program evolution is a self-regulating process. System attributes
evolution           such as size, time between releases, and the number of reported
                    errors is approximately invariant for each system release.
Organizational      Over a program’s lifetime, its rate of development is approximately
stability           constant and independent of the resources devoted to system
                    development.
                                 Chapter 9 Software evolution                        19
Lehman’s laws
Law                         Description
Conservation of familiarity Over the lifetime of a system, the incremental change in each
                            release is approximately constant.
Continuing growth           The functionality offered by systems has to continually
                            increase to maintain user satisfaction.
Declining quality           The quality of systems will decline unless they are modified to
                            reflect changes in their operational environment.
Feedback system             Evolution processes incorporate multiagent, multiloop
                            feedback systems and you have to treat them as feedback
                            systems to achieve significant product improvement.
                                   Chapter 9 Software evolution                          20
Applicability of Lehman’s laws
                     Chapter 9 Software evolution   21
Key points
 Software development and evolution can be thought of
  as an integrated, iterative process that can be
  represented using a spiral model.
 For custom systems, the costs of software maintenance
  usually exceed the software development costs.
 The process of software evolution is driven by requests
  for changes and includes change impact analysis,
  release planning and change implementation.
 Lehman’s laws, such as the notion that change is
  continuous, describe a number of insights derived from
  long-term studies of system evolution.
                      Chapter 9 Software evolution          22
Chapter 9 – Software Evolution
                   Lecture 2
                   Chapter 9 Software evolution   23
Software maintenance
                   Chapter 9 Software evolution   24
Types of maintenance
                   Chapter 9 Software evolution   25
Figure 9.8 Maintenance effort distribution
                     Chapter 9 Software evolution   26
Maintenance costs
                    Chapter 9 Software evolution   27
Figure 9.9 Development and maintenance costs
                   Chapter 9 Software evolution   28
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.
                          Chapter 9 Software evolution               29
Maintenance prediction
                    Chapter 9 Software evolution   30
Maintenance prediction
                    Chapter 9 Software evolution   31
Change prediction
                    Chapter 9 Software evolution   32
Complexity metrics
                     Chapter 9 Software evolution   33
Process metrics
                  Chapter 9 Software evolution   34
System re-engineering
                   Chapter 9 Software evolution   35
Advantages of reengineering
                    Chapter 9 Software evolution   36
The reengineering process
                    Chapter 9 Software evolution   37
Reengineering process activities
                    Chapter 9 Software evolution   38
Figure 9.12 Reengineering approaches
                    Chapter 9 Software evolution   39
Reengineering cost factors
                    Chapter 9 Software evolution   40
Preventative maintenance by refactoring
 Refactoring is the process of making improvements to a
  program to slow down degradation through change.
 You can think of refactoring as ‘preventative
  maintenance’ that reduces the problems of future
  change.
 Refactoring involves modifying a program to improve its
  structure, reduce its complexity or make it easier to
  understand.
 When you refactor a program, you should not add
  functionality but rather concentrate on program
  improvement.
                      Chapter 9 Software evolution          41
Refactoring and reengineering
 Re-engineering takes place after a system has been
  maintained for some time and maintenance costs are
  increasing. You use automated tools to process and re-
  engineer a legacy system to create a new system that is
  more maintainable.
 Refactoring is a continuous process of improvement
  throughout the development and evolution process. It is
  intended to avoid the structure and code degradation
  that increases the costs and difficulties of maintaining a
  system.
                       Chapter 9 Software evolution            42
‘Bad smells’ in program code
 Duplicate code
    The same or very similar code may be included at different
     places in a program. This can be removed and implemented as
     a single method or function that is called as required.
 Long methods
    If a method is too long, it should be redesigned as a number of
     shorter methods.
 Switch (case) statements
    These often involve duplication, where the switch depends on
     the type of a value. The switch statements may be scattered
     around a program. In object-oriented languages, you can often
     use polymorphism to achieve the same thing.
                          Chapter 9 Software evolution                 43
‘Bad smells’ in program code
 Data clumping
    Data clumps occur when the same group of data items (fields in
     classes, parameters in methods) re-occur in several places in a
     program. These can often be replaced with an object that
     encapsulates all of the data.
 Speculative generality
    This occurs when developers include generality in a program in
     case it is required in the future. This can often simply be
     removed.
                          Chapter 9 Software evolution                44
Legacy system management
                  Chapter 9 Software evolution   45
Figure 9.13 An example of a legacy system
assessment
                    Chapter 9 Software evolution   46
Legacy system categories
                   Chapter 9 Software evolution   47
Business value assessment
                   Chapter 9 Software evolution   48
Issues in business value assessment
 The use of the system
    If systems are only used occasionally or by a small number of
     people, they may have a low business value.
 The business processes that are supported
    A system may have a low business value if it forces the use of
     inefficient business processes.
 System dependability
    If a system is not dependable and the problems directly affect
     business customers, the system has a low business value.
 The system outputs
    If the business depends on system outputs, then the system has
     a high business value.
                          Chapter 9 Software evolution                49
System quality assessment
                   Chapter 9 Software evolution   50
Business process assessment
                  Chapter 9 Software evolution   51
Factors used in environment assessment
Factor               Questions
Supplier stability   Is the supplier still in existence? Is the supplier financially stable and
                     likely to continue in existence? If the supplier is no longer in business,
                     does someone else maintain the systems?
Failure rate         Does the hardware have a high rate of reported failures? Does the
                     support software crash and force system restarts?
Age                  How old is the hardware and software? The older the hardware and
                     support software, the more obsolete it will be. It may still function
                     correctly but there could be significant economic and business
                     benefits to moving to a more modern system.
Performance          Is the performance of the system adequate? Do performance
                     problems have a significant effect on system users?
                                    Chapter 9 Software evolution                             52
Factors used in environment assessment
Factor                 Questions
Support requirements   What local support is required by the hardware and
                       software? If there are high costs associated with this
                       support, it may be worth considering system replacement.
Maintenance costs      What are the costs of hardware maintenance and support
                       software licences? Older hardware may have higher
                       maintenance costs than modern systems. Support software
                       may have high annual licensing costs.
Interoperability       Are there problems interfacing the system to other systems?
                       Can compilers, for example, be used with current versions
                       of the operating system? Is hardware emulation required?
                            Chapter 9 Software evolution                        53
Factors used in application assessment
Factor              Questions
Understandability   How difficult is it to understand the source code of the current
                    system? How complex are the control structures that are used?
                    Do variables have meaningful names that reflect their function?
Documentation       What system documentation is available? Is the documentation
                    complete, consistent, and current?
Data                Is there an explicit data model for the system? To what extent is
                    data duplicated across files? Is the data used by the system up to
                    date and consistent?
Performance         Is the performance of the application adequate? Do performance
                    problems have a significant effect on system users?
                               Chapter 9 Software evolution                          54
Factors used in application assessment
Factor                 Questions
Programming language   Are modern compilers available for the programming
                       language used to develop the system? Is the programming
                       language still used for new system development?
Configuration          Are all versions of all parts of the system managed by a
management             configuration management system? Is there an explicit
                       description of the versions of components that are used in
                       the current system?
Test data              Does test data for the system exist? Is there a record of
                       regression tests carried out when new features have been
                       added to the system?
Personnel skills       Are there people available who have the skills to maintain the
                       application? Are there people available who have experience
                       with the system?
                             Chapter 9 Software evolution                          55
System measurement
                 Chapter 9 Software evolution   56
Key points
 There are 3 types of software maintenance, namely bug
  fixing, modifying software to work in a new environment,
  and implementing new or changed requirements.
 Software re-engineering is concerned with re-structuring
  and re-documenting software to make it easier to
  understand and change.
 Refactoring, making program changes that preserve
  functionality, is a form of preventative maintenance.
 The business value of a legacy system and the quality of
  the application should be assessed to help decide if a
  system should be replaced, transformed or maintained.
                       Chapter 9 Software evolution       57