What is Software Testing?

Mehmet Baran Nakipoğlu
4 min readJul 27, 2022

--

Photo by Joshua Lawrence on Unsplash

In order to understand the concept of a test in software and the mindset behind it, one should capture the meaning of the test in a business context:
“Assuring that the delivered product or service meets the criteria obtained from the requirement analysis steps and establishing the quality, performance or reliability of the product/service.” This definition will lead us to think of what is quality or the requirements? It will depend on the context of the product and the demands of the customers and end-users.

Software testing is a way to assess the quality of the software and reduce the risk of software failure in operation.

The above short definition of software testing is from the website of ISTQB, which is one of the most widely recognized organizations in the software testing world.

Why is software testing important and what are its purposes?

During the development of the software, testing the developed product will try to address and solve the issues below:

  • Satisfying the requirements obtained from the analysis steps
  • Locating and preventing the errors which would lead to failures in the software product
  • Ensuring the product has the needed quality
  • Reducing the risk of developing an insufficient software
  • Analysing the incorrect/invalid functionalities, designs and customer experiences
  • Assuring that the software application follows the instructed regulations

Since testing is a consistent part of the project throughout the SDLC, starting the test procedures at the earlier stages of the project will drastically lower the cost and resources that might be spent on finding and handling the undesired situations (bugs, errors, invalid functionalities etc.). Accordingly, it makes it easier to detect the defects and get rid of the vital bugs before even going further in the development, which will break the exhaustive process of developing the product — testing and finding bugs — fixing the bug & developing the product — testing again…

“Testing can only show the presence of errors, not their absence.” — Edsger W. Dijkstra

Therefore, the objective of testing is not demonstrating that errors are not present in the software, rather it is executing a program with the intention of finding errors to reduce the risk of failure and reduce the cost of testing. The road from finding error to leading to failure scenario can be seen in the image below with an analogy to make the concept easier to understand.

What are the principles to follow while conducting our tests?

While testing the software, the following 7 principles must be kept in mind.

  • Testing Shows the Presence of Defects: While testing the application or software, the aim is to identify the bugs with some testing techniques and methodologies so that it will not meet the failure while providing the client’s needs. By doing so, the number of bugs can be decreased.
  • Exhaustive (Complete) Testing is Impossible: While we keep developing the software, the complexity of it keeps increasing and the ease of testing the entire application keeps decreasing. Therefore, instead of testing all of the functionalities, modules and features of the application, the modules of the software can be tested on their importance. It can be said that “there are no undiscovered defects at the end of the test phase.”
  • Early Testing: Starting at the early stages of the SDLC would be beneficial in terms of finding and fixing the bugs at the initial stages and would cost less when it’s compared to future stages. Starting at the requirement analysis steps would also help to identify whether the requirements are correctly defined or not.
  • Defect Clustering: The locations of bugs in the software might be clustered in a small block of module or code and correlated to each other. The reasons can be having complex structures some parts or incorrectly developed structures and so on.
  • Pesticide Paradox: This principle states that running the same test cases over and over will not help in finding new bugs or errors. The environment, parameters, implementation of a module etc. might be changed during the development and test cases should be modified accordingly.
  • Testing is Context Dependent: Since each software application will have different needs, environments, and contexts, the tests to execute on this software can be different. For instance, testing an e-commerce website and testing a mobile application of a bank require different context-dependent test cases.
  • Absence-of-Error Fallacy: When the tests are executed, the found bugs are fixed and it seems like no errors left to handle, one can fall under the impression of a 100 per cent of bug-free application. If the developed software does not meet the user’s requirements and it is impractical, then the fixed errors would not be useful.

In summary, software testing can be expressed as executing the program on selected inputs for verification that provides expected behaviours on a finite set of appropriately selected test cases. These behaviours can be validated against user needs, specifications etc. and these test cases are conducted on a subset of all possible tests (determined by risk and prioritization criteria).

--

--

Mehmet Baran Nakipoğlu

Computer Engineer gradute, Full-time QA & Test Engineer, Part-time developer