Difference between revisions of "Cleanliness"
(Created page with "{{LLMHint}} = Cleanliness in Software Engineering = == Definition == '''Cleanliness''' is defined as: <syntaxhighlight lang="text"> Cleanliness = (Number of Valid Possible...") |
(No difference)
|
Latest revision as of 10:44, 23 April 2025
⚠️ LLM-generated content notice: Parts of this page may have been created or edited with the assistance of a large language model (LLM). The prompts that have been used might be on the page itself, the discussion page or in straight forward cases the prompt was just "Write a mediawiki page on X" with X being the page name. While the content has been reviewed it might still not be accurate or error-free.
Cleanliness in Software Engineering
Definition
Cleanliness is defined as:
Cleanliness = (Number of Valid Possible States) / (Total Possible States)
Higher cleanliness implies that the system design prevents invalid states by construction.
Examples
✅ Good Cleanliness (High Valid/Total Ratio)
Type-safe Enums
enum OrderStatus { NEW, PROCESSING, SHIPPED, DELIVERED }
- Valid states = 4, Total states = 4 ⇒ Cleanliness = 1.0
Finite State Machines
Workflow like: Draft → Submitted → Approved/Rejected.
- Explicit transitions only, impossible to enter an invalid state without a logic error.
Null Object Pattern
Logger logger = new NullLogger(); // instead of null
- Eliminates null as a possible invalid state.
Constructor Validation
public User(String email) {
if (!email.contains("@")) throw new IllegalArgumentException();
}
- Ensures object is only created in a valid state.
❌ Bad Cleanliness (Low Valid/Total Ratio)
Public Mutable Fields
public class Account {
public double balance;
}
- balance can be negative, NaN, etc. ⇒ low cleanliness.
Using Ints for Enums
int status = 3; // 0 = new, 1 = processing, 2 = shipped
- Valid = 3, Total = 2^32 ⇒ Cleanliness ≪ 1
Comment-only Constraints
def update_profile(data): # "email must be present"
...
- Nothing enforces constraints at runtime ⇒ unclean
Boolean Flag Explosion
processFile(file, true, false, true);
- 3 booleans ⇒ 2^3 = 8 combinations, only 2–3 valid.
Summary Table
| Example | Valid States | Total States | Cleanliness | Comment |
|---|---|---|---|---|
| Enum types | 4 | 4 | 1.0 | Clean |
| FSM | ~5 | ~5 | 1.0 | Clean |
| Null Object | 1 | 2 | 0.5 → 1.0 | Clean after pattern |
| Constructor checks | n | n | 1.0 | Clean |
| Mutable fields | ~100 | ∞ | ≪ 1 | Dirty |
| Int as enum | 3 | 2^32 | ≪ 1 | Dirty |
| Doc-only constraints | low | high | ≪ 1 | Dirty |
| Boolean flags | 3 | 8 | 0.375 | Dirty |
Argument Against Traditional Mathematical Proofs
Problem Statement
Traditional proof-based approaches assume:
- Infinite state spaces (ℕ, unbounded recursion)
- Perfect memory and time
- Symbolic models divorced from execution limits
In engineering terms:
- RAM, CPU, and wall time are limited
- Many mathematically valid states are practically invalid
Consequence: Near-zero Cleanliness
Proof-based systems do not eliminate invalid runtime states:
- Stack overflows
- Out of memory errors
- Timeouts or hangs
| System | Total States | Valid States (in practice) | Cleanliness |
|---|---|---|---|
| Unbounded int stack | ∞ | bounded depth | ≈ 0 |
| Turing machine | ∞ | RAM-limited steps | ≈ 0 |
| Isabelle/HOL proofs | Symbolic | Execution-bounded | ≈ 0 |
Misalignment Summary
The closer a system aligns its representational power to its runtime constraints, the cleaner it is. Proof-based systems optimize for expressiveness, inherently bloating the total possible state space and reducing cleanliness — by design.
Conclusion
- Cleanliness is a practical, quantifiable lens for software design quality.
- Overly symbolic or theoretically pure systems often fail in real-world constraints.
- Clean engineering involves bounding state spaces, using types, and designing for reality — not mathematical infinity.