logo资料库

软件测试的艺术(中文非扫描版,超清晰可复制).pdf

第1页 / 共149页
第2页 / 共149页
第3页 / 共149页
第4页 / 共149页
第5页 / 共149页
第6页 / 共149页
第7页 / 共149页
第8页 / 共149页
资料共149页,剩余部分请下载后查看
第1章 一个自我评价测试
第2章 软件测试的心理学和经济学
2.1 软件测试的心理学
2.2 软件测试的经济学
2.2.1 黑盒测试
2.2.2 白盒测试
2.3 软件测试的原则
2.4 小结
第3章 代码检查、走查与评审
3.1 检查与走查(Inspections And Walkthroughs)
3.2 代码检查(Code Inspections)
3.3 用于代码检查的错误列表
3.3.1 数据引用错误
3.3.2 数据声明错误
3.3.3 运算错误
3.3.4比较错误
3.3.5控制流程错误
3.3.6接口错误
3.3.7输入/输出错误
3.3.8其他检查
3.4 代码走查(Walkthroughs)
3.5 桌面检查(Desk Checking)
3.6 同行评分(Peer Ratings)
3.7 小结
第4章 测试用例的设计
4.1 白盒测试(White-Box Testing)
4.1.1 逻辑覆盖测试(Logic-Coverage Testing)
4.1.2等价划分(Equivalence Partitioning)
4.1.3 一个范例
4.1.4 边界值分析(Boundary-Value Analysis)
4.1.5 因果图(Cause-Effect Graphing)
4 .2 错误猜测(Error Guessing)
4.3 测试策略
第5章 模块(单元)测试
5.1 测试用例设计
5.2 增量测试
5.3 自顶向下测试与自底向上测试
5.3.1 自顶向下的测试
5.3.2 自底向上的测试
5.3.3 比较
5.4 执行测试
第6章 更高级别的测试
6.1 功能测试(Function Testing)
6.2 系统测试(System Testing)
6.2.1 能力测试(Facility Testing)
6.2.2 容量测试(Volume Testing)
6.2.3 强度测试(Stress Testing)
6.2.4 易用性测试(Usability Testing)
6.2.5 安全性测试(Security Testing)
6.2.6 性能测试(Performance Testing)
6.2.7 存储测试(Storage Testing)
6.2.8 配置测试(Configuration Testing)
6.2.9 兼容性/配置/转换测试(Compatibility/Configuration/Conversion Testing)
6.2.10 安装测试(Installability Testing)
6.2.11 可靠性测试(Reliability Testing)
6.2.12 可恢复性测试(Recovery Testing)
6.2.13 适用性测试(Serviceability Testing)
6.2.14 文档测试(Documentation Testing)
6.2.15 过程测试(Procedure Testing)
6.2.16 系统测试的执行
6.3 验收测试(Acceptance Testing)
6.4 安装测试(Installation Testing)
6.5 测试的计划与控制
6.6 测试结束准则
6.7 独立的测试机构
第7章 调试(DEBUGGING)
7.1 暴力法调试(Debugging by Brute Force)
7.2 归纳法调试(Debugging by Induction)
7.3 演绎法调试(Debugging by Deduction)
7.4 回溯法调试(Debugging by Backtracking)
7.5 测试法调试(Debugging by Testing)
7.6 调试的原则
7.6.1 定位错误的原则
7.6.2 修改错误的技术
7.7 错误分析
第8章 极限测试
8.1 极限编程基础
8.2 极限测试:概念
8.2.1 极限单元测试
8.2.2 验收测试
8.3 极限测试的应用
8.3.1 测试用例设计
8.3.2 测试驱动器及其应用
8.4 小结
词汇表
The Art of Software Testing Second Edition Glenford J. Myers Revised and Updated by Tom Badgett and Todd M.Thomas with Corey Sandler Copyright© 2004 by Word Association, Inc. All rights reserved. Published by John Wiley & Sons, Inc., Hoboken, New Jersey. Published simultaneously in Canada. 整理:丁兆杰,黄墀晖,黄米青,林嘉,马晓靖,王博,吴航,余华兵,俞培源 v.1.2 7/1/2008
前言 1979 年 Glenford J.Myers 出版了一本现在仍被证明为经典的著作,这就是本书 的第 1 版。本书经受住了时间的考验,25 年来一直被列在出版商可供书目的清单中。 这个事实本身就是对本书稳定、基础和珍贵品质的佐证。 在同一时期,本书第 2 版的几位合著者共出版了 120 余本著作,大多数都是关 于计算机软件的。其中有一些很畅销,再版了多次(例如 Corey Sandler 的《Fix Your Own PC》自付印以来已出版到第 7 版,Tom Badgett 关于微软 PowerPoint 及其他 Office 组件的著作已经出版到第 4 版以上)。然而,这些作者的著作中没有哪一本书 能够像本书一样持续数年之后仍畅销不衰。 区别究竟在哪里呢?这些新书只涵盖了短期性的主题:操作系统、应用软件、 安全性、通信技术及硬件配置。20 世纪 80 年代和 90 年代以来的计算机硬件与软件 技术的飞速发展,必然使得这些主题频繁地变功和更新。 在此期间出版的有关软件测试的书籍已数以十计、甚至数以百计。这些书也对 软件测试的主题进行了简要的探讨。 然而,本书为计算机界一个最为重要的主题提供了长期、基本的指南:如何确 保所开发的所有软件做了其应该做的,并且同样重要的是,未做其不应该做的? 本书第 2 版中保留了同样的基本思想。我们更新了其中的例子以包含更为现代 的编程语言。我们还研究了在 Myers 编著本书第 1 版时尚无人了解的主题:Web 编 程、电子商务及极限编程与测试。 但是,我们不会忘记,新的版本必须遵从其原著。因此,新版本依然向读者展 示 Glenford Myers 全部的软件测试思想:这个思想体系以及过程将适用于当今乃至 未来的软件和硬件平台。我们也希望本书能够顺应时代,适用于当今的软件设计人 员和开发人员掌握最新的软件测试思想及技术。 未经同意,严禁以任何形式拷贝 ii
引言 在本书 1979 年第 1 版出版的时侯,有一条著名的经验,即在一个典型的编程 项目中,软件测试或系统测试大约占用 50%的项目时间和超过 50%的总成本。 25 年后的今天,同样的经验仍然成立。现在出现了新的开发系统、具有内置工 具的语言以及习惯于快速开发大量软件的程序员。但是,在任何软件开发项目中, 测试依然扮演着重要角色。 在这些事实面前,读者可能会以为软件测试发展到现在不断完善,已经成为一 门精确的学科。然而实际情况并非如此。事实上,与软件开发的任何其他方面相比, 人们对软件测试仍然知之甚少。而且,软件测试并非热门课题,本书首次出版时是 这样.遗憾的是,今天仍然如此。现在有很多关于软件测试的书籍和论文,这意味 着,至少与本书首次出版时相比,人们对软件测试这个主题有了更多的了解。但是, 测试依然是软件开发中的“黑色艺术”。 这就有了更充足的理由来修订这本关于软件测试艺术的书,同时我们还有其他 一些动机。在不同的时期,我们都听到一些教授和助教说;”我们的学生毕业后进 入了计算机界,却丝毫不了解软件测试的基本知识,而且在课堂上向学生介绍如何 测试或调试其程序时,我们也很少有建议可提供。” 因此,本书再版的目的与 1979 年时一样:填充专业程序员和计算机科学学生 的知识空缺。正如书名所蕴涵的,本书是对测试主题的实践探讨,而不是理论研究, 连同了对新的语言和过程的探讨。尽管可以根据理论的脉络来讨论软件测试,但本 书旨在成为实用且“脚踏实地”的手册。因此很多与软件测试有关的主题,如程序 正确性的数学证明都被有意地排除在外了。 本书第 l 章介绍了一个供自我评价的测试,每位读者在继续阅读之前都须进行 测试。它揭示出我们必须了解的有关软件测试的最为重要的实用信息,即一系列心 理和经济学问题,这些问题在第 2 章中进行了详细讨论。第 3 章探讨的是不依赖计 算机的代码走查或代码检查的重要概念。不同于大多数研究都将注意力集中在概念 的过程和管理方面,第 3 章则是从技术上“如何发现错误”的集度来进行探讨。聪 明的读者都会意识到,在软件测试人员的技巧中最为重要的部分是掌握如何编写有 iii
效测试用例的知识.这正是第 4 章的主题。本书第 5 章和第 6 章分别探讨了如何测 试单个模块或子程序及测试更夫的对象,而第 7 章则介绍了一些程序调试的实用建 议,第 8 章讨论了极限编程和极限测试的概念,第 9 章介绍了如何将本书其他章节 中详细讨论的软件测试的知识运用到 web 编程,包括电子商务系统中去。 本书面向三类主要的读者。尽管我们希望本书中的内容对于专业程序员而言不 完全是新的知识,但它应增强专业人员对测试技术的了解。如果这些材料能使软件 人员在某个程序中多发现一个错误,那么本书创造的价值将远远超过书价本身。第 二类读者是项目经理,因为本书中包含了测试过程管理的最新的、实用的知识。第 三类读者是计算机科学的学生,我们的目的在于向学生们展示程序测试的问题,并 提供一系列有效的技术。我们建议将本书作为程序设计课程的补充教材,让学生在 学习阶段的早期就接触到软件测试的内容。 Glenford J . Myers Tom Badgett Todd M . Thomas Corey Sandler 未经同意,严禁以任何形式拷贝 iv
目 录 第 1 章 一个自我评价测试.......................................................................................1 第 2 章 软件测试的心理学和经济学 ..............................................................................4 2.1 软件测试的心理学 .............................................................................................4 2.2 软件测试的经济学 .............................................................................................7 2.3 软件测试的原则 ...............................................................................................11 2.4 小结 ...................................................................................................................15 第 3 章 代码检查、走查与评审 ....................................................................................16 3.1 检查与走查(Inspections And Walkthroughs) ...................................................17 3.2 代码检查(Code Inspections).............................................................................18 3.3 用于代码检查的错误列表 ...............................................................................20 3.4 代码走查(Walkthroughs) ..................................................................................29 3.5 桌面检查(Desk Checking)................................................................................30 3.6 同行评分(Peer Ratings) ....................................................................................31 3.7 小结 ...................................................................................................................32 第 4 章 测试用例的设计 ................................................................................................33 4.1 白盒测试(White-Box Testing) ..........................................................................34 4 .2 错误猜测(Error Guessing) ...............................................................................68 4.3 测试策略 ...........................................................................................................70 第 5 章 模块(单元)测试 ............................................................................................71 5.1 测试用例设计 ...................................................................................................71 5.2 增量测试 ...........................................................................................................80 5.3 自顶向下测试与自底向上测试 .......................................................................84 5.4 执行测试 ...........................................................................................................91 第 6 章 更高级别的测试 ................................................................................................93 6.1 功能测试(Function Testing)..............................................................................98 6.2 系统测试(System Testing) ................................................................................99 6.3 验收测试(Acceptance Testing) .......................................................................109 6.4 安装测试(Installation Testing)........................................................................109
6.5 测试的计划与控制 .........................................................................................110 6.6 测试结束准则 .................................................................................................112 6.7 独立的测试机构 .............................................................................................117 第 7 章 调试(DEBUGGING)........................................................................................118 7.1 暴力法调试(Debugging by Brute Force)........................................................119 7.2 归纳法调试(Debugging by Induction) ...........................................................120 7.3 演绎法调试(Debugging by Deduction) ..........................................................123 7.4 回溯法调试(Debugging by Backtracking) .....................................................126 7.5 测试法调试(Debugging by Testing) ...............................................................126 7.6 调试的原则 .....................................................................................................127 第 8 章 极限测试 ..........................................................................................................131 8.1 极限编程基础 .................................................................................................131 8.2 极限测试:概念 .............................................................................................135 8.3 极限测试的应用 .............................................................................................137 8.4 小结 .................................................................................................................141 词汇表 ............................................................................................................................142 未经同意,严禁以任何形式拷贝 6
软件测试的艺术 第 1 章 一个自我评价测试 自本书 25 年前首次出版以来,软件测试变得比以前容易得多,也困难得多。 软件测试何以变得更困难?原因在于大量编程语言、操作系统以及硬件平台的 出现。在 20 世纪 70 年代只有相当少的人使用计算机,而今天在商业界和教育界, 如果不使用计算机,几乎没有人能完成日常工作。况且,计算机本身的功能也比以 前增强了数百倍。 因此,我们现在编写的软件会潜在地影响到数以百万计的人,使他们更高效地 完成工作,反之也会给他们带来数不清的麻烦,导致工作或事业的损失。这并不是 说今天的软件比本书第一版发行时更重要,但可以肯定地说,今天的计算机——以 及驱动它的软件——无疑已影响到了更多的人、更多的行业。 就某些方面而言,软件测试变得更容易了,因为大量的软件和操作系统比以往 更加复杂,内部提供了很多已充分测试过的例程供应用程序集成,无须程序员从头 进行设计。例如,图形用户界面(GUI)可以从开发语言的类库中建立起来,同时, 由于它们是经过充分调试和测试的可编程对象,将其作为用户应用程序的组成部分 进行测试的要求就减少了许多。 所谓软件测试,就是一个过程或一系列过程.用来确认计算机代码完成了其应 该完成的功能不执行其不该有的操作。软件应当是可预测且稳定的,不会给用户带 来意外惊奇。在本书中,我们将讨论多种方法来达到这个目标。 好了,在开始阅读本书之前,我们想让读者做一个小测验。 我们要求设计一组测试用例(特定的数据集合),适当地测试一个相当简单的 程序。为此要为该程序建立一组测试数据,程序须对数据进行正确处理以证明自身 的成功。下面是对程序的描述: 这个程序从一个输入对话框中读取三个整数值。这三个整数值代表了 三角形三边的长度。程序显示提示信息,指出该三角形究竟是不规则三角 未经同意,严禁以任何形式拷贝 1
第 1 章 一个自我评价测试 形、等腰三角形还是等边三角形。 注意,所谓不规则三角形是指三角形中任意两条边不相等,等腰三角形是指有 两条边相等,而等边三角形则是指三条边相等。另外,等腰三角形等边的对角也相 等(即任意三角形等边的对角也相等),等边三角形的所有内角都相等。 用你的测试用例集回答下列问题,借以对其进行评价。对每个回答“是”的答 案,可以得 l 分: 1. 是否有这样的测试用例,代表了二个有效的不规则三角形?(注意,如 1, 2,3 和 2,5,10 这样的测试用例并不能确保“是”的答案,因为具备这 样边长的三角形不存在。) 2. 是否有这样的测试用例,代表一个有效的等边三角形? 3. 是否有这样的测试用例,代表一个有效的等腰三角形?(注意如 2,2,4 的测试用例无效,因为这不是一个有效的三角形。) 4. 是否能少有三个这样的测试用例,代表有效的等腰三角形,从而可以测试 到两等边的所有三种可能情况?(如 3,3,4;3,4,3;4,3,3) 5. 是否有这样的测试用例,某边的长度等于 0? 6. 是否有这样的测试用例,某边的长度为负数? 7. 是否有这样的测试用例,三个整数皆大于 0,其中两个整数之和等于第三 个?(也就是说,如果程序判断 l,2,3 表示一个不规则二角形,它可能 就包含一个缺陷。) 8. 是否至少有三个第 7 类的测试用例,列举了一边等于另外两边之和的全部 可能情况(如 1,2,3;1,3,2;3,1,2)? 9. 是否有这样的测试用例,三个整数皆大于 0,其中两个整数之和小于第三 个整数?(如 1,2,4;12,15,30) 10. 是否至少有三个第 9 类的测试用例,列举了一边大于另外两边之和的全 部可能情况?(如 1,2,4;1,4,2;4,1,2) 11. 是否有这样的测试用例,三边长度皆为 0(0,0,0)? 12. 是否至少有一个这样的测试用例,输入的边长为非整数值(如 2.5,3.5, 5.5) 13. 是否至少有一个这样的测试用例,输入的边长个数不对(如仅输入了两 2 未经同意,严禁以任何形式拷贝
分享到:
收藏