White Box Testing in Software Testing
White box testing is also known as clear box testing, glass box testing, transparent box testing, and structural testing. White box testing is a method of software testing that examines the internal structure or function of an application.
In white box testing, the internal perspective of the system is used to design the test cases. The tester chooses inputs to use to path through the code and determine expected results. It is analogous to testing nodes in a circuit, such as in-circuit testing (ICT). White-box testing can be applied at the unit, integration, and system levels of the software testing process. Although traditional testers thought of white-box testing as being done at the unit level, it is now often used for integration and system testing. It can test paths within a unit, paths between units during integration, and between subsystems during system-level tests. Although this method of test design can uncover many errors or problems, it has the potential to miss unimplemented parts of the specification or missing requirements. Where white-box testing is design-based, that is driven exclusively by agreed-upon specifications of how each component of the software needs to behave, can perform white-box testing techniques. Assessment for non-applicable or missing requirements.
White-box test design techniques include the following code coverage criteria:
- Control flow testing
- Data flow testing
- Branch testing
- Statement coverage
- Decision coverage
- Modified condition/decision coverage
- Prime path testing
- Path testing
Basic White box testing Procedure
The basic methodology of white box testing requires the tester to have in-depth knowledge of the source code being tested. The programmer must have a deep understanding of the application to know what kind of test cases to create so that every visible path is used for testing. Once the source code is understood, it can be analyzed to create test cases. Following are the three basic steps that white box testing takes to create test cases:
- Inputs include a variety of requirements, functional specifications, detailed designing documents, appropriate source code, and security specifications.
- Processing includes risk analysis to guide the entire testing process, appropriate test plan, execution of test cases, and reporting of results. This is the stage of creating test cases to ensure that they check the application thoroughly according to which the results are recorded.
- The output includes producing a final report that incorporates all of the above preparations and findings.
White box testing Benefits or Advantages of White box testing
- The side effects of knowing the source code are beneficial for thorough testing.
- Code optimization becomes easier as unobvious constraints are exposed.
- Gives the programmer introspection as developers carefully define any new implementation.
- Provides the ability to trace tests from the source, so that future changes to the source can be easily captured in newly added or changed tests.
- Easy to automate.
- Provides clear, engineering-based rules for when to stop testing.
Disadvantages of White box testing
White-box tests are written to test specific implementation details. This means that the tests will fail when the implementation changes because the test is tightly coupled to the implementation. It takes extra work to update the tests so that they match the re-implementation when it is changed. With black-box testing, on the other hand, the tests are independent of the implementation, and so they will still run successfully if the implementation changes but the output or side effects of the implementation do not.
The code under test can be rewritten to implement the same functionality in a different way that invalidates the assumptions baked into the test. This can result in tests that fail unnecessarily or, in the worst case, tests that now show false positives and mask errors in the code. Because a white-box test was never written in such a way that it tests the intended behavior of the code under test, but instead only in such a way that the specific implementation does what it does.
White box testing adds complexity to testing because the tester must know the program, or the test team must at least have a very good programmer who can understand the program at the code level. White box testing requires a programmer with a high level of knowledge due to the complexity of the level of testing that needs to be done.
In some cases, it is not realistic to check every single current state of the application and some conditions will not be checked.
Tests focus on the software as it exists, and may not discover missing functionality.