Software Testing - Fundamentals
Select A Category
"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 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