Functional Testing is perhaps the most common and widely-used type of Software Testing. As the name suggest, Functional Testing seeks to test how well (or not) the different functions and features of a software application, system or website work in practice. In other words, Functional Testing specifically looks at what software does, and is based on either pre-determined requirements or business use case.
Almost every type of Functional Test follows the same logic: determine the function, create an input based on typical use case, define the output based on requirements or specs, execute the tests, and compare expected versus actual results. But just as there are different types of software – and stages of software development – so there are different types of Functional Tests used at different points in the Software Development Lifecycle.
- Unit Tests. This is often the first and most common type of Functional Test, used to test the individual components (or units) of the software before it progresses through the development process. Doing Unit Tests early and frequently can often prevent more complex issues appearing in the latter stages of development.
- Integration Tests. Closely related to Unit Tests, Integration Tests determine how well the various software components work together and integrate to form the larger system. These tests are also done to determine how well different software work together, for example an e-commerce module with a rules engine.
- Smoke Tests. These tests, as the name implies, determine how well the basic functions of a specific type of software work based on spec. For example, Smoke Tests can be used to check if a website’s login portal is working correctly, or if the input fields on a contact form correspond to the outputs.
- Sanity Tests. When something small is changed in a piece of software, Sanity Tests can be used to ensure the new features work correctly without having to re-test the entire system.
- Regression Tests. This is a more complex version of Sanity Testing in that existing software features are tested when new or more advanced features are added. Often adding new features can break older functionality, so Regression Tests – which can be automated using various Test Automation tools – is used to verify the functionality of the software with the new features in place.
- Usability Tests. Also known as UI or Interface Tests, Usability Testing should be the last – and most extensive – type of test carried out on finished (or almost finished) software via its user interface. Usability Tests are typically a manual process, and therefore more time consuming and costly, though several advanced tools make the process significantly more streamlined and effective, albeit costly.