In software engineering, the laws of software evolution refer to a series of laws that Lehman and Belady formulated starting in 1974 with respect to software evolution. [1] [2] The laws describe a balance between forces driving new developments on one hand, and forces that slow down progress on the other hand. Over the past decades the laws have been revised and extended several times. [3] [4] [5]
Observing that most software is subject to change in the course of its existence, the authors set out to determine laws that these changes will typically obey, or must obey for the software to survive. [1]
In his 1980 article, [1] Lehman qualified the application of such laws by distinguishing between three categories of software:
In the same article, Lehman also defined A-programs as the union of P and E types. A-programs differ from S types "in that they represent an application in the real world." [1] However, in a later 1997 paper, [2] he appeared to blur the distinction between A and E types by defining E-type programs as "software solving a problem or addressing an application in the real world." The laws summarized below are said to apply to E-type programs under the later definition.
All told, eight laws were formulated: