|
假设按功能定义,某模块接受n个参数作为输入,并输出结果。 设这n个参数分别为x1 ,x2 ,· · · ,xn。 若忽略功能定义,x1 可取的全部值为X1’ ,x2 可取的全部值为X2’ ,依此类推;若按功能定义,则只能取x1 ∈ X1 ⊆ X1’ ,x2 ∈ X2 ⊆ X2’ ,· · · ,xn ∈ Xn ⊆ Xn’ 。 某开发员实现了该模块的第一个版本,该版本对数据的范围未作任何检查,经过简单的几个测试,发现输入xi ∈ Xi , (i= 1, 2, · · · , n)中的数据时,能得到正确的结果;而输入的数据xi 中存在xik ∉ Xi ,即xik ∈ Xi’ \ Xi 时,出现两种情况:
1) 输入数据本身虽有意义,但需求未定义,因此输出了无效数据;
2) 输入的数据本身无意义,类似使用空指针,或数学上的除以零之类的错误,结果是导致程序崩溃。
于是该开发人员将代码修改,得到第二个版本:
正确的结果 输入已经定义的数据,
输出 = 无结果输出 输入有意义,但未定义的数据,
抛出异常 输入无意义的数据。
问题
(1) 若要用穷举法将此模块做一遍黑盒测试,要100%的覆盖率,对于(1)所述三种情况各至少做多少次测试?将次数以集合的个数的表达式表示(若以|A|表示集合A中的元素的个数)。
(2) 假设此模块是有用户界面的,输入、输出是通过用户界面进行的。从第一个版本到第二个版本的改动,可测性如何?如果此模块是一个C++语言函数,可测性又如何?
(3) 如何测试此模块? |
|