What is Software Testing?
July 16, 2020
I have been testing software since 2012. And during that time, I have had to do a lot of interviews with people who have also been working in testing for a long time but don't understand what software testing really is.
Insufficient understanding of what software testing makes it impossible to use it fully and effectively because you simply do not understand what is expected of you.
There are several popular interpretations of the term software testing:
- A process that aims at finding defects and errors
- Comparison of the existing result with the expected one
- Analysis of the product to ensure it complies with the requirements
These interpretations cover the concept of testing only in part. What exactly do I not like about these explanations:
- A process that aims at finding defects and errors – Of course, the main result of testing is the defects found. Well, let’s say we found the defects and fix them, what’s then? Are we just going to keep doing it in circles? I believe, it is a bad approach. You need to draw conclusions from the problems found and improve the process to avoid them in the future.
- Comparison of the existing result with the expected one – Then what do you do when there is no expected result? The customer did not provide clear requirements or the requirements do not cover a particular case. How do you know if the test has passed or not in such case?
- Analysis of the product to ensure it complies with the requirements – What do you do if the requirements contradict themselves? Or if the product meets the requirements but they are unreasonable?
I would like to extend the meaning of this term a bit so that it can better explain why we need testing.
Testing is a process of analysing the current state of the project in relation to the domain of its application.
Let's break it down into parts.
- A process – effective testing must be built into all levels and stages of SDLC. Testing should not be a separate stage or phase of the project, it should be performed throughout the project.
- Analysis of the current state – the number of defects found is a certain indicator of the current state of the project, but it is not the only or the main one. With testing, you can get a variety of metrics, such as the rate of defect closure, code coverage, or product performance.
- Project – What do I mean by the word ‘project’? It is the product that we are developing and the development process itself. We cannot develop a high-quality and reliable product without a high-quality process. Consequently, testing is designed to improve not only the product but the development process of this product as well.
- Regarding the domain of application – depending on the business area, business goals, and life stage of the product, we can start from what and how to test. For instance, if we are developing a delivery service application in a small town, we may not need to immediately cover it with Load tests for 100k users.
Understanding the project domain helps you to understand which requirements may be unreasonable or which ones should be discussed. Returning to the example with the delivery service app, if the customer wants to log in via BankId it is likely that it will not be appropriate for such an application (even if it is used in that specific business area).
So, my point is that testing is not just about finding bugs or checking if a product meets the requirements. This is a complex and large process that helps build high-quality software products.
Expand your understanding of testing and may it help you be more effective.
P.S. In this article, I intentionally did not touch on concepts such as QA and QC since their fairly vague notions lead to holy wars. I just wanted to share how I see and understand software testing.