
Testing Process
Thoughtfully Curated
Static, Dynamic, and Passive Testing
There are many approaches towards software testing. Reviews, walkthroughs, or inspections are referred to as static testing, whereas executing programmed code with a given set of test cases is referred to as dynamic testing. Static testing involves verification, whereas dynamic testing also involves validation.
Passive testing focuses on verifying the system behavior without any interaction with the software product. Contrary to active testing, testers do not provide any test data, but rather look at system logs and traces. They mine for patterns and specific behavior in order to make decisions.
Exploratory Approach
Exploratory testing is an approach to software testing that is concisely described as simultaneous learning, test design, and test execution.
The "Box" Approach
Software testing methods are traditionally divided into white- and black-box testing. These two approaches are used to describe the point of view that the tester takes when designing test cases. A hybrid approach called grey-box testing may also be applied to software testing methodology.
White-box testing (also known as clear box testing, glass box testing, transparent box testing, and structural testing) verifies the internal structures or workings of a program, as opposed to the functionality exposed to the end-user.
While white-box testing can be applied at the unit, integration, and system levels of the software testing process, it is usually done at the unit level.
Techniques used in white-box testing include:
API testing
Code coverage
Fault injection
Mutation testing
Static testing
Black-box testing (also known as functional testing) treats the software as a "black box," examining functionality without any knowledge of internal implementation, without seeing the source code. The testers are only aware of what the software is supposed to do, not how it does it. Black-box testing methods include equivalence partitioning, boundary value analysis, all-pairs testing, state transition tables, decision table testing, fuzz testing, model-based testing, use case testing, exploratory testing, and specification-based testing.
This method of test can be applied to all levels of software testing: unit, integration, system and acceptance. It typically comprises most, if not all, testing at higher levels, but can also dominate unit testing as well.
Unit Testing
Unit testing refers to tests that verify the functionality of a specific section of code, usually at the function level. In an object-oriented environment, this is usually at the class level, and the minimal unit tests include the constructors and destructors.
These types of tests are usually written by developers as they work on code (white-box style), to ensure that the specific function is working as expected.
Integration Testing
Integration testing is any type of software testing that seeks to verify the interfaces between components against a software design. Software components may be integrated in an iterative way or all together ("big bang").
System Integration Testing
System integration testing tests a completely integrated system to verify that the system meets its requirements.
Acceptance Testing
Acceptance testing commonly includes the following four types of tests:
​
User acceptance testing (UAT)
Operational acceptance testing (OAT)
Contractual and regulatory acceptance testing
Alpha and beta testing