Software is about contracts and ambiguous contracts are a nightmare
TL;DR: Keep your code explicit
Problems
Solutions
Be declarative and explicit
Don't oversimplify
Context
Hidden assumptions are underlying beliefs or expectations not explicitly stated in the code.
They are still present and can impact the behavior of the software.
Various reasons can give rise to assumptions such as incomplete requirements, incorrect presumptions about the user or environment, limitations of the programming language or tools, and bad accidental decisions.
Sample Code
Wrong
tenCentimeters = 10
tenInches = 10
tenCentimeters + tenInches
# 20
# this error is based on the hidden assumption of a unit (any)
# and caused the Mars Climate Orbiter failure
Right
class Unit:
def __init__(self, name, symbol):
self.name = name
self.symbol = symbol
class Measure:
def __init__(self, scalar, unit):
self.scalar = scalar
self.unit = unit
def __str__(self):
return f"{self.scalar} {self.unit.symbol}"
centimetersUnit = Unit("centimeters", "cm")
inchesUnit = Unit("inches", "in")
tencCentimeters = Measure(10, centimeters)
tenInches = Measure(10, inches)
tenCentimeters + tenInches
# error until we introduce a conversion factor
# in this case the conversion is constant
# inches = centimeters / 2.54
Detection
[X] Manual
This is a design smell
Tags
- Coupling
Conclusion
Hidden assumptions can be difficult to identify and can lead to bugs, security vulnerabilities, and usability issues.
To mitigate these risks, software developers should be aware of their assumptions and biases.
Developers also need to engage with users to understand their needs and expectations.
They must test their software in various scenarios to uncover hidden assumptions and edge cases.
Relations
Code Smell 02 - Constants and Magic Numbers
Maxi Contieri ・ Oct 21 '20
More Info
Coupling: The one and only software design problem
Maxi Contieri ・ Feb 6 '21
Disclaimer
Code Smells are my opinion.
Credits
Photo by Christian Pfeifer on Unsplash
A human organization is just as much an information system as any computer system. It is almost certainly more complex, but the same fundamental ideas apply. Things that are fundamentally difficult, like concurrency and coupling, are difficult in the real world of people, too.
Dave Farley
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.