软件工程 |切片
切片或程序切片是软件测试中使用的一种技术,它在程序中获取一个切片或一组程序语句,用于测试可能影响特定兴趣点的值的特定测试条件或案例。它也可以用于调试目的,以便更轻松快速地找到错误。
切片技术最初是由 Mark Weiser 定义的,当时它们在本质上只是静态的。之后,Bogdan Korel 和 Janusz Laski 引入了动态切片,它可以用于程序的特定执行。
它有两种类型:静态切片和动态切片,解释如下:
1、静态切片:
- 程序的静态切片包含所有语句,这些语句可能会在任何时候影响变量的值,以用于程序的任意执行。
- 静态切片通常较大。
- 它考虑程序的每一个可能的执行。
2.动态切片:
- 程序的动态切片包含在程序的特定执行的任何时间点实际影响变量值的所有语句。
- 动态切片通常更小。
- 仅考虑程序的特定执行。
让我们通过给定的代码片段看一个例子:
CPP
int z = 10;
int n;
cin >> n;
int sum = 0;
if (n > 10)
sum = sum + n;
else
sum = sum - n;
cout << "Hey";
CPP
int n;
cin >> n;
int sum = 0;
if (n > 10)
sum = sum + n;
else
sum = sum - n;
CPP
int n;
cin >> n;
int sum = 0;
if (n > 10)
sum = sum + n;
变量sum的静态切片:
CPP
int n;
cin >> n;
int sum = 0;
if (n > 10)
sum = sum + n;
else
sum = sum - n;
n = 22 时变量sum的动态切片;
CPP
int n;
cin >> n;
int sum = 0;
if (n > 10)
sum = sum + n;
正如在上面的示例中可以观察到的那样,静态切片占用了程序的所有可能执行(在本例中为 2),这可能会影响变量sum的值。而在动态切片的情况下,它只考虑实际影响变量sum值的程序的特定执行(当 n = 22 时)。
因此,动态切片总是小于静态切片。