The purpose of functional testing
The purpose of functional testing is to assure that the software fulfills the requirements of the stakeholders. It is not user testing, but rather the testing of each action the program must take. Test case scenarios are developed because simply testing one action at a time is not enough. Instead, the program must be tested based on how it is intended to perform in the real world.
Functional testing is sometimes called black box testing because the tester isn't concerned with the actual code, but rather with the program specifications. The tester is testing the program, rather than the code.
Functional testing scenarios should be developed as early as possible during the process of specifying requirements. This enables functional testing of modules as they are delivered.
Functional testing has a wide application. It can be applied to different types of program behavior and can drill down to modular level or a expand outward to system testing. It can validate that key customer journeys are functioning properly by uncovering any issues that might be hidden. It can also validate that there are no issues after a major software release.
While setting up test data can be time consuming and functional testing can sometimes have a low bug detection rate, it does provide rapid feedback on the state of an application at almost any point in the development cycle. It also allows for precise coverage of those test cases that are executed and provides guidance to testers who are operating further down the line.
Functional testing is extremely useful with regard to complex business applications and those applications that have had formal internal testing completed and now require regression executions.
Functional testing describes what the system does, as opposed to what the system should do. It is in the difference between those two points that functional testing has its purpose.