Functional testing is a quality assurance (QA) process and a type of black-box testing
that bases its test cases on the specifications of the software component under test. Functions are tested by feeding them input and examining the output, and internal program structure is rarely considered.
Functional testing usually describes what the system does.
Functional testing 
differs from system testing in that functional testing "verifies a program by checking it against
- design documents or
while system testing "validates a program by checking it against the published user or system requirements" .