Introduction to Testing and Quality
Testing is a systematic exploration of a component or system with the main objective of finding defects and reporting them. If a financial software has miscalculation in one of its features, we call that a function defect which is unacceptable.
Some systems may not have functional defects but still are not acceptable for e.g., a system that is slow or a system which cannot accept 1000 or more users at a specific time, is still not acceptable.
Testing objectives for different processes of software development may differ. For e.g., testing while developing the software is to make sure that the defects are identified and can be fixed.
While delivering the software for acceptance the main objective will be to confirm that the system works as expected and gain confidence that it has met the requirements. In some cases, the main objective of testing is to assess the quality of the software to give information to the stakeholders so that they can make correct decisions. Some testing activity is to prevent bugs from being introduced in the software.
Testing is primarily of two types: Static testing and Dynamic testing. Testing where the code is not exercised is called Static testing. Dynamic testing is the one in which code is executed. In case of Static testing the activities are review of documents, review for requirements, walkthrough of source code. In Dynamic testing we execute automated test scripts. Both static as well as dynamic testing is used to achieve testing objectives.
Why is testing necessary?
Software is everywhere and they have become an important part of life. Software systems are context dependent. Software is used in our day-to-day life, on our mobile applications for communications, video calling, social networking etc. Software is used in medical machinery for detection of deadly diseases, as well as for treatment of various diseases. Software is used for cars, airplanes and their safety. Software is used in various transportation conveyances. It is used in entertainment as well to edit videos, make films etc. In today’s digital world we have various digital payment gateways, net banking, UPI payment options etc. Right from day-to-day affairs to research missiles and nuclear weapons everywhere we have software.
Software which does not work as expected behavior or even has minor issues can cause huge problems and frustration. If any product does not meet the software industry standards, then it can cause huge business reputation and financial loss. A critical software that is faulty might even cause death or serious injuries. A faulty calculation software can cause financial problems in banking or stock markets.
Causes of software defects
Primary reason for defects in software is that they are created by humans, and they make mistakes which can introduce defects. About 20% of the defects are introduced in the requirements phase, and about 25% in the design phase. The remaining 55% are introduced during the implementation phase as per reports. The extent to which defects are removed in the phase of introduction is called phase containment. Phase containment plays a critical role in understanding the importance of finding and resolving the defects in the software. As the cost to resolve defects increases in a multiplicative fashion each time the defect escapes the testing cycle.
There can be many reason why errors are introduced in the software system, some of them are as follows: –
- If a faulty document is used for testing of any component in the system.
- If there are time constraints such as deadlines that the team has committed.
- If the team does not have the expertise in the technology or tool that is being used.
- If the system is too large and complex, then it might happen that the team can miss-out on a few defects and errors are introduced in the system.
So how much testing is enough?
What is exhaustive testing (complete testing)? This is a testing approach wherein test cases consist of all the combinations of input and output values. This fundamentally depends on the risk involved due to the defects in the system, safety measures taken during the implementation of the system and most importantly the project constraints such as time required, cost involved (budget of the project). Here we need to understand that we cannot test every possible input or outcome possible, this is ideally impossible. So, under these circumstances we need to prioritise based on the most important and highly vulnerable feature of the system. One can define test coverage for the system under test by multiple ways. Mentioned below are some of the ways in which the coverage of the system can be considered. Coverage of requirement, coverage of code structure, coverage of risk (risk can be considered for technical, safety and business aspects).
Important terminologies
- Error: A mistake in coding which is introduced due to human intervention is an error.
- Defect: When the error in the system is found by the tester then it is referred to as defect in the system.
- Bug: When the defect found by the tester is accepted by the developer then the defect is referred to as bug.
- Failure: Deviation of the system or component from its expected behaviour, delivery, result or service then it is failure of the system.
- False Fail Result: A test result in which a defect is reported although no such defects actually exist in the test object.
- False Pass Result: A test result which fails to identify the presence of the defect that is actually present in the test object.
- Quality: The degree to which a component, system or process meets specified requirements and / or user / customer needs and expectations.
- Risk: A factor that could result in the future negative consequences, usually expressed as likelihood and impact.
- Debugging: It is a development activity that finds, analyses and removes the causes of failure.
- Confirmation testing: It is also known as re-testing. This testing is done to check that the test cases which failed during the last execution are resolved and working fine now.
- Maintenance and operation of software: If the defects found are corrected before the system is released for operational use, then testing can help in reducing the risk. Also testing can contribute to the quality of the software. Software testing purpose may not be to just find defects, but it may also help in the legal requirements or industry specific standards.
Written by, oprimes tester – Devyani Vyas