Functional testing is a type of testing that seeks to establish whether each application feature works as per the software requirements. Each function is compared to the corresponding requirement to ascertain whether its output is consistent with the end user’s expectations. The testing is done by providing sample inputs, capturing resulting outputs, and verifying that actual outputs are the same as expected outputs.
Some functional testing examples are:
The new era of test automation is here, with 88% of organizations reporting that Artificial Intelligence (AI) is now the strongest growth area within test activities, in their quest for high quality. Organizations using AI-powered intelligent test automation within their continuous testing pipeline can test efficiently on any browser, mobile device and form factor, either in the cloud, or on-premises. Learn how you can deliver exceptional experiences, everywhere, with high quality applications, by using OpenText latest AI-infused functional testing solutions.Watch the recording
Unlike non-functional testing, functional testing isn’t concerned with investigating the quality, security, or performance of the application’s underlying source code. It doesn’t gauge speed, scalability, and reliability.
Rather, functional testing focuses on the results of processing and not the mechanics of the processing, and determines whether the application satisfies the basic minimum user expectations.
In this sense, the functional testing definition is near synonymous with black-box testing, whereas white-box testing on the other hand is more commonly a characteristic of non-functional tests. For a deeper dive into functional and non-functional testing, learn more at Types of Software Testing: Functional & Non-Functional.
A functional testing plan usually follows the below sequence:
Identify the testing goals
Functional testing goals are the features the software is expected to have based on the project requirements. Testing goals include validating that the application works as it was intended to, and that it handles errors and unexpected scenarios gracefully.
Create test scenarios
Develop a list of all possible (or at least all the most important) test scenarios for a given feature. Test scenarios describe the different ways the feature will be used. For instance, for a payment module, the test scenarios may include multiple currencies, handling invalid or expired card numbers, and generating a notification on successful transaction completion.
Create test data
Create test data that simulates normal use conditions based on the test scenarios you identified. You could enter test data manually (e.g. from an MS-Excel spreadsheet or a printout) or automatically via a script or test tool that reads and inputs the data from a database, flat file, XML, or spreadsheet. Each set of input data should also have associated data that describes the expected result that the input data should generate.
Design test cases
Create test cases based on the different desired outcomes for the test inputs. For example, if you enter an invalid credit card number, the application should display a meaningful error message.
Execute the test cases
Run the test cases through the application and compare actual outcomes against expected results. If actual and expected outputs are different, the feature has failed the test and a defect should be recorded.
Deliberate on, track and resolve defects
Once a defect is identified, it should be recorded on a formal tracking system that’s accessible to the entire project team. The requisite changes should be made to the application and the test case executed again to confirm resolution before a defect is marked as closed.
Functional test automation tools are able to interact with the user interface of the application under test. They can identify objects on the screen, such as list boxes, text boxes and buttons, and can make selections, enter data, and press them.
Many functional test automation tools include a recorder, which ‘watches’ the user as they interact with an application and its objects on the screen, records the data that they enter into the system, and the actions that the user performs, such as pressing buttons or selecting menus. These actions can then be replayed, using the objects, data and actions captured during the recording, to replicate the user’s activities. The results of these actions are noted by the testing tool, and compared to the expected results defined by the automation engineer to determine whether the test passed or failed.
Functional test automation engineers can build their tests step-by-step using the objects recognized by the tool, or they can start with a recording, customizing the steps and parameterizing the data to generalize it and enable tests to run on different environments, including various browsers and mobile devices.
Leading test automation tools today encapsulate artificial-intelligence (AI) capabilities that employ advanced techniques such as machine learning, computer vision, neural networks and natural language processing. This helps identify on-screen objects the same way as a human does, interact with and manipulate objects naturally, and enable tests to be written using plain English.
AI-based functional test automation has been shown to reduce test creation time, boost test coverage, increase resiliency of testing assets, and cut down on test maintenance efforts.
Although Functional Testing can be a challenge to many organizations, the benefits of a properly automated functional testing QA organization far outweigh these challenges, and leveraging the power of proven functional testing tools is the best way to go about it. Find out how OpenText Functional Testing Software Solutions can help you extract optimal value from your functional testing.