|
| 1 | +--- |
| 2 | +title: "Advanced Software Engineering" |
| 3 | +layout: notes |
| 4 | +--- |
| 5 | + |
| 6 | +# Lehman's Laws of SE |
| 7 | +* Originally (1974) based on observations of a few, commercially-developed systems |
| 8 | +* 3 to 8 laws |
| 9 | +* Are these really "laws"? |
| 10 | +* Limited data, however, important start |
| 11 | + |
| 12 | +# Types of Systems |
| 13 | +* *S-type* - Specified formally, no changes needed |
| 14 | +* *P-type* - Requires iterative process to find |
| 15 | +* *E-type* - Must evolve over time |
| 16 | + |
| 17 | +* The laws apply to *E-type* |
| 18 | +* Hypothesis: Everything is *E-type* |
| 19 | + |
| 20 | +# Law I: Continuing Change |
| 21 | +> A program that is used must be continually adapted else it becomes progressively less satisfactory |
| 22 | +
|
| 23 | +* Mismatches are between the *software* and its *operational environment* |
| 24 | +* Changes in the *operational environment* invalidate assumptions made in the *software* |
| 25 | +* Need for continuing adaptation and evolution is intrinsic to *software* in an *operational environment* |
| 26 | +* Development, installation, and operation of software changes both the *software* and the *operational environment* |
| 27 | +* Evolution is achieved in a feedback-driven maintenance process |
| 28 | +* If evolution is not allowed to occur, degree of satisfaction declines |
| 29 | + |
| 30 | +# Law II: Increasing Complexity |
| 31 | +> As a program is evolved its complexity increases unless work is done to maintain or reduce it |
| 32 | +
|
| 33 | +* Instance of [Second Law of Thermodynamics](http://en.wikipedia.org/wiki/Second_law_of_thermodynamics) (entropy) |
| 34 | +* As the *software* adapts to changing *operational environment*, the *software* gets more complex |
| 35 | +* Interactions between parts of the software increase in an unstructured way leading to an increase in entropy |
| 36 | +* Increased complexity → more resources required to make changes |
| 37 | +* Reducing complexity → less resources to make changes |
| 38 | +* Must balance *change* and *complexity* |
| 39 | + |
| 40 | +# Law III: Self Regulation |
| 41 | +> The program evolution process is self regulating with close to normal distribution of measures of product and process attributes |
| 42 | +
|
| 43 | +* Development team is part of a larger organization, so the interests and goals of the larger organization include more than this *software* |
| 44 | +* Feedback (allocation of resources, pay, pats on back) from all levels of the larger organization work to keep *software* projects inline |
| 45 | +* Over time, all *iterations* will start to have the same characteristics (bugs, complexity, etc), and all *software* projects will start to have the same characteristics |
| 46 | +* If *software* products have good characteristics, this is a good thing, if not, then this is bad |
| 47 | + |
| 48 | +# Law IV: Conservation of Organisational Stability |
| 49 | +> The average effective global activity rate on an evolving system is invariant over the product life time |
| 50 | +
|
| 51 | +* Rate of development (features, tasks, etc.) doesn't change much over the long-term life of the *software* |
| 52 | +* Counter-intuitive as people (especially managers) believe that managers make decisions that effect activity |
| 53 | +* Managers do control what is to be done, and the resources to do it |
| 54 | +* However, managers are constrained by union rules, lack of skills in available personnel, etc. |
| 55 | +* Also constrained by *software* characteristics, e.g., complexity |
| 56 | +* Providing additional resources may reduce overall effectiveness, i.e., [The Mythical Man-Month](http://en.wikipedia.org/wiki/The_Mythical_Man-Month) [Brooks] |
| 57 | + |
| 58 | +# Law V: Conservation of Familiarity |
| 59 | +> During the active life of an evolving program, the content of successive releases is statistically invariant |
| 60 | +
|
| 61 | +* Good progress is made when everyone is familiar with the *goals* |
| 62 | +* The more changes/additions to software, more difficult it is for everybody to be familiar with all the goals |
| 63 | +* Larger the change, less likely everybody is familiar (comfortable, understands) |
| 64 | +* Trigger points at which this occurs, e.g., 3 |
| 65 | + |
| 66 | +# Law VI: Continuing Growth |
| 67 | +> Functional content of a program must be continually increased to maintain user satisfaction over its lifetime |
| 68 | +
|
| 69 | +* Appears same as Law I: Continuing Change, but isn't |
| 70 | +* Scenario: Requirements are stated, but due to resources (budget, time, etc), not all requirements are implemented |
| 71 | +* Eventually, unimplemented requirements requested by users |
| 72 | + |
| 73 | +# Law VII: Declining Quality |
| 74 | +> ... programs will be perceived as of declining quality unless rigorously maintained and adapted to a changing operational environment |
| 75 | +
|
| 76 | +* Scenario: |
| 77 | + * Software performs satisfactorily for a long period of time |
| 78 | + * Suddenly, unexpected, previously unobserved behavior occurs |
| 79 | +* Gap between *software* and the *operational environment* |
| 80 | +* *Operational environment* is always changing, not certain how the *software* will respond |
| 81 | +* This uncertainty about software increases with time unless actions are taken during maintenance |
| 82 | +* Familiarity breeds contempt, user satisfaction will change over time |
| 83 | + |
| 84 | +# Law VIII: Feedback System |
| 85 | +> Programming Processes constitute Multi-loop, Multi-level Feedback systems and must be treated as such to be successfully modified or improved |
| 86 | +
|
| 87 | +* All other parts of this set of laws include feedback |
| 88 | +* *multi-loop* iterations |
| 89 | +* *multi-level* development team, testing, management, critics, users |
0 commit comments