1.7 约束求解问题
为指定的程序路径自动生成测试用例是软件单元测试的一个基本问题。解决该问题的一个难点是为路径中的约束建立一个系统并且求解[17],这就是人工智能中的一个传统问题——约束求解问题。在数学上,约束求解问题被定义为一个对象的集合的状态必须满足一些约束或者限制。而在面向路径的单元测试中,约束求解的含义是把该路径中所有的约束提取出来,组成一个约束系统,通过一定的算法,找到一组特定的值,使得这一组值能够满足约束系统中的每一个约束。
随机法是最直观、最简单的算法,不管是什么约束,它都随机地为约束中的变量选值。也不管选出的值是否符合约束,甚至都不管选出来的值对约束来说是不是一个合法的取值,例如,对于条件语句“if(log(x)>0)”,随机法可能给x的值是一个负数。(https://www.daowen.com)
而其他的算法和随机算法相比,都加入了一些反馈的机制和利用被测代码本来信息的机制。例如,对于条件语句“if(x>5)”,这些算法在经历了初始几次的取值都小于5的失败后,可能就会感知到也许x的取值应该大于5。
总之,这些算法的作用就是找到一个合适的机制,来求解路径中的约束,达到生成的测试用例能满足约束的目的。