Software Evolution

Software Evolution is a process of developing software initially, then timely updating it for various reasons, i.e., to add new features or to remove obsolete functionalities etc. The evolution process includes fundamental activities of change analysis, release planning, system implementation and releasing a system to customers.
The cost an impact of these changes are accessed to see how much system is affected by the change and how much it might cost to implement the change. If the proposed changes are accepted, a new release of the software system is planned. During release planning, all the proposed changes (fault repair, adaptation, and new functionality) are considered.
A design is then made on which changes to implement in the next version of the system. The process of change implementation is an iteration of the development process where the revisions to the system are designed, implemented and tested.

Software maintenance :

• The term is mostly used for changing custom software. Generic software products are said to evolve to create new versions.
• 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 Software maintenance :

E.B. Swanson initially identified the three categories of maintenance: corrective, adaptive, and perfective. Four categories of software were then catalogued by Lientz and Swanson (1980). 
  • Corrective maintenance: Reactive modification of a software product performed after delivery to correct discovered problems;
  • Adaptive maintenance: Modification of a software product performed after delivery to keep a software product usable in a changed or changing environment;
  • Perfective maintenance: Modification of a software product after delivery to improve performance or maintainability;
  • Preventive maintenance: Modification of a software product after delivery to detect and correct latent faults in the software product before they become effective faults.

Laws used for Software Evolution:

(a) Law of continuing changeThis law states that any software system that represents some real-world reality undergoes continuous change or become progressively less useful in that environment.

(b) Law of increasing complexity : As an evolving program changes, its structure becomes more complex unless effective efforts are made to avoid this phenomenon.

(c) Law of conservation of organization stabilityOver the lifetime of a program, the rate of development of that program is approximately constant and independent of the resource devoted to system development.

(d) Law of conservation of familiarity This law states that during the active lifetime of the program, changes made in the successive release are almost constant.

Importance of evolution :

• Organisations have huge investments in their software systems . 
• 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 changing and evolving existing software rather than developing new software.

The software evolution process  :

• Software 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.
    – Should be linked with components that are affected by the change, thus allowing the cost and impact of the change to be estimated.
• Change identification and evolution continues throughout the system lifetime. 

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.

Post a comment