Uncertaintly Principal and Software Engineering
Uncertainty Principal is a principle of quantum mechanics postulated by Nobel laureate Werner Heisenberg in the 1920s which states that it is not possible to determine both the position and the momentum of a particle at the same instant. The reason he argued, was that the act of “observing” the particle changes its behavior with respect to what is being measured. He was one of the first scientists to bring in probability into the predictable science of physics.
Prior to Heisenberg's theory most physicists (including Albert Einstein) believed that one day physics and computing would be powerful enough that given an input we would be able to predict the future exactly because we would know how each and every element in the universe would react and therefore be able to model time and space with infinite precision. But with the advent of Heisenberg's principal and modern quantum physics (which is almost always a function of probability) physics is no where near predictable.
But what does all this have to do with software engineering? Professor Hadar Ziv and Debra Richardson from UCI published a paper arguing that software engineering is inherently uncertain. The reason they argued was the three sources of uncertainty within all softwares:
- Uncertainty in the problem domain: The first source of uncertainty is the problem domain. The authors argue that since most softwares models “real world” and real world is full of uncertainties. The software that models the real world therefore will inevitably contain those uncertainties.
- The second source of uncertainty was that in addition to problem domain uncertainties, softwares themselves introduce uncertainties. The authors use concurrent softwares as an example to argue their point.
- Their third argument is that softwares are tools that depend greatly on human participation; and human behavior is another area where great amount of uncertainties can be introduced (read my entry on Can UIs produce bugs)
Uncertainty Principle in Software Engineering is a great publication for anyone interested in the topic of testing, validation or software engineering in general. You can download a copy from here or visit their site where the download is also available.