What is software testing?
Software testing is process of evaluating the software/ application functionality or performance in order to have a bug free product for the client.
The software industry has various types of testing mechanism to make sure the software/ hardware is bug free. It is important to know few tests that are being used very commonly across industry and the differences between them.
There are 2 basic type of testing:
Manual Testing and Automation Testing
What is manual testing?
Manual testing is done by a person physically sitting and clicking and checking every component and interacting with the software and API to find if there is any bug or issue in the software. It is an expensive and time taking mechanism as it requires proper environment setup and the engineers required to do the tests. There are more chances of human error. To make sure the software works well under multiple user loads, it is difficult to add those many persons to test.
What is Automation testing?
When the term Automation is used, it means that the machine is fed with a set of code to be executed and there is no human intervention required once the setup is done. Automation testing is a process where the test engineer feeds the software steps and data to the tool for the first time and the test set can be run multiple times for the software unless there are major changes done in the software. These tests are more reliable than manual testing as the human error is prone to be less and the repetitive run of the tests can give the same results unless there are any changes done.
Let’s go into details on the Automation test side.
There are various types of automated test mechanisms used in the industry.
They are divided into 2 broad categories:
Functional and Non-Functional Testing
Functional testing is done to check whether all functionalities of the system are working properly.
Few commonly used ones are:
Unit Testing: They are very low level tests. These tests include testing each method and functions written in the code. These tests are mostly used during the development phase of software where the source code is generated. These tests are done at the core of the software. Unit testing is done during the development phase by developers.
Integration Testing: They are the tests done when 2 or more different modules of software are integrated and the software is combined. These tests are done to make sure the software interaction with every component is smooth and error free. Few Examples are Interaction of the frontend UI with the backend database.
System Testing: These tests are carried on the whole system. The software is tested on different hardware configurations or on different system requirements. Example like testing a software/application based on system’s configuration – 32bit or 64bit.
Regression Testing: These tests are performed to make sure the changes made to the software do not introduce any new issues. These tests are also done in order to see whether the existing software functionality is not broken.
Sanity Testing: These tests are done to do a quick check whether the basic functionalities are working properly or not. They are subset of regression testing. These tests are also done in situations like immediate critical fix needs to be deployed in production.
Non-functional testing is done to check the non-functional aspects of the software like the performances, usability, reliability, efficiency etc. Performance testing is a non-functional technique.
There are various types of performance testing.
Few of them are:
Endurance testing: These tests are also called soak test. They are done to check the performance of the system under slowly growing number of users. The tests are normally done to check whether the garbage collection or draining tasks are happening properly over an extended period.
Load testing: These tests are done to check the system performance with projected number of concurrent virtual users.
Scalability testing: These tests are done to measure how application can scale to certain scenarios. It can be scale up or scale down.
Stress testing: These tests are performed to check the upper limit of system by putting extreme load on the system.
Failover testing: These tests are done to make sure the system is able to allocate extra resources and backup all the information and operations when a system fails abruptly. The server configurations used are active-active or active-passive.
Above mentioned are few commonly used test types used across industry in STLC (Software Testing Life Cycle). There are various other types of tests which are conducted based on requirement of the projects. Also the implementations, processes and tests approach varies from project to project in every organization. But the end goal remains the same - The software/application/system should not have any issues and a quality and stable product is delivered to the consumer.