System testing is the third phase of software testing in the software testing hierarchy, other phases are unit testing, integration testing and acceptance testing. In this article, we learn about system testing, the process of system testing, the different types of system testing, and the reasons to perform system testing.
Table of contents.
- Test plan.
- System testing process.
- Types of system testing.
- Reasons for system testing.
System testing is the third phase of software testing in the software testing hierarchy, other phases are unit testing where we test individual components integration testing where we test the system when combined with other units. The final phase is acceptance testing where the system is tested to see if all business requirements were met.
Usually, a piece of software does not work alone. It needs to be combined with other software on the appropriate infrastructure. System testing involves performing a series of tests on a fully integrated computer system against system requirements.
Before we test we have to define what to test for. The following are the common areas we would cover;
- Purpose and objective - we should make sure the system performs its purpose and objective.
- Scope - we should specify what to test and what not to test.
- Test strategy - we define techniques we use for the testing.
- Test cases - we define the test cases we are going to use to test the system.
- Test environment - we specify the environment on which to perform test such as an operating system, hardware vendor, browser, or platform.
- Assumptions - we specify what assumptions to include in the tests.
- Entry/Exit criteria - specify the criteria, that is, when the testing starts and ends.
- Test schedule - estimate the amount of time it will take us to test the system.
- Resources - what are the available resources we can use to test the system.
System testing process.
The following are steps involved in system testing;
- First we create a test environment.
- Next we create test cases.
- Create the test data.
- Execute the test cases.
- Report defects.
- Regression testing, we test the side effects of the testing process.
- Fix defects and bugs.
- Retest, if the previous tests were unsuccessful.
Types of system testing.
There are a lot of system testing types. Testers or developers choose an appropriate one depending on the following factors:
- The size of the organization - how a large organization performs software testing will be different from how small and medium organizations perform testing.
- Resources - This is also a factor, some testing software is paid for and thus if the testers are working for a large organization, they will have access to expensive testing software.
- Knowledge and experience - to use a particular testing software, the tester needs to know how to use it.
- Budget - Money is always a factor, developers, testers, and small, medium, and large organizations all have to pay a cost for testing software, whether it be the testers' compensation or the testing software license.
- Time - The time constraints testers to only use the most effective type of testing.
System testing is divided into functional and non-functional testing. The former ensures that the system functions as intended while the latter tests how well the application work, we test aspects such as security, compatibility, installation, etc.
Functional system testing.
In this type of testing, we test the system to make sure that all functional requirements are specified in the business document are met.
Examples of functional system testing are;
Regression testing, the testers make sure that the system is stable as it undergoes different integrations and maintenance.
Smoke testing, this involves testing the build to make sure that all the important functionalities are working. This is performed after a new build is made, here we can decide whether to run more tests or not.
Usability testing, here the testers make sure the system does what it is supposed to do.
Graphical User Interface testing, the GUI is what the user sees and uses. Testers make sure that it is working as expected.
Exception testing, the testers make sure that all edge cases are handled by displaying appropriate errors when such cases are encountered allowing the system to recover and process the error.
Non-functional system testing.
Recovery testing, the testers make sure that the system can recover when it crashes. It should be reliable in all cases.
Performance testing, here we test software aspects related to its performance such as stability, scalability, reliability, resource consumption, etc. Such tests are expensive to implement although they assist testers to know if changes will degrade an application or not.
Reliability testing, the system is tested to make sure that it can work longer without any issues.
Security testing, here a tester makes sure that the software is only accessible to authorized parties. They determine how well the system handles unauthorized users. Here aspects such as authentication, authorization, data validation, transport security, session management, and data protection are checked.
Compatibility testing, As the name suggests, testers test the system under different hardware such as mobile phones, servers, or software such as operating systems, networking, etc. For example, if the system is web-based, we should make sure that it is accessible from all browsers.
Scalability, the testers make sure that the system can scale in terms of geography, resources, number of users, load, etc.
Documentation testing, we make sure that their documentation is correct and can be used by users to learn about the system.
Installation testing, this is to make sure that the application can be installed without any issues.
Other types of system testing are;
Load testing, here we test how much load or work a system can handle using real-time loads. We determine how the system performs on different loads. We also check the normal and predefined system conditions.
Stress testing, testers test the system using different volumes and sizes of data to see how the system performs. They determine the system performance under extreme conditions.
Configuration testing, here we look for compatibility issues with other software or hardware. We also determine the minimum and optimal software and hardware configurations needed to get the system running. We evaluate the effects of modifying system resources such as memory, disk space, network, processing power, etc.
Migration testing, the testers test how easily the system can be migrated from one infrastructure to another. The aim here is to do this without any issues.
Software and Hardware testing, testers make sure that the system can be integrated with other software and hardware and is compatible with it.
Interoperability testing the testers test how a system performs when working with third-party products such as APIs, payment systems, etc.
Exploratory Testing, this involves exploring the application, here the tester uses his/her intuition, experience, and intellect to explore the application's features. Here testing has no structure, the tester can select any component and start exploring from there.
Adhoc testing, In this type of testing the tester test the application to break it. No structure is needed here are the tester uses experience and intuition to perform tests.
Interactive testing, this is manual testing where testers create test cases and perform tests on the system and collect results manually.
Reasons for system testing.
- To ensure product quality.
- To meet business requirements.
- Fix bugs that may arise or go unnoticed.
- Reduce troubleshooting and support calls after deployment.
- Gain customer confidence.
- Check software scalability, reliability, and other performance metrics.
In a system, multiple components such as other software and hardware are integrated to form a complete system. In system testing, we test the product as a whole.
Commonly used tools for system testing are Robot framework, JMeter, Gallen framework, Selenium.