Software testing is carried out to ensure the final delivered product meets the desired requirements. Validation to understand if we are building the software right and verification if we are building the right software are both done during the testing phase.
Classification of software testing is done in various ways:
1. Some call it as White Box and Black Box testing
2. Others may call it Functional, Non-Functional, Maintenance testing. Broadly all testing types can be categorized into 2 types of testing:
Functional testing is a type of black-box testing, which means the tester is not concerned with the underlying code. It is done to verify that each function/feature of the software application functions in conformance with the requirements specification.
Functional testing checks and assures that the product designed by developers works as per requirement specified by stakeholders. It is not about user testing, it is about how each action module/ unit or feature should work. Functional testing is carried out with the help of test cases that are derived out of all possible scenarios, both negative and positive.
Functional testing is both static and dynamic. It's always better if it starts at an initial level of product development. It checks:
A well derived functional testing leads to delivering a high-end product. It helps:
Let’s look at a few examples of functional testing:
Functional Regression Testing is to test the application once more after new features are added or modification is done in the existing application. It checks for the same features, flows, functionalities as it was done during the functional testing phase. It ensures that the application runs smooth as it was working earlier. The purpose of the testing while performing functional regression testing is to check if modification of the application has not led to code break. It checks for:
Non-functional testing is to test the application from non-functional aspects such as performance, usability, security, reliability, load, stress, etc. It is basically done on live scenarios usually to check how the system will perform when kept under such circumstances.
Read more details about types of functional testing.
Dictionary meaning of the word "regression" is "the return to a former or less developed state." So, testing done with the aim of catching any regressions in an already tested functionality is called Regression Testing.
These regressions in the code can occur as a result of “bug fixes”, “new features added to the code” or “changing requirements”. The aim is to test all the code that could be impacted due to recent changes to ensure that no new bugs are introduced in an already tested functionality.
In this topic, we would be discussing the difference between both testing types with respect to various aspects.
The purpose of functional testing is to determine how closely the developed application matches the desired requirements. Whereas, the purpose of regression testing is to check that any change in the application or systems have not led to code break and the system works fine.
The test suite of the functional testing comprises a fresh set of cases and functionalities, which were never tested and executed before. The test cases are re-executed when the defect is raised against a requirement. Subsequently, it gets fixed and assigned for re-test. During retesting if the defect is closed, the linked test cases which failed earlier are passed. The regression suite contains cases that were previously tested and passed. Basically, in regression testing, test cases are re-executed to ensure changes have not impacted previously tested features
Functional testing is required:
Whereas, regression testing is done when:
The techniques used in Functional testing are as follows:
In Regression testing, the most common techniques used are:
The process of functional testing starts with testers reading and understanding the requirements, raising a gap if any discrepancy exists in the requirement, followed by the identification of test input. Passing input values to the systems and comparing the output with the expected results. If the result does not match, the defect is raised against it and the test case is marked as failed. The entire functional testing process includes :
On the contrary, the process of Regression testing type is
entirely different as this activity takes place only when the existing
application is modified or new features are added to it.
The activities
involved in this type of testing are as follows:
Functional testing first is done manually and once a feature is
stable, test cases are automated. While in regression testing, only those test
cases are executed manually or automatically - that are already stable, so this
can be automated when needed.
To know if your team needs to adopt automation check here.
Functional test cases don't need a lot of modification because they are less in number and focused on a feature.
Whereas in the regression suite, Test scripts require higher maintenance, as the test suite is composed to test overall functionality. There may be chances that it can contain old test cases. Test cases may contain functionalities that have changed, new features that have been added or some features which have been removed. The regression suite should be updated after each release to avoid the failure of automation scripts.
Below discussed are a few tools that provide the best services in regards to the automation of the regression suite. Each has its own unique features that help make the automation process smooth and easy to understand for people who are new to the world of automation.
For an in-depth study about automated regression testing and its aspects, check out our automated regression testing guide.
Regression can be functional as well as nonfunctional. Functional Regression testing checks for change or modification in code, backend or environment changes have not led to any failures in the functionality of an application. Whereas, Non-functional regression testing checks for any performance issue which may have resulted due to new introduced changes or modification in the application.
When there is a modification or addition of feature(s) to any existing product, Regression testing is highly recommended. But it really becomes difficult to decide whether to run a full cycle of functional testing all over again or to run the regression suite which covers functionalities that are vital and happy flows.
Usually in an organization the regression suite is designed in such a way that each case of the suite has a tag associated with it depending upon the priority of the case such as Tier 1( all happy flows) , Tier 2(Major functionality), Tier 3(Minor functionality). Tier 1 being the highest and 3 being the lowest.
The best way to decide is to study the risk involved, impacted module and time allocated for testing after the change has been incorporated in the project. Risk involved will always depend on which functionality underwent change and how critical it was for the application.
Let's discuss multiple scenario to have a better idea to how to decide on:
Scenario 1: When risk level is high and time permits Which means a critical Functionality/ies underwent the change. In this case, You should run the entire functional test cases all over again to ensure new code has not impacted previously developed and tested functionality in any way.
Scenario 2: When risk level is high and time is less In such cases you cannot run the entire functional test cases all over again due to time constraints. Just Run a regression suite plus the full functional cycle of the functionality and its associated features which underwent change.
Scenario 3: When risk level is medium and Time is sufficient Since you have sufficient time it is always good to be double sure about the application before deploying it to the production. Run the entire functional test suite to have full confidence over application.
Scenario 4: When risk level is medium and Time is insufficient Since you do not have sufficient time but you need to be sure about the application before deploying it to the production. Run the entire Regression test suite as well as run more functional test cases that focus more on the functionality which underwent change.
Scenario 5: When risk level is low In such case it means that not a major functionality has undergone change. Just run the regression suite and you are good to go.
Scenario 6: Urgent change, immediate deployment and Insufficient time IIn such cases, you cannot run the entire regression suite due to time constraints,just run tier 1 cases of the regression suite which consists of all happy flows. This will help you ensure that there is no breakage in the system and end to end flows fine. Any minor defect or issue detected in such cases can be addressed later.