Back to: Software Testing Tutorials
Data Flow Testing in SDLC
In this article, I am going to discuss Data Flow Testing in SDLC. Please read our previous article where we discussed Grey Box Testing. At the end of this article, you will understand the following important pointers which are related to Data Flow Testing in SDLC.
- What is Data Flow Testing in SDLC?
- What are the different types of techniques used in Data Flow Testing?
- What are the Different Types of Data Flow Testing?
- What are the advantages of Data Flow Testing?
- What are the disadvantages of Data Flow Testing?
What is Data Flow Testing in SDLC?
Data flow testing is a type of white box testing that focuses on figuring out and testing the routes that data takes inside a software system. It looks for mistakes or issues with how data moves through the application, is transformed, and is stored. Data flow testing’s main objectives are to make sure that data is propagated and handled appropriately within the system and to spot any potential abnormalities or weaknesses that might develop as a result of bad data handling. Testers can assess the accuracy and effectiveness of the system’s data processing mechanisms by looking at the data flow channels. A type of structural testing is data flow testing. It is a technique for locating a program’s test pathways in accordance with where variables are defined and utilized. It’s unrelated to data flow diagrams.
It is worried about:
- Statements that assign values to variables.
- Statements that use or refer to those values.
Here is an illustration of Data Flow Testing:
Think of a straightforward program that determines the combined cost of the products in a shopping basket along with any applicable discounts. The program generates the final total price after receiving inputs such as the prices, quantities, and discount codes for each individual item. Assume the program has the following bit of code:
def calculate_total_price(item_prices, quantities, discount_code):
total_price = 0
# Apply discounts if applicable
if discount_code == ‘SUMMER’:
total_price = sum(item_prices) * 0.9
elif discount_code == ‘FALL’:
total_price = sum(item_prices) * 0.8
else:
total_price = sum(item_prices)
# Apply quantities
total_price *= sum(quantities)
return total_price
What are the different types of techniques used in Data Flow Testing?
One of the following two methods can be used for data flow testing:
- Control flow graph
- Making associations between data definition and usage
Let’s quickly comprehend these two methods:
Control Flow Graph
A program’s control flow is graphically represented by a control flow graph (CFG). It depicts how different program statements, including branches, loops, and function calls, are executed in relation to one another. Data flow testing is a method of software testing that focuses on examining how data flows through a program. We may perform data flow testing based on the control flow graph by combining these two ideas. To further comprehend the idea, let’s think about a straightforward example.
1. input(x)
2. if(x>5)
3. z = x + 10
4. else
5. z = x – 5
6. print(“Value of Z: “, z)
If the user entered value for x is larger than 5, the following statements in the code above would be executed in that order:
1, 2, 3, 6
The next instructions would be executed in the following order if the user-entertain value in line 1 is less than or equal to 5.
1, 4, 5, 6
Consequently, the code fragment above’s control flow diagram will look like this:
The table below can be derived from the control flow diagram and code mentioned before. The variable’s node of declaration and its nodes of use are listed in the following table:
Variable Name | Defined at | Used at |
x | 1 | 2 |
z | 3,5 | 6 |
By assuring various tests, we can use the above table to make sure no anomaly exists in the code. For instance, before being used, each variable is defined.
Making Associations
Making associations in data flow testing is the act of figuring out connections between input data items and the matching output data elements. It aids in guaranteeing accurate data transformations and computations on the data, as well as proper data flow across the testing system. Using this method, we link two different types of statements:
- what variables are defined where
- In what context the variables are used
With this format, the following are associated:
The variable’s name, the line number where it is declared, and the line number where it is utilized. For instance, the expression (1, 3, x) indicates that the variable ‘x’ is introduced on line 1 and used on line 3. Now think about the following pseudo-code:
1. input(x)
2. if(x>5)
3. z = x + 10
4. else
5. z = x – 5
6. print(“Value of Z: “, z)
We shall associate these terms with the pseudo-code sample above:
- For the true case of the IF statement in line 2, write (1, (2,t), x).
- (1, 2, f), x): for the IF statement’s false case on line 2.
- (1, 3, x): In line 3, the variable x is utilized to specify the value of z.
- (1, 5, x): In line 5, the variable x is utilized to specify the value of z.
- (3, 6, z): Line 6 uses the variable z that was defined in line 3.
- (5, 6, z): Line 6 uses the variable z that was defined in line 5.
The IF statement on line 2 is represented by the first two associations. If the condition is true, one association is created; if it is untrue, a different association is made. There are now two different ways to use a variable:
- Predicate use: P-use refers to the use of a variable. Its value, such as line 2, is used to determine how the program will proceed.
- Computational use: When a variable’s value is utilized to calculate another variable or the output, such as line 3, this is referred to as a “c-use.”
Following affiliation, the associations can be categorized into the following groups:
- covers all definitions
- full coverage of P-use
- full coverage of C-use
- Coverage is all p-use and some c-use.
- Coverage is all c-use and some p-use.
- complete coverage
The tester creates test scenarios and scrutinizes each point after grouping the associations into these categories. The code is cleaned up by removing any unnecessary statements and variables.
What are the Different types of Data Flow Testing in SDLC?
Data flow tests can be of two types:
- Static Data Flow Testing: Testing the declaration, use, and deletion of variables without running any code is known as static data flow. In this case, a control flow graph is useful.
- Dynamic data flow testing: As the code is executed, the variables and data flow are checked.
What are the advantages of Data Flow Testing?
Data flow testing is a method used in software testing to find flaws and weaknesses in a program by looking at the data flow while it runs. The following are the benefits of data flow testing:
- Data flow testing can help identify variables that are utilized before they are initialized, reducing the chance of errors and unpredictable behavior.
- Finding unreachable code: Data flow testing can identify parts of code that are never run by examining the data flow. This enables engineers to remove unneeded code and boost productivity.
- Finding data dependencies allows developers to understand how changes to one variable may affect other variables by exposing relationships between variables. This improves the capacity to identify problems early on and predict how changes will affect them.
- Finding instances where variables are given contradictory or wrong values, which results in inappropriate program behavior, can be done through data flow testing. It helps to increase the accuracy and dependability of the software by identifying these problems early.
- Enhancing test coverage: Data flow testing is an addition to conventional testing techniques that focuses on the pathways and interactions of data within a program. This broadens the scope of the testing process and offers deeper insights into the behavior of the software.
- Reducing debugging effort: By identifying potential data-related problems, data flow testing helps debugging specialists focus their search, improving efficiency and cutting down on the time and effort needed to find and resolve errors.
- Data flow testing is essential in finding security flaws including data leakage, unauthorized access, and injection attacks, which are supported by security testing. This method helps to improve the software’s security by tracing the transit of sensitive data.
What are the disadvantages of Data Flow Testing?
A software testing method known as “data flow testing” focuses on looking at how data moves through a program. There are several drawbacks to this strategy, despite the fact that it has many benefits. The following main points illustrate the drawbacks of data flow testing:
- Complexity: Implementing data flow testing can be difficult and time-consuming, particularly for sophisticated and big software systems. It necessitates a grasp of the program’s control flow and data dependencies, which can be difficult to pinpoint and precisely map.
- It can be challenging to come up with thorough test cases for data flow testing. The technique necessitates a detailed examination of data pathways and variables because it seeks to account for all potential data flows. This procedure may require a lot of resources and may not always ensure complete coverage.
- False Positives and Negatives: When testing data flow, it is possible to get both false positives and false negatives. False positives happen when testing picks up a potential problem when there isn’t one, wasting time and resources. False negatives occur when a genuine issue is missed by the testing, going undiscovered in the code.
- Limited Scope: User interface, performance, and security testing, as well as other critical components of software quality, may be overlooked by data flow testing because it primarily focuses on data dependencies. Data flow testing alone might not provide appropriate coverage of other crucial topics.
- Maintenance Expense: Maintaining data flow testing can be difficult as software changes and evolves. The test cases may need to be updated in response to any changes made to the codebase, adding to the overall maintenance work.
- Resource Consumption: Since data flow testing entails monitoring the movement of data throughout the program, it might be computationally expensive. Extensive data flow testing may be impractical for some contexts since it requires a lot of computational power and time.
In the next article, I am going to discuss Control Flow Testing. Here, in this article, I try to explain Data Flow Testing in SDLC. I hope you enjoy this SDLC Data Flow Testing article.
About the Author: Pranaya Rout
Pranaya Rout has published more than 3,000 articles in his 11-year career. Pranaya Rout has very good experience with Microsoft Technologies, Including C#, VB, ASP.NET MVC, ASP.NET Web API, EF, EF Core, ADO.NET, LINQ, SQL Server, MYSQL, Oracle, ASP.NET Core, Cloud Computing, Microservices, Design Patterns and still learning new technologies.