|
逻辑覆盖其出发点似乎是合理的。所谓“覆盖”,就是想要作到全面,而无遗漏。但事实表明,它并不能真的作到无遗漏。面对这类情况我们应该从中吸取的教训是测试工作要有重点,要多针对容易发生问题的地方设计测试用例。
K.A.Foster 从测试工作实践的教训出发,吸收了计算机硬件的测试原理,提出了一种经验型的测试覆盖准则,较好地解决了上述问题。
Foster 的经验型覆盖准则是从硬件的早期测试方法中得到启发的。我们知道,硬件测试中,对每一个门电路的输入、输出测试都是有额定标准的。通常,电路中一个门的错误常常是“输出总是0”,或是“输出总是1”。与硬件测试中的这一情况类似,我们常常要重视程序中谓词的取值,但实际上它可能比硬件测试更加复杂。Foster 通过大量的实验确定了程序中谓词最容易出错的部分,得出了一套错误敏感测试用例分析ESTCA (Error Sensitive Test Cases Analysis)规则。事实上,规则十分简单:
[规则1] 对于A rel B(rel可以是 <, = 和 >)型的分支谓词,应适当地选择A与B的值,使得测试执行到该分支语句时,A < B, A = B和A > B的情况分别出现一次。
[规则2] 对于A rel1 C(rel1可以是 > 或是 <,A是变量,C是常量)型的分支谓词,当rel1为 < 时,应适当地选择A的值,使: A = C–M
(M是距C最小的容器容许正数,若A和C均为整型时,M = 1)。同样,当rel1为>时,应适当地选择A,使:A = C + M
[规则3] 对外部输入变量赋值,使其在每一测试用例中均有不同的值与符号,并与同一组测试用例中其它变量的值与符合不一致。
显然,上述规则1是为了检测rel的错误,规则2是为了检测“差一”之类的错误(如本应是“IF A > 1”而错成“IF A > 0”),而规则3则是为了检测程序语句中的错误(如应引用一变量而错成引用一常量)。
上述三规则并不是完备的,但在普通程序的测试中确是有效的。原因在于规则本身针对着程序编写人员容易发生的错误,或是围绕着发生错误的频繁区域,从而提高了发现错误的命中率。 |
|