出版社:清华大学出版社
出版日期:2008
ISBN:9787302178620
作者:Gerald D. Everett,Raymond
页数:214页
章节摘录
在过去的10年中,已经有无数知名的计算机软件故障成为杂志的精彩封面故事。尽管有这些看得见的教训,劣质软件导致的软件故障依然不断地在前台或后台发生。这些故障每年据估计会对美国经济造成高达595亿美元的损失。有估计认为通过在软件开发各个阶段适当地进行测试将可以减少其中每年222亿美元的损失。《软件测试》首次全面阐述了针对21世纪的开发中或修改中的软件从测试规划到测试实施的各个阶段的测试活动。此书的作者相信,那些封面故事中的软件灾难可以通过实施全面的软件测试来避免。作者还相信,常规而持续的测试可以提高软件开发人员所能提供的软件质量以及客户对质量的预期。通过采用一种全面的测试方法,软件测试人员可以将主要商业损失的负面风险转化为正面的竞争力。很多市场上优秀的教材深入地探讨了软件开发中某些很窄的特定阶段的测试方法。例如本书作者推荐一本可以作为本书后续的中级读本,就是由James A.Whittaker博士所著的《测试实用指南(Practical Guide to Testing)》。但是这些教材都没有从整个软件开发生命周期的角度来探讨软件测试,这应该包括在软件开发的每个阶段中的测试规划、测试完成和理解测试结果等方面的问题。将会从这本书中获益最大的读者是那些软件专业人员,商业系统分析师,以及高年级的计算机科学专业和信息管理系统专业的学生。这些貌似不同背景的读者群体的共同点就是他们都很关注软件开发过程中的技术挑战。正是在软件开发中的这一共同经验使得这些读者能够很快的对软件测试带来的好处有一个现实的预期,并且可以认清好的软件测试的界限。
前言
软件测试是软件开发过程中不可或缺的阶段,自20世纪70年代开始,业界就公认,在一个典型的编程项目中,测试会占到一半乃至更多的时问和资源。30多年来编程语言和软件开发技术的发展日新月异,今天我们拥有了更成熟更丰富的手段来便利地构造精妙复杂的软件,但是测试依然扮演着同样重要的角色。并且,随着计算机软件技术在各行各业的普及运用,人们对软件质量的要求也越来越分业化和多样化。软件开发团队必须尽可能地在交付产品之前控制未来的质量风险,这就必然需要依赖于卓有成效的软件测试。软件测试远比人们所直观想象的要复杂,哪怕是测试一个简单的系统,也会是一个潜在的旷日持久的任务。在经费和进度紧张的情况下,测试者需要切合实用的技术,亲自实践的经验和正确的策略来有效而高效地进行软件测试。在现实生活中,有效而高效的软件开发技能常常成为业界人员的热门话题和追逐日标,有效而高效的软件测试技能却相对为人们所冷落。正如软件测试泰斗Glenford Myers在其经典著作《软件测试艺术》中所言,“我们的学生每年毕业进入业界,几乎全无软件测试方面的知识,甚至,我们几乎从未指导过学生应该如何来测试和调试他们写下的课程程序。”《软件测试》作者在对美国21所大学进行的一个调查中发现,其中18所大学均没有开设任何软件测试方面的课程。这说明软件测试的培训与教育并无法满足当今IT产业的需求。这个现象在中国的软件产业中也有所反映,尽管客户对高质量可靠度软件产品的需求日益增加,尽管软件测试愈来愈为国内业界重视,高效的软件测试工程师依然是各开发团队争相网罗的人才。另一方面,随着敏捷开发方法等新一代软件工程概念的风靡,软件编码和测试过程多次迭代,测试人员更积极地参与到软件生命周期的各个阶段中,使得整个项目团队收取事半功倍的成效。编码和测试人员越来越紧密地协同工作,优秀的程序必然需要了解测试的方法和概念,优秀的测试人员所具备的技能也不再是仅仅是对现成的程序进行直观的功能测试,软件测试的涵义和策略日益复杂,软件质量风险控制涉及到愈来愈多的方面。故而软件企业对员工进行测试概念、过程、技巧、工具等方面的培训,能显著地提高整个团队的工作效率。。
内容概要
作者:(美国)爱弗里特 (Everett G.D.) (美国)Raymond MCleod 译者:郭耀
书籍目录
第1章 测试概述/1 1.1 概述/1 1.2 测试的目标与局限性/2 1.2.1 测试人员的思维/2 1.2.2 用户级别的非软件测试——买车/3 1.2.3 开发人员级别的非软件测试——造车/4 1.2.4 测试的4个主要目标/7 1.2.5 开发公理——质量必须在开发时考虑,而不是测试时/9 1.3 测试的价值与开销/9 1.3.1 市场级别的非软件测试——车辆安全与销售额/10 1.3.2 估算失败的开销/10 1.3.3 Basili和Boehm的指数定律/11 1.3.4 Internet上的“淘金潮”/13 1.3.5 电子商务的致命弱点/13 1.4 测试与软件开发生命周期的关系/13 1.4.1 软件测试作为一项技术职业的发展史/13 1.4.2 好的软件测试的10个准则/14 1.4.3 “GOSSIP”游戏/18 1.5 软件测试中的测试人员和开发人员的角色/19 1.5.1 软件质量期望的简史——“天堂的迷失”/19 1.5.2 测试人员在软件开发中的角色/20 1.5.3 测试工具专家在软件开发中的角色/20 1.5.4 测试组中都有谁/21 1.6 关于软件测试的观点讨论/21 1.7 本章小结/21 1.7.1 4个主要的测试目标/21 1.7.2 开发公理——质量必须在开发时而不是测试时考虑/22 1.7.3 软件测试作为一项技术职业的发展史/22 1.7.4 好的软件测试的10个准则/22第2章 软件开发生命周期/24 2.1 概述/24 2.2 方法和工具/24 2.3 软件开发生命周期的发展/25 2.3.1 经典的SDLC/25 2.3.2 原型化方法/25 2.3.3 快速应用程序开发/26 2.4 逐步开发方法/27 2.4.1 生命周期阶段/27 2.4.2 系统开发步骤/28 2.4.3 在各阶段中的软件测试/28 2.5 初始调研阶段/30 2.5.1 进行企业分析/30 2.5.2 定义系统目的、目标和性能标准/31 2.5.3 评估系统和项目风险/32 2.5.4 评估系统和项目的可行性/33 2.5.5 通过JAD会议确认初始结论/33 2.5.6 获得批准/34 2.6 分析阶段/34 2.6.1 分析功能需求/34 2.6.2 分析已有系统文档/34 2.6.3 访谈/34 2.6.4 调查研究/35 2.6.5 举行JAD会议/35 2.6.6 观察现有系统/35 2.6.7 记录功能需求/35 2.7 设计阶段/36 2.7.1 寻找可行的设计方案/37 2.7.2 评估可行的设计方案/38 2.7.3 举行JAD会议确定并评估设计方案/39 2.7.4 选取最优的设计方案/39 2.8 初始构建阶段/39 2.8.1 构建每个模块的软件/40 2.8.2 向用户和项目投资方演示新的系统模块/42 2.9 最终构建阶段/42 2.9.1 构建并测试可投产的软件/42 2.9.2 构建并测试可投产的数据库或数据仓库/43 2.9.3 安装必要的新硬件和网络连接/43 2.9.4 准备好所需的物理设施/43 2.9.5 测试硬件配置/43 2.9.6 完成所有文档/43 2.9.7 争取用户同意开始运行/43 2.9.8 培训参与人员和用户/44 2.10 安装阶段/44 2.10.1 安装系统组件/44 2.10.2 移交新系统/44 2.10.3 进行实施后评估/44 2.11 关于PDM的观点讨论/45 2.12 本章小结/45第3章 结构化测试概述/47 3.1 概述/47 3.2 软件测试人员的清单/48 3.3 SPRAE——一个通用的结构化测试方法/49 3.3.1 规约/50 3.3.2 预先策划/50 3.3.3 可重复性/50 3.3.4 责任说明/50 3.3.5 经济性/51 3.4 关于结构化测试的观点讨论/52第4章 测试策略/53 4.1 概述/53 4.2 测试策略中的“棋子”/53 4.2.1 静态测试/53 4.2.2 白盒测试/54 4.2.3 黑盒测试/55 4.2.4 性能测试/55 4.3 二维测试策略棋盘/56 4.4 三维测试策略棋盘/60 4.5 关于测试策略的观点讨论/62第5章 测试计划/63 5.1 概述/63 5.2 测试计划/63 5.3 测试用例/66 5.3.1 测试用例细节/67 5.3.2 动作/70 5.4 在现实世界中编写测试计划与测试用例/71 5.5 测试文档标准/72 5.6 关于测试计划的观点讨论/73第6章 静态测试/74 6.1 概述/74 6.2 静态测试的目标/74 6.3 静态测试的备选文档/74 6.3.1 软件开发管理人员文档/75 6.3.2 软件开发人员文档/76 6.3.3 测试人员文档/76 6.3.4 管理员文档/76 6.3.5 最终用户文档/77 6.4 静态测试技术/77 6.5 跟踪静态测试所发现的错误/78 6.6 关于静态测试的观点讨论/78第7章 功能测试/80 7.1 概述/80 7.2 从用况到功能测试用例/80 7.3 功能测试方法/83 7.3.1 用户导航测试/83 7.3.2 事务界面测试/83 7.3.3 事务流程测试/84 7.3.4 报告界面测试/84 7.3.5 报告流程测试/85 7.3.6 数据库测试/85 7.4 回归测试的方法/86 7.5 白盒测试技术/86 7.5.1 语句覆盖技术/87 7.5.2 分支(简单条件)覆盖技术/87 7.5.3 复合条件覆盖技术/87 7.5.4 路径覆盖技术/88 7.5.5 循环覆盖技术/89 7.5.6 直觉和经验/89 7.6 黑盒测试技术/91 7.6.1 等价类技术/91 7.6.2 边界值分析技术/92 7.6.3 预期结果覆盖技术/93 7.6.4 直觉和经验/95 7.7 本章小结/96 7.8 关于功能测试的观点讨论/98第8章 结构(非功能)测试/99 8.1 概述/99 8.2 接口测试/99 8.3 安全测试/100 8.4 安装测试/101 8.5 冒烟测试/101 8.6 管理测试/102 8.7 备份和恢复测试/102 8.8 关于结构测试的观点讨论/103 8.9 本章小结/103第9章 性能测试/105 9.1 概述/105 9.2 负载规划技术/105 9.2.1 性能负载需求文档/106 9.2.2 性能负载峰值文档/107 9.3 负载执行技术/108 9.3.1 负载上行到峰值/109 9.3.2 负载从峰值下行/109 9.3.3 峰值性能的度量/110 9.4 构件性能测试/110 9.5 往返性能/110 9.5.1 一个典型的性能响应曲线/112 9.5.2 空测试系统中的周六峰值负载/114 9.5.3 周六的峰值负载组合/115 9.5.4 周六负载的致命缺陷/116 9.5.5 周六负载的致命缺陷的修正/116 9.5.6 工作日负载性能计划的执行/119 9.6 关于性能测试的观点讨论/119 9.7 本章小结/120第10章 测试环境/122 10.1 概述/122 10.2 模拟/122 10.3 基准/123 10.4 测试环境/123 10.5 测试环境的目标/124 10.6 好的测试环境及使用它们的原因/126 10.7 不好的测试环境及避免它们的原因/127 10.8 关于测试环境的观点讨论/128 10.9 本章小结/128第11章 自动化测试工具/130 11.1 概述/130 11.2 软件自动化测试工具简史/130 11.3 测试工具记录/回放范型/132 11.4 测试工具触点范型/134 11.4.1 功能测试工具的触点范型/134 11.4.2 性能测试工具的触点范型/135 11.5 测试工具执行范型/137 11.6 测试工具带来的好处/138 11.6.1 可重复性——投资回报问题/138 11.6.2 可重复性的精度——技术问题/138 11.6.3 隐藏动作和结果的验证——技术问题/139 11.6.4 时间点精度和分布——技术问题/139 11.6.5 完成手动测试不可能完成的任务——投资回报问题/140 11.6.6 可复用性(回归测试)——投资回报问题/140 11.7 测试工具带来的问题/140 11.7.1 测试工具成本——财务、资源和技巧问题/140 11.7.2 一次性的测试安装成本/141 11.7.3 测试工具的能力范围/141 11.8 关于自动化测试工具的观点讨论/142 11.9 本章小结/142第12章 分析并解读测试结果/144 12.1 概述/144 12.2 尝试过的测试用例与成功的测试用例/144 12.3 关注单个缺陷的发现/147 12.4 关注缺陷积压日志的发现/148 12.5 关注缺陷集群的发现/149 12.6 以往错误发现模式的作用/153 12.6.1 使用以往项目缺陷历史作为出发点/154 12.6.2 在启动新项目之前利用以往项目的缺陷历史/156 12.6.3 在开始新项目时利用以往项目的缺陷历史/157 12.6.4 在新项目过程中利用以往项目的缺陷历史/159 12.7 Rayleigh曲线——缺陷发现模式的瞄准线/161 12.8 更多的缺陷跟踪度量指标/164 12.9 关于测试结果的观点讨论/165 12.10 本章小结/165第13章 一个全软件开发生命周期的测试项目/167 13.1 概述/167 13.2 初始调研阶段/168 13.3 分析阶段/169 13.3.1 初始会议和结论/169 13.3.2 需求撰写和复审——用况/171 13.3.3 需求静态测试/172 13.3.4 使用静态测试的结果修正和改进需求/172 13.3.5 完成测试策略/174 13.4 设计阶段/175 13.4.1 支持系统的设计/175 13.4.2 应用软件的逻辑设计/176 13.4.3 逻辑设计的静态测试/177 13.4.4 设计测试计划/177 13.5 初始构建阶段/180 13.5.1 静态测试/180 13.5.2 测试环境搭建和测试数据准备/181 13.5.3 功能测试/182 13.5.4 结构测试/183 13.5.5 性能测试/184 13.5.6 缺陷追踪和分析/185 13.5.7 初始构建阶段的结束/187 13.6 最终构建阶段/188 13.6.1 静态测试/188 13.6.2 功能测试/189 13.6.3 结构测试/189 13.6.4 性能测试/189 13.6.5 缺陷跟踪和分析/190 13.7 实施阶段/191 13.8 实施后阶段/191 13.9 案例结束/191 13.9.1 小结/192 13.9.2 案例声明/192第14章 复杂应用测试/193 14.1 概述/193 14.2 单级应用/193 14.3 两级应用/195 14.4 三级应用/198 14.5 多级应用/201 14.6 关于复杂应用测试的观点讨论/206 14.7 本章小结/206第15章 测试的未来发展方向/208 15.1 概述/208 15.2 会增加对专业软件测试人员需求的软件开发的未来发展方向/208 15.3 软件测试目前面临的挑战/209 15.4 软件测试近期面临的挑战/209 15.5 软件测试将要面临的挑战/210 15.6 关于未来测试方向的观点讨论/211 15.7 本章小结/211参考文献/213
编辑推荐
《软件测试:跨越整个软件开发生命周期》包括了对于一个专业技术人员想要成为一个软件测试人员所需的知识的全面介绍。《软件测试:跨越整个软件开发生命周期》的表述包括了由浅入深的赏例。《软件测试:跨越整个软件开发生命周期》中所采用的描述和例子更多是针对实践者,而非学术研究人员。
作者简介
引言(第1章) 简单介绍了测试的基本目标,从生活中非计算机相关的例子,比如购车过程中出现的与测试类似的活动入手,形象地介绍了测试的基本目标。
* 准备知识(第2~5章) 简要介绍了本书测试活动所使用的软件开发生命周期模型,所采用的结构化测试技术的基本流程,以及流程中所涉及到的主要问题。
* 常用软件测试技术(第6~9章) 详细介绍了常用的几类测试技术,包括静态测试、功能测试、结构(非功能)测试、性能测试等。针对每类测试技术中的每一个具体的技术都做了详细的介绍与分析。
* 测试环境与自动化测试工具(第10~11章) 软件测试离不开好的测试环境与自动化测试工具的支持。
* 测试结果的分析与解释(第12章) 讲解如何对测试结果进行分析,如何阅读和解释测试结果,特别是采用统计学的方法分析测试结果的方法。
* 一个跨越整个软件开发生命周期的测试实例(第13章) 通过针对一个应用进行整个软件生命周期的测试的过程的介绍,让读者看到如何把前面介绍的各种测试技术应用到实际的软件测试中。
* 软件测试高级知识(第14~15章) 包括复杂应用程序的测试,以及测试的未来发展方向的简要探讨。
由上述章节的安排可以看出,本书不仅涉及了软件测试的基础知识与基本技术,同时还介绍了一些普通的测试教程中很少涉及的内容,其中主要包括跨越整个软件开发生命周期的测试方法,以及用统计学的方法来进行测试结果的分析等。这些测试相关的理论有比较高的学术价值,可以为测试实践活动提供更好的指导。
本书适合从事软件测试与软件开发的IT从业人员或者高等院校计算机专业的高年级本科生以及研究生阅读
图书封面