What is functional testing
November 20, 2018

What Is Functional Testing?

Test Management
Application Lifecycle Management

Functional testing verifies what software does.

Functional testing makes sure everything works properly. It confirms that the software fulfills functionality requirements. And it ensures that your software is ready to be shipped.

You’ll typically use functional testing to check:

  • Core functionality
  • Basic usability
  • Accessibility
  • Error conditions

Types of Functional Testing

There are many different types of functional testing that verify your software. Here are some of the most common ones.

Unit Tests

Unit testing is done on the code level. You can use unit testing to check for mistakes in your code. This might include code that is accidentally modified. Or it could simply be code with errors.

It includes line, path, and method coverage. It can be static or dynamic.

There are different types of unit testing that are specific to programming languages, such as JUnit tests for Java and NUnit tests for Microsoft .NET.

Integration Tests

Integration testing checks if your existing system will still work properly after you’ve introduced a new component.

Integration testing can be bottom-up — from the lowest module to upper modules. Or it can be done top-down — from the topmost module to lower modules.

More on system integration testing >>

Interface Tests

Interface testing checks if two different pieces of software can communicate with one another.

You may do interface testing for:

  • Workflows
  • Edge cases
  • Performance, load, and network testing
  • Individual systems

Smoke Tests

Smoke testing verifies that software works well enough to move into the testing phase. It’s typically done after a build is complete, but before further tests are done. This reduces defects found later in testing (which makes your testing efforts more cost-effective).

Smoke testing is often done manually. But it can be automated to accelerate your testing process.

More on smoke testing >>

Regression Tests

Regression tests ensure that existing functionality works after code changes. In regression testing, you simply rerun tests that you’ve run before.

It takes a lot of time and resources to run regression tests. So, it’s usually best to select a subset of tests rather than rerun the full test suite. This minimizes costs while maximizing results.

Sanity Tests

Sanity testing verifies that bugs have been fixed after minor code changes are made to a build. In DevOps, sanity tests are done during the release phase. And they’re usually run on just the affected components.

You can use sanity tests to verify that the software functions roughly as it’s expected. Like smoke tests, sanity tests provide a way to save time in the testing process.

Acceptance Tests

Acceptance tests verify that the software meets expectations. This is also known as beta testing or usability testing.

Acceptance testing can be done by people within the organization. This is known as internal acceptance testing. Or it may be done by people outside of your organization. This is known as customer acceptance testing and user acceptance testing. 

System Tests

System testing is done on an integrated application. It verifies the entire system against compliance requirements.

This usually means testing:

  • Load
  • Recovery
  • Migration
  • Hardware/software

More Types of Software Testing

Functional Testing Tools

Functional testing can be done using an automated tool, such as Selenium. Some functional tests may be done manually.

You may use multiple tools for functional testing. And that’s why it’s important to have a central test management tool that brings everything together.

With Helix ALM, you can get visibility into all of your testing efforts. Helix ALM includes a test case management module — Helix TCM — that makes it easy to manage every test.

See how testing teams around the world use Helix ALM.

Examples of Testing in Helix ALM