Introduction:
"To Err is Human!" Rightly said, but to extend it further: "To Err is human but to find those errors are the Testers. " :)
Software testing is utmost required to point out the defects and errors that were made during the development stage. As we humans are good at finding others' mistakes easily, Testers are better people to find developers' mistakes or errors. Developers may not realize their mistakes on their own as finding their own mistakes is a difficult task.
In this Blog we will see 3 major concepts in Software Testing:
1) Different methods of Software testing
2) Levels of Testing
3) Types of testing
1) Different methods of Software testing
I) Black box testing
II) White Box Testing
III) Grey Box Testing
Black Box testing: In this method of testing tester does not knowledge of how the system is structured in the box. The tester will test input vs output based on provided specifications.
This testing will focus on what software does without knowing how it does that.
White Box Testing: In this method of testing, the tester is aware of how the software is implemented and how it works. This testing is also known as ‘glass-box’ testing.
Most developers will perform this testing for unit testing and integration testing.
Grey Box Testing: This method of testing involves limited knowledge of how the system works internally. In this testing method, the tester has access to documents and the database. This enables the tester to prepare better test data and test plans.
2) Levels of testing
In the software development Life Cycle, there are different levels of testing. They are as follows:
I) Unit Testing
II) Integration testing
III) System Testing
IV) User Acceptance Testing (UAT)
Unit testing: A Unit is the smallest part or component of a software application which can be tested individually for its functionality. So, Unit Testing is the testing of single unit or a single component code to check if the code is working as expected to match the requirements. Unit Testing is usually done by the developer himself.
Integration Testing: In this level of testing, more than two units are integrated/ grouped and are tested to check their correctness when working together. This level of testing is also mostly performed by the team of developers involved in the development of the units which are clubbed together.
System Testing: This is the further level of testing, in which the application is tested as a System to see if it meets all the requirements. System testing is mostly the final test to verify that the System to be delivered meets all the specifications and its purpose.
User Acceptance Testing: As the name suggests, user acceptance testing is done by the stakeholders and the users or the customers. This level of testing is done to ensure that the system is working the way it was expected by the client to work for their customers. The purpose of this level of testing is to gain confidence in the software application which will now be used by actual customers.
There are two ways to perform UAT.
1) Alpha Testing: This is done at the developer's end or site.
2) Beta Testing: is done at the customer's site before the launch.
3) Types of testing
Testing can be broadly divided in two main types
a) Functional Testing
b) Non-Functional Testing
Functional Testing is used to test the functionality or features of the Software and is majorly categorized into
i) Smoke Testing: This is the testing in which the tester tests, the basic functionality of an application on an unstable build. Unless the Smoke test build passes the build is considered to be unstable and cannot be checked further. Once the smoke test build passes the build is stable and ready for further testing.
ii) Sanity Testing This is the testing in which the tester tests, the functionality of an application on a stable build when a new feature is added. In this testing, testers will test some basic tests once a new build is received for the testing.
iii) Re-Testing is executing failed test cases again to check if the problems are fixed in the latest version.
iv) Regression Testing is done to check or verify that the recent code changes or modifications in the software or any environment in the new build have not caused any damage or other side effects to the previously developed application. This testing will ensure that the software is still working as per the requirements even after adding new features or changes.
Non-Functional Testing covers:
i) User Interface Testing
Graphical User Interface (GUI) testing is done for checking the design (how it looks) of an application
For Example Field Alignments, Lengths, Progress bars, Scroll bars, text alignments, etc.
ii) Usability Testing is used by the testers to test how user-friendly the application is. This type of testing usually tests following the criteria
the ease with which software can be used
how easy it is to learn the software for new users
How convenient is the application to the end user