1 测试的技巧[/b]
本来是软件工程研究的内容之一,考虑到它很实际,这里就讲一讲。
测试分白盒测试和黑盒测试。竞赛评分和黑盒,而我们自己检查错误
的时候应当两者结合起来。黑盒测试:
就是不管程序结构,给定程序输入来看输出是否符合要求。
这里我建议不仅要对整个程序测试,对单个独立模块也要单独测试。
黑盒测试因为不能反映结果是如何得出的,所以测试用例的设计
十分重要。我们稍做讨论。
1.等价类法
也就是,对于可能的各种“等价情况”,每一种设计一个测试数据。
例如,在求凸包(参见后面的计算几何部分)的程序中,就可以划分
以下测试数据:
所有点共线
凸包内部不含输入点
凸包内部含有输入点
凸包边界上含输入点
等等等价类,看看自己的程序能否在各种情况得出正确的解。
多练习,你会慢慢设计出精练又全面的等价类来。
一些经验性的等价类划分方法包括:
特殊数据的特殊组合(如:'97分区联赛高中第二题:表达式的合法性)
用手工得出解的方法来分类(如:'98分区联赛高中第二题:数的组合)
2.边界值分析
不少程序会在边界值时出问题,尤其是初学者,对边界值得出的解
往往使编程者大吃一惊。这些错误,下界往往是程序出错(如非法操作),
上界常常是超时,空间不够,数值溢出等错误。
为此,一般要使用下面的几种数据:
1)恰好在边界上或者附近的(如:0,1,-1..)
2)使输出结果为特殊值的(如:无解)
3)误差最大的数据
4)空文件等
白盒测试:
我不打算多讲,暂时你只要知道,每个模块都要测试到,尽量测试
分支结构的每种走向就可以了。
[b]2 测试数据的设计
推荐一篇论文:IOI99集训队员扬帆《测试数据设计的三要素》
我的OIBH题目在测试数据的设计上也是煞费苦心:)
一些建议是:
1.边界条件。包括规模和数据的边界
2.特殊数据。例如数据本身的特殊(0,负数,空串等),数据关系的特殊(相等,相反数,包含关系等)
3.随机数据。这些数据虽然不好手工验证,但可以测试程序的时间效率和是否有明显bug(荒唐的结果,runtime-error等)
4.手工+程序生成。例如手工设计摸板,用程序填随机数据。
测试只能发现错误,不能证明程序无误,请大家务必注意。