Software Testing Fundamentals
As the saying goes “As long as the software is being developed, they should always be tested.”
What is Software Testing?
Software testing is a method to check whether the product meets the requirements and to ensure whether the software is bug-free. The main purpose of software testing is to identify errors, gaps, or missing requirements to deliver the best quality products. Developers make mistakes all the time and it is almost impossible to avoid bugs.
Bugs are errors, flaws, or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways.
Why is Software Testing important?
- Deliver the best quality product.
- Determine the defects and failures of the software before release.
- Ensure that the product meets the requirements of the customers.
- It helps in cost-effectiveness as the bugs are determined at the early phase of software development and can be fixed sooner rather than determining the bugs after release.
Phases of Software Testing Life cycle(STLC)
- Requirement Analysis: It is the first phase of the software testing life cycle. In this phase, all the requirements of the software are analyzed by the QA team. If there is any confusion about the requirements, then the QA team sets up a meeting with the stakeholders for a better understanding of the requirements.
- Test Planning: As soon as the requirement analysis phase is completed, the test planning phase begins. In this phase, the QA lead prepares the test plans and test strategies document. This phase is also associated with the selection of test tools and test effort estimations.
- Test case development: It is the third phase of STLC. In this phase, the QA team writes down the detailed test cases according to the requirement of the product.
- Test Environment Setup: During this phase, test environments are configured and deployed. Once these environments are deployed, different smoke testing is performed to ensure that the environments are working.
- Test Cycle Closure: This is the last phase of STLC. In this phase, test execution is completed which involves activities like report completion, matrices completion, test results. The bugs and test results are analyzed to determine the defect distribution on the basis of type and severity.
Software testing can be done in two ways:
- Manual Testing: It is a testing process where all the testings are performed manually. All the test cases are executed by the tester manually according to the user's perspective without using any automation tools.
- Automation Testing: It is a testing process where the test cases are automated using different tools or by writing different test scripts. Different testing tools like Selenium, Appium, LambdaTest, etc are used for running automation scripts.
Classifications of Software Testing
Functional testing
Functional testing is used for testing functionalities of the software application by providing input and validating the outputs according to the requirements. It is mainly focused on validating whether the system works as intended. It uses black-box testing techniques as the tester has no idea about the internal system logic of the application.
Types of functional testing:
- Unit testing: It is mainly intended to test the individual component of the system to check whether the components are behaving according to the requirements or not. Unit testing is performed by developers.
- Integration testing: It deals with testing of individual components or units after they are combined together. Integration testing is performed to ensure that the components operate and communicate seamlessly together.
- System testing: System testing is performed on a complete integrated system, to evaluate whether the system responds according to the requirements.
- Regression testing: It is one of the important testing phases to test whether the addition of new functionalities or changes in code has not adversely affected the existing or old features.
- Smoke testing: A testing process to determine whether the deployed software build is stable or not. It is the process of testing simple and basic functionalities. For eg: checking whether the user is able to log in or log out.
- Sanity testing: It is a subset of regression testing where sanity testing is performed to ensure that the changes made in the code are working as expected.
- UI testing: It simply means testing the visual elements present on the application to verify whether they perform according to the requirements. It ensures that UI functions are bug-free.
- Acceptance testing: It is considered to be the last step to functional testing where the entire application is tested and ensuring that the application works the same way it is supposed to and meets all the required criteria.
Non-Functional Testing
Non- Functional testing is a type of software testing which deals with testing of non-functional aspects like performance, stability, usability, reliability, maintainability, etc of the software application. Non- functionality test is done in order to check how many users can use the application simultaneously.
Types of Non-Functional Testing
- Performance testing: It is a type of testing associated with testing speed, response time, stability, reliability, scalability under a particular workload. Performance testing is done by using different tools like Apache JMeter, LoadView, LoadNinja, WebLOAD, etc.
- Load testing: It is a type of performance testing which tests the behavior of the application when a large number of users access the application simultaneously. The goal of load testing is to improve the performance bottlenecks.
- Stress testing: It is a testing process where extreme workload is applied to the application, to the point where the application crashes.
- Spike testing: It is the subset of stress testing where the performance of the application is tested under extreme increments and decrements in load.
- Volume testing: It is a type of testing where the system is loaded with database to an extreme volume of data. It is done to analyze the system behavior when exposed to high volume of data. It is also known as flood testing.
- Compatibility testing: It is testing done to ensure whether the software is compatible with different platforms like browsers, databases, hardware, operating system, mobile devices, etc. For eg: if you’re testing a web application, compatibility testing is done on different browsers link Chrome, Safari, Firefox, etc.
Hence, software testing is not a choice but is a necessity.
Happy testing!