According to the International Software Testing Qualifications Board (ISTQB), software testing is defined as:
“The process of evaluating a software product to detect differences between given input and expected output, and to assess the quality of a software product.”
Software Testing Software (b ᵔ▽ᵔ)b:
Purpose of Software Testing
- Validation: Ensuring that the software meets the needs and expectations of the end-users.
- Verification: Checking that the software correctly implements the intended design and requirements.
- Risk Management: Identifying and reducing risks associated with software failures.
Key Concepts
- Evaluation of Software: Systematic assessment of the software to ensure that it meets specified requirements and functions correctly.
- Detection of Differences: Identification of defects or discrepancies between how the software is supposed to work (expected outcome) and how it actually performs (actual outcome).
- Assessment of Quality: Measurement and improvement of the quality of the software to ensure it meets the necessary standards.
- Process-Oriented: Testing is not a one-time activity but an ongoing process that occurs throughout the software development lifecycle.
Types of Testing
ISTQB categorizes testing into several types based on different criteria:
Scope:
- Unit Testing: Testing individual components or pieces of code.
- Integration Testing: Testing the interaction between integrated units or components.
- System Testing: Testing the complete system as a whole.
- Acceptance Testing: Testing conducted to determine if the software meets the acceptance criteria and is ready for deployment.
Objective:
- Functional Testing: Verifying that the software functions according to specified requirements.
- Non-Functional Testing: Testing aspects like performance, usability, reliability, etc.
- Regression Testing: Ensuring that new code changes do not adversely affect existing functionality.
Execution:
- Manual Testing: Tests are executed manually by a human tester.
- Automated Testing: Tests are executed automatically using tools or scripts.
Principles of Testing
ISTQB also outlines several fundamental principles of software testing:
- Testing shows the presence of defects: Testing cannot prove that the software is defect-free.
- Exhaustive testing is impossible: It’s impossible to test all possible inputs and scenarios, so testing should be risk-based and prioritized.
- Early testing: Testing activities should start as early as possible in the software development lifecycle.
- Defect clustering: A small number of modules typically contain most of the defects.
- Pesticide paradox: Repeated execution of the same tests will eventually no longer find new defects, so tests need to be regularly reviewed and revised.
- Testing is context-dependent: Different types of software require different testing strategies and methods.
- Absence-of-errors fallacy: Finding and fixing defects does not guarantee that the software meets users’ needs.