At a number of conferences I attended in the past, people connected several fields to software development in general and testing in particular, which (at first) seem unrelated.
- Ernie Miller presented “How to Build a Skyscraper” at Full Stack Fest 2015 in Barcelona, a talk that was not actually about building skyscrapers. He rather described lessons that can be learned from building skyscrapers. One of the ‘pro tips’ he presents is this: “A solution that seems unremarkable to you might just change everything for others. (so share what you build)”
- Lauren Scott‘s presentation “Shall I Compare Thee to a Line of Code?“, draws parallels between Poetry and programming. For example in both cases a dense language is used to transport meaning.
- Alexandra Schladebeck and Huib Schoots gave a keynote “Where words fail, music speaks” in which they pointed out similarities between music and testing.
Since then, I pondered this for a while (read: more than 4 years). With my background in physics, I see a number of parallels to software testing. This is also a great opportunity to answer a question I get asked frequently: How did you enter software testing, given your background in physics?
Let’s start with a definition for physics:
Physics is an experimental science. Physicists observe the phenomena of nature and try to find patterns that relate these phenomena.— Young, Freedman. “Sears and Zemansky’s University Physics: With Modern Physics”. Pearson Education.
Also see the wikipedia article on physics.
The patterns that relate those phenomena are the theories (or laws) of physics. They are models that describe an aspect of reality. None of these models is complete, in the sense that it describes everything. There is no one physical theory that explains everything. A nice view of the landscape of physical models is shown in the image by Dominic Walliman (see sciencealert.com for details):
In physics (as in science in general), experimental results and predictions created by models are compared, in order to find out how a model does not match observed behaviour. This is important: Experiments can only ever invalidate a model, but not generally confirm its correctness.
To me software systems are models, too: Even though they may represent reality closely, a software system is not the thing it represents.
Peter Naur described the relationship between theory building and programming in his paper ‘Programming as Theory Building’ (Microprocessing and Microprogramming 15, 1985, pp. 253-261).
My mental model of software testing is very similar to the one of physics: I see software systems as partial implementations of aspects of a real expected behaviour. In my view testing a system means it and comparing observed results with expectations.
The expectations may come from requirements (written or otherwise), previous experiences with similar systems (i.e. another web application from the same company) or other sources.
There are many approaches to testing, in a similar way to the many approaches to physics. Some of them work good in one area but not so well in another. What kind of testing is done, heavily depends on the kind of the software system: Testing embedded software used in medical devices is drastically different from testing, say, a text editor.
It is interesting to go one step further, from physics to science. The Cambridge Dictionary defines science as
the intellectual and practical activity encompassing the systematic study of the structure and behaviour of the physical and natural world through observation and experimenthttps://dictionary.cambridge.org/dictionary/english/science
With a different wording, this seems to fit software testing as well:
Software testing the intellectual and practical activity encompassing the systematic study of the structure and behaviour of software systems through observation and experiment.The definition with a different wording
To me, many very basic principles of scions in general and physic in particular apply to software testing, too. And that’s why I think that my physics background is very helpful in software testing.
Now, I interested in this: What is your background and how does it help you in software testing (especially if your background is not in computer science or software engineering)?