What is software testing?

Software testing is a broad term to describe the activities performed on a product or service to ascertain its behaviour. Some see a lot of hidden meaning in the term, and much has been written to dissect the term and reinvent the definition of the word ‘test’. I don’t find this particularly useful – especially to those new to the field – and it seems to be a distraction when we could be writing about our experiences, educating and helping our colleagues, and advancing the art of software testing.

That being said, some things software testing is not:

  1. It’s not a way to prove something is defect free : Even the most basic of applications with simplistic inputs and outputs will have a vast number of possible test combinations which would be impossible to fully test in a reasonable time frame – all testing is performed with some accepted risk.
  2. It’s not a way to guarantee a solution is ‘right’ : The engineering team build and test what the product team define. The software can only be as good as the requirements from the product team, and can only be tested against those (with specification based testing) – acceptance testing should be performed by the product owner or client to verify it meets their needs.
  3. It’s not quality assurance : good testing contributes to overall quality, as does well documented and maintainable code, a repeatable build process, stable infrastructure, a well defined problem statement, etc. – testing is part of quality assurance, along with a great many other things.

The fundamental skills all software testers have is the ability to perform test analysis – applying techniques to break down specified behaviours into scenarios to prove the behaviours are met. From there, the world of software testing opens up into several specialist disciplines including:

  • Automated testing – the art of programatically performing certain tests in a repeatable and stable way to allow humans to focus on other things, like the activities that can’t be automated.
  • Performance testing – exploring the behaviour of a system at scale, to verify it will remain usable during periods of high demand.
  • Security testing – focusing on the attack surface of a system to verify it is not possible to gain unauthorised access.

Through the posts in this blog, I hope to provide some useful information and observations on software testing and working within the IT industry.