前言
子系统测试概述
第一部分 基本手段
第1章 规格说明
1.1 规格说明的要素
1.1.1 前提
1.1.2 后果
1.1.3 定义
1.2 检查规格说明
1.2.1 不完备
1.2.2 模糊
第2章 SREADHEX例子介绍
2.1 引入
2.2 规格说明
2.3 代码
第3章 构建测试需求检查单
3.1 查找规格说明中的线索
3.1.1 前提与后果
3.1.2 变量
3.1.3 操作
3.1.4 定义
3.2 查找代码中的线索
3.2.1 变量
3.2.2 模式操作
3.2.3 函数调用
3.3 找出SREADHEX的线索
3.3.1 代码
3.3.2 我们现在所处的位置
3.4 通过前提、后果和定义获取测试需求
3.4.1 简单验证前提
3.4.2 使用OR的验证前提
3.4.3 使用AND的验证前提
3.4.4 AND和OR组合验证前提
3.4.5 假设前提
3.4.6 后果
3.4.7 定义
3.5 找出SREADHEX的测试需求
3.6 能过大纲确定测试需求
3.7 通过SREADHEX说明大纲的使用
3.8 我们现在所处的位置
3.9 使用测试需求大纲规则小结
3.10 集成测试需求
3.10.1 集成测试需求的一个例子
3.10.2 另一个例子
3.10.3 最后一个例子
3.11 SREADHEX的集成测试需求
3.12 错误猜测
3.13 根据规格说明扫描代码
第4章 测试规格说明
4.1 标记将要使用的规格说明
4.2 一般测试规格说明
4.3 错误测试规格说明
4.4 构建测试规格说明要注意的问题
4.5 有关测试形式的规则
4.6 有关测试内容的规则
4.7 分别测试规格说明和代码
4.7.1 通过规格说明处理需求
4.7.2 根据代码进行需求的while处理
4.8 SREADHEX测试规格说明
4.8.1 设计注释
4.8.2 测试1
4.8.3 测试2
4.8.4 测试3
4.8.5 测试3(续)
4.8.6 测试4
4.8.7 测试5、6和7
4.8.8 测试8
4.9 我们现在所处的位置
第5章 测试驱动器与套件驱动器
5.1 测试驱动器
5.1.1 向子系统提供输入
5.1.2 比较实际结果和预期结果
5.2 套件驱动器
5.3 测试自己的驱动器
5.4 SREADHEX驱动器
5.4.1 大纲与文件结构
5.4.2 驱动器与桩
5.4.3 运行测试
5.5 我们现在所处的位置
第6章 采用问题大纲审查代码
6.1 责任
6.2 审查SREADHEX
第7章 利用覆盖率检验测试套件
7.1 覆盖率的类型
7.2 不可行的覆盖率
7.3 运用覆盖率信息
7.3.1 覆盖率成本的一个例子
7.3.2 需要小心运用覆盖率的一个例子
7.4 一个较大例子
7.4.1 程序
7.4.2 使用通用覆盖率工具(GCT)
7.4.3 覆盖率
7.4.4 新测试
7.5 SREADHEX的覆盖率
7.6 我们现在所处的位置
第8章 清理
第9章 其他提示
9.1 使用优先级较低的需求
9.2 不确定的限制
第二部分 实施子系统测试
第10章 实施
10.1 运用覆盖率
10.2 改进测试规格说明
10.3 改进测试需求
10.4 并行改进规格说明分析
第11章 完善
第三部分 实践中的子系统测试
第12章 使用更典型的规格说明
12.1 例子:CREPORT
12.2 过程
12.3 练习
12.4 通过代码导出规格说明
第13章 处理大型子系统
13.1 复杂性的应对方案
13.1.1 制订测试进度表
13.1.2 例程需求
13.1.3 较大子系统中的ERROR需求
13.2 大型子系统的危险
13.2.1 内部测试驱动器
13.2.2 外部调试器
13.2.3 没有调试器时的方法
13.3 选择子系统
第14章 测试错误个性与其他维护变更
14.1 一个例子
14.2 测试变更的基本过程
14.3 传播缺陷
14.4 相似性缺陷
14.5 测试较大变更
14.6 测试套件退化
第15章 时间进度压力下的测试
15.1 没有足够时间的测试
15.2 几乎没有足够时间的测试
第四部分 举例与扩展
第16章 句法测试
16.1 符号
16.2 测试需求
16.2.1 邻近项
16.2.2 序列
16.2.3 替换项
16.2.4 简单重复
16.2.5 重复与替换项
16.3 交互
第17章 第二个完整例子:MAX
17.1 规格说明
17.2 通过规格说明导出测试
17.2.1 线索
17.2.2 来自在前提和后果的需求
17.2.3 扫描大纲
17.2.4 测试设计
17.3 通过代码导出测试
17.4 使用问题大纲
17.5 测试驱动器与测试运行
17.6 使用覆盖率
第18章 测试一致性关系
18.1 构建测试需求检查单
18.1.1 基本检查单
18.1.2 增加缺陷可视性的注释
18.1.3 测试这个例子
18.2 多样性问题
18.2.1 多于两变量
18.2.2 检验子系统的其他部分
18.2.3 如果检查由库例程完成
18.2.4 未检查或不可能的ERROR需求
18.2.5 如果多个变量可以同时变更
第19章 状态机与状态图
19.1 状态机
19.1.1 实现
19.1.2 稀疏状态机
19.1.3 冗余迁移
19.2 状态图
19.2.1 状态行动
19.2.2 条件状态迁移
19.2.3 嵌套状态
19.2.4 历史信息
19.2.5 状态图实现框架
19.3 什么时候和怎样构建模型
19.3.1 模型什么时候有用
19.3.2 构建模型
19.4 审查状态机和状态图
19.4.1 检查模型
19.4.2 审查行动
19.4.3 检查实现映射
19.5 测试状态机和状态图
19.5.1 测试需求
19.5.2 来自状态图的需求
19.5.3 测试规格说明
19.5.4 测试实现
19.5.5 覆盖率
19.6 多个状态机
19.6.1 独立状态机
19.6.2 通信状态机
第20章 测试使用可后果用软件的子系统
20.1 测试需求
20.2 覆盖率
第21章 测试基于对象的软件
21.1 背景
21.1.1 术语
21.1.2 其他方法
21.2 子系统规模与测试实现
21.2.1 两种特例
21.2.2 另一种方法
21.3 类测试需求大纲
21.3.1 组织
21.3.2 第一步:对象使用需求
21.3.3 第二步:状态机需求
21.3.4 第三步:成员函数集成需求
21.3.5 第四步:对象的聚合
21.4 使用类需求大纲
21.5 时间进度压力
第22章 面向对象的软件1:继承
22.1 测试规格说明与实现
22.2 导出类的类型
22.3 导出类需求大纲
22.3.1 复制基类需求大纲
22.3.2 处理新成员
22.3.3 处理顶替成员函数
22.3.4 处理继承成员函数
22.3.5 更新剩余的对象使用需求
22.3.6 更新状态机需求
22.3.7 多继承
22.4 成员函数的测试需求检查单
22.4.1 新的成员函数
22.4.2 顶替成员函数
22.4.3 继承成员函数
22.5 针对已变更外部例程的测试需求检查单
22.6 通用性(模板)
第23章 测试导出类的一个例子
23.1 abstract_hash_table:一个抽象类
23.2 hash_table:一个导出类
23.2.1 hash_table大纲
23.2.2 hash_table成员函数的测试需求检查单
23.2.3 hash_table测试规格说明与实现
23.3 checking_hash_table:另一个导出类
23.3.1 checking_hash_table大纲
23.3.2 checking_hash_table成员函数的测试需求检查单
23.3.3 实现checking_hash_table测试
23.4 abstract_hash_table <Item,sz>:模板类
第24章 面向对象的软件2:动态捆绑
24.1 虚拟调用需求大纲
24.1.1 捆绑虚拟调用大纲
24.1.2 怎样处理数据成员?
24.1.3 在变更中构建虚拟调用大纲
24.2 使用虚拟调用需求大纲
24.2.1 缩写了新的外部代码
24.2.2 增加了导出类
24.2.3 维护
第五部分 测试需求的乘积
第25章 简单测试需求乘积
25.1 变量需求可太性
25.1.1 过程——通过规格说明和代码来处理
25.1.2 过程——只通过规格说明来处理
25.1.3 测试大型子系统的做含意
25.1.4 举例:一致性检查
25.1.5 举例:根据sreadhex规格说明来处理
25.1.6 举例:构建sreadhex规格说明
25.2 复杂布尔表达式
25.2.1 导出需求的大纲
25.2.2 举例
25.3 创建布尔便利定义
25.3.1 过程
25.3.2 greport例子
25.3.3 greport的其他问题
25.4 数据流测试
25.5 一些理论
第26章 操作测试需求的乘积
26.1 过程
26.1.1 找出交互线索
26.1.2 乘积
26.1.3 覆盖率
26.1.4 举例
26.2 发散操作
第六部分 附录
附录A 测试需求大纲(学生版)
附录B 测试需求大纲(标准版)
附录C 与POSIX有关的测试需求大纲(部分样本)
附录D 代码审查问题大纲
附录E 复杂布尔表达式需求大纲
附录F 用于测试编写内容的检查单
参考文献
术语表