Any software product that passes through a quality check undergoes both functional testing and regression testing. These two types of tests are an integral part of the testing process, but it is important to know when each type is conducted.

Difference between functional testing and regression testing

Scope

Functional testing is feature specific and it has a limited scope. If you build a car that has a special navigation feature, you will test that the feature is able to correctly locate you on a map, and guide you safely to any destination that you put in. 

Regression testing is not feature-specific. It is generally carried out after a bug has been fixed or a feature has been modified, or a new feature has been added to an existing product. If we continue with our example of the car, regression testing is what we do when the mechanic fixes something. If the navigation panel wasn’t powering on, and the mechanic fixes it, you will check that it now works but you will also check to make sure everything else on the car’s dashboard such as the radio, the blinkers, the gas gauge, and the speedometer are all working correctly. 

In many cases, regression testing will mean testing the product end-to-end while functional testing will mean checking if just one feature works.

Product life

Functional testing and regression testing will occur throughout a product’s life, but a product will go through regression testing far more often than it will go through a functional test. Every new feature will go through its own functional testing cycle but a new feature will also be a reason to regression test other features. Regression testing occurs after all bug fixes as well.

Purpose

Functional testing answers a basic question about a feature: Does it work? 

In order to regulate traffic coming from multiple lanes, traffic lights are installed to signal to drivers when they can go, and when to stop.

Regression testing answers more general questions about the product: is everything running okay? Is the problem fixed? Did we break anything?

In the USA, LEDs replaced the usual incandescent bulbs that were used in traffic lights. The intent was to reduce energy usage, but LEDs do not give off heat the way incandescent bulbs do. This led to the snow building and setting on the traffic lights in winter, making them impossible to see. Technically, the lights still worked but drivers could not see them.

RELATED: What’s the Difference Between Functional and Nonfunctional Testing?

Acceptance criteria

Functional testing doesn’t just test if a feature works, it also tests if a feature works the way it is meant to. If you add a navigation feature to a car, it isn’t just supposed to help locate you on a map or find a place on a map. It is supposed to be able to guide you to your destination. We call this the acceptance criteria of a feature and functional testing checks for it, for that one feature.

Regression testing must look at the acceptance criteria of several features instead of just the one feature that was fixed, added, or updated. This is because when implementing a new feature, or fixing a bug, the fix may break an essential component of a different, unrelated feature. In doing so, the acceptance criteria for that feature will no longer be fulfilled and this can only be determined if a tester looks at the acceptance criteria for all features that are impacted by the change.

Why we do functional and regression testing

Functional testing and regression testing ensure a more stable product. One major advantage of regression testing, particularly for engineering teams is that when a product goes through a regression testing cycle after a change in its code and new bugs are found, the engineers learn how a code change in one part of the product impacts the code in other parts of it. This, in turn, helps engineers when they are developing new features as well since they know certain parts of the code depend on or are linked to other parts. 

For product teams, learning which features depend on each other to deliver a functioning product is essential not just when they’re planning bug fixes but also when new features are to be implemented. The knowledge that comes from the results of previous tests allows them to plan for future testing cycles and highlight areas that will need to be tested in particular when a new feature is added. Regression testing can generally have a wide scope but if a product has gone through a few different cycles, product teams can generally estimate the impact of a change and make more comprehensive and effective testing plans. 

In-house testing vs crowd-sourced testing

In-house testing has its advantages, but in-house test teams tend to become familiar with a product to a point where they can lose sight of usability. With crowdsourced testing, testers are far less familiar with how a product works and are able to explore it with a more open mind allowing them to spot problems that an in-house team might not see.

Contact Testlio to schedule a demo and discover the difference of professional, crowdsourced QA.

This post by Fatima is part of our article series written by our community of testers. Fatima is a movie junkie and technology enthusiast that aspires to be a published author.

 

Get our monthly email newsletter covering testing trends, insights, and events.