principles:murphy_s_law
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
principles:murphy_s_law [2013-03-19 16:58] – christian | principles:murphy_s_law [2021-09-02 17:57] – old revision restored (2021-05-11 22:11) 65.21.179.175 | ||
---|---|---|---|
Line 3: | Line 3: | ||
===== Variants and Alternative Names ===== | ===== Variants and Alternative Names ===== | ||
- | * Design for Errors((Alan M. Davis: //201 Principles | + | * Design for Errors(({{page> |
===== Context ===== | ===== Context ===== | ||
/* fill in contexts here: */ | /* fill in contexts here: */ | ||
* [[contexts: | * [[contexts: | ||
+ | * [[contexts: | ||
+ | * [[contexts: | ||
+ | * [[contexts: | ||
===== Principle Statement ===== | ===== Principle Statement ===== | ||
Line 25: | Line 27: | ||
There are different kinds of possible errors that can and according to ML eventually will occur in some way: Replicated data can get out of sync, invariants can be broken, preconditions can be violated, interfaces can be misunderstood, | There are different kinds of possible errors that can and according to ML eventually will occur in some way: Replicated data can get out of sync, invariants can be broken, preconditions can be violated, interfaces can be misunderstood, | ||
- | Note that Murphy' | + | Note that Murphy' |
Line 34: | Line 36: | ||
This means the fewer possibilities there are that a mistake is made, the fewer there will be. As mistakes are generally undesirable, | This means the fewer possibilities there are that a mistake is made, the fewer there will be. As mistakes are generally undesirable, | ||
+ | Note that ML does //not// claim that everything constantly fails unless there is no possibility to do so. It simply says that statistically in the long run a system will fail if it can. | ||
===== Strategies ===== | ===== Strategies ===== | ||
Line 46: | Line 48: | ||
* Use the same mechanisms wherever reasonably possible (see [[Uniformity Principle|UP]]) | * Use the same mechanisms wherever reasonably possible (see [[Uniformity Principle|UP]]) | ||
* Use consistent naming and models throughout the design (see [[Model Principle|MP]]) | * Use consistent naming and models throughout the design (see [[Model Principle|MP]]) | ||
- | * Avoid Preconditions and Invariants (see [[Invariant Avoidance Principle]]) | + | * Avoid Preconditions and Invariants (see [[Invariant Avoidance Principle|IAP]]) |
+ | * Use assertions to detect problems early. | ||
* ... | * ... | ||
Line 65: | Line 68: | ||
/* * [[wiki: | /* * [[wiki: | ||
- | * [[wiki: | + | * [[wiki: |
/* * [[wiki: | /* * [[wiki: | ||
+ | Furthermore every defect in any system is a manifestation of ML. If there is a fault then obviously something went wrong. The correlation between the number of possibilities for introducing defects and the actual defect count can be regarded trivially intuitive. | ||
===== Relations to Other Principles ===== | ===== Relations to Other Principles ===== | ||
Line 79: | Line 82: | ||
* [[Easy to Use and Hard to Misuse]] (EUHM): Because of ML an interface should be crafted so it is easy to use and hard to misuse. EUHM is the application of ML to interfaces. | * [[Easy to Use and Hard to Misuse]] (EUHM): Because of ML an interface should be crafted so it is easy to use and hard to misuse. EUHM is the application of ML to interfaces. | ||
* [[Uniformity Principle]] (UP): A typical source of mistakes are differences. If similar things work similarly, they are more understandable. But if there are subtle differences in how things work, it is likely that someone will make the mistake to mix this up. | * [[Uniformity Principle]] (UP): A typical source of mistakes are differences. If similar things work similarly, they are more understandable. But if there are subtle differences in how things work, it is likely that someone will make the mistake to mix this up. | ||
- | * [[Invariant Avoidance Principle]] (IAP): Invariants are statements that have t be true in order to keep a module in a consistent state. ML states that eventually an invariant will be broken resulting in a hard to detect defect. IAP states that invariants should therefore be avoided. So IAP is the application of ML to invariants. | + | * [[Invariant Avoidance Principle]] (IAP): Invariants are statements that have to be true in order to keep a module in a consistent state. ML states that eventually an invariant will be broken resulting in a hard to detect defect. IAP states that invariants should therefore be avoided. So IAP is the application of ML to invariants. |
==== Contrary Principles ==== | ==== Contrary Principles ==== | ||
Line 160: | Line 163: | ||
<code java> | <code java> | ||
- | Date date1 = new Date(2013, 01, 16); | + | Date date1 = new Date(2013, 01, 12); |
Date date2 = date1; | Date date2 = date1; | ||
- | System.out.println(date1); | + | System.out.println(date1); |
- | System.out.println(date2); | + | System.out.println(date2); |
date1.setMonth(2); | date1.setMonth(2); | ||
- | System.out.println(date1); | + | System.out.println(date1); |
- | System.out.println(date2); | + | System.out.println(date2); |
</ | </ | ||
- | Furthermore as can be seen in the code above, the month value counterintuitively is zero-based, which results in 1 meaning February. This obviously is another source for mistakes. | + | Furthermore as can be seen in the code above, the month value counterintuitively is zero-based, which results in 1 meaning February. This obviously is another source for mistakes. Also the order of the parameters can be mixed up easily. And lastly this does not refer to a date in 2013 but to one in 3913! The year value is meant to be " |
Because of these and several other flaws in the design of the Java date API, most of the methods in '' | Because of these and several other flaws in the design of the Java date API, most of the methods in '' | ||
Line 185: | Line 188: | ||
* [[wiki> | * [[wiki> | ||
+ | ===== Discussion ===== | ||
+ | |||
+ | Discuss this wiki article and the principle on the corresponding [[talk: |
principles/murphy_s_law.txt · Last modified: 2021-10-20 21:18 by christian