Functional Testing

Profile picture for user devraj

Functional testing of a system involves tests that evaluate functions that the system, subsystem, or components should perform. The functions are "what" the system should do and can be unique to a System. For an E-Commerce website, functions can be searching for a product or purchasing a product. For an airline website, functions can be searching flights or booking a flight.

  • Functional tests should be performed at all test levels (e.g., tests for components may be based on a component specification or for the system based on system specification). However, the focus is different at each level. These levels generally determine the basic validation functionality without which a feature or function cannot work. 
  • Functional testing validates the software system against the functional requirements or specifications. Functional testing considers the behavior of the software, so specification-based or black-box techniques may be used to derive test conditions and test cases for the functionality of the component or system. It is not concerned about the source code of the application. 
  • Functional test design and execution may involve special skills or knowledge, such as knowledge of the particular business problem the software solves (e.g., geological modeling software for the oil and gas industries). 
  • Functional testing involves testing the functional behavior of APIs, Databases, and Web or Mobile applications. Functional testing is performed manually or using different automation tools like Selenium, Cypress, Playwright, REST Assured, or QTP.

Functional Requirements Work Products

Functional requirements may be described in work products such as:

  • Business requirements specifications
  • Epics
  • User stories
  • Use cases
  • Functional specifications
  • Component specification
  • or they may be undocumented.

Functional Coverage

The thoroughness of functional testing can be measured through functional coverage. Functional coverage is the extent to which some functionality has been exercised by tests, and is expressed as a percentage of the type(s) of the element being covered. For example, using traceability between tests and functional requirements, the percentage of these requirements which are addressed by testing can be calculated, potentially identifying coverage gaps.

Functional Coverage (express as %) = 

\frac{Number-of-functional-requirements-exercised-by-test}{Total-number-of-functional-requirements } * 100