Skip to main content

White Box Testing

Before discussing the details of white box testing, it's important to recall that manual testing is a critical process in software development that helps ensure that software application meets the specified requirements and functions correctly under different conditions.

It's necessary to remind you that there are three types of manual testing:

White box testing is a software testing technique in which the tester has knowledge of the internal workings of the software application being tested. In white box testing, the tester has access to the source code, the design documents, and the architecture of the software application, and uses this information to design test cases and perform tests.

What is the White Box Testing?

White box testing is a software testing technique in which the tester has knowledge of the internal workings of the software application being tested.

The primary goal of white box testing is to verify the correctness and efficiency of the code, and to ensure that the software application meets the specified requirements and functions correctly under different conditions. White box testing can help identify defects, errors, and other issues in the code, and can help improve the quality and reliability of the software application.

Note
  • White box testing is also known as Clear Box Testing, Glass Box Testing, or Structural Testing.
  • It is different from black box testing,

Type of White Box Testing

There are several types of white box testing techniques used in software testing. Some of the most commonly used types of white box testing:

  1. Statement Coverage
  2. Branch Coverage
  3. Condition Coverage
  4. Path Coverage
  5. Loop Testing

1. Statement Coverage

This technique aims to test each statement of the code at least once. The goal is to ensure that all statements are executed and that there are no unreachable or dead code segments.

Example- Consider the following code snippet:

if (a > b) {
c = a + b;
}
else {
c = a - b;
}

For statement coverage, we would create test cases to ensure that each statement is executed at least once. For example, we could create two test cases:

  • Test case 1: a=5, b=3
  • Test case 2: a=3, b=5

Test case 1 would execute the first statement (since a > b is true), while test case 2 would execute the second statement (since a > b is false).

2. Branch Coverage

This technique aims to test each decision point in the code. The goal is to ensure that all possible paths through the code are tested, and that no logical decisions are overlooked.

Example Consider the following code snippet:

if (a > b) {
c = a + b;
}
else {
c = a - b;
}

For branch coverage, we would create test cases to ensure that each possible branch is executed. For example, we could create three test cases:

  • Test case 1: a=5, b=3
  • Test case 2: a=3, b=5
  • Test case 3: a=3, b=3

Test case 1 would execute the "if" branch, test case 2 would execute the "else" branch, and test case 3 would execute both branches.

3. Condition Coverage

This technique aims to test each logical condition within the code. The goal is to ensure that all possible combinations of logical conditions are tested.

What is logical condition?

A logical condition is a boolean expression that evaluates to either true or false. Here's an example of a logical condition:

if (age >= 18 && age <= 60) {
// do something
}
  • In this example, the logical condition is (age >= 18 && age <= 60). It checks if the age variable is greater than or equal to 18 and less than or equal to 60.

Consider the following code snippet:

if ((a > b) && (c > d)) {
e = a + b + c + d;
}
else {
e = a - b - c - d;
}

For condition coverage, we would create test cases to ensure that each possible combination of conditions is tested. For example, we could create four test cases:

  • Test case 1: a=5, b=3, c=4, d=2
  • Test case 2: a=3, b=5, c=4, d=2
  • Test case 3: a=5, b=3, c=2, d=4
  • Test case 4: a=3, b=5, c=2, d=4

Test case 1 would execute the "if" branch (since both conditions are true), test case 2 and test case 3 would execute the "else" branch (since only one condition is true), and test case 4 would execute both branches (since both conditions are false).

4. Path Coverage:

This technique aims to test every possible path through the code. The goal is to ensure that all possible combinations of statements, decisions, and conditions are executed.

Consider the following code snippet:

if (a > b) {
c = a + b;
}
else {
c = a - b;
}
d = c * 2;

For path coverage, we would create test cases to ensure that each possible path through the code is executed. For example, we could create four test cases:

  • Test case 1: a=5, b=3
  • Test case 2: a=3, b=5
  • Test case 3: a=5, b=5
  • Test case 4: a=3, b=3

Test case 1 would execute the first path (if branch only), test case 2 would execute the second path (else branch only), test case 3 would execute both paths (if and else branches), and test case 4 would execute the single path through the code.

5. Loop Testing

This technique aims to test the loops in the code. The goal is to ensure that the code executes correctly for different iterations of the loop.

Consider the following code snippet:

for (i = 0; i < n; i++) {
sum += a[i];
}

For loop testing, we would create test cases to ensure that the code executes correctly for different iterations of the loop. For example, we could create two test cases:

  • Test case 1: n=3, a=3
  • Test case 2: n=0, a=

Test case 1 would execute the loop three times (for i=0, i=1, and i=2), while test case 2 would not execute the loop at all (since n=0).

How to perform?

White box testing can be performed manually or with the help of automated testing tools. Testers can use different types of white box testing techniques, such as statement coverage, branch coverage, condition coverage, path coverage, and loop testing, to ensure comprehensive testing coverage of the software application.

White Box Testing Advantage & Disadvantage

Advantages:

  • Provides better coverage of the code as it examines the internal structure and implementation of the software application
  • Helps detect errors and defects that might be missed during black box testing
  • Helps identify the root cause of defects more quickly as the tester has access to the source code and can identify the exact location of the defect
  • Allows testers to optimize and improve the code, thereby improving the performance and efficiency of the software application
  • Can be automated using various tools, which can save time and effort

Disadvantages:

  • Requires testers to have in-depth knowledge of the code, which can be a challenge if the code is complex or poorly documented
  • Can be time-consuming and expensive to perform, especially if the software application is large and complex
  • May be less effective at detecting defects related to usability, user experience, or external factors such as network latency or hardware limitations
  • Can introduce bias or limitations based on the tester's assumptions or understanding of the code
  • May require modification of the code, which can introduce new defects or conflicts with other parts of the software application.

White Box Testing Tools

  • EclEmma is another popular code coverage tool for Java,
  • NUnit is a testing framework for .NET languages,
  • HTMLUnit is a Java-based testing framework for web applications.
  • CppUnit is a testing framework for C++ that supports unit testing.
  • PyUnit is a Python testing framework that supports unit testing for Python code. It is similar in functionality to JUnit and NUnit, and provides a set of assertions, test runners, and test fixtures to help developers write and execute unit tests for Python applications. PyUnit is a popular choice for testing Python code, and is often used in combination with other testing frameworks like Selenium for web application testing.