What Is Software Evolution and Maintenance
by Anna Khrupa on Jul 11, 2022
Software development is a continuous process throughout the lifetime of a system. It does not stop after the product is deployed and delivered to a customer. Modern software is never finished. To remain useful, it has to improve regularly to meet the expectations of a user. To maintain the value of the system and stay competitive, companies have to invest in a system change. The request for an improvement is inevitable in the software development life cycle. Changing business requirements, software defects, and modifications in different systems in the same software environment are the reasons for software evolution and maintenance.
What do we mean by that? Let’s start with a brief overview of software evolution first.
Evolution of Software Development
Software evolution is the process of continually developing and updating software to meet the requirements of the market over time. The system has to undergo it for progress, advanced user requirements, and the needs of business and urgent changes without destroying the integrity of the organization of the system. The process depends on several factors, such as the type of software, development processes, and how experienced the involved people are.
Though it can be costly because of complicated projects, innovations in technologies, and structure, it is still crucial.
The Importance of Software Evolution Process
The software evolution process is critical for the entire development cycle. It helps keep the product up-to-date and monitor the performance and failure-free operations continually by suggesting improvements and fixing current issues. Upgrading the system improves usability and functionality. When the software is upgraded, it is stable enough to decrease security risks and undergo cyber attacks over time. That is why major software investments in companies are devoted to evolution specifically. It is important to keep the existing systems updated because of the investments the companies have made in those systems initially.
One of the best explanations was offered by Meir Lehman.
Lehman’s Law Explained
Lehman’s law is a theory of evolution offered by Lehman and Belady. It concerns a change that describes a balance between forces driving progress and forces slowing it down. The theory was propounded in the early 70s. However, it seems to be applicable for the evolution of software development nowadays as well. It claims that software has to grow exponentially, quickly, and in large amounts. Modified features that satisfy the requirements should be regularly added to the product, contributing to the frequent releases with the increased size and complexity each time. According to this law, every software product should be regularly modified and strictly maintained to be able to adjust new functional and nonfunctional requirements without decreasing quality.
In fact, Lehman’s law is a set of software evolution laws, suitable for multi-level organizational systems (or E-type systems), where the requirements and the modifications depend on the growing needs of a business. They are:
- Law of Continuing Change. A system undergoes inevitable continuing modifications or becomes less satisfying. The changing requests from clients and users have to be carried out. Otherwise, the software risks becoming obsolete;
- Law of Increasing Complexity. Complexity increases while a system is developing unless explicit efforts are applied to avoid that. Preventive measures should be taken to maintain or minimize increasing complexity;
- Law of Self Regulation. The evolution is a self-regulated procedure with process measures (size, reported bugs, etc.) that are almost unchangeable for each release.
- Law of Conservation of Organizational Stability. The average rate of development of a program does not change and is not dependent on the amount of work dedicated to system development;
- Law of Conservation of Familiarity. As the system develops, the average amount of new content in each release of a system remains constant. Radical changes should be avoided if possible. A relatively low number of modifications between releases is better for users (they are not asked to change their work habits with each new release).
- Law of Continuing Growth. To satisfy the user’s needs, the amount of functional content in a system must expand over time. The users are not satisfied if the system is not continually maintained and new functionalities are not regularly added;
- Law of Declining Quality. The quality is considered decreased if the system is not able to function under different circumstances in the environment. The product should be continually monitored and controlled to maintain its complexity because of inevitable changes in the development life cycle;
- Law of Feedback Systems. Complex multi-level, multi-agent, multi-loop feedback systems must be recognised as such for a drastic product improvement. There can be various sources of feedback (users, application domain, technical environment), which have to be taken into account and responded to positively to keep the system appealing to the established group of users.
The laws explain software evolution from the point of view of the dependency between the system and the environment with its requirements and circumstances. Inconsistent requirements are supposed to reflect the dynamic needs of a business.
The 4 Types of Software Maintenance
Software maintenance is a modification of a product that is required for the software to represent the latest possible technology all the time. The primary reasons are to adapt and enhance the system in a way to meet the changes (not bug-related mainly) and the needs of a customer.
The life of software continues after the program has been launched. It is continuously developing. After a product has been deployed, maintenance begins. Maintenance covers any post-delivery activity or change that is a modification either to the code or requirements associated with the demand for improvement or the problem that has occurred in software, as well as the need to keep a product up to date and consistent.
There are four types of software maintenance in the development life cycle:
- Adaptive (modifications related to the changing environment). It is applied to keep the software usable in and adjusted to a changing environment (this includes everything related to how the system functions and sometimes can be the result of the changes in organizational rules and policy);
- Corrective or reactive (functionality defects and faults in software associated with design or code). Corrective maintenance is one of the software maintenance terms related to correcting errors and fixing bugs after a setback or poor performance;
- Perfective (evolving requirements, suggested by users). Perfective maintenance (which makes up over 50% of software maintenance) improves performance, removes non-effective features or the ones that function improperly, plays a critical role in feature evolution, when new features have to be added, and reduces cost in the long-term by upgrading software;
- Preventive (activities to avoid similar problems later). It is a set of actions taken to polish the quality and reliability of a product in the future. It outweighs the cost of the maintenance and is aimed at fixing defects in advance.
The main distinction between software evolution definition and maintenance is how they influence the system, though there is always a need for both of them to modify and maintain the product. Evolution refers to a change from a basic to a more advanced state of the software. And maintenance refers to enhancements and modifications required to keep the software continually responsive.
Hire a team
Let us assemble a dream team of specialists just for you. Our model allows you to maximize the efficiency of your team.