HIT软件构造 软件测试 测试优先的编程
测试基本概念
测试等级
单元测试
集成测试
系统测试
验收测试
各部分测试内容见下图
Static vs. Dynamic testing
静态测试:用眼睛看,评审、走查、检查等
动态测试:使用测试用例集进行测试
测试套件
每个测试集的目标和说明
测试运行的配置说明
使用这些测试的前置条件
单元测试(unit test)
含义:针对软件的 最小单元模型开展测试,隔离各个模块,容易定位错误和调试
单元测试需要考虑的问题:模块接口、本地数据结构 、保证模块中的所有语句都被测试覆盖到、测试边界条件
junit使用
使用入门,点这里
覆盖度分析
含义
字面意思
测试内容
函数覆盖、语句覆盖、分支覆盖、条件覆盖、路径覆盖
测试效果和难度
测试效果:路径覆盖 > 分支覆盖 > 语句覆盖
测试难度:路径覆盖 > 分支覆盖 > 语句覆盖
代码覆盖度测试工具
EclEmma,点这里
黑盒测试 vs. 白盒测试
白盒测试
定义
对程序内部代码结构的测试
根据程序的执行路径进行设计测试
白盒测试一般比较早进行
构造测试用例的方法
确保模块中所有独立路径至少被执行过一次
关于结果进行逻辑判断
在大多数情况下,循环执行少数此就可以了
在边界条件下,一定要执行所有的循环
测试内部数据结构
黑盒测试
定义
对程序外部表现出来的行为的测试
测试目的
不正确的或者是遗失的功能
接口错误
数据结构或者是外部数据库访问的错误
行为或者性能错误
初始化或者终止错误
构造测试用例的标准
测试用例来自于外部的对软件的描述
佣金坑鞥少的测试用例,尽快运行,并尽可能大的发现程序的错误
构造测试用例的方法
- 等价类划分
将被测函数的输入域划分为等价类,从等价类中导出测试用例
针对每个输入数据需要满足的约束条件,划分等价类(自反、传递、对称) - 边界值分析
大量的错误发生在边界而不是中央
这是对等价划分方法的一个补充,将边界作为等价类之一进行考虑
通常边界值的左右也是需要进行考虑的 - 两种比较极端的情况
笛卡尔积,全覆盖策略:多个划分维度上的多个取值,要组合起来,每个组合要有一个测试用例(测试代价高)
Cover each part 策略:每个维度上的每个取值,只要被覆盖过一次即可(测试代价低)
集成测试(integration testing)
测试的内容是多个模块之间的协作和整个程序
回归测试(regression testing)
一旦程序被修改,重新执行之前的所有测试
一旦发现bug,立即编写一个可重现此bug的测试用例,并将其加入测试库
记录测试策略
在代码评审过程中,其让人可以理解你的测试,并评判你的测试是否充分