Ever have something go wrong because the fundamental assumption you based it on was flawed? Worse yet, did you not even realize you were making an assumption at the time? As the foundation of philosophy, metaphysics deals with identifying the fundamental assumptions we make about the world and seeing how well they hold up to close scrutiny.
Metaphysics examines the fundamental nature of existence and of the universe. Admittedly, this is a rather broad topic. It includes a swath of areas we think of as the domain of the sciences today—the cosmos, the nature of space and time, the nature of matter—as well as more abstract ones like the nature of mind, perception, existence and reality, and free will. Though questions such as these may seem distant from our everyday concerns, metaphysics undergirds how we perceive and conceptualize the world, and so it has more to offer the test team than just fodder for a rousing Friday afternoon debate.
Ontology
Ontology, a sub-field of metaphysics, sorts things into categories of existence. What things exist? What kinds of existence do they possess? At first blush, this seems like a pointless question to ask. Things either exist or do not. Airplanes exist; dragons don't. We tend to split things into "real" or "imaginary" depending on whether or not they have a physical presence. In fact, though, many things exist that aren't physical objects but instead inhere in other things, like properties ("red", "beautiful") or concepts (the number three, the idea of a right angle).
It's tempting to think of software only in terms of the concrete things we put into it—lines of code, features, and so forth. We less frequently think of it in terms of what properties it manifests. Is our software any good? Does it exhibit beauty, robustness, or ease of use? The feelings of a customer using a piece of software have little in the way of a physical manifestation, but they have a very real effect on that software's success.
Causality
Probably one of the most mind-altering moments for a student of philosophy is reading David Hume's stunning indictment of cause and effect. He denied that we can perceive cause and effect. And, in fact, we can't. We only perceive two events that always seem to transpire together and begin to associate one with the other.
For instance, we may see one billiard ball striking a second, and then that second one moving off in a straight line, but we can't actually know with certainty that the first ball caused the movement of the second. Maybe there are magnets under the table that caused the second ball to move or some other explanation. The reason we know there's a cause-and-effect relation in play is because we've observed this series of events so many times that we've come to expect it.
The path we tread while testing software is not as well known as this. When we observe something happen to the software under test, it is often the first time we have seen it. If we are attaching files to a document and see an error when we attach the eighth one, we are tempted to believe that attaching eight files will cause that error. In fact, the problem may arise when the total size of the attached files exceeds a certain threshold or be caused by something else entirely. Thus, we do well to verify our theories before leaping to conclusions about what may have caused a particular result.
Other Areas of Metaphysics
There is much more to metaphysics—so much so that it's been accused of being the miscellaneous bin of philosophy. Several other metaphysical topics that may interest testers and other software professionals include perception (Can two different people perceive the same experience differently?) and determinism (Can we affect the course of history, or is everything that happens simply part of a huge, inalterable chain of cause and effect?)
Conclusion
Because the world tends to work in ostensibly straightforward ways, it's easy to get caught by exceptions to the rule. As testers, however, those exceptions to the rule are our stock in trade. To avoid being caught unaware, we need to take account of and critically examine the assumptions we make about how the world works, what things are in it, and which of those things are important. Metaphysics provides a tool to let us ensure our inquiries are founded on solid ground and lays the foundation for us to be sure of knowing what we know.
Check out the other articles in Rick's series on philosophy and software testing:
User Comments
a well put together article, especially interested in Ontology. Made me think in the current world do testers really exist or are they imaginary. I spend so much time talking to Software engineers who claim to be testers that it is difficult to reconcile.
Now I know its all metaphysics it at least makes me fell less like a grumpy old tester.
I never thought I'd see "metaphysics" and "testing" in the same sentance. :) But, it - like many other topics - points out the need for awareness of testing myopia.
Just a comment about "cause and effect"... when I was a new tester, I was intensely convinced that automation could cover all code paths, and as such we'd be solving the intensely manual "backwards-engineering" of how the product worked for testing purposes. I mean why test manually, when you can ask automation to travel down each code path.
...After a conversation with Cem Kaner, I got over that quickly...but not without wondering if it isn't going to be technically possible some day. (After we figure out how to fold space, I guess....)
Oh well, hope springs eternal, doesn't it?