What is functional testing?
In functional testing, each software function, or feature, is compared with an organization's specifications to ensure that the software provides the output that an end user or business requires.
Software developers use functional testing as a method to perform quality assurance (QA). If a system passes functional testing, it can be verified for release. Functional testing is important as the process confirms that the application meets customer requirements since the process tries to closely reflect the true experience of a user.
How does functional testing work?
In general, to test individual functions or features, the software is fed input and the output is examined. More specifically, the steps typically involve:
- Identifying the functions the software is expected to perform.
- Creating input data based on functions' specs.
- Determining the desired output based on the specs.
- Executing the test case.
- Comparing actual output with anticipated output.
Functional testing focuses on testing an application's ability to execute a task. This is different from non-functional testing which looks at the application's overall performance, including scalability, reliability, security and compatibility. Functional testing is not concerned with how the processing occurs but rather the results of processing. Although functional testing simulates actual system use, it does not make any system structure assumptions.
Types of functional testing
Functional testing techniques include:
- Smoke testing. A series of test cases are run before the team initiates more rigorous tests. The aim is to verify that an application's main features work properly individually before combining them.
- Sanity testing. This is usually done after a smoke test and verifies that all vital features work together correctly as a system.
- Black box testing. The functionality of the software under test is studied without looking at the internal code structure, implementation details and knowledge of internal paths of the software.
- Integration testing. Integration tests are performed when various systems or components must be properly compatible to carry out basic functionality.
- Unit testing. Individual units of source code (sets of one or more computer program modules together with associated control data, usage procedures and operating procedures) are tested to determine whether they are fit for use.
- User acceptance testing. The last phase of software testing, where actual software users test the software to ensure it can handle required tasks in real scenarios, according to specifications.
Benefits of functional testing
The main benefit to functional testing is that it ensures, as best as possible, that the application will satisfy the end user. These tests do this by proving that the product works as expected. To do this effectively, functional testing also verifies all requirements are met, all security is up to standard, all defects are removed and the quality of the product meets needs.
Functional testing tools
While most development teams have their own approach to functional testing, a few tools are available to aid the process:
- Selenium: This is an open source functional testing framework for web applications that can be used across multiple browsers or platforms.
- HPE Unified Functional Testing: Developed by HP, this tool offers functional and regression testing automation for software.
- TestingWhiz: This is a test automation tool with an enterprise edition that includes web, software, database, API, mobile app and cross-browser testing.
- JUnit: This tool is used for unit and system testing Java.
- Watir: This is an open source functional testing tool comprised of Ruby scripting language libraries.