可读性易读性 面向复用的编程 低复
杂度可维护 正确性健壮性 功能性
03 软件测试和测试优先的编程
框架
认可测试的价值
学会用等价类划分和边界值分析的方法为模块设计测试用例
覆盖度测试
测试的了解
知识点
什么是软件测试
提高软件质量的手段
发现bug
关注是否达到质量特性
不可能100%没有问题:残留缺陷率
常见的几个软件的缺陷率举例:
测试的特点
破坏、证明错误
再好的测试也不能证明系统中不存在错误
好的测试:发现错误、不冗余、最佳特性、不复杂也不太简单
分类
单元测试:最小单元的测试
集成测试:接口
系统测试:配置好后看达没达到质量目标
验收测试:用户来测试
回归测试:修复质量问题后看看修改部分是否出现新的错误
其他的测试方法:
动态测试和静态测试
静态测试:未编译时自动查找代码风格
动态测试:运行结果和现象等判断是否ok
黑盒测试和白盒测试
是否能看到代码
为什么测试很难
穷举+暴力=不可能
偶然测试没有意义
不同于实体产品,样品质量抽测没有意义
离散空间输入存在差异
没有统计规律可循
例子
奔腾芯片
阿丽亚娜火箭的解体
启示
让自己的代码尽快的出错
测试用例的设计
测试用例=输入+执行条件+期望结果
为特定目标设计
测试用例也是项目的资产
好的测试用例:发现错误、不冗余、最佳特性、不复杂也不太简单
相关研究
spec自动生成测试用例
测试用例最小化
回归测试的最小用例集
测试优先的编程
让程序先出错
先写spec=》代码=》测试直到通过
规约的构成
方法签名和注释(对输入和输出的规定)
好处
更好理解规约、尽早出错
前置条件和后置条件
单元测试
隔离各个模块,方便定位和测试
接口,测试输入输出
数据的一致性
语句是否完全被执行
异常处理
最好先写测试但是没有明确的规定
设计信息为测试用例的设计提供指导
驱动模块和桩模块
内容不完整的时候对上游和下游的模拟
Junit
Java的测试框架
在测试方法前面标注@test
参数顺序:期望结果写在前面,方法写在后面
测试方法之间互不影响
###
####