关于测试优先的编程
实际编码前,先编写一个测试策略,然后根据测试样例实现spec定义的函数和功能。
在lab2中,则需要针对graph类编写测试用例。graph的spec在接口中已经定义,根据它们的功能编写测试策略。
此处的测试是针对正确性的测试,输入参数,返回正确的结果,因此根据该测试用例实现具体程序。输入非法值的测试是针对程序健壮性的测试。
测试方法:划分等价类、完全笛卡尔乘积或者完全覆盖
黑盒测试与白盒测试
黑盒测试:对代码行为的测试。只关注函数规约的说明来实现测试用例,不考虑内部实现。
白盒测试:对代码逻辑的测试。考虑函数的内部实现设计不同的测试用例,因为对不同的输入可能会有不同的算法或者处理方法。
原则:尽可能地以测试样例使程序产生bug,而不是规避它们。测试样例也要尽可能少,简单而有效。
等价类划分和边界值分析
Equivalence Partitioning 等价类划分:
- 针对每个输入数据需要满足的约束条件,划分等价类,导出测试用例
- 每个等价类代表着对输入约束加以“满足/违反”的“有效/无效”数据集合
- 基于假设:相似的输入会展示相似的行为
- 因此,每个等价类选一个做代表即可,可以降低测试用例数量
Boundary Value Analysis 边界值分析
- 大量错误出现在输入域的边界而不是中央
- 对等价类划分的补充
覆盖划分的方法
- Full Cartesian product:笛卡尔积、全覆盖
- 测试完备、用例数量多、测试代价高
- Cover each Part:覆盖每个取值,最少1次即可
- 测试用例少、代价低、测试覆盖度不够高
注意区分黑盒框架与白盒框架,它们
覆盖率
声明覆盖率:是否每一个声明均被测试
分支覆盖率:对每一种if或while等等控制操作,他们的分支是否都被测试过
路径覆盖率:每一种组合分支的路径都被测试过了吗
工具:eclemma