What’s the difference between functional and nonfunctional testing?

On the other hand, non-functional testing performs checks on wider quality concerns, verifying all non-functional aspects of the software application (such as usability, performance, compliance, etc.).

This post outlines the differences between the two testing types while also providing examples, strategies, and advice.

New call-to-action

The main difference between functional and nonfunctional testing

Before we can understand the difference between functional and nonfunctional testing, we need to know the difference between functional and non-functional requirements:

  • Functional requirements: describe the behavior/execution of the software system
  • Non-functional requirements: describe the performance or usability of the software system
Functional requirements are the WHAT; nonfunctional requirements are the HOW.
Functional requirements are what a system does whereas non-functional requirements are how well the system does

Examples of functional testing versus nonfunctional testing

To help make the difference even more clear, here are side by side examples:

What is functional testing? What is nonfunctional testing
When inputs are valid, app login functions After login, the dashboard loads within 3 seconds
When email notifications are on, and user receives a new message, an email notification is sent The email notification is sent within 5 minutes
When a JPG file under 1MB is uploaded, the uploader accepts the file When eight files or less (each under 1MB) are uploaded at the same time, the queues all
When the settings menu item is clicked, the settings page loads The settings page has a matching appearance to the rest of the GUI

Functional testing strategies

Here are some of the common functional testing techniques:

  • Installation testing – for desktop or mobile application, testing proper installation
  • Boundary value analysis – testing of the boundaries of numerical inputs
  • Equivalence partitioning – grouping tests together to reduce overlap of similar functional tests
  • Error guessing – assessing where functional issues are most likely to be found and testing these more extensively than other areas
  • Unit testing – testing performed at the smallest level of the software—not how the system is functioning as a whole, but whether each unit is executing properly
  • API testing – checks that internal and external APIs are functioning properly, including data transfer and authorization
  • Regression testing – tests that are performed to verify that new software changes did not have adverse effects on existing functionality (most common automation technique)

All functional tests have a specific output that is expected of any input. If you enter valid data, then you expect the data to be accepted. All functional tests can be scripted with very clear pass/fail criterion.

Nonfunctional testing strategies

Non-functional testing can sometimes require more creativity and technical expertise, because you are testing what the customer expects for an overall quality experience—not X input leads to Y output.

These are the chief nonfunctional testing techniques:

  • Load testing – tests performed on a simulated environment to test the behavior of the system during expected conditions (various number of users)
  • Stress testing – testing performance when low on resources, such as server issues or lack of hard drive space on a device
  • Scalability testing – checking a system’s ability to scale with increased usage and to what extent performance is affected
  • Volume testing – testing performance with a high volume of data, not necessarily high number of users, but could be one user performing a high-volume task, such as a multiple-file upload
  • Security testing – tests performed to uncover how vulnerable the system is to attacks, and how well data is protected
  • Disaster recovery testing – checks on how quickly a system can recover following a crash or major issue
  • Compliance testing – tests of the software system against any set of standards (whether due to industry regulations or a company’s set of standards)
  • Usability testing – testing whether the GUI is consistent and if the application as a whole is intuitive and easy to use

Functional requirements are measured in simple yes/no terms as either present or absent in the completed system. Nonfunctional requirements are typically measured on some scale or interval.

John Terzakis

Customer feedback can help with risk assessment for functional testing but is even more valuable to nonfunctional testing because the feedback can help set the bar—whereas with functional tests the bar is already set.

Jumbotron image