
本书是华中科技大学精品课程建设成果。本书围绕软件测试的核心概念,介绍了软件测试的基本方法和过程,并通过丰富的案例予以实践。全书共三部分。第一部分软件测试概述,对软件测试的核心概念与思想(软件缺陷、测试用例、自动化测试)展开初步的讨论和测试实践。第二部分软件测试技术,详细讨论了传统的黑盒测试方法和白盒测试方法,针对每种测试方法均按照基本原理、测试用例设计和捉虫实践的顺序依次展开阐述;对应黑盒测试和白盒测试给出了综合案例实践。第三部分软件测试应用,从测试实施的角度,分为单元测试、集成测试和系统测试三个阶段进行讨论;最后提供了综合应用案例实践,从自动化测试的角度,结合单元测试工具、功能测试工具和性能测试工具,讨论自动化测试的设计与实施。 全书结构遵循学生的认知规律,循序渐进,由浅入深,并注重理论联系实际,使理论知识在实践运用中具有可操作性。本书配有电子课件、教学大纲、案例源代码或安装包、典型文档模板等教学资源。
软件已渗透到每个人的日常生活,软件测试作为软件质量保证的关键内容之一,在软件质量控制上的地位不可替代。 当前,软件测试行业在国外已发展得相当成熟,国内软件在软件测试方面与国际水准相比仍存在着较大的差距,例如,重开发轻测试,不重视测试流程管理;管理随意,缺乏规范的软件测试管理体系;缺少自动化测试工具的支持(据软件测试网2011年对软件测试从业人员的调查表明,国内软件测试从业人员从事的测试工作类型主要集中在手动功能测试,高达89%;而功能自动化测试和性能测试分别仅占31%和35%)。 软件测试工程师是目前软件行业中唯一存在缺口的职业,企业迫切需要各类院校提供满足企业需求的软件测试专门人才。国内软件测试从2000年开始发展至今已有10多年,但相关人才培养并未及时跟上市场发展的脚步。2002年之前,国内高校鲜有软件测试课程。目前不少高院纷纷开设软件测试课程,甚至开设软件测试专业。然而,课程建设情况良莠不齐,软件测试专业仍然非常匮乏,软件测试课程的学时数仍然偏少,甚至有很多都没有单独开课,仅仅作为“软件工程”课程中的某一章节来介绍。高校每年培养和输送的专业测试人才仍远远无法满足企业的实际需求。 为了缩短高校毕业生水平与企业要求的差距,提高在校生对软件工程乃至软件测试过程的实践能力十分必要。为此,我们将科研实践和教学中积累的经验与体会按照概述、技术、应用三部分进行整理和提炼,与读者分享。 本书围绕软件测试的核心概念,讨论了软件测试的基本方法和过程,并通过丰富的案例予以实践。全书共三部分。第一部分软件测试概述,依托一个流行的第二日问题作为案例,对软件测试的核心概念与思想(软件缺陷、测试用例、自动化测试)展开初步的讨论和测试实践,使读者快速切入。第二部分软件测试技术,详细讨论了传统的黑盒测试方法和白盒测试方法,针对每种测试方法均按照基本原理、测试用例设计和捉虫实践的顺序依次展开阐述,讨论方法时选用了函数级别的小型实例,便于读者理解和掌握基本的测试技能;对应黑盒测试和白盒测试给出了综合案例实践,有助于读者根据所学的测试用例设计方法加以灵活运用。第三部分软件测试应用,从测试实施的角度,分为单元测试、集成测试和系统测试三个阶段进行讨论,使读者了解软件测试过程的展开,并学会撰写规范的测试用例报告和缺陷报告;最后提供了综合应用案例实践,从自动化测试的角度,结合单元测试工具、功能测试工具和性能测试工具,讨论自动化测试的设计与实施。 全书结构遵循学生的认知规律,循序渐进,由浅入深,并注重理论联系实际,使理论知识在实践运用中具有可操作性。本书主要特点如下: (1) 紧跟技术发展前沿。本书除对基础知识进行分析讨论之外,还简要介绍了软件测试领域的研究热点和部分新技术及成果,有助于开拓学生视野,并给学生提供进一步研究的方向和思路。 (2) 突出案例分析和对比。案例的作用不应局限于对方法的简单验证。为此,本书在设计案例时,做到“三同三不”,即: ① 同一个案例,基于不同的需求,形成不同规模的程序,对应不同的测试阶段,便于学生分析各阶段的测试难度和工作量。例如,第二日问题具有单个函数版本、集成版本、系统版本等不同规模的多个程序版本。 ② 同一个案例,使用不同测试方法进行测试,以助于学生进行测试设计。例如,第二日问题、保险金问题案例均使用了多种手工和自动化测试方法来展开测试尝试。 ③ 同种测试方法,应用于不同案例,帮助学生理解测试方法的应用场合,从而能灵活运用各种方法。例如,针对边界值测试、独立路径测试等方法,应用于第二日、佣金、自动柜员机等多个案例进行测试。 (3) 强调自动化测试的设计。自动化测试必不可少,但自动化测试不等于看看用户手册、学会操作软件而已。因此,本书并未长篇大论地介绍测试工具的使用过程,而是依托案例,始终强调测试设计和自动化测试设计,即测试用例的设计应紧贴用户需求,自动化测试的设计应紧贴测试用例的需要,通过不同规模和特点的软件系统案例来展示如何根据被测系统特点,在不同阶段灵活使用不同的自动化测试工具。 读者可参考如下建议学习本书: (1) 阅读第1章,通过亲自动手实践,初步理解什么是软件测试,如何做软件测试,如何引入自动化测试来提高测试效率。 (2) 阅读第2章,了解软件测试的发展历程、职业前景,扩展自己的视野,找到自己的兴趣点。 (3) 精读第3、5章,其中本科生可仅阅读第3章的边界值测试、等价类测试和场景法,以及第5章的静态白盒测试、对判定的测试、对路径的测试。略读第4、6章,在阅读的过程中应先自己尝试设计测试用例,然后对照书中内容,观察自己设计的测试用例与书上给出的测试用例有何异同。 (4) 结合自己参与开发的小型软件系统,阅读第7~9章,并注意针对系统中的不同模块进行测试阶段的实践,包括制订测试计划、设计测试用例和缺陷报告,其中测试用例报告、缺陷报告这类文档的撰写可参照第10章的内容。 (5) 阅读第11章,结合已经做过测试设计的小型软件系统,根据案例讨论中提到的测试设计思想和工具的使用方法,尝试设计和执行自动化单元测试、自动化功能测试以及性能测试。 本书配有电子课件、教学大纲、案例源代码或安装包、典型文档模板等教学资源,可登录电子工业出版社华信教育资源网(www.hxedu.com.cn),免费注册、下载。 本书可作为高等学校计算机、软件工程专业“软件测试”课程的教材,也可作为软件测试人员的技术参考书。 参加本书编写工作的还有陈传波、肖来元、沈刚、薛志东。在本书的写作过程中得到了多方面的帮助、指导和支持。感谢华中科技大学的同事们,在业务交流中作者受益匪浅,特别感谢吴涛、区士颀、陆永忠、曾喻江老师,在共同的科研和教学实践活动中,为软件测试课程的规划与建设、课程实践案例的收集和整理、课程教学方法的改革探讨等方面,付出了大量辛勤的劳动;还要感谢学生们,在教学过程中,他们的想象力和创造力为本书的撰写带来了很多思想的火花,特别感谢胡媛媛、操智雄、程军、桂绍武、周俊全、董全立、贾春雨、严晓娥,他们为本书的案例整理付出了大量的心血;最后要感谢我的家人和朋友,没有他们默默的支持和鼓励,我无法完成这样一个艰巨的任务。 由于作者水平和时间所限,书中难免会出现一些错误和纰漏,请各界同仁不吝赐教。 编著者
第一部分 软件测试概述 第1章 软件测试核心概念 1 1.1 引子:猎人打鸟 1 1.2 软件测试的概念 2 1.2.1 软件的定义及特点 2 1.2.2 软件测试的定义 3 1.2.3 捉虫实践1:很简单? 6 1.2.4 软件测试的认识误区 8 1.3 软件缺陷的概念 11 1.3.1 惨痛的教训:小虫子,大问题 12 1.3.2 软件缺陷的定义 14 1.3.3 捉虫实践2:虫子捉完了吗? 17 1.3.4 软件缺陷的来源及代价 20 1.4 测试用例的概念 20 1.4.1 测试用例的定义 20 1.4.2 测试用例的设计 21 1.4.3 捉虫实践3:如何提高效率? 21 1.5 自动化测试 23 1.5.1 自动化测试的定义 23 1.5.2 自动化测试的任务 23 1.5.3 自动化测试技术 25 1.5.4 捉虫实践4:如何消灭所有 的虫子? 26 1.5.5 自动化测试实施要点 31 1.5.6 自动化测试的局限性 32 1.6 本章小结 33 思考与练习 33 第2章 软件测试背景 34 2.1 引子:一个中国黑客高手 34 2.2 软件测试的发展历程及现状 35 2.2.1 软件测试的发展历程 35 2.2.2 软件测试的现状 36 2.2.3 外包测试的现状 37 2.3 软件测试的研究热点 37 2.4 国内软件测试职业现状 40 2.5 本章小结 41 思考与练习 41 第二部分 软件测试技术 第3章 黑盒测试技术 42 3.1 概述 42 3.1.1 基本原理和特点 42 3.1.2 适用阶段 42 3.1.3 测试方法的评价 43 3.2 边界值测试 43 3.2.1 基本原理 43 3.2.2 测试用例设计 43 3.2.3 捉虫实践1:第二日问题的边界值 测试 47 3.2.4 针对输出域的边界值分析 49 3.2.5 捉虫实践2:佣金问题的边界值 测试 49 3.2.6 边界值测试小结 50 3.3 等价类测试 51 3.3.1 基本原理 51 3.3.2 测试用例设计 52 3.3.3 捉虫实践3:第二日问题的等价类 测试 55 3.3.4 针对输出域的等价类测试 60 3.3.5 捉虫实践4:佣金问题的等价类 测试 60 3.3.6 等价类测试小结 61 3.4 基于决策表的测试 61 3.4.1 基本原理 61 3.4.2 测试用例设计 62 3.4.3 捉虫实践5:第二日问题的决策表 测试 63 3.4.4 决策表测试小结 65 3.5 基于正交表的测试 66 3.5.1 基本原理 66 3.5.2 测试用例设计 66 3.5.3 捉虫实践6:第二日问题的 正交表测试 70 3.5.4 正交表测试小结 75 3.6 基于场景的测试 76 3.6.1 基本原理 76 3.6.2 测试用例设计 76 3.6.3 捉虫实践7:自动柜员机问题的 场景测试 78 3.6.4 场景测试小结 81 3.7 黑盒测试总结 81 3.8 本章小结 82 思考与练习 82 第4章 黑盒测试案例实践 83 4.1 保险金案例实践 83 4.1.1 案例说明 83 4.1.2 测试分析 83 4.1.3 测试用例设计 84 4.1.4 测试小结 86 4.2 信息采集系统案例实践 87 4.2.1 案例说明 87 4.2.2 测试分析 93 4.2.3 测试用例设计 93 4.2.4 测试小结 102 4.3 本章小结 102 思考与练习 102 第5章 白盒测试技术 103 5.1 概述 103 5.1.1 基本原理和特点 103 5.1.2 适用阶段 103 5.1.3 测试方法的评价 104 5.2 静态白盒测试 104 5.2.1 概述 104 5.2.2 代码检查 104 5.2.3 静态结构分析 110 5.2.4 代码质量度量 111 5.2.5 捉虫实践1:自动柜员机问题 的函数调用图分析 113 5.2.6 捉虫实践2:第二日问题的控制流 图分析 114 5.2.7 静态白盒测试小结 117 5.3 对判定的测试 118 5.3.1 基本原理 118 5.3.2 案例描述 119 5.3.3 测试用例设计 119 5.3.4 测试用例优化 125 5.3.5 捉虫实践3:第二日问题的判定 测试 125 5.3.6 对判定的测试小结 128 5.4 对路径的测试 129 5.4.1 弥诺陶洛斯迷宫的传说 129 5.4.2 相关概念 130 5.4.3 基本原理 134 5.4.4 测试用例设计 135 5.4.5 捉虫实践4:第二日问题的路径 测试 137 5.4.6 捉虫实践5:自动柜员机问题的 路径测试 143 5.4.7 捉虫实践6:信息采集系统的路径 测试 144 5.4.8 对路径的测试小结 145 5.5 对循环的测试 146 5.5.1 基本原理 146 5.5.2 测试用例设计 146 5.5.3 捉虫实践7:B样条曲线问题 的测试 149 5.5.4 对循环的测试小结 152 5.6 对变量的测试 152 5.6.1 基本原理 152 5.6.2 测试用例设计 153 5.6.3 捉虫实践8:佣金问题的数据流 测试 154 5.6.4 对变量的测试小结 156 5.7 白盒测试总结 157 5.7.1 测试方法总结 157 5.7.2 综合使用策略 157 5.7.3 测试覆盖指标 158 5.7.4 对黑盒测试的评估 158 5.8 本章小结 159 思考与练习 160 第6章 白盒测试案例实践 161 6.1 保险金案例实践 161 6.1.1 被测代码说明 161 6.1.2 测试分析 162 6.1.3 测试用例设计 162 6.1.4 测试小结 165 6.2 人寿保险金案例实践 166 6.2.1 问题描述 166 6.2.2 被测代码说明 166 6.2.3 测试分析 167 6.2.4 测试用例设计 167 6.2.5 测试小结 173 6.3 信息采集系统案例实践 173 6.3.1 被测代码说明 173 6.3.2 测试分析 173 6.3.3 测试用例设计 173 6.3.4 测试小结 180 6.4 本章小结 180 思考与练习 180 第三部分 软件测试应用 第7章 单元测试 181 7.1 概述 181 7.2 单元测试的内容 181 7.2.1 静态检查 182 7.2.2 动态测试 182 7.3 驱动和桩模块的设计 183 7.3.1 驱动模块和桩模块的定义 183 7.3.2 驱动模块和桩模块的设计 184 7.3.3 捉虫实践1:账单计算问题 的驱动设计 185 7.4 测试需求分析 188 7.4.1 测试需求概述 188 7.4.2 测试需求的定义 189 7.4.3 测试需求的属性 189 7.4.4 测试需求的分析 190 7.4.5 应注意的问题 191 7.4.6 认识的误区 191 7.4.7 捉虫实践2:辖区移交问题的测试 需求分析 192 7.5 单元测试的过程 193 7.5.1 测试过程概述 193 7.5.2 计划阶段 194 7.5.3 设计阶段 198 7.5.4 实施阶段 198 7.5.5 执行阶段 199 7.5.6 评估阶段 199 7.6 日构建 200 7.6.1 日构建的概念 200 7.6.2 日构建的过程 200 7.6.3 日构建脚本的开发 200 7.6.4 日构建的优势 200 7.6.5 日构建的不足 201 7.7 回归测试 201 7.7.1 回归测试的定义和目的 201 7.7.2 回归测试的策略 202 7.7.3 回归测试的实施 202 7.8 捉虫实践3:第二日问题的单元 测试 203 7.8.1 代码说明 203 7.8.2 单元测试计划 203 7.8.3 单元测试设计 208 7.8.4 单元测试用例 211 7.8.5 单元测试脚本 216 7.8.6 单元测试执行 220 7.8.7 单元测试评估总结 221 7.9 捉虫实践4:第二日问题的单元测试 改进 221 7.9.1 存在的不足 221 7.9.2 改进措施 221 7.9.3 改进的单元测试脚本 221 7.9.4 更多讨论 223 7.10 本章小结 223 思考与练习 224 第8章 集成测试 225 8.1 概述 225 8.1.1 集成测试的定义 225 8.1.2 集成测试的内容 225 8.2 集成测试的评价 225 8.3 单个集成测试用例的设计 226 8.3.1 成对集成 226 8.3.2 捉虫实践1:第二日问题的 成对集成 226 8.3.3 邻居集成 227 8.3.4 捉虫实践2:第二日问题的 邻居集成 227 8.3.5 基于独立路径的集成 227 8.3.6 捉虫实践3:第二日问题基于独立 路径的集成 227 8.4 集成测试遍历顺序的设计 228 8.4.1 大爆炸集成 228 8.4.2 自顶向下的集成 229 8.4.3 自底向上的集成 230 8.4.4 三明治集成 231 8.5 集成测试策略的比较 233 8.5.1 策略比较 233 8.5.2 捉虫实践8:第二日问题的综合 集成测试 233 8.6 本章小结 233 思考与练习 234 第9章 系统测试 235 9.1 概述 235 9.2 功能测试 235 9.2.1 以数据为中心的系统 236 9.2.2 以活动序列为中心的系统 236 9.3 性能测试 237 9.4 安全性测试 238 9.5 兼容性测试 239 9.5.1 与硬件的兼容性测试 239 9.5.2 与其他软件平台和应用程序的 兼容性测试 239 9.5.3 数据共享的兼容性测试 239 9.6 用户界面测试 240 9.7 可安装性测试 242 9.8 本章小结 243 思考与练习 243 第10章 测试过程管理 244 10.1 软件测试过程模型 244 10.1.1 V模型 244 10.1.2 W模型 245 10.1.3 H模型 245 10.1.4 X模型 246 10.1.5 综合策略 247 10.2 测试用例的管理 247 10.2.1 测试用例报告的撰写 247 10.2.2 测试用例的组织和跟踪 249 10.3 软件缺陷的管理 252 10.3.1 缺陷的属性 252 10.3.2 缺陷报告的撰写 254 10.3.3 缺陷的跟踪和管理 261 10.4 测试团队的管理 262 10.4.1 测试团队的责任 262 10.4.2 测试团队组织架构 263 10.4.3 测试团队各角色职责 263 10.5 本章小结 265 思考与练习 265 第11章 测试应用案例实践 266 11.1 保险金案例实践 266 11.1.1 自动化测试设计 266 11.1.2 JUnit概述 268 11.1.3 基于Eclipse的JUnit4测试 开发 270 11.1.4 Ant概述 272 11.1.5 基于Eclipse的Ant使用 275 11.1.6 测试小结 276 11.2 信息采集系统案例实践 277 11.2.1 自动化测试设计 277 11.2.2 部分缺陷分析 278 11.2.3 测试小结 278 11.3 网络教学平台案例实践 279 11.3.1 案例说明 279 11.3.2 测试需求分析 282 11.3.3 测试用例设计 283 11.3.4 自动化测试设计 285 11.3.5 QTP概述 285 11.3.6 基于QTP的功能测试 286 11.3.7 测试小结 291 11.4 分布式搜索系统案例实践 291 11.4.1 案例说明 291 11.4.2 自动化测试设计 291 11.4.3 LoadRunner概述 292 11.4.4 基于LoadRunner的性能测试 292 11.4.5 测试小结 301 11.5 本章小结 301 思考与练习 301
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=G0186780