Software testing is necessary for any developed application to verify its stable and sound functioning. It is performed by validating outputs against expected outputs using dummy inputs. These inputs are derived from real-life scenarios to make sure everything seems real. In this article we discuss in-depth what different types of testing are performed before the application is actually deployed.
Verifying the functioning of the software as per functional specifications is called functional testing. These functional specifications are made according to the user requirements. We test how the system is functioning by providing proper input and verifying the result against the expected output. Functional testing is further divided into 6 types of testing techniques.
In this testing, each unit or module of the software is tested to verify its functioning. The source code divided into individual modules is tested and verified. To perform such testing one should have complete knowledge of the source code of each unit of the software. Therefore, this testing is performed by the developers and not the testers during the coding phase of the development.
For example, a real-time example would be if you want to test the functioning of the house lock. You will test if it is not unlocking with your car keys or keys of other rooms.
Once the unit testing is done, all the units are combined and tested together as a group. in the unit testing, individual modules are tested and their functioning as an individual is tested. In the integration testing, they are tested together as a whole and components’ interdependencies are tested. The goal is to find faults once the components interact with each other.
For example, two different modules are put together such as adding of products in a cart and total of billing amount are integrated to check how they react when put together.
The end-to-end testing of the complete software is called system testing. The whole emphasis is on the behavior of the module as a whole. Real-life scenarios are created with mock objects and the whole system/software is tested from start to end.
For example, a real-time example would be the testing of an e-commerce website. Once all the modules are tested individually, the site is integrated together and is tested if a user can log in, add products to the cart successfully, shipping address page is reflecting or not, etc. this ensures no bug is left in the software.
Also, Read this Difference Between System and Integration Testing
User Acceptance Testing
This is done once all the above mentioned tests have been performed. The goal of this test is to determine the feasibility of the UI of the system. The software must meet the expectations of the user. The user should not face difficulties while operating the system, should be easy to use. The software should also be visually appealing. Real-life users are set in the mock environments are made to test the software before it is officially deployed in the market.
Regression testing is done to ensure that even after changes are made to the system it performs in the same way as it was before. Regression testing is done each time changes are made to the existing system. Regression testing is also done to check if old bugs have not resurfaced.
For example: in a game, if some levels are added the whole software is regressively tested.
Smoke testing is used to check the build of the software. Each module is tested to identify showstoppers that can cause problems for further testing, thus the stability of that unit is validated. This ensures that the module is ready for further testing. The smoke testing is deeper verification of regression testing.
Non-functional testing is done to measure how the system will work in different situations. The goal is to check the system’s reliability by measuring its performance, efficiency, versatility, usability, etc. There are about 5 ways in which non-functional testing can be performed. These are
Performance testing is done to evaluate the response time of the system. It determines the time taken by the developed software to respond to the user after a given instruction. It determines how effective is the software once put under a workload.
To maintain the data protected from the intruders a system should be robust and impenetrable, and to make sure it has such qualities security testing is done. It makes the data safe from threats and intrusion.
Examples: While making software for a bank to keep account of all the clients of the bank. Such data contains account numbers and the security of their personal information is kept at top priority. Therefore, security testing is performed to ensure the system cannot be hacked. Sometimes systems have a feature to auto-lock themselves or erase all the data in case of unauthorized access.
Load testing is done to determine how much traffic can a software bear before crashing. It also notes at what point the system starts to degrade if multiple users start accessing it. Some of the common automation tools to perform it are JMeter, LoadRunner, Silk Performer, etc.
For example, an airline's website will experience heavy traffic during the vacation season. Load testing will be performed to check how the website will perform or react when thousands of users will access it at the same time.
Efficiency testing is done to ensure minimal efforts are put to extract max output. It is usually measured by no. of tests executed/ time(hours). it also counts all the resources used to perform testing for the whole software.
To ensure that the system is capable of recovering itself when crashed due to extra load or stress, recovery testing is performed.it could be a hardware failure, or a connection failure, or a software failure. The application is made to fail forcefully to check its functioning.
Example: switch off the Wi-Fi or mobile data while downloading a file. Resume the connection after a while. Check if the downloading begins from the same point or not. Another way is to immediately shut down the system while lots of applications are open. This will determine if all the data is saved and intact or not.
To know more about 100+ types of software testing techniques you can check this article.