本书是对面向对象应用进行测试设计和实现自动化的权威性的指南。\r\n\r\n 全书分预备知识、模型、样式和工具四部分,共19章,阐明了为什么测试必须是基于模型的,并给出了建立可测模型的技术,引入了测试样式的概念并介绍了37种样式,以及如何设计和实现面向对象测试的自动化。\r\n\r\n 作者力求以易于理解的方式阐述面向对象测试,使读者无需花费太多精力即可以理解并加以利用。本书既可以作为教材,也可以作为面向对象测试的手册,供在软件测试第一线工作的人员以及对面向对象开发和测试有兴趣的人员使用。\r\n
\r\n
第一部分预备知识 \r\n\r\n 第1章 一个小问题 \r\n\r\n 第2章 如何使用本书 \r\n\r\n 2. 1 读者向导 \r\n\r\n 2. 2 约定 \r\n\r\n 2. 2. 1 每章的基本成分 \r\n\r\n 2. 2. 2 难度 \r\n\r\n 2. 2. 3 标准 \r\n\r\n 2. 2. 4 面向对象术语 \r\n\r\n 2. 2. 5 程序设计语言和代码举例 \r\n\r\n 2. 2. 6 测试工具 \r\n\r\n 2. 2. 7 欢迎指出本书的错误 \r\n\r\n 2. 3 用于面向对象测试的FAQ \r\n\r\n 2. 3. 1 为什么要测试对象 \r\n\r\n 2. 3. 2 测试设计 \r\n\r\n 2. 3. 3 方法和类的测试设计 \r\n\r\n 2. 3. 4 复用的测试 \r\n\r\n 2. 3. 5 子系统和应用系统的测试设计 \r\n\r\n 2. 3. 6 集成测试和开发的顺序 \r\n\r\n 2. 3. 7 回归测试和重复的增量的开发 \r\n\r\n 2. 3. 8 UML模型的测试 \r\n\r\n 2. 3. 9 测试自动机 \r\n\r\n 2. 4 测试过程 \r\n\r\n 第3章 软件测试:简要介绍 \r\n\r\n 3. 1 什么是软件测试 \r\n\r\n 3. 2 定义 \r\n\r\n 3. 3 测试的局限 \r\n\r\n 3. 3. 1 输入/状态空间 \r\n\r\n 3. 3. 2 执行顺序 \r\n\r\n 3. 3. 3 故障敏感性和巧合正确性 \r\n\r\n 3. 3. 4 绝对局限性 \r\n\r\n 3. 4 测试能完成什么 \r\n\r\n 3. 5 文献注释 \r\n\r\n 第4章 必须改变:测试和面向对象软件 \r\n\r\n 4. 1 软件测试的沉闷科学 \r\n\r\n 4. 1. 1 我是对的, 你是对的, 对象也是对的 \r\n\r\n 4. 1. 2 故障模型的作用 \r\n\r\n 4. 1. 3 用于面向对象编程的故障模型 \r\n\r\n 4. 2 范型的副作用 \r\n\r\n 4. 2. 1 什么错了 \r\n\r\n 4. 2. 2 封装 \r\n\r\n 4. 2. 3 继承性 \r\n\r\n 4. 2. 4 多态性 \r\n\r\n 4. 2. 5 消息序列和状态相关错误 \r\n\r\n 4. 2. 6 内置的低层服务 \r\n\r\n 4. 2. 7 错误列表 \r\n\r\n 4. 3 具体语言的风险 \r\n\r\n 4. 3. 1 C++ \r\n\r\n 4. 3. 2 Java \r\n\r\n 4. 3. 3 Smalltalk \r\n\r\n 4. 4 面向对象测试的覆盖模型 \r\n\r\n 4. 5 面向对象测试的声明 \r\n\r\n 4. 6 文献注释 \r\n\r\n 第二部分 模 型 \r\n\r\n 第5章 测试模型 \r\n\r\n 5. 1 测试设计与测试模型 \r\n\r\n 5. 1. 1 为什么测试必须是基于模型的 \r\n\r\n 5. 1. 2 什么是模型 \r\n\r\n 5. 1. 3 模型在测试中的作用 \r\n\r\n 5. 1. 4 草图或测试就绪模型 \r\n\r\n 5. 1. 5 结论 \r\n\r\n 5. 2 文献注释 \r\n\r\n 第6章 组合模型 \r\n\r\n 6. 1 组合模型如何支持测试 \r\n\r\n 6. 2 怎样得到判定表 \r\n\r\n 6. 2. 1 基本方法 \r\n\r\n 6. 2. 2 构件和结构 \r\n\r\n 6. 2. 3 汽车保险续保模型 \r\n\r\n 6. 2. 4 无关条件. 不知条件和不可能发生条件 \r\n\r\n 6. 2. 5 判定表在面向对象开发中的应用 \r\n\r\n 6. 3 导出逻辑函数 \r\n\r\n 6. 3. 1 布尔表达式 \r\n\r\n 6. 3. 2 真值表与判定表 \r\n\r\n 6. 3. 3 布尔表达式的组成 \r\n\r\n 6. 3. 4 卡诺矩阵(Kanaugh—Veitch Matrix) \r\n\r\n 6. 3. 5 因—果图(Cause—Effect Graphs) \r\n\r\n 6. 4 判定表确认(Validation) \r\n\r\n 6. 5 测试生成(Test Generation) \r\n\r\n 6. 5. 1 故障模型(Fault Model) \r\n\r\n 6. 5. 2 全显式变式 \r\n\r\n 6. 5. 3 全变式. 全真变式. 全假变式和全素因子变式 \r\n\r\n 6. 5. 4 每一个条件/所有条件 \r\n\r\n 6. 5. 5 二元判定图行列式 \r\n\r\n 6. 5. 6 变量的否定(variable negation) \r\n\r\n 6. 5. 7 非二值变量值域分析 \r\n\r\n 6. 5. 8 其它启发方式 \r\n\r\n 6. 6 选择组合测试策略 \r\n\r\n 6. 7 文献注释 \r\n\r\n 第7章 状态机 \r\n\r\n 7. 1 动机 \r\n\r\n 7. 2 基本模型 \r\n\r\n 7. 2. 1 什么是状态机 \r\n\r\n 7. 2. 2 状态转换图 \r\n\r\n 7. 2. 3 有限状态自动机的一些性质 \r\n\r\n 7. 2. 4 受监视转换 \r\n\r\n 7. 2. 5 Mealy机和Moore机 \r\n\r\n 7. 2. 6 状态转换表 \r\n\r\n 7. 2. 7 基本模型的局限性 \r\n\r\n 7. 2. 8 状态图 \r\n\r\n 7. 2. 9 状态机与面向对象的开发 \r\n\r\n 7. 3 FREE状态模型 \r\n\r\n 7. 3. 1 OOA/D行为模型的局限性 \r\n\r\n 7. 3. 2 状态 \r\n\r\n 7. 3. 3 转换 \r\n\r\n 7. 3. 4 a和w状态 \r\n\r\n 7. 3. 5 继承性及类的展平 \r\n\r\n 7. 3. 6 未指明的事件/转换对偶 \r\n\r\n 7. 4 基于状态的测试设计 \r\n\r\n 7. 4. 1 状态机是如何失败的 \r\n\r\n 7. 4. 2 开发可侧模型 \r\n\r\n 7. 4. 3 N+测试策略 \r\n\r\n 7. 4. 4 相关能力和局限性 \r\n\r\n 7. 4. 5 选择基于状态测试的策略 \r\n\r\n 7. 5 文献注释 \r\n\r\n 第8章 UML测试者指南 \r\n\r\n 8. 1 引言 \r\n\r\n 8. 1. 1 作为测试模型的UML \r\n\r\n 8. 1. 2 关系测试策略 \r\n\r\n 8. 2 通用元素 \r\n\r\n 8. 2. 1 组织与注解 \r\n\r\n 8. 2. 2 对象约束语言 \r\n\r\n 8. 3 用例图 \r\n\r\n 8. 3. 1 符号和语义 \r\n\r\n 8. 3. 2 一般测试模型 \r\n\r\n 8. 3. 3 测试性扩充 \r\n\r\n 8. 4 类图 \r\n\r\n 8. 4. 1 符号和语义 \r\n\r\n 8. 4. 2 一般测试模型 \r\n\r\n 8. 5 顺序图 \r\n\r\n 8. 5. 1 符号和语义 \r\n\r\n 8. 5. 2 一般测试需求 \r\n\r\n 8. 5. 3 可测试性能扩充 \r\n\r\n 8. 6 活动图 \r\n\r\n 8. 6. 1 符号和语义 \r\n\r\n 8. 6. 2 一般测试模型 \r\n\r\n 8. 7 状态图 \r\n\r\n 8. 8 协作图 \r\n\r\n 8. 8. 1 符号和语义 \r\n\r\n 8. 8. 2 一般测试模型 \r\n\r\n 8. 8. 3 可测试性扩充 \r\n\r\n 8. 9 构件图 \r\n\r\n 8. 9. 1 符号和语义 \r\n\r\n 8. 9. 2 一般测试模型 \r\n\r\n 8. 10 实施图 \r\n\r\n 8. 10. 1 符号和语义 \r\n\r\n 8. 10. 2 一般溯试模型 \r\n\r\n 8. 11 图. 关系和测试 \r\n\r\n 8. 12 文献注释 \r\n\r\n 第三部分 样 式 \r\n\r\n 第9章 面向结果的测试策略 \r\n\r\n 9. 1 面向结果的测试 \r\n\r\n 9. 1. 1 基于责任的测试设计的作用 \r\n\r\n 9. 1. 2 基于实现的测试设计的作用 \r\n\r\n 9. 1. 3 面向对象开发的集成 \r\n\r\n 9. 1. 4 利用责任和实现 \r\n\r\n 9. 2 测试设计样式 \r\n\r\n 9. 2. 1 什么是样式 \r\n\r\n 9. 2. 2 样式和测试 \r\n\r\n 9. 2. 3 测试设计样式模板 \r\n\r\n 9. 2. 4 本书中的测试样式 \r\n\r\n 9. 2. 5 应用测试设计样式 \r\n\r\n 9. 3 测试实例. 测试包和测试计划的文档 \r\n\r\n 9. 3. 1 IEEE829文件 \r\n\r\n 9. 3. 2 可跟踪性 \r\n\r\n 9. 4 文献注释 \r\n\r\n 第10章 类 \r\n\r\n 10. 1 类测试和集成 \r\n\r\n 10. 1. 1 什么是类范围的测试 \r\n\r\n 10. 1. 2 为什么在类范围进行测试 \r\n\r\n 10. 1. 3 由谁和什么时候测试 \r\n\r\n 10. 1. 4 实例分析:MPR Teltech \r\n\r\n 10. 2 基础知识 \r\n\r\n 10. 2. 1 类范围集成 \r\n\r\n 10. 2. 2 基于实现的测试模型 \r\n\r\n 10. 2. 3 路径敏感 \r\n\r\n 10. 2. 4 域测试模型 \r\n\r\n 10. 3 方法范围测试设计样式 \r\n\r\n 10. 3. 1 功能内聚 \r\n\r\n 10. 3. 2 方法范围的集成 \r\n\r\n 10. 3. 3 样式 \r\n\r\n 10. 4 类范围测试设计样式 \r\n\r\n 10. 4. 1 类模态性 \r\n\r\n 10. 4. 2 样式 \r\n\r\n 10. 5 展平类范围测试设计样式 \r\n\r\n 10. 5. 1 超类的麻烦 \r\n\r\n 10. 5. 2 展平类的测试策略 \r\n\r\n 10. 5. 3 样式 \r\n\r\n 10. 6 文献注释 \r\n\r\n 第11章 可复用构件 \r\n\r\n 11. 1 测试和复用 \r\n\r\n 11. 1. 1 复用机制 \r\n\r\n 11. 1. 2 测试在复用中的作用 \r\n\r\n 11. 1. 3 复用测试包 \r\n\r\n 11. 2 测试设计样式 \r\n\r\n 11. 2. 1 抽象类测试 \r\n\r\n 11. 2. 2 类属类测试 \r\n\r\n 11. 2. 3 新框架测试 \r\n\r\n 11. 2. 4 流行框架溯试 \r\n\r\n 11. 3 文献注释 \r\n\r\n 第12章 子系统 \r\n\r\n 12. 1 子系统 \r\n\r\n 12. 1. 1 什么是子系统 \r\n\r\n 12. 1. 2 为什么在于系统范围内测试 \r\n\r\n 12. 2 子系统测试设计样式 \r\n\r\n 12. 2. 1 类关联测试 \r\n\r\n 12. 2. 2 往返场景测试 \r\n\r\n 12. 2. 3 受控异常测试 \r\n\r\n 12. 2. 4 模式机测试 \r\n\r\n 12. 3 文献注释 \r\n\r\n 第13章 集成 \r\n\r\n 13. 1 面向对象开发中的集成 \r\n\r\n 13. 1. 1 定义 \r\n\r\n 13. 1. 2 集成测试的必要性 \r\n\r\n 13. 1. 3 相依性分析 \r\n\r\n 13. 1. 4 集成故障 \r\n\r\n 13. 2 集成样式 \r\n\r\n 13. 2. 1 特定范围需要考虑的事项 \r\n\r\n 13. 2. 2 大爆炸集成 \r\n\r\n 13. 2. 3 自底向上集成 \r\n\r\n 13. 2. 4 自顶向下集成 \r\n\r\n 13. 2. 5 协作集成 \r\n\r\n 13. 2. 6 基于集成 \r\n\r\n 13. 2. 7 层次集成 \r\n\r\n 13. 2. 8 客户/服务器集成 \r\n\r\n 13. 2. 9 分布服务集成 \r\n\r\n 13. 2. 10 高频集成 \r\n\r\n 13. 3 文献注释 \r\n\r\n 第14章 应用系统 \r\n\r\n 14. 1 应用系统测试 \r\n\r\n 14. 1. 1 一个告诫人们的故事 \r\n\r\n 14. 1. 2 面向对象应用系统测试 \r\n\r\n 14. 1. 3 应用系统测试策略 \r\n\r\n 14. 2 测试设计样式 \r\n\r\n 14. 2. 1 扩充式用例测试 \r\n\r\n 14. 2. 2 覆盖CRUD \r\n\r\n 14. 2. 3 按纲要分配测试 \r\n\r\n 14. 3 特定实现的能力 \r\n\r\n 14. 3. 1 配置和兼容性 \r\n\r\n 14. 3. 2 性能 \r\n\r\n 14. 3. 3 完整性和容错性 \r\n\r\n 14. 3. 4 人机交互 \r\n\r\n 14. 4 开发后测试 \r\n\r\n 14. 5 测试性能目标注解 \r\n\r\n 14. 5. 1 批处理系统 \r\n\r\n 14. 5. 2 交互式系统 \r\n\r\n 14. 5. 3 实时系统 \r\n\r\n 14. 6 文献注释 \r\n\r\n 第15章 回归测试 \r\n\r\n 15. 1 预备 \r\n\r\n 15. 1. 1 什么和为什么 \r\n\r\n 15. 1. 2 何时和如何 \r\n\r\n 15. 1. 3 回归故障(RepessionFault) \r\n\r\n 15. 1. 4 测试自动化 \r\n\r\n 15. 1. 5 测试包维护 \r\n\r\n 15. 1. 6 缩减一个测试包需要考虑的事项 \r\n\r\n 15. 2 测试样式 \r\n\r\n 15. 2. 1 全部再测试 \r\n\r\n 15. 2. 2 再测试风险用例 \r\n\r\n 15. 2. 3 按纲要再测试 \r\n\r\n 15. 2. 4 再测试修改的代码 \r\n\r\n 15. 2. 5 防火墙内再测试 \r\n\r\n 15. 3 文献注释 \r\n\r\n 第四部分工 具 \r\n\r\n 第16章 测试自动机 \r\n\r\n 16. 1 为什么测试必须自动化 \r\n\r\n 16. 2 限制和告诫 \r\n\r\n 第17章 断言 \r\n\r\n 17. 1 简介 \r\n\r\n 17. 1. 1 什么是断言 \r\n\r\n 17. 1. 2 为什么使用断言 \r\n\r\n 17. 1. 3 谁使用断言 \r\n\r\n 17. 2 基于实现的断言 \r\n\r\n 17. 2. 1 假设检查器 \r\n\r\n 17. 2. 2 潜伏的故障和探测器 \r\n\r\n 17. 3 基于责任的断言 \r\n\r\n 17. 3. 1 概述 \r\n\r\n 17. 3. 2 责任. 契约和子类型 \r\n\r\n 17. 3. 3 方法范围 \r\n\r\n 17. 3. 4 类范围 \r\n\r\n 17. 3. 5 顺序约束 \r\n\r\n 17. 3. 6 超类/子类范围 \r\n\r\n 17. 3. 7 客户/服务器范围 \r\n\r\n 17. 4 实现 \r\n\r\n 17. 4. 1 程序设计人员的断言FAQ \r\n\r\n 17. 4. 2 断言动作 \r\n\r\n 17. 4. 3 不可执行的断言 \r\n\r\n 17. 4. 4 Ada95 \r\n\r\n 17. 4. 5 C++ \r\n\r\n 17. 4. 6 Eiffel \r\n\r\n 17. 4. 7 Java \r\n\r\n 17. 4. 8 Objective-C \r\n\r\n 17. 4. 9 Smalltalk \r\n\r\n 17. 5 实施 \r\n\r\n 17. 5. 1 内嵌测试的验证 \r\n\r\n 17. 5. 2 应用断言设计测试 \r\n\r\n 17. 5. 3 发行前的考虑 \r\n\r\n 17. 5. 4 发行后的考虑 \r\n\r\n 17. 6 限制和告诫 \r\n\r\n 17. 7 一些断言工具 \r\n\r\n 17. 8 文献注释 \r\n\r\n 第18章 预测 \r\n\r\n 18. 1 简介 \r\n\r\n 18. 2 预测样式 \r\n\r\n 18. 2. 1 简介 \r\n\r\n 18. 2. 2 评判 \r\n\r\n 18. 2. 3 预说明预测 \r\n\r\n 18. 2. 4 保值预测 \r\n\r\n 18. 2. 5 有机预测 \r\n\r\n 18. 3 比较器 \r\n\r\n 18. 3. 1 简介 \r\n\r\n 18. 3. 2 确定对象相等 \r\n\r\n 18. 3. 3 深相等和浅相等 \r\n\r\n 18. 3. 4 抽象内容和具体内容 \r\n\r\n 18. 3. 5 别名 \r\n\r\n 18. 3. 6 汇集 \r\n\r\n 18. 3. 7 类型/子类型相等 \r\n\r\n 18. 3. 8 部分相等方法 \r\n\r\n 18. 4 文献注释 \r\n\r\n 第19章 测试装置设计 \r\n\r\n 19. 1 如何开发测试装置 \r\n\r\n 19. 1. 1 需求 \r\n\r\n 19. 1. 2 体系结构 \r\n\r\n 19. 2 测试实例样式 \r\n\r\n 19. 2. 1 考虑 \r\n\r\n 19. 3 测试控制样式 \r\n\r\n 19. 3. 1 考虑 \r\n\r\n 19. 4 驱动器样式 \r\n\r\n 19. 4. 1 考虑 \r\n\r\n 19. 4. 2 驱动器设计样式 \r\n\r\n 19. 5 测试执行样式 \r\n\r\n 19. 6 测试实现语法 \r\n\r\n 19. 7 文献注释 \r\n\r\n 附录 BigFoot's Tootsie:实例研究 \r\n\r\n 术语汇编 \r\n\r\n 参考文献 \r\n
\r\n
一些热心的. 但被误导的早期面向对象程序设计(OOP)的倡导者, 不考虑测试, 是由于他们错误地相信——OOP的采用将会大大减少错误的发生率, 使得测试将不再需要. 我们在两个时代前, 在Cobol作为标准程序设计语言的时代, 就听到过类似的言论. 其后的CASE尽管有明显的生产率优势, 却也仍然不能不考虑测试, 无法履行它的承诺. 对于所有这三个时代, Cobol时代. CASE时代和近来的面向对象时代而言, 如果范式(paradigm)的采用可将生产率提高到在代码生成中不再需要任何人力的程度, 则剩下的全部工作将是测试和调试一将消耗100%的工作内容. 正如对于过程式程序设计语言, 从过去几十年来有时甚至是痛苦的经历中所认识到的, 每一个进步都有其代价, 就面向对象而言, 导致更大灵活性. 健壮性. 一般性和高生产率的真实东西, 也是要求进行测试的东西, 如果不是更为困难, 至少也更具挑战性.
几乎所有在测试过程式程序设计语言程序中所学到的东西, 也适用于测试面向对象实现. 如本书所示, 面向对象测试也是建立在这样的基础之上的. 然而, 对面向对象来说, 各种测试技术的重要性和有效性是不同的. 例如, 人们可能没有理由将数据流测试和有限状态机测试, 同时用于用过程式程序设计语言写的应用, 而对一个利用了OOP必须提供的东西的应用, 则同时使用这些技术是不可避免的. 此外, 单元测试和集成测试的相对重要性也有改变. 在过程式语言中, 单元测试处于首要地位, 而集成测试次之. 但在OOP中, 这种相对重要性恰好相反.
面向对象程序设计也给测试者带来新的问题, 这些问题在过程式程序设计中无法发现. 在这些问题中, 多态. 继承和动态绑定(binding)是最易出问题的地方, 而它们又是面向对象的核心.
某些早期的面向对象测试研究相当悲观, 竞然到了说“面向对象有什么用呢?我们完全无法对它进行测试, 或许也无法进行真正的调试”的地步. 这种说法是OOP研究团体和机敏的从业者都不愿接受的. 测试面向对象软件的方法正是在这些团体的共同关心下出现的. 这些方法使用了新的技术和/或为了适合于这种新范式而经过改造的老技术.
然而, 大部分这样的知识从业人员是难于得到的, 它们散布在成百上千的研究论文或大量未发表的OOP资料之中. Binder对研究成果精巧的论述消除了这种隔阂. 这些研究成果, 尽管是建立在以前程序设计范式(经过几十年使用业已证明)的坚实基础之上, 但也经过了在给OOP提供了方法和技术的大厦中实践的严酷现实锤炼. 我相信本书提供了OOP丢失的那一半-测试的那一半.
Boris Beizer
阿宾格登 宾夕法尼亚
有关本书
《面向对象系统的测试》是指导人们设计面向对象软件的测试包及自动测试的一本书. 它向人们说明了, 针对面向对象编程语言及面向对象的分析/设计方法, 如何设计测试实例的过程, 类. 类簇. 框架. 子系统和应用系统均在考虑之列, 并对许多测试设计问题提供了实用的综合指导. 具体包括如下内容:
如何利用行为模型. 状态一空间覆盖和接口数据流分析, 设计用于类和小簇的基于责任能力的测试.
如何利用覆盖分析, 评估测试的完全性.
如何利用依赖分析和层次状态模型, 设计用于族和子系统的基于责任的测试.
如何利用OOA/D方法, 设计用于应用系统的基于责任的测试.
如何用面向对象的驱动器测试. 桩测试. 框架测试和内置测试, 使测试执行自动化.
本书是关于系统工程和软件工程的书, 更是一本有关测试面向对象软件的书. 用于测试设计的模型(model)是必须的—本书向读者展示了如何开发可测试的模型, 用于防止和排除错误. 书中讨论的样式(pattern)对于设计测试包是非常有效的. 工具(tool)可用于实现测试设计——本书告诉读者如何设计有效的自动测试框架.
这本书适合你吗
本书是为那些想要改善面向对象系统的可靠性的人而写的, 涉及了基本方法和高级方法. 我一直想使这本书像一个设计得很好的厨房, 如果你所需要的是一块三明治和一杯冷饮, 而你并不了解高水平的配方. 各种成分的目录等, 有了这本书, 就足以为20个客人准备一套七个系列的午餐.
这里, 假设读者已至少了解了面向对象程序设计和面向对象分析/设计. 如果你是像大多数面向对象的开发者一样, 对某一个语言(大多数可能是C++或Java)已经很在行, 可能还生成过或使用过某一个面向对象的模型, 但是我并不认为你对测试了解得很多, 你还需要一些计算机科学和软件工程的背景, 以便于理解本书更深入的内容. 但是即使没有特殊的理论训练, 你也能应用测试设计样式.
如果必须回答下列问题之一, 你会发现本书是很有用的:
测试过程软件和测试面向对象软件之间的不同是什么?
我刚刚写了一个新的子类, 它似乎是可运行的, 我还需要重新测试所继承的超类的特征吗?
需要什么类型的测试, 以确信一个类对于所有可能的消息序列具有正确的行为?
对于快速的. 增量的开发, 一种好的集成测试策略是什么?
用UML表示的模型, 如何用于设计测试?
为了使类和应用的测试更容易, 我能做些什么?
如何利用测试获取更多的复用?
应该设计测试驱动模块和桩模块吗?
如何使测试实例可复用?
如何设计一个好的用于面向对象应用系统的系统测试计划?
多少测试实例就足够了?
本书列举的资料不限于某个特定的面向对象程序设计语言. 某个OOA/D方法. 某种应用或某种目标环境. 然而, 我自始自终使用了统一建模语言(UML). 代码例子是用Ada 95, C十十, Java, Eiffel, Objective—C和Smalltalk写的.
一点看法
我刚刚告诉我的7岁的儿子David我不得不早点结束同他进行的棒球游戏, 回来从事我的写书工作. 他又问:“爸爸, 你的书为什么这么厚?”我要解释我的选择, 我试图清楚而诚实地作出回答:
测试是复杂的, 而我是一个工程师. 确保所从事的工作是正确的, 对于工程师们是很重要的. 假如建筑师因为偷懒不能使我们的房子十分结实, 你想将会发生什么情况?房子会倒塌而且我们要受到伤害. 假设GM的工程师们对用于汽车刹车的软件不做最终的程序测试, 当我们需要刹车时, 这个软件就可能不能正常工作, 就可能出事故. 所以当工程师工作或回答一个有关如何工作的问题时, 必须确信自己是正确的. 必须确信没有志掉什么. 要做到这些, 需要大量的工作.
正如我所说的, 正是认识到了这一点我才一直努力着. 这也解释了我为何要写这本书以及我对测试面向对象软件这一问题的看法. 测试是软件工程的一个组成部分. 面向对象技术并不减弱测试的作用. 与其它程序设计语言范型相比, 面向对象技术改变了一些重要的技术细节. 所以, 从软件工程的观点看, 这是一本有关测试应该如何用于面向对象系统开发的厚书. 本书之所以厚是因为测试及面向对象系统的开发都是大的主题, 具有很大的交叉性.