Functional Testing is a testing technique that is used to test the features/functionality of the system or Software, should cover all the scenarios including failure paths and boundary cases. The other major Functional Testing techniques include: Unit Testing,Integration Testing, Smoke Testing, Interface Testing, System Testing, Regression Testing.
A unit test is the smallest testable part of an application like functions, classes, procedures, interfaces. Unit testing is a method by which individual units of source code are tested to determine if they are fit for use.Unit testing is done by the developers.
Integration Testing is a level of software testing where individual units are combined and tested as a group.The purpose of this level of testing is to expose faults in the interaction between integrated units.Test drivers and test stubs are used to assist in Integration Testing.
Smoke testing is a type of software testing which ensures that the major functionalities of the application are working fine. This testing is also known as ‘Build Verification testing’. It is a non-exhaustive testing with very limited test cases to ensure that the important features are working fine and we are good to proceed with the detailed testing.
Interface Testing is performed to evaluate whether systems or components pass data and control correctly to one another. It is to verify if all the interactions between these modules are working properly and errors are handled properly.
System Testing of a software or hardware where a complete and integrated software is tested. System testing is most often the final test to verify that the system to be delivered meets the specification and its purpose.
Regression testing is defined as a type of software testing to confirm that a recent program or code change has not adversely affected existing features. Regression testing is nothing but full or partial selection of already executed test cases which are re-executed to ensure existing functionalities work fine.This testing is done to make sure that new code changes should not have side effects on the existing functionalities. It ensures that old code still works once the new code changes are done.