There are different types of methodologies used in the field of software testing and quality assurance. Different sets of test cases and testing strategies are prepared, all of which are aimed at achieving one common goal – removing bugs and errors from the code, and making the software error-free, and capable of providing accurate and optimum output.
There are different types of techniques and methodologies involved in testing.
In most software testing methodologies, functional testing involves testing the application against the business requirements. Functional testing is done using the functional specifications provided by the client or by using the design specifications like use cases provided by the design team.
The functional testing part of a software testing methodology is typically broken down into four components –
- unit testing,
- integration testing,
- system testing and
- acceptance testing
usually executed in the above order. Each of them is described below:
The Unit testing part of a software testing methodology is the testing of individual software modules or components that make up an application or system. These tests are usually written by the developers of the module and in a test-driven-development methodology (such as Agile, Scrum or XP) they are actually written before the module is created as part of the specification. Each module function is tested by a specific unit test fixture written in the same programming language as the module.
Individual modules that are already subjected to unit testing are integrated with one another, and are tested for faults. Such a type of testing highlights interfacing errors. A ‘top-down’ approach of integration testing follows the architectural structure of the system. Another approach taken is the ‘bottom-up’ approach, which is conducted from the bottom of the control flow.
In this testing, the entire system is tested for errors and bugs. This test is carried out by interfacing hardware and software components of the entire system, and then testing it. This testing is listed under the black-box testing method, where the software is checked for user-expected working conditions.
The acceptance testing part of a software testing methodology is the final phase of functional software testing and is conducted before the software is handed over to the client. It is carried out to ensure that the software that has been developed meets all customer requirements. There are two types of acceptance testing – one that is carried out by the members of the development team, known as internal acceptance testing (Alpha testing), and the other that is carried out by the customer, known as external acceptance testing. If the testing is carried by the intended customers, it is termed as customer acceptance testing. In case the test is performed by the end users of the software, it is known as user acceptance testing (Beta testing).
On the other hand, non-functional testing involves testing the application against the non-functional requirements, which typically involve measuring/testing the application against defined technical qualities (also known as the ‘-ilities’ because they all end in ‘-ility), for example: vulnerability, scalability, usability. Some examples of non-functional testing are described below:
Performance, Load, Stress Testing:
There are several different types of performance testing in most software testing methodologies, for example: performance testing is measuring how a system behaves under an increasing load (both numbers of users and data volumes), load testing is verifying that the system can operate at the required response times when subjected to its expected load, and stress testing is finding the failure point(s) in the system when the tested load exceeds that which it can support.
Security and Vulnerability Testing:
Security testing tests the software for confidentiality, integrity, authentication, availability, and non-repudiation. Individual tests are conducted to prevent any unauthorized access to the software code.
The usability testing part of a software testing methodology looks at the end-user usability aspect of the software. The ease with which a user can access the product forms the main testing point. Usability testing looks at five aspects of testing, – learnability, efficiency, satisfaction, memorability and errors.
The compatibility part of a software testing methodology tests that the product or application is compatible with all the specified operating systems, hardware platforms, web browsers, mobile devices, and other designed third-party programs (e.g. browser plugins). Compatibility tests check that the product works as expected across all the different hardware/software combinations and that all functionality is consistently supported.
The Basic Testing Types:
There are a few basic testing methods that form a part of the software testing regime. These tests are generally considered to be self-sufficient in finding out errors and bugs in the entire system.
Black Box Testing:
Black-box testing is carried out without any knowledge of the internal working of the system. The tester will simulate the software to to user environment by providing different inputs and testing the general outputs. This test is also known as closed-box testing or functional testing.
White Box Testing:
White-box testing, unlike the black-box one, takes into account the internal functioning and logic of the code. To carry out this test, the tester should have knowledge of the code, so as to find out the exact part of the code that is having errors. This test is also known as open-box testing or glass testing.
Gray Box Testing:
The testing where part knowledge of the code is necessary to carry out the test is called gray-box testing. This testing is done by referring to system documents and data flow diagrams. The testing is conducted by the end users, or users who pose as end users.