2 Testing and Test-First Programming
软件测试与测试优先的编程
一.测试(Test)
1.1 什么是测试
提高软件质量的重要手段
发现bugs, 确认是否达到可用级别
关注系统的某一侧面的质量特性
注意:即使是最好的测试,也无法达到100%的无错误;再好的测试也无法证明系统里不存在错误
1.2 测试的级别
单元测试、集成测试、系统测试、回归测试(一旦程序被修改,重新执行之前的所有测试)
静态测试:眼睛看 动态测试:实际运行程序
黑盒测试、白盒测试
二.测试用例
测试用例 = 输入 + 执行条件 + 期望结果
好的测试用例:
三.测试优先编程
3.1 流程
3.2 好处
四. 单元测试
针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试
驱动模块和桩模块:
Junit:a widely-adopted unit testing framework for Java.
五. 黑盒测试
用于检查代码的功能,不关心内部实现细节
等价类划分:导出测试用例的手段
例:乘法计算 BigInteger × BigInteger -> BigInteger 函数,可从正/负角度进行等价类划分,同时考虑边界条件—— 0,1,-1,很小的正整数,很小的负整数,很大的正整数,很大的负整数
BVA(Boundary Value Analysis)边界值分析:是对等价类划分方法的补充
在等价类划分时,将边界作为等价类之一加入考虑
对等价类的覆盖方式:
六. 白盒测试
白盒测试要考虑内部实现细节
独立/基本路径测试:对程序所有执行路径进行等价类划分,找出有代表性的最简单的路径(例如循环只需执行1次),设计测试用例使每一条基本路径被至少覆盖1次。
代码覆盖度
函数覆盖、语句覆盖、分支覆盖、条件覆盖、路径覆盖
分支覆盖和条件覆盖:分支覆盖 a && b – true/false 条件覆盖:a True a False b True b False
语句覆盖:只需要让 a && b 语句执行一遍即可
条件覆盖和分支覆盖之间没有包含关系
测试效果:路径覆盖 > 分支覆盖 > 语句覆盖
测试难度:路径覆盖 > 分支覆盖 > 语句覆盖