《Symbolic Excution and ProgramTesting》是一片经典的文章,发表与1975年,被引用次数接近千次。该文在一个简单的程序语言的基础上提出了符号执行的方法:
1程序变量只是有符号整数;只包括简单的赋值语句,IF语句,GOTO语句,以及一些获得输入的方法。
2数学表达式只有限的计算类型:加、减、乘。
3布尔表达式只进行数学表达式是否为真的测试操作。
4分支语句的条件表达:(path condition) R>=0 或 -R<0形式的表达式的一个合取。
符号执行的实例:
program:
1 sum procedure(a,b,c);
2 x←a+b;
3 y←b+c;
4 z←x+y-b;
5 return z;
6 end;
执行sum(1,3,5)
- 表示值步再改变;?:不确定的值
语句编号 | x | y | z | a | b | c |
执行时出现的值 | ||||||
1 | ? | ? | ? | 1 | 3 | 5 |
2 | 4 | - | - | - | - | - |
3 | - | 8 | - | - | - | - |
4 | - | - | 9 | - | - | - |
5 | 返回 9 |
对应的符号执行树:
1 power procedure(x,y)
2 z←1
3 j←1
4 lab if x>=j then
5 do z←z*x
6 j←j+1
7 goto lab; end
8 return z
9 end
符号执行树?(无法传图,如何传图bmp格式?请指点)