What is System Testing?
System testing verifies whether the complete software product to be delivered meets the specifications described in the requirement document.
System testing is a black-box testing technique and does not require testers to know the internal design of the application. It includes functional as well as non-functional aspects.
Why System Testing?
One can best understand the motivation for system testing with an example. A software development company was developing an online shopping website for a company.
They prepared a software specification document and assigned developers to develop the following modules:
- User login
- Product catalog
- Shopping cart
Developers coded as per the design document and wrote extensive unit tests to test their modules. Coding was followed by integration testing the various modules. Everything looked great.
Then system testing was performed, which resulted in the following bugs:
- The product search results did not include sponsored products.
- The shopping cart was cleared every time a user logged in.
- Billing amount did not apply the latest discount offers.
- Shipping charges were calculated for the user's primary address and not the delivery address of that specific order.
- The application did not work as expected in landscape mode in mobile devices.
Even though the software components worked individually, they did not work as expected when tested from an end user's perspective. System testing exposed these defects.
Types of System Testing
There are many functional and non-functional aspects of system testing. Not all are valid for all software applications. Some of the important ones are:
- Functional testing
- Functional testing verifies that the product functions as per the requirements. In our shopping example, users should be able to search the product catalog, add products to their shopping cart and check out.
- Recoverability testing
- Recoverability testing checks whether the software application performs as expected after it recovers from a hardware, software or network mishap. For example, the shopping website should behave as expected after the internet connectivity is restored after an outage.
- Performance testing
- Performance testing tests the system's performance under various conditions. In our shopping website example, performance testing would check whether the site's initial load time, time to search for a product, time to display the shopping cart, etc. are in line with expectations.
- Scalability testing
- Scalability testing checks whether the application can scale up to meet the increased demand. In our shopping website example, the requirement could be to ensure the site performs well, up to a thousand simultaneous users.
- Reliability testing
- Reliability testing checks whether the software can perform well for a specified time. For example, you will expect a laptop to run at least a month or two without crashing.
- Documentation testing
- Documentation testing that software's user guide and other documentation are correct and usable.
- Security testing
- Security testing verifies that the system does not allow unauthorized access to data and resources.
- User interface testing
- User interface testing examines the visual elements to verify that they function according to requirements and standards. For example, the check to see whether the software has marked all mandatory fields with an asterisk will happen in this phase.
- Stress testing
- Stress testing checks the system's performance when subjected to the large volume of the data. For example, a web server may be stress-tested to observe the website's performance during peak loads.
- Compatibility testing
- Compatibility testing checks whether the software can run on all the supported hardware, operating systems, applications, or mobile devices. In our shopping website example, you would test the site on multiple browsers and mobile devices.
- Compliance testing
- Compliance testing verifies whether the system adheres to all compliance requirements. For example, in a banking application, it may be required to log every credit card transaction to a separate database with the credit card's last four digits.
Advantages of system testing
- It is the first level of testing that verifies the software from the perspective of end-users.
- System testing is a kind of black-box testing which means that testers do not need programming knowledge to perform it.
- It finds bugs that cannot be detected by integration or unit tests.
- It increases the quality of software before acceptance testing.
Disadvantages of system testing
In most cases, system testing is a manual process. This lack of automation means it takes time and costs money. If the code quality is average, system testing can lead to thousands of bugs if the code was not unit tested. These bugs often result from a few root causes and could have been easily avoided with some basic unit and integration testing.