Dynamic testing techniques that execute the software being built with a number of test cases. However, this technique suffers from the following drawbacks:
- Dynamic testing uncovers bugs at a later stage of SDLC and hence is costly to debug.
- Dynamic testing is expensive and time-consuming, as it needs to create, run, validate, and maintain test cases.
- The efficiency of code coverage decreases with the increase in size of the system.
- Dynamic testing provides information about bugs. However, debugging is not always easy. It is difficult and time-consuming to trace a failure from a test case back to its root cause.
- Dynamic testing cannot detect all the potential bugs.
Though dynamic testing is an important aspect of any quality assurance program, it is not a universal remedy. Thus, it alone cannot guarantee defect-free product, nor can it ensure a sufficiently high level of software quality.
Static testing is a complementary technique to dynamic testing technique to acquire higher quality software. Static techniques do not execute the software and they do not require the bulk of test cases. This type of testing is also known as non-computer based testing or human testing. All the bugs cannot be caught alone by the dynamic technique; static testing reveals errors which are not shown by dynamic testing. Static testing can be applied for most of the verification activities. Since verification activities are required at every stage of SDLC till coding, static testing can also be applied at all these phases.
Static testing techniques do not demonstrate that the software is operational or that one function of software is working; rather they check the software product at each SDLC stage for conformance with of the required specifications or standards. Requirements, design specifications, source code, user's manuals, and maintenance procedures are some of the items that can be statically tested.
Static testing has proved to be a cost-effective technique of error detection. An empirical comparison between static and dynamic testing, proves the effectiveness of static testing.Advantage of static testing is that it provides the exact location of a bug, whereas dynamic testing provides no indication of the exact source code location of the bug. In other words, we can say that static testing finds the in-process errors before they become bugs.
Static testing techniques help to produce a better product. Some of the benefits of adopting a static testing approach are given here:
- As defects are found and fixed, the quality of the product increases.
- A more technically correct base is available for each new phase of development.
- The overall software life cycle cost is lower, since defects are found early and are easier and less expensive to fix.
- The effectiveness of the dynamic test activity is increased and less time needs to be devoted for testing the product.
- Immediate evaluation and feedback to the author from his/her peers, which will bring about improvements in the quality of future products.
The objectives of static testing can be summarized as follows:
- To identify errors in any phase of SDLC as early as possible
- To verify that the components of software are in conformance with its requirements
- To provide information for project monitoring
- To improve the software quality and increase productivity
Types of Static Testing
Static testing can be categorized into the following types:
- Software inspections
- Technical reviews