System Testing includes testing of a fully integrated software system. Generally, a computer system is made with the integration of software (any software is only a single element of a computer system). The software is developed in units and then interfaced with other software and hardware to create a complete computer system. In other words, a computer system consists of a group of software to perform the various tasks, but only software cannot perform the task; for that software must be interfaced with compatible hardware. System testing is a series of different type of tests with the purpose to exercise and examine the full working of an integrated software computer system against requirements.
To check the end-to-end flow of an application or the software as a user is known as System testing. In this, we navigate (go through) all the necessary modules of an application and check if the end features or the end business works fine, and test the product as a whole system.
It is end-to-end testing where the testing environment is similar to the production environment.
There are four levels of software testing: unit testing, integration testing, system testing and acceptance testing, all are used for the testing purpose. Unit Testing used to test a single software; Integration Testing used to test a group of units of software, System Testing used to test a whole system and Acceptance Testing used to test the acceptability of business requirements. Here we are discussing system testing which is the third level of testing levels.
Hierarchy of Testing Levels
There are mainly two widely used methods for software testing, one is White box testing which uses internal coding to design test cases and another is black box testing which uses GUI or user perspective to develop test cases.
System testing falls under Black box testing as it includes testing of the external working of the software. Testing follows user's perspective to identify minor defects.
System Testing includes the following steps.
Example of System testing
Suppose we open an application, let say www.rediff.com, and there we can see that an advertisement is displayed on the top of the homepage, and it remains there for a few seconds before it disappears. These types of Ads are done by the Advertisement Management System (AMS). Now, we will perform system testing for this type of field.
The below application works in the following manner:
The various system test scenarios are as follows:
Scenario1: The first test is the general scenario, as we discussed above. The test engineer will do the system testing for the underlying situation where the Amazon manager creates a request for the Ad and that Ad is used at a particular date and time.
Scenario2: Suppose the Amazon manager feels that the AD space is too expensive and cancels the request. At the same time, the Flipkart requests the Ad space on January 26 at 10:00 AM. Then the request of Amazon has been canceled. Therefore, Flipkart's promotion ad must be arranged on January 26 at 10 AM.
After all, the request and payment have been made. Now, if Amazon changes their mind and they feel that they are ready to make payment for January 26 at 10 AM, which should be given because Flipkart has already used that space. Hence, another calendar must open up for Amazon to make their booking.
Scenario3: in this, first, we login as AMS manger, then click on Set Price page and set the price for AD space on logout page to 10$ per second.
Then login as Amazon manager and select the date and time to put up and Ad on the logout page. And the payment should be 100$ for 10 seconds of an Ad on Rediffmail logout page.
Note: Generally, every test engineer does the functional, integration, and system testing on their assigned module only.
As we can see in the below image, we have three different modules like Loans, Sales, and Overdraft. And these modules are going to be tested by their assigned test engineers only because if data flow between these modules or scenarios, then we need to clear that in which module it is going and that test engineer should check that thing.
Let us assume that here we are performing system testing on the interest estimation, where the customer takes the Overdraft for the first time as well as for the second time.
In this particular example, we have the following scenarios:
Now, we test the alternative scenario where the bank provides an offer, which says that a customer who takes Rs45000 as Overdraft for the first time will not charge for the Process fee. The processing fee will not be refunded when the customer chooses another overdraft for the third time.
We have to test for the third scenario, where the customer takes the Overdraft of Rs45000 for the first time, and also verify that the Overdraft repays balance after applying for another overdraft for the third time.
In this, we will reflect that the application is being used generally by all the clients, all of a sudden the bank decided to reduce the processing fee to Rs100 for new customer, and we have test Overdraft for new clients and check whether it is accepting only for Rs100.
But then we get conflicts in the requirement, assume the client has applied for Rs15000 as Overdraft with the current process fee for Rs200. Before the Manager is yet to approve it, the bank decreases the process fee to Rs100.
Now, we have to test what process fee is charged for the Overdraft for the pending customer. And the testing team cannot assume anything; they need to communicate with the Business Analyst or the Client and find out what they want in those cases.
Therefore, if the customers provide the first set of requirements, we must come up with the maximum possible scenarios.
Types of System Testing
System testing is divided into more than 50 types, but software testing companies typically uses some of them. These are listed below:
Regression testing is performed under system testing to confirm and identify that if there's any defect in the system due to modification in any other part of the system. It makes sure, any changes done during the development process have not introduced a new defect and also gives assurance; old defects will not exist on the addition of new software over the time.
For more information about regression testing refers to the below link:
Load testing is performed under system testing to clarify whether the system can work under real-time loads or not.
Functional testing of a system is performed to find if there's any missing function in the system. Tester makes a list of vital functions that should be in the system and can be added during functional testing and should improve quality of the system.
Recovery testing of a system is performed under system testing to confirm reliability, trustworthiness, accountability of the system and all are lying on recouping skills of the system. It should be able to recover from all the possible system crashes successfully.
In this testing, we will test the application to check how well it recovers from the crashes or disasters.
Recovery testing contains the following steps:
For example: Suppose, we are using the Google Chrome browser, if the power goes off, then we switch on the system and re-open the Google chrome, we get a message asking whether we want to start a new session or restore the previous session. For any developed product, the developer writes a recovery program that describes, why the software or the application is crashing, whether the crash log messages are written or not, etc.
Migration testing is performed to ensure that if the system needs to be modified in new infrastructure so it should be modified without any issue.
The purpose of this testing to make sure that the system is well familiar with the user and it meets its objective for what it supposed to do.
For more information about usability testing refers to the below link:
Software and Hardware Testing
This testing of the system intends to check hardware and software compatibility. The hardware configuration must be compatible with the software to run it without any issue. Compatibility provides flexibility by providing interactions between hardware and software.
Why is System Testing Important?
Testing Any Application
Here, we are going to test the Gmail application to understand how functional, integration, and System testing works.
Suppose, we have to test the various modules such as Login, Compose, Draft, Inbox, Sent Item, Spam, Chat, Help, Logout of Gmail application.
We do Functional Testing on all Modules First, and then only we can perform integration testing and system testing.
In functional testing, at least we have one module to perform functional testing. So here we have the Compose Module where we are performing the functional testing.
The different components of the Compose module are To, CC, BCC, Subject, Attachment, Body, Sent, Save to Draft, Close.
Once we are done performing functional testing on compose module, we will do the Integration testing on Gmail application's various modules:
Note: During testing, we need to wait for a particular duration of time because system testing can only be performed when all the modules are ready and performed functional and integration testing.