Software evolution
               Objectives
                   
 To explain why change is inevitable if software
  systems are to remain useful
 To discuss software maintenance and maintenance
  cost factors
 To describe the processes involved in software
  evolution
 To discuss an approach to assessing evolution
  strategies for legacy systems
         Topics covered
               
 Program evolution dynamics
 Software maintenance
 Evolution processes
 Legacy system evolution
          Software change
                
 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.
 A key problem for organisations is implementing
  and managing change to their existing software
  systems.
Importance of evolution
          
 Organisations have huge investments in their
  software systems - they are critical business assets.
 To maintain the value of these assets to the business,
  they must be changed and updated.
 The majority of the software budget in large
  companies is devoted to evolving existing software
  rather than developing new software.
Spiral model of
   evolution
       
  Specification            Implemention
                  Star t
        Release 1
   Operation                Validation
        Release 2
        Release 3
      Program evolution
          dynamics
             
 Program evolution dynamics is the study of the
  processes of system change.
 After major empirical studies, Lehman and Belady
  proposed that there were a number of ‘laws’ which
  applied to all systems as they evolved.
 There are sensible observations rather than laws.
  They are applicable to large systems developed by
  large organisations. Perhaps less applicable in other
  cases.
              Lehman’s laws
Law
Continuing change         Description
                           A program that is used in a real-world environment necessarily
                           must change or become progressively less useful in that
                           environment.
Increasing complexity      As an evolving program changes, its structure tends to become
                           more complex. Extra resources must be devoted to preserving
                           and simplifying the structure.
Large program evolution    Program evolution is a self-regulating process. System
                           attributes such as size, time between releases and the number of
                           reported errors is approximately invariant for each system
                           release.
Organisational stability   Over a programÕs lifetime, its rate of development is
                           approximately constant and independent of the resources
                           devoted to system development.
Conservation of            Over the lifetime of a system, the incremental change in each
familiarity                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 appear to be declining unless they
                           are adapted to changes in their operational environment.
Feedback system            Evolution processes incorporate multi-agent, multi-loop
                           feedback systems and you have to treat them as feedback
                           systems to achieve significant product improvement.
        Applicability of
        Lehman’s
                 laws
 Lehman’s laws seem to be generally applicable to
  large, tailored systems developed by large
  organisations.
    Confirmed in more recent work by Lehman on the FEAST
     project (see further reading on book website).
 It is not clear how they should be modified for
    Shrink-wrapped software products;
    Systems that incorporate a significant number of COTS
     components;
    Small organisations;
    Medium sized systems.
  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.
          Maintenance is
           inevitable
               
 The system requirements are likely to change
  while the system is being developed because
  the environment is changing. Therefore a
  delivered system won't meet its requirements!
 Systems are tightly coupled with their environment.
  When a system is installed in an
  environment it changes that environment and
  therefore changes the system requirements.
 Systems MUST be maintained therefore if they
  are to remain useful in an environment.
   Types of maintenance
            
 Maintenance to repair software faults
   Changing a system to correct deficiencies in the way meets
    its requirements.
 Maintenance to 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.
 Maintenance to add to or modify the system’s
  functionality
   Modifying the system to satisfy new requirements.
 Distribution of
maintenance effort
       
       Fault repair
         (17%)
                      Functionality
   Software            addition or
  adaptation
                      modification
    (18%)
                         (65%)
       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 so
  makes further maintenance more difficult.
 Ageing software can have high support costs
  (e.g. old languages, compilers etc.).
 Maintenance prediction
          
 Maintenance prediction is concerned with assessing
  which parts of the system may cause problems and
  have high maintenance costs
   Change acceptance depends on the maintainability of the
    components affected by the change;
   Implementing changes degrades the system and reduces its
    maintainability;
   Maintenance costs depend on the number of changes and
    costs of change depend on maintainability.
 Maintenance prediction
          
What par ts of the system are
                                                                    What par ts of the system
                                                                    will be the most expensive
                                                                             to maintain?
most likely to be affected by
      change requests?
                                             Predicting
                                            maintainability
                                                                               What will be the lifetime
                                                                               maintenance costs of this
                                Predicting system      Predicting                      system?
                                     changes          maintenance
                                                          costs
                                                                           What will be the costs of
        How many change                                                    maintaining this system
         requests can be                                                     over the next year?
            expected?
      Change prediction
             
 Predicting the number of changes requires and
  understanding of the relationships between a system
  and its environment.
 Tightly coupled systems require changes whenever
  the environment is changed.
 Factors influencing this relationship are
   Number and complexity of system interfaces;
   Number of inherently volatile system requirements;
   The business processes where the system is used.
     Evolution processes
             
 Evolution processes depend on
   The type of software being maintained;
   The development processes used;
   The skills and experience of the people involved.
 Proposals for change are the driver for system
  evolution. Change identification and evolution
  continue throughout the system lifetime.
Change identification and evolution
                       
                Change identification
                      process
   New system                           Change proposals
                 Software evolution
                      process
   The system evolution
         process
            
 Change      Impact       Release          Change        System
requests    analysis      planning     implementa tion   release
                           Platform       System
           Fault repair
                          adaptation   enhancement
Change implementation
         
Proposed   Requirements   Requir ements     Software
 changes      analysis      upda ting     de velopment
           Emergency repair
                 
Change        Analys e        Modify      Deliver modified
requests    sour ce code   sour ce code        system
  System re-engineering
            
 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.
 Re-engineering involves adding effort to make
  them easier to maintain. The system may be re-
  structured and re-documented.
           Advantages of
           reengineering
                
 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.
              Forward and re-
                engineering
                    
       System                  Design and            New
     specification           implementation         system
Forward eng ineering
        Existing            Understanding and   Re-eng ineer ed
   softw are system          transf orma tion       system
Softw are re-eng ineering
               The re-engineering
                    process
                       
  Original                         Prog ram      Modularised          Original data
  prog ram                      documentation     prog ram
                   Reverse
                 eng ineering
                                                              Data
Source code                        Prog ram              re-eng ineering
 translation                    modularisation
                   Prog ram
                   structure
                 improvement
                                  Structured              Re-eng ineered
                                   prog ram                    data
  Reengineering process
        activities
            
 Source code translation
   Convert code to a new language.
 Reverse engineering
   Analyse the program to understand it;
 Program structure improvement
   Restructure automatically for understandability;
 Program modularisation
   Reorganise the program structure;
 Data reengineering
   Clean-up and restructure system data.
                Re-engineering
                 approaches
                      
            Automa ted pr og ram                  Pro gram and da ta
                restructuring                       restructuring
Automa ted sour ce           Automa ted r estructuring          Restructuring plus
 code con version             with man ual changes            architectur al changes
                                                                   Increased cost
      Reengineering cost
           factors
             
 The quality of the software to be reengineered.
 The tool support available for reengineering.
 The extent of the data conversion which is required.
 The availability of expert staff for reengineering.
    This can be a problem with old systems based on
     technology that is no longer widely used.