Software testing terminology can be confusing when you are starting in the testing world. I have been testing for many years, and two of the terms that I see raise some confusion is the difference between functional testing and system testing. Let’s start with a short answer.
The difference between System testing and Functional testing is that functional testing is testing a single feature in a product works as specified, while System testing is the whole product.
Functional Testing | System Testing | |
---|---|---|
Testing Scope | Functional testing of single features. | Functional and non-functional testing of the whole system. |
System Integrations | Some integrations may be mocked. | Integrations are not mocked. |
Test Data | Unrealistic test data. | Realistic test data. |
Test Environment | Development Environments. | End to end Integrated Environment . |
Test Effort | Small testing effort. | Increased testing effort. |
Stakeholders | Small audience with only a few teams involved. | Wider audience with all project stakeholders. |
Now let’s get into more detail for System and Functional testing and where each form of testing is applied.
System Testing vs. Functional Testing
Functional testing aims for a particular functionality of a product. It validates a functionality against the set of product requirements. In contrast, system testing aims for end-to-end testing of the entire product.
System testing includes functional testing, product usability, performance, security, scalability, etc. In other words, system testing consists of both functional and non-functional testing.
You can think of functional testing as part of the test process within in system testing.
Let’s look at some examples of system and functional testing requirements from a food delivery website.
Functional Testing Use Cases
# | Functional Test Description | Expected Result |
1 | Signup form submission | A valid signup form submission will register the new user in the user database. |
2 | Purchase form submission | A valid purchase form submission will create a new transaction record with a unique transaction ID. |
3 | Process refund requests | A refund request will create a new refund transaction record referencing the original transaction ID. |
4 | Product detail page | The product detail page will display the product description, product images, price, and expected delivery days. |
5 | Product Listings page | The product listings page will sort by the most popular products by default. |
6 | Order tracking page | The order tracking page will show the status of the purchase ID, order status, and expected delivery date. |
System Testing Use Cases
# | System Test Description | Expected Result |
1 | Sign up journey. | Successful signups will send a welcome email to the user. |
2 | Purchase Journey. | Successful transactions will send an order confirmation email and start the product shipped process to the delivery address. |
3 | Returned deliveries. | Billing will automatically process refunds for products returned within 15 days. |
4 | Site speed. | Pages should take no longer than 3 seconds to load. |
5 | Website navigation. | 90% of users should find the website easy to navigate. |
6 | Daily Shipping Capacity. | The system should be able to ship at least 1000 orders per day. |
A prerequisite for system testing is, having a system requirements document that details the system’s requirements and design under test.
Test engineers will carry out system testing in an environment similar to the live (or production) environment to strive for accurate results. Earlier staged development environments may have mocked services and test data that don’t accurately replicate system behavior.
Let’s look at how system testing is prepared and carried out.
While machine specifications may differ from the final production environment during a development phase, system testing includes specific requirements for machines, browsers, devices, targeted users, capabilities, etc. The system testing will be similar to end-users’ real-world set up before the final product release.
Beta testing is the final stage in software testing before releasing the final product to real customers. A limited group of end-users is selected to trial the product and carry out predefined tasks to collect real-world feedback before product releases.
The beta testing phase is the last phase for raising bugs and improvements based on customer feedback. Stakeholders may decide to launch the product as is or fix a set of bugs and implement improvements before going ahead with the launch.
In case you want to know more about System Testing, let’s look at testing done in this phase.
Types of System Testing
Performance Testing
Performance Testing is a type of software testing to evaluate the system’s compliance, speed, reliability, and stability.
Performance testing produces a report with quantitive and qualitative measures related to the system’s performance. This testing technique relies on quantitative inputs based on predefined performance KPIs in a limited scope environment.
Load Testing
Load Testing is a type of software testing to determine the behavior of the system under extreme load. This testing technique relies on quantitative inputs in a limited scope environment. Load tests will define the maximum load supported by the product before system degradation.
Stress Testing
Stress Testing is a type of software testing performed to check the system’s robustness at or beyond system limits (either lower or higher limit) of its specified requirements. This testing technique requires varying and unknown loads as an input.
Scalability Testing
Scalability Testing is a type of software testing performed to test a system or product’s functioning in its capability to adapt to the increased number of user requests load.
Acceptance Testing
Acceptance Testing is a type of software testing to evaluate compliance with the given system requirements and evaluate whether it is acceptable for delivery or still needs improvements.
Automated Tools for System Testing
As the name suggests, system testing covers many aspects of a system such as usability, performance, security testing, etc. Many automated tools are used to test every part of a product to minimize time utilization and resources. Some popular tools are:
- Rational Integration Tester
- Steam
- WebLOAD
- LoadRunner
- Netsparker
- BeEF
Now, let’s go through Functional testing and see how it works.
Functional testing mainly involves verifying graphical user interfaces by applying different business scenarios as test cases with predefined test data.
Types of Functional Testing
Unit Testing
Unit Testing is a type of software testing performed on the code level. Unit tests are designed to verify individual modules at a low level to verify that module is behaving as specified in the technical and functional requirements. Individual modules can be functions, classes, etc.
Exploratory Testing
As the name suggests, this type of testing is based on the user just exploring different software product functionalities to gain product knowledge and explore new features to find out possible flaws or glitches.
The following is a list of tools that you can use for automating functional testing.
Automated Tools for Functional Testing
- Selenium
- TestComplete
- Soap UI
- Watir
- Borland Silk Test
- Coded UI Test
- UFT
- Sahi
Test Deliverables
The results from Functional and System testing are targeted to different audiences. Therefore, the artifacts delivered to stakeholders vary between these two phases.
System Testing Deliverables
- Test Summary report: A finalized document that details the entire system’s wellness.
- Tested build: A final version of the software product.
- User guides (if any): A support document detailing how to use different functionalities and modules.
- System metrics: A quantitative estimation of the quality/sustainability of the system and KPIs.
- Customer metrics: End-user feedback, rating, and product improvements.
Functional Testing Deliverables
- Test Case Execution Report: A document with the test cases’ status and business scenarios executed according to functional requirements and preconditions.
- Defect Reports: A document to explain bugs revealed while executing test cases.
Here’s a brief review of other testing techniques that need to be covered to understand the difference between functional and system testing.
Black-box Testing
Blackbox testing is also called behavioral testing. Blackbox testing deals primarily with front-end tests of the system’s functionality without concern for internal architecture or technologies. The focus for black-box testing is only; Does the System do what it’s supposed to do?
White-box Testing
Whitebox testing is carried out with internal knowledge of the system. It’s usually performed by software developers or testers with coding skills and requires good domain knowledge of the codebase.
Regression Testing
When implementing change requests or new features, regression testing is performed additional to the new feature tests. Regression testing is re-executing functional and non-functional tests to ensure that previously developed and tested software components still perform correctly after a change.
Integration Testing
Integration testing is carried out to determine whether all the system components are performing well while combined. Here we test the interactions between different parts of the system.
Wrapping Up
If you were confused about the differences between functional testing and system testing, by now, you should know that System testing is a collection of different types of testing techniques with a broader scope and requiring more time and resources. System testing is essential because it provides a clear picture of application architecture and business requirements before the actual product rollout.
Simultaneously, functional testing is a stand-alone testing technique and therefore has a smaller scope; it doesn’t take up much time and resources compared to system testing.