Functional Testing
Functional testing sits at the top of the Testing Pyramid. It verifies that a system or its component features operate according to the specified functional requirements - essentially checking what the system does from an end-user perspective.
It is a black-box testing technique: the tester does not need knowledge of the internal code structure. Functional tests provide input to the system, observe the output, and confirm that actual results match the expected results defined in the requirements or specifications.
1. Functional testing vs other types of testing
Functional testing is a higher-level testing activity compared with Unit, Component, or Integration testing. While lower-level tests focus on the correctness of internal logic and interactions, functional testing ensures that the system delivers the required features and behaves correctly from the user’s perspective. It ensures the application delivers the required features and functions from an end-user perspective.
Relying solely on functional testing without solid lower-level tests reduces confidence in the system. Unit, Component, and Integration tests validate the internal behavior and interactions, building a foundation of trust that the functional tests can reliably verify the system’s behavior from the user perspective.
2. Executing functional tests
Functional tests can be executed through the public interfaces of an application and this leads to the following two types of functional testing that are mostly used: