Lehman's laws of software evolution
Software evolution is a concept in software engineering that means that software is developed and over time undergoes iterative changes. Software evolution can be seen as a process of developing software initially, and updating it repeatedly for purposes of maintenance.
There have been many attempts in the past to understand exactly how software systems evolve. One of such attempts is the one made by Manny Lehman and his colleague in 1974. They studied and identified a set of behaviors that later became known as Lehman's Laws of Software Evolution.
The laws acknowledges a balance between the various forces driving new developments, while also considering the factors that slow down development. It is important to note that these laws have been revised and updated several times in the past.
Lehman submitted that for a software system to survive, a set of laws will typically be obeyed. He distinguished the different categories of software systems:
1. S-program: A program written according to an exact specification of what that program is capable of
2. P-program: A program written to implement certain methods that determine what the program is capable of
3. E-program: A program written to perform some real-world activity. The behavior of such program is strongly influenced by the environment in which the program runs in.
Note that Lehman's Laws mostly apply to the last category; E-programs.
- (1974) "Continuing Change" — an E-type system must be continually adapted or it becomes progressively less satisfactory.
- (1974) "Increasing Complexity" — as an E-type system evolves, its complexity increases unless work is done to maintain or reduce it.
- (1974) "Self Regulation" — E-type system evolution processes are self-regulating with the distribution of product and process measures close to normal.
- (1978) "Conservation of Organisational Stability (invariant work rate)" — the average effective global activity rate in an evolving E-type system is invariant over the product's lifetime.
- (1978) "Conservation of Familiarity" — as an E-type system evolves, all associated with it, developers, sales personnel and users, for example, must maintain mastery of its content and behavior to achieve satisfactory evolution. Excessive growth diminishes that mastery. Hence the average incremental growth remains invariant as the system evolves.
- (1991) "Continuing Growth" — the functional content of an E-type system must be continually increased to maintain user satisfaction over its lifetime.
- (1996) "Declining Quality" — the quality of an E-type system will appear to be declining unless it is rigorously maintained and adapted to operational environment changes.
- (1996) "Feedback System" (first stated 1974, formalised as law 1996) — E-type evolution processes constitute multi-level, multi-loop, multi-agent feedback systems and must be treated as such to achieve significant improvement over any reasonable base.
Under what circumstances might the laws break down?
Let's consider a few drawbacks and critiques of this law.
The Lehman's law is often criticised for lack of a solid empirical foundation. Different reasearches conducted at different times concluded that most Lehman Laws are not valid, most especially on short-term projects.
According to Guowu  source code metrics and project information or defect information is used to analyze software growth, characteristics of software change(s) and software quality. Guowu  found in his study that Laws L1, L2, L3, and L6 are confirmed and in the remaining Laws L4, L5, L7, and L8 evidence to the contrary or precise operational definition is required. According to Dewayne E. Perry  dimensions of software evolution are Domains, Experience and Process. Further, the sub dimensions are feedback, experimentation, understanding, methods, organization and technology. These sub dimensions provide a wide variety of causes for evolution in software systems. These dimensions are interrelated in various ways and interact with each other in a number of surprising ways.
- ^ abcde Lehman, M. M. (1980). "On Understanding Laws, Evolution, and Conservation in the Large-Program Life Cycle". Journal of Systems and Software. 1: 213–221. doi:10.1016/0164-1212(79)90022-0.
- ^ Liguo Yu and Alok Mishra (2013) An Empirical Study of Lehman’s Law on Software Quality Evolution in International Journal of Software and Informatics, 11/2013; 7(3):469-481.
- Guowu Xie, Jianbo Chen, and Iulian Neamtiu, "Towards a Better Understanding of Software Evolution: An Empirical Study on Open Source Software," in IEEE International Conference Software Maintenance, ICSM 2009. Edmonton, Alberta, Canada, 2009, pp. 51-60.
- Dewayne E Perry, "Dimensions of Software Evolution," in International Conference on Software Maintenance, Chicago, USA, April 2004, pp. 296– 303.
If you found this answer helpful, please comment below and share the link with other students in your network. Good luck in your studies!