Software testing is an integral part of the software development life cycle (SDLC). Testing a piece of code effectively and efficiently is equally important, if not more, to writing it.
Software testing is nothing but subjecting a piece of code, to both, controlled and uncontrolled operating conditions, in an attempt to simply observe the output, and then examine whether it is in accordance with certain pre-specified conditions.
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 this testing. In the following Buzzle article, we’ll take a look at the various software testing techniques and methodologies that are in practice today.
The commonly used testing methodologies are unit testing, integration testing, acceptance testing, and system testing. A software is subjected to these tests in a particular order.
Acceptance Testing↑System Testing↑Integration Testing↑Unit Testing
Unit Testing – The first to be carried out is the unit test. As the name suggests, this method tests at the object level. Individual software components are tested for any errors. Accurate knowledge of the program is needed for this test, as each module is checked. Thus, this testing is done by the programmers and not the testers. Test codes are created to check if the software behaves as it is intended to.
Integration Testing – 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.
System Testing – 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.
Acceptance Testing – This is the last test that 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).
The Basic Ones
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 stimulate the software to user environment by providing different inputs and testing the generated 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.
Security Testing – An application’s security is one of the main concerns of the developer. 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.
Stress Testing – Software stress testing is a method where the software is subjected to conditions that are beyond the software’s normal working conditions. Once the break-point is reached, the results obtained are tested. This test determines the stability of the entire system.
Compatibility Testing – The software is tested for its compatibility with an external interface, like operating systems, hardware platforms, web browsers, etc. The non-functional compatibility test checks whether the product is built to suit any software platform.
Efficiency Testing – As the name suggests, this testing technique checks the amount of code or resources that are used by the software while performing a single operation. It is tested in terms of number of test cases that are executed in a given time frame.
Usability Testing – This testing looks at the 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.
Tests in Software Development Processes
Waterfall Model – The waterfall model adopts a ‘top-down’ approach, regardless of whether it is being used for software development or testing. The basic steps involved in this software testing methodology are as follows:
- Requirement analysis
- Test case design
- Test case implementation
- Testing, debugging, and validating the code or product
- Deployment and maintenance
In this methodology, you move on to the next step only after you have completed the present step. The model follows a non-iterative approach. The main benefit of this methodology is its simplistic, systematic, and orthodox approach. However, it has many shortcomings, since bugs and errors in the code are not discovered until and unless the testing stage is reached. This can often lead to wastage of time, money, and other valuable resources.
Agile Model – This methodology follows neither a purely sequential approach nor a purely iterative approach. It is a selective mix of both approaches, in addition to quite a few and new developmental methods. Fast and incremental development is one of the key principles of this methodology. The focus is on obtaining quick, practical, and visible outputs, rather than merely following the theoretical processes. Continuous customer interaction and participation is an integral part of the entire development process.
Rapid Application Development (RAD) – The name says it all. In this case, the methodology adopts a rapid developmental approach, by using the principle of component-based construction. After understanding the different requirements of the given project, a rapid prototype is prepared, and is then compared with the expected set of output conditions and standards. Necessary changes and modifications are made following joint discussions with the customer or development team (in the context of software testing). Though this approach does have its share of advantages, it can be unsuitable if the project is large, complex, and happens to be extremely dynamic in nature, wherein requirements change constantly.
Spiral Model – As the name implies, the spiral model follows an approach in which there are a number of cycles (or spirals) of all the sequential steps of the waterfall model. Once the initial cycle gets completed, a thorough analysis and review of the achieved product or output is performed. If it is not as per the specified requirements or expected standards, a second cycle follows, and so on. This methodology follows an iterative approach, and is generally suited for large projects, having complex and constantly changing requirements.
Rational Unified Process (RUP) – The RUP methodology is also similar to the spiral model, in the sense that the entire testing procedure is broken up into multiple cycles or processes. Each cycle consists of four phases – inception, elaboration, construction, and transition. At the end of each cycle, the product/output is reviewed, and a further cycle (made up of the same four phases) follows if necessary. Today, you will find certain organizations and companies adopting a slightly modified version of the RUP, which goes by the name Enterprise Unified Process (EUP).
With applications of information technology growing with every passing day, the importance of proper software testing has grown manifold. Many firms have dedicated teams for this purpose, and the scope for software testers is at par with that of developers.