Category Archives: Software Engineering

Software Evolution


Software is present on every activity nowadays; it is on our homes, car, mobile phones, etc. An interesting aspect is that software invariably evolves. In this post we discuss some features related to Software Evolution.

Dimensions of Software Evolution

In accordance with (Mens and Demeyer, 2008), the software evolution types can be classified in:

  • Perfective maintenance is any modification of a software product after delivery to improve performance or maintainability;
  • Corrective maintenance is the reactive modification of a software product performed after delivery to correct discovered faults;
  • Adaptive maintenance is the modification of a software product performed after delivery to keep a computer program usable in a changed or changing environment;
  • Preventive maintenance refers to software modifications performed for the purpose of preventing problems before they occur.

Levels of Evolution

A non-complete list of levels of software evolution is described in with (Mens and Demeyer, 2008).

  • Requirements evolution – Changes to accommodate the needs of the stakeholders. The requirements change because the client has not a clear idea what she wants on the middle stage of software development.
  • Architecture evolution – The architecture defines the initial model of the system in conjunction with the software requirements. These artifacts are also subject to change.
  • Data evolution – The data schema of the software could also evolve.
  • Runtime evolution – Many software need to continue running constantly, in this way the software need to be evolved at the time it is in use.
  • Language evolution – Companies could decide to use a new language or software paradigm.


Tom Mens and Serge Demeyer. 2008. Software Evolution (1 ed.). Springer Publishing Company, Incorporated.