What is Software Testing?
Software testing is a process of executing a program or application with the intent of finding the software bugs.
- It can also be stated as the process of validating and verifying that a software program or application or product:
- Meets the business and technical requirements that guided it’s design and development
- Works as expected
- Can be implemented with the same characteristic.
Let’s break the definition of Software testing into the following parts:
1) Process: Testing is a process rather than a single activity.
2) All Life Cycle Activities: Testing is a process that’s take place throughout the Software Development Life Cycle (SDLC).
- The process of designing tests early in the life cycle can help to prevent defects from being introduced in the code. Sometimes it’s referred as “verifying the test basis via the test design”.
- The test basis includes documents such as the requirements and design specifications.
3) Static Testing: It can test and find defects without executing code. Static Testing is done during verification process. This testing includes reviewing of the documents (including source code) and static analysis. This is useful and cost effective way of testing. For example: reviewing, walkthrough, inspection, etc.
4) Dynamic Testing: In dynamic testing the software code is executed to demonstrate the result of running tests. It’s done during validation process. For example: unit testing, integration testing, system testing, etc.
5) Planning: We need to plan as what we want to do. We control the test activities, we report on testing progress and the status of the software under test.
6) Preparation: We need to choose what testing we will do, by selecting test conditions and designing test cases.
7) Evaluation: During evaluation we must check the results and evaluate the software under test and the completion criteria, which helps us to decide whether we have finished testing and whether the software product has passed the tests.
8) Software products and related work products: Along with the testing of code the testing of requirement and design specifications and also the related documents like operation, user and training material is equally important.
Black Box Testing
Black Box Testing is Also known as functional testing, it is performed to test the functionality of the application. When it is about checking how long the application takes to process the input data, it is also called performance testing. Testers, in this case, don't have the complete knowledge of the how the application works underneath and are only concerned with output being in sync with inputs given.
Some famous BB testing techniques are:
- Boundary value analysis,
- State transition testing,
- Equivalence partitioning.
Advantages of Black Box Testing :
- Done from user's perspective.
- Developer and Tester are independent of each other and tester doesn't need to know about the coding language used.
- Major disadvantage is that test cases are difficult to design and can go redundant.
White Box Testing
In this type, one is required to have a knowledge of internal working of the application. It tests the code, decisions, logic and data flow within the program.Also known as clear box testing, glass testing or an open box testing.
Advantages of White Box Testing:
- Helps in optimization and consolidation of code i.e unnecessary code lines can be removed.
- Easy to find defects as logic or internal working of the application is known to the tester.
- Major disadvantage is that a skilled tester is required for white box testing.
Unit Testing
Performed by developers themselves. Statements, functions, methods, interfaces i.e units of the code are individually tested for proper execution.
- It can be automated or can be done manually.
- Usually small data is used for unit testing.
Integration Testing
In this type, individual modules of the program are integrated and tested as a group.It is performed after unit testing to check whether the data flow is proper and sequential and different modules are working in harmony with each other and with the input data
Different approaches used in integration testing are:
- Top down & bottom up integration testing,
- Sandwich testing (combination of both).
System Testing
Here, a complete and an integrated application is tested as a system to check whether it is compliant with specified requirements i.e it checks not only the design, but behavior of application along with expectations of the client.
- Usually, black box testing approaches are used for this.
- It is performed after integration testing.
- Various approaches used are: load testing, smoke testing, security testing, migration testing etc.
Acceptance Testing
It is performed by end users or clients (beta testing) before the application goes live i.e before final delivery of the product.
- Test data involves real world scenarios to check if the application meets business requirements and will work fine with live data (production environment).
- Before the client tests it, alpha tests are usually performed by members of the same organization other than the team who developed it i.e Product management or sales team.
Automation Testing
This type makes use of testing tools or custom developed testing utilities. Its goal is to reduce number of manual test cases with same results as manual testing is time and cost consuming.
- It increases the speed of test execution.
- Some well-known automation testing tools are Selenium, QTP, TestDrive, SoapUI.