Functional Testing

Functional Testing

Software testing is mainly split into testing software features, or what the application” should do” (aka the functions), and checking non-functional requirements such as performance or usability.

Functional testing considers the behavior of the software depending on the functional requirements. These may be described in work products such as business requirements specifications, epics, user stories, use cases, or functional specifications, or they may be undocumented.

Since the behavior of the software is the main focus, black-box techniques may be used to derive test conditions and test cases for the functionality of the component or system. Functional tests should be performed at all test levels (e.g., tests for components may be based on a component specification), though the focus is different at each level.

This testing involves checking UI, APIs, Database, security, client/server applications, and functionality of the Application Under Test.

Functional testing of a system involves tests that evaluate functions that the system should perform.
Functional requirements may be described in work products such as business requirements specifications, epics, user stories, use cases, or functional specifications, or they may be undocumented.

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.

Main differences between functional and non-functional testing: 

  • Functional testing can be done manually, whereas non-functional testing requires automated tools, such as Jmeter.
  • Functional testing is based on the business requirements (what the product does), while non-functional focuses on the client’s expectations (how the product does it).
    • E.g., Does the user receive the confirmation email after registration? Vs. How long does it take for the user to receive the confirmation email after registration?
  • Functional testing follows clear requirements, while it’s difficult to define requirements for non-functional software aspects.
  • Types of functional testing: Smoke testing, Integration testing, Regression testing, Localization testing.
  • Types of non-functional testing: Performance Testing, Usability Testing, Load Testing, Stress Testing.