软件测试的维恩图
软件测试主要关注的是程序行为,在程序所有可能的行为中,一部分是规格说明所描述的行为(用集合S表示),一部分是程序最终实现的行为(用集合P表示),图1显示了二者之间存在的关系。在这个维恩图中,有些规定的程序行为并没有被实现,我们称之为“遗漏缺陷”;有些实现的行为并不是规格说明中规定的,我们称之为“过失缺陷”;只有集合S和P相交的部分是“正确”的,即所实现的期望行为。那么,测试就是确定按规定实现的程序行为范围的过程。
图1 程序的期望行为与实现行为之间的关系
测试是通过测试用例来引发程序行为的,测试用例对应的程序行为(用集合T表示)与上述行为之间的关系如图2所示,三者之间相叠交形成7个部分。其中,区域1是三个集合的交集,代表着测试用例所覆盖的已实现的规定行为;区域2表示测试用例未覆盖的但是已实现的规定行为;区域3表示测试用例所覆盖的已实现的未规定行为;区域4表示测试用例所覆盖的未实现的规定行为;区域5表示测试用例未覆盖的且未实现的规定行为;区域6表示测试用例未覆盖的已实现的未规定行为;区域7表示测试用例所覆盖的并未实现且未规定的行为。
图2 程序的期望行为、实现行为与测试行为之间的关系
在上述维恩图中,如果某些规定行为没有相应的测试用例,那么测试就是不完备的;如果有测试用例对应的是未规定的行为,有可能是测试用例设计得不恰当,或者规格说明不够充分,或者是测试人员故意为之以便确认那些规定不该发生的行为是否会发生。显然,测试人员应该想尽一切办法使所有行为集合的交集(即区域1)最大化,那么如何做到这一点呢?一个有效的路径就是利用测试方法来构造测试用例。