Software Testing
Software Testing
Software Testing is a method to assess the functionality of the software program. The process checks
whether the actual software matches the expected requirements and ensures the software is bug bug-free. The
purpose of software testing is to identify the errors, faults, or missing requirements in contrast to actual
requirements. It mainly aims at measuring the specification, functionality, and performance of a software
program or application.
1. Verification: It refers to the set of tasks that ensure that the software correctly implements a specific
function. It means “Are we building the product right?”.
2. Validation: It refers to a different set of tasks that ensure that the software that has been built is
traceable to customer requirements. It means “Are we building the right product?”.
We have various types of testing available in the market, which are used to test the application or the
software.
With the help of below image, we can easily understand the type of software testing:
Software Testing can be broadly classified into 3 types:
1. Functional testing : It is a type of software testing that validates the software systems against the
functional requirements. It is performed to check whether the application is working as per the
software’s functional requirements or not. Various types of functional testing are Unit testing,
Integration testing, System testing, Smoke testing, and so on.
2. Non-functional testing : It is a type of software testing that checks the application for non-
functional requirements like performance, scalability, portability, stress, etc. Various types of non-
functional testing are Performance testing, Stress testing, Usability Testing, and so on.
3. Maintenance testing : It is the process of changing, modifying, and updating the software to keep
up with the customer’s needs. It involves regression testing that verifies that recent changes to the
code have not adversely affected other previously working parts of the software.
Apart from the above classification software testing can be further divided into 2 more ways of testing:
1. Manual testing : It includes testing software manually, i.e., without using any automation tool or
script. In this type, the tester takes over the role of an end-user and tests the software to identify any
unexpected behavior or bug. There are different stages for manual testing such as unit testing,
integration testing, system testing, and user acceptance testing. Testers use test plans, test cases, or
test scenarios to test software to ensure the completeness of testing. Manual testing also includes
exploratory testing, as testers explore the software to identify errors in it.
2. Automation testing : It is also known as Test Automation, is when the tester writes scripts and uses
another software to test the product. This process involves the automation of a manual process.
Automation Testing is used to re-run the test scenarios quickly and repeatedly, that were performed
manually in manual testing.
Apart from Regression testing , Automation testing is also used to test the application from a load,
performance, and stress point of view. It increases the test coverage, improves accuracy, and saves time and
money when compared to manual testing.
1. Black box Testing : Testing in which the tester doesn’t have access to the source code of the
software and is conducted at the software interface without any concern with the internal logical
structure of the software known as black-box testing.
2. White box Testing : Testing in which the tester is aware of the internal workings of the product, has
access to its source code, and is conducted by making sure that all internal operations are performed
according to the specifications is known as white box testing.
3. Grey Box Testing : Testing in which the testers should have knowledge of implementation,
however, they need not be experts.
Black Box Testing White Box Testing
Internal workings of an application are not
Knowledge of the internal workings is a must.
required.
Also known as closed box/data-driven testing. Also known as clear box/structural testing.
End users, testers, and developers. Normally done by testers and developers.
Data domains and internal boundaries can be better
This can only be done by a trial and error method.
tested.
1. Unit testing : It a level of the software testing process where individual units/components of a
software/system are tested. The purpose is to validate that each unit of the software performs as
designed.
2. Integration testing : It is a level of the software testing process where individual units are combined
and tested as a group. The purpose of this level of testing is to expose faults in the interaction
between integrated units.
3. System testing : It is a level of the software testing process where a complete, integrated
system/software is tested. The purpose of this test is to evaluate the system’s compliance with the
specified requirements.
4. Acceptance testing : It is a level of the software testing process where a system is tested for
acceptability. The purpose of this test is to evaluate the system’s compliance with the business
requirements and assess whether it is acceptable for delivery.
Continuous testing : Project teams test each build as it becomes available thus it enables software to
be validated in real environments earlier in the development cycle, reducing risks and improving the
functionality and design.
Involve users: It is very important for the developers to involve users in the process and open-ended
questions about the functionality required in the application. This will help to develop and test the
software from the customer’s perspective.
Divide tests into smaller parts: Dividing tests into smaller fractions save time and other resources
in environments where frequent testing needs to be conducted. This also helps teams to make better
analyses of the tests and the test results.
Metrics and Reporting: Reporting enables the team members to share goals and test results.
Advanced tools integrate the project metrics and present an integrated report in the dashboard that
can be easily reviewed by the team members to see the overall health of the project.
Don’t skip regression testing: Regression testing is one of the most important steps as it encourages
the validation of the application. Thus, it should not be skipped.
Programmers should avoid writing tests: Test cases are usually written before the start of the
coding phase so it is considered a best practice for programmers to avoid writing test cases as they
can be biased towards their code and the application.
Service virtualization: Service virtualization simulates the systems and services that are not yet
developed or are missing. Thus, enabling teams to reduce dependency and start the testing process
sooner. They can modify, and reuse the configuration to test different scenarios without having to
alter the original environment.