What are the Fundamentals of Software Testing
Kalim Riaz
QA Architect || MCP || Fintech || Healthcare || eCommerce || Telco || QA Professional || Trainer || Consultant
The fundamentals of software testing are the core principles and concepts that guide the process of evaluating and verifying software to ensure its quality, reliability, and effectiveness. These fundamentals are essential for both Manual and Automated testing and play a critical role in the software development lifecycle. The fundamentals of testing include.
?Testing Shows the Presence of Defects: Testing is not about proving that a program is correct; rather, it's about identifying defects or issues in the software. Testing helps uncover flaws, bugs, and inconsistencies.
?Exhaustive Testing is Impossible: It's impractical to test every possible input and execution path. Testing aims to sample a representative set of inputs and scenarios to uncover as many defects as possible within the available resources and time.
?Early Testing: Testing should begin as early as possible in the software development life cycle. Finding and fixing issues in the early stages of development is more cost-effective than addressing them later.
?Pesticide Paradox: If the same set of test cases is repeatedly used, the likelihood of finding new defects decreases. To avoid this, test cases should evolve over time to discover new defects.
?Testing is Context-Dependent: Testing strategies and techniques depend on the context of the project, such as its objectives, technology, and constraints. Different projects may require different testing approaches.
?Absence-of-Errors Fallacy: The mere absence of reported defects does not guarantee the software's quality. It's essential to recognize that not finding defects in a particular test doesn't mean they don't exist.
?Bugs Cluster: Defects tend to cluster in specific areas or modules of the software. Focusing testing efforts on those areas is often more productive.
?Testing is Risk-Based: Testing should prioritize areas and functionalities that are most critical and where defects could have the most significant impact on the system's operation or user experience.
?Testing is Continuous: Testing is an ongoing process that continues throughout the software's life cycle, including maintenance and updates.
?Test Automation: Automation can enhance efficiency and repeatability in testing, especially for repetitive and regression testing tasks. However, not all testing can or should be automated.
?Testing and Quality Assurance: Quality assurance encompasses the broader activities and processes that lead to quality software. Testing is a part of quality assurance but is not the only quality assurance activity.
?Testing and Debugging: Debugging is the process of identifying and correcting defects found during testing. Testing identifies issues, while debugging focuses on understanding and fixing them.
?Independent Testing: Independent testing is essential to avoid bias. Testers should be impartial and not influenced by the development team's mindset or expectations.
?Static vs. Dynamic Testing: Static testing involves reviewing documents, code, or design without executing the software, while dynamic testing involves executing the software to find defects. Both types of testing are important.
?Test Documentation: Proper documentation of test plans, test cases, and test results is crucial for traceability and communication.
Errors:
?The?Error?is a Human mistake. An Error appears not only due to the logical mistake in the code made by the developer. Anyone in the team can make mistakes during the different phases of software development.
Defect:
?A?Defect?is a variance Between expected and actual results. An Error that the tester finds is known as Defect. A Defect in a software product reflects its inability or inefficiency to comply with the specified requirements and criteria and, subsequently, prevent the software application from performing the desired and expected work. The defect is also known as?Fault.
Failure:
?Failure?is a consequence of a Defect. It is the observable incorrect behavior of the system. Failure occurs when the software fails to perform in the real environment.
Root Cause Analysis?is a systematic approach to identifying the underlying causes of an incident. It helps in taking appropriate steps, so the problem is addressed. In an ideal world, the software should have Zero defects, and it should not show any failure. Practically, it's never possible. By effective QA processes, we can ensure that software has minimum defects. We can also ensure that there are the right techniques that can be followed to find the underlying cause of any defect. This process of identifying WHY the problem has occurred in the software is called?Root Cause Analysis?(RCA).