Functional testing is a type of software testing that validates software functions or features based on requirements specifications. It involves testing correct and incorrect inputs to check expected behaviors and outputs. There are different types of functional testing including unit testing, integration testing, system testing, and acceptance testing. Testers write test cases based on requirements and specifications to test the functionality of software under different conditions.