Skip to main content Skip to main navigation Skip to search Skip to footer


Software Testing - Fundamentals

"Discovering the unexpected is more important than confirming the known." - Anonymous


Testing is the process of finding all possible defects or to discover the working software product’s deficiency. It is also a process of executing a program with the intention of logging a defect against the software product.

The primary benefit of testing is to make the workable software product better to improve the quality of deliverables. It also provides a good indication of software reliability and reduces the risk of failures during deployment.

The major role or goal of a tester is to log as many defects as early as possible. Equally, we need to verify the reproducibility of those defects without compromising the quality of the software product, and track the raised defects until closure. Testers are only supposed to find the defects, but not fix or resolve them. The tester should use fresh environments for testing or verifying purposes, and should not test in any of the used or development environments.

Perceptions About Software Testing

The perception for any layman or persons who criticize software testing is that testing means to run or execute the software, or to be precise, the test cases. This is actually a negative mindset about testing, and they need to be educated to make them aware.

Actually, test execution is just a part of software testing, but does not denote a complete test activity. The actual phase of test activities includes test planning, developing test scenarios, test design, test case creation, test execution, defect logging and tracking, reviewing the product documents, and completing the closure activities.

Pro-activeness in reporting the issues leads to a better product outcome. Periodic reviews and the identification and resolution of issues at a very early stage will also help product stability and reliability.

Seven Facts about Testing

The following principles and fundamentals are the general guidelines applicable for all types of real-time testing:

  • Testing proves the presence of defects. It is generally considered better when a test reveals defects than one which is error-free.
  • Testing the product should be accomplished considering the risk factor and priorities, and exhaustive testing is impossible except for any trivial applications.
  • Early testing helps identify issues prior to the development stage, which eases the error correction and helps a lot in cost reduction
  • Normally a defect gets clustered around a set of modules or functionalities. Once they are identified over a period of time, testing can be mainly focused on the defective areas, yet still continue to find defects on other modules simultaneously.
  • Testing will not be that effective and efficient if the same kinds of tests are performed over a long duration.
  • Testing has to be performed in different ways, and cannot be tested in a similar way for all modules. All testers have their own individuality, likewise the system under test.
  • Just identifying and fixing the issues does not really help in setting user expectations. Also, even if testing is performed to showcase the software’s reliability, it is better to assume that none of the software products are bug-free.

Testing Types

Testing can never be successful if it reports that the software product is error-free or reports a non-existence of defects. There are no limitations for testing, and there are many ways to test a system, a few of which are mentioned below: 

  • Black box testing
  • White box testing
  • Integration testing
  • Functional testing
  • System testing
  • Sanity testing
  • Regression testing 

Typically, all these types of testing are performed to identify defects in system behaviour, to evaluate whether the system is ready for release, and to increase customer/end-user confidence that the software works properly and will provide the expected outcome. Equally important for a tester is to test the product for invalid scenarios, also called negative testing.


Software testing is a vast area, and plays a major role in the product lifecycle; each phase has its own importance. Software testing and the tester’s job are not only to test or verify the software, but also to certify that the software is approved for use.


 "Never underestimate the kind of job one does." – Anonymous

Related blogs

Amitabh Mukherjee
My first visit to Farnborough was more than a decade ago. It was the year 2000. I happened to visit the UK to meet a customer and made it to the Farnborough Airshow on the public day. I was a lot younger and it was a dream come true. What’s more! I have not missed a single Farnborough Airshow ever...
Prathameshwar Pratap Singh
Polybase is a technology that is designed to query data from Hadoop Distributed File System. It works by integrating SQL Server Parallel Data Warehouse and supports SQL queries to read and write data from HDFS. In simple, we can create an external PDW table that reference Hadoop data and then...
Anjoli Garg
In this blog, I am going to cover few issues which you generally face while using Fluent NHibernate in different scenarios. First issue occurs when you are working on some platform based application, where you don’t want your configuration related code to be changed at any point of time. Moreover...