What is Software Testing?
Hard Question. But many people want easy answers. I do provide some easy answers but I encourage you to find your own answers.
ISTQB foundation syllabus says “Software testing is a way to assess the quality of the software and to reduce the risk of software failure in operation.”
Wikipedia - Software Testing
“Software testing is an investigation conducted to provide stakeholders with information about the quality of the software product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation.”
Referenced from wikipedia
“Software testing is an empirical, technical, investigation conducted to provide stakeholders with information about the quality of the product or service under test”
Go Meta to the question
- who is asking the question?
- did they ask the right question? perhaps they want to know what you do, rather than what software testing is?
- what are they going to do with the answer?
who is asking the question?
- all sales pitches, are about needs, value, want, risk, fear
Issues with Definitions
Treat them as descriptive.
Allow for multiple descriptions.
Identify with a role. Definition covers everything you do.
Identify with multiple roles, or a meta role.
My working definition
Meta: “comparing models of the thing with the thing”
comparing models of system with observed interactions of the system
for the purpose of….
evaluating the comparison and refining the model
A few weeks ago this was:
" Software Testing is a process where we compare a model of the software to the software (or another model of the software) for the purposes of refining the model and identifying changes that could be made to the software. "
Why do we care?
- why do we care what it is? should we care more about what we achieve by testing software and how we do it?
- make your own definition
My own definition explored
Software Testing is a process where we compare a model of the software to the software (or another model of the software) for the purposes of refining the model and identifying changes that could be made to the software.
- where does model 1 “a model” come from?
- stated needs/wants/documentation
- comparison to other systems
- why “another model” and not just the software?
- how do we compare?
- exploration and discovery
- what does refining the model mean?
- expanding, because I learn more
- amending, because the model is incorrect
- what changes to the software?
- why “could be made”?
- why aren’t we doing it to ‘confirm’ the model?
- That happens as a side-effect and is less interesting than expanding and refining the model.
Often we talk about: bug, defect, error, failure - these are noticing comparison failures
Imagine a venn diagram with two overlapping circles
- model <-> Software
really it is
- model <-> Observed Behaviour Software (which is a model)
and so becomes
- model <-> model
Because when we “test the software” we are really working with our observed physical model of the software, it is still a model, it is our interpretation of the software, to the degree that we can observe it and the accuracy of our observation.
But we say software.
Sharing your definitions
People compare and contrast to ‘defend’ their model.
Models are a representation of belief.
Having multiple models, accepting multiple definitions, for different audiences.
You are different audiences at different times.
Keep refining your definition
Build your own definition.
Go specific for the context you are working in.
Go specific for the task that you are working on.
Having THE definition, is less important than continuing to revise and expand your definition. To support your communication with others. And to aid your thinking and growth.