Software evolution is a process whereby a commercial computer program requires continual updating, maintenance, and improvement over time in order for it to remain a viable product. In this respect, software evolution is driven by external business and consumer needs that change as other software and technologies advance around it. The driving factor behind software evolution, however, is often an internal one focused on the engineering team that produced the product and the company that is dependent on its success for profitability. The Imperial College of London, England, first promulgated three fundamental laws of software evolution in the early 1970s, which have since been expanded to a total of eight laws as of 2011. Other attempts have also been made to quantify the process utilizing models such as the Linear Sequential Model and Prototype Model, but the paradigm that seems to best fit software entropy life cycles is that of one resembling Darwinian evolution for living things.
The basic driving factors behind changes in software architecture resemble the same forces that motivate businesses to upgrade industrial machinery or standard operating procedures as societal needs change. As software is increasingly used, new needs or functions for it become apparent that must be worked into later releases of the product. All software is also released with previously unknown errors, so periodic patches and maintenance procedures must be carried out to correct situations such as security loopholes that could make a company vulnerable to attack through the software itself. A key to software evolution is also the fact that such programs must increasingly be adapted to work on different types of emerging computer equipment and within various operating system architectures so that the program has broader appeal.
Meeting all of these needs is crucial to determining if a software program remains viable, and, since software assets are such a crucial aspect of the information economy as of 2011, software evolution has become a fundamental aspect of business adaptation and growth. Meir Lehman, a computer scientist at the Imperial College of London, is credited with creating Lehman's Laws, which succinctly defined the process of software evolution and guided developers in the forward thinking of software visualization. Lehman's Laws are based upon the premise that software evolves as feedback on its performance increases and that its inevitable tendency is to become increasingly complex.
Lehman has stated that the nature of software evolution mirrors natural changes such as mutation in fruit flies, the way that cities expand over time, and how military structures incrementally improve upon weapons systems. The first three laws of the process emulate these trends in detailing Continuing Change, Increasing Complexity, and what is known as Large Program Evolution. Continuing Change refers to the fact that the program must be adapted to meet current real-world business conditions, and this reflects Increasing Complexity as the program must meet an ever growing diversity of unexpected needs. Large Program Evolution refers to the necessity for error correction and new releases of the program that are tied inexorably to the demands of the marketplace.
Of the five remaining laws in software evolution, number four is Organizational Stability and refers to the fact that the growth of a program takes on a life of its own regardless of the level of resources intentionally devoted to it, and number five is Conservation of Familiarity that states that incremental growth of the program is inevitable. Number six in the eight Lehman Laws is Continuing Growth, which is necessary to satisfy consumer demand, and number seven is Declining Quality, which emphasizes the fact that all software eventually faces limits on functionality that it cannot meet. The final Lehman Law for software evolution is the Feedback System itself, which ties together all of the forces affecting the viability of a software program to rapidly drive it either to greater success or unavoidable obsolescence and death.