"Discovering the unexpected is more important than confirming the known." - Anonymous
Testing is the process of finding all the possible defects or discovering a software product's deficiencies. 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 a 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 fundamental 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, 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. These are some of the basic software testing fundamentals which one needs to have in mind while testing a particular software product or application.
Perceptions about Software Testing
A lay man's perception is that testing is about running or executing the software, or to be precise, the test cases. This is actually a negative mindset about testing. .
In actuality, test execution is just a part of software testing, but does not denote a complete test activity. Test activities include test planning, developing test scenarios, test designing, test case creation, test execution, defect logging and tracking, reviewing product documents, and completing closure activities. All these together comprise software testing.
Pro-activeness in reporting issues leads to a better product outcome. Periodic reviews, and the identification and resolution of issues at a very early stage will also contribute to product stability and reliability.
Seven Facts about Testing
The following basic principles and fundamentals are 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 when it is error-free.
Testing the product should be accomplished considering the risk factor and priorities
Early testing helps identify issues prior to the development stage, which eases error correction and helps reduce cost
Normally a defect is clustered around a set of modules or functionalities. Once they are identified, testing can be focused on the defective areas, and yet continue to find defects in other modules simultaneously.
Testing will not be as 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 issues does not really help in setting user expectations. 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 behavior; 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 product 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. Thus, testing becomes a very important step in software development, and like any other critical process, the fundamentals should be rightly applied here.