软件测试
-
软件质量不取决于测试,但测试可以提高软件质量
-
即使是最好的测试,也无法达到100%的无错误
-
静态测试 vs 动态测试:靠眼睛看 vs 撸起袖子使劲干
这个比喻挺恰当
– 静态测试是不用执行程序,直接检查源代码
– 动态测试是通过一组给定的测试用例执行程序 -
测试 vs 调试
– 测试:发现是否存在错误
– 调试:识别错误根源,消除错误 -
白盒测试 vs 黑盒测试
– 白盒测试:对程序内部代码结构的测试,一定在程序写好之后
– 黑盒测试:对程序外部表现出来的行为的测试,可以在程序写之前进行
测试用例
- 测试用例:输入+执行条件+期望结果
- 选测试用例的标准
– 最可能发现错误
– 不重复、不冗余
– 最有效
– 既不简单也不复杂
测试优先编程
– 先写spec
– 再写符合spec的测试用例
– 写代码、执行测试、有问题再改、再执行测试用例,直到通过它
- 写测试用例,就是理解、修正、完善你的spec设计的过程
注意区分:
- 这是注释
/*
*
*
*
*
*
*
*/
- 这是spec
/**
*
*
*
*
*
*/
单元测试
- 针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试
使用JUnit的自动化单元测试
具体可参见:[HIT软件构造Blog002]Junit4中assert断言的用法
黑盒测试
重要
-
黑盒测试:用于检查代码的功能,不关心内部实现细节
-
检查程序是否符合规约,用尽可能少的测试用例,尽快运行,并尽可能大的发现程序的错误
依据等价类选择测试用例
-
输入数据有以下可能
– 限定数据范围,1有效2无效
– 限定特定值,1有效1无效
– 确定一组数,若干有效1无效
– Y/N,1有效1无效 -
覆盖方式
– 全覆盖
– 区域覆盖
包含边界条件
- 边界值一般是出错的重灾区,一定要重点关注
- 在等价类划分时,将边界作为等价类之一加入考虑
白盒测试
- 黑盒测试
- 白盒测试
代码覆盖度
-
代码覆盖度:已有的测试用例有多大程度覆盖了被测程序
-
测试方式
– 函数覆盖
– 语句覆盖
– 分支覆盖
– 条件覆盖
– 路径覆盖
路径覆盖 > 分支覆盖(条件覆盖)> 语句覆盖 > 函数覆盖
自动化测试以及回归测试
- 只是“测试用例的自动执行”,并非“自动生成测试用例”
给测试策略写文档
- 文档给我的感觉就是注释