The functional testing process focuses solely on what the system does, not how, why, or even how well. The internal structure of the application is rarely considered during functional testing. Instead, it checks the program function against all available documentation prepared prior to development. The system’s compliance with these and other requirements are the primary focus of functional testing.
For each of the many functional testing types utilized, the tester identifies the expected behavior, creates data to use for the type of test being performed, determines the appropriate output, executes the tests, and then compares the actual and expected outputs based on the functional, business, or design requirements and specifications. Testers set out to verify each specific action and code function using manual or automated tests, or most often a mixture of both. User commands, data updates, searches, and UI functionality are examples of functions that are tested. Defects found during functional testing are very often related to the user interface or inter-process communication.
Functional tests make sure the system behaves correctly from the perspective of the end-user and according to business and functional requirements. Each component must perform according to specifications and business objectives must be met. This segment of testing is takes the longest to prepare for, with testers working on functional test plans as soon as documentation is available. Performing the various array of functional tests is time consuming, must be heavily planned, and can be overwhelming for some organizations with limited resources or harsh time constraints.
The functional testing process employs several different types of testing that are explained in more detail within the Functional Testing section. Examples are: acceptance testing that determines how useful the product is to the end-user, database testing which ensures that databases are durable, secure, and consistent, exploratory testing that requires testers to design and execute tests simultaneously, negative/positive testing that deals specifically with inputs and boundaries, or white-box testing that exercises all internal components and evaluates them against industry standards, business rules, or design specifications.