18.104.22.168. Software Testing
Software testing is very important area because most of critical bugs should be trapped here. Otherwise fixing those bugs in maintenance phase becomes very costly. Software testing is undertaken as a separate project on many software development projects as it provides a lot of additional value. In such cases, it is known as independent verification and validation (IV&V). IV&V helps in trapping defects at all phases and in all work products during the entire development lifecycle. These defects are subsequently removed. Making a separate project for testing thus helps in increasing reliability of the software product.
Some of the challenges for software testing include too many defects in the software application which increases load on software testers, lack of test strategy, lack of test planning etc.
Software testing has been gaining importance over the years. Customers now expect a lot more better quality from their software products than it was the case a few decades back.
Software testing includes unit testing, integration testing, system testing, user acceptance testing, performance testing, usability testing etc. IV&V includes requirement specification review, design inspection, construction inspection, integration inspection etc. So scope of testing has increased on software projects manifold after advent of IV&V.
Developed software contains many bugs. These bugs are introduced in the developed software due to faults in requirements, software design and software coding. Purpose of software testing is to find these bugs so that they can be removed. This kind of software testing is known as functional testing. Functional testing is of 2 types viz. white box testing and black box testing. When developers check their own code for testing logic of the conditional statements or checking formatting of data etc., then this kind of white box testing is known as unit testing. In integration testing developers test whether data is passing correctly between functions. So most of white box testing; revolves around testing at function level.
When it comes to testing at system level, black box testing techniques are used. Black box testing is also used for user acceptance testing. In black box testing; requirements and design documents are referred to assess whether the built system adheres to what was required by the customer.
Apart from the functional aspects; the built system is also to be checked for many other aspects. For instance; whether the built system can withstand load of transaction requests made by users on the server on which the application is installed. Then usability, system integration many other kinds of aspects are to be tested to verify if the system is working as per these expectations.
The software system can contain a large number of bugs. It will be very difficult to detect all of the bugs. Even if you employ a large testing team, it may take considerable amount of time to detect a fraction of all bugs. This kind of exercise will not be of much use. If we are testing a software product then the marketing team can not wait for long as they need to put the product in the market within a specified time frame. If we are testing a software application specifically built for an organization then that organization can not wait for long to get to use the application. Moreover the cost of such a large testing effort will be huge. This kind of testing activity is simply not acceptable.
A better approach is to have an effective testing. There will be a time limit under which all testing activities have to be performed. There will also be a cut off quality level which is acceptable to the customers. So a compromise between quality level and time to test the application has to be made. For example; we can have a schedule of 15 days to test the application and acceptable quality level of 100 critical bugs to be escaped after the system goes live.
For all kinds of testing to be effective, a comprehensive framework is needed. As has been seen stated previously; the user acceptance testing needs requirement document and a good understanding of what exactly customer needs in the system. The system testing is based on system design document. The integration and unit tests are also based on design document but they are done at much lower levels. System testing is done at system level where as unit and integration testing is done at function level.
Testing should also be prioritized based on needs of the project. For instance, of all the requirements some requirements are of high priority and some others are not. Definitely high priority requirements should be tested first so that they are covered even if time does not permit to do further testing. In such cases, low priority requirements may not get tested but the impact on the project in such instances will be much lower compared to cases when high priority requirements could not get tested due to time constraints.
Similarly when it comes to system testing; the testing team should have a very good idea about the design and architecture of the system. Only then they can do testing effectively.
These things can happen only when the testing team gets involved early in development lifecycle.