|
知识路径: > 测试技术的分类 > 白盒测试技术 > 白盒测试方法 > 其他白盒测试方法 >
|
相关知识点:4个
|
|
|
|
符号测试的基本思想是允许程序的输入不仅仅是具体的数值数据,而且包括符号值,这一方法也是因此而得名的。这里所说的符号值可以是基本符号变量值,也可以是这些符号变量值的一个表达式。这样,在执行程序过程中以符号的计算代替了普通测试执行中对测试用例的数值计算。所得到的结果自然是符号公式或是符号谓词。更明确地说,普通测试执行的是算术运算,符号测试执行的则是代数运算。因此符号测试可以认为是普通测试的一个自然的扩充。
|
|
|
符号测试可以看作是程序测试和程序验证的一个折衷方法。一方面,它沿用了传统的程序测试方法,通过运行被测程序来验证它的可靠性。另一方面,由于一次符号测试的结果代表了一大类普通测试的运行结果,实际上是证明了程序接受此类输入后,所得输出是正确的还是错误的。最为理想的情况是,程序中仅有有限的几条执行路径。如果对这有限的几条路径都完成了符号测试,我们就能较有把握地确认程序的正确性了。
|
|
|
从符号测试方法的使用来看,问题的关键在于开发出比传统的编译器功能更强,能够处理符号运算的编译器和解释器。
|
|
|
目前符号测试存在一些未得到圆满解决的问题,如下所示。
|
|
|
|
当采用符号执行方法进行到某一分支点处,分支谓词是符号表达式,这种情况下通常无法决定谓词的取值,也就不能决定分支的走向,需要测试人员做人工干预,或是执行树的方法进行下去。如果程序中有循环,而循环次数又决定于输入变量,那就无法确定循环的次数。
|
|
|
|
数据项的符号值可能是有二义性的。这种情况通常出现在带有数组的程序中。
|
|
|
|
|
如果I=J,则C=3;否则,C=2+A。但由于使用符号值运算,这时无法知道I是否等于J。
|
|
|
|
符号测试中经常要处理符号表达式。随着符号执行的继续,一些变量的符号表达式会越来越庞大。特别是当符号执行树很大,分支点很多时,路径条件本身变成一个非常长的表达式。如果能够有办法将其化简,自然会带来很大好处。但如果找不到化简的办法,那将给符号测试的时间和运行空间带来大幅度的增长,甚至使整个问题的解决遇到难以克服的困难。
|
|
|