网站颜色:

14718|现货包邮 软件测试:经验与教训 软件工程技术丛书测试系列书籍 计算机网络程序设计 [图书]

  • 产品名称:软件测试经验与教训/软件...
  • 书名:软件测试经验与教训/软件工程技术丛书
  • 作者:(美国)凯纳等著韩柯等译
  • 译者:韩柯
  • 定价:35.00元
  • 书名:软件测试经验与教训/软件工程技术丛书
  • 是否是套装:否
  • 出版社名称:机械工业

特色图书图片.jpg
0
书名: 【正版】软件测试:经验与教训[图书]|14718
图书定价: (咨询特价)
图书作者: (美)Cem Kaner,James Bach,Bret Pettichord
出版社: 机械工业出版社
出版日期: 2004/1/1 0:00:00
ISBN号: 711112975X
开本: 16开
页数: 234
版次: 1-1
作者简介
Cem Kaner是美国佛罗里达技术学院的教授,同时为软件开发界提供技术和管理等方面的咨询工作。他 是世界级的测试技术权威,《Testing Computer Software》(中文版即将由机械工业出版社出版)和《Bad Software》这两本书的第一作者。 James Bach是Satisfice公司创始人和首席顾问,这是一家软件测试和质量保证公司。他具有在顶级硅谷 公司(例如苹果和Borland公司)从事软件开发的经验,这使他在“足够好的”质量、基于风险的测试、探索 测试和其他对技能和判断能力要求很高的技术等方面拥有丰富经验。他还是软件测试实验室的首席科学家。 Bret Pettichord是独立顾问,并为www.testinghotlist.com编辑很流行的“软件测试活动表”。他经常演讲并发表文章,并且还是测试自动化Austin研讨会的创始人。
内容简介
本书汇总了293条来自软件测试界顶尖专家的经验与建议,阐述了如何做好测试工作、如何管理测试,以及如何澄清有关软件测试的常见误解,读者可直接将这些建议用于自己的测试项目工作中。这些经验中的每一条都是与软件测试有关的一个观点,观点后面是针对运用该测试经验的方法、时机和原因的解释或例子。 本书还提供了有关如何将本书提供的经验有选择性地运用到读者实际项目环境中的建议,在所有关键问题上所积累的经验,以及基于多年的测试经验总结出的有用实践和问题评估方法。 优秀的软件测试团队不是天生的,而是造就的,是通过大量艰苦工作和有效沟通造就的。在这个过程中,有很多陷阱,这些陷阱会使精心制订的计划出现偏差,使项目不能按进度完成。 本书的三位作者具有多年的测试经验,知道成功的测试都需要什么。在这本性的新书中,他们汇总了293条测试经验建议,阐述了如何做好测试工作,如何管理测试,以及如何澄清有关软件测试的常见误解。读者可直接将这些经验用于自己的测试工作中。这些经验中的每一条都是与软件测试有关的一个观点,后面是对运用这条经验的方法、时机和原因的解释或例子。 为了满足不同层次的软件测试员、开发人员和管理人员的需要,本书还提供以下内容: ◆ 根据世界顶级软件测试专家多年的测试经验总结出的有用实践和问题评估方法。 ◆ 在所有关键问题上积累的经验,包括测试设计、测试自动化、测试管理、测试策略和错误报告。 ◆ 如何将本书提供的经验有选择性地运用到实际项目环境中的建议。
目录
译者序

前言
致谢
第1章 测试员的角色 1
经验1:测试员是项目的前灯 1
经验2:测试员的使命决定要做
的一切 2
经验3:测试员为很多客户服务 3
经验4:测试员发现的信息会
“打扰”客户 4
经验5:迅速找出重要程序问题 4
经验6:跟着程序员走 5
经验7:询问一切,但不一定外露 5
经验8:测试员关注失效,客户才能
关注成功 5
经验9:不会发现所有程序问题 6
经验10:当心“完备的”测试 6
经验11:通过测试不能保证质量 7
经验12:永远别做看门人 7
经验13:当心测试中的不关我事理论 8
经验14:当心成为过程改进小组 8
经验15:别指望任何人会理解测试,
或理解测试员需要什么条件
才能搞好测试 9
第2章 按测试员的方式思考 11
经验16:测试运用的是认识论 11
经验17:研究认识论有助于更好测试 12
经验18:认知心理学是测试的基础 12
经验19:测试在测试员的头脑中 13
经验20:测试需要推断,并不只是
做输出与预期结果的比较 14
经验21:优秀测试员会进行技术性、创造
性、批判性和实用性地思考 14
经验22:黑盒测试并不是基于
无知的测试 15
经验23:测试员不只是游客 15
经验24:所有测试都试图回答某些问题 16
经验25:所有测试都基于模型 16
经验26:直觉是不错的开始,但又是
糟糕的结束 16
经验27:为了测试,必须探索 17
经验28:探索要求大量思索 17
经验29:使用诱导推断逻辑发现推测 18
经验30:使用猜想与反驳逻辑评估产品 19
经验31:需求是重要人物所关心的质量
或条件 19
经验32:通过会议、推导和参照发现
需求 20
经验33:既要使用显式规格说明,也要
使用隐式规格说明 20
经验34:“它没有问题”真正的含义是,
它看起来在一定程度上满足
部分需求 21
经验35:最后,测试员所能得到的只是
对产品的印象 22
经验36:不要将试验与测试混淆起来 22
经验37:当测试复杂产品时:陷入
与退出 22
经验38:运用试探法快速产生测试思路 23
经验39:测试员不能避免偏向,但是可以
管理偏向 23
经验40:如果自己知道自己不聪明,就更
难被愚弄 24
经验41:如果遗漏一个问题,检查这种遗漏
是意外还是策略的必然结果 25
经验42:困惑是一种测试工具 25
经验43:清新的眼光会发现失效 26
经验44:测试员要避免遵循过程,
除俘程先跟随自己 26
经验45:在创建测试过程时,避免
“1287” 26
经验46:测试过程的一个重要成果,
是更好、更聪明的测试员 27
经验47:除非重新发明测试,否则
不能精通测试 27
第3章 测试手段 29
经验48:关注测试员、覆盖率、潜在问题、
活动和评估的组合测试手段 30
经验49:关注测试员的基于人员的
测试手段 31
经验50:关注测试内容的基于覆盖率的
测试手段 32
经验51:关注测试原因(针对风险测试)
的基于问题的测试手段 36
经验52:关注测试方法的基于活动的
测试手段 37
经验53:关注测试是否通过的基于评估
的测试手段 38
经验54:根据自己的看法对测试
手段分类 39
第4章 程序错误分析 57
经验55:文如其人 57
经验56:测试员的程序错误分析会推动
改正所报告的错误 57
经验57:使自己的错误报告成为一种
有效的销售工具 58
经验58:错误报告代表的是测试员 59
经验59:努力使错误报告有更高的
价值 59
经验60:产品的任何项目相关人员都
应该能够报告程序错误 60
经验61:引用别人的错误报告时要小心 60
经验62:将质量问题作为错误报告 60
经验63:有些产品的项目相关人员不能
报告程序错误,测试员就是
他们的代理 61
经验64:将受到影响的项目相关人员的
注意力转移到有争议的
程序错误上 61
经验65:决不要利用程序错误跟踪系统
监视程序员的表现 61
经验66:决不要利用程序错误跟踪系统
监视测试员的表现 62
经验67:及时报告缺陷 62
经验68:永远不要假设明显的程序错误
已经写入报告 62
经验69:报告设计错误 63
经验70:看似极端的缺陷是潜在的
安全漏洞 64
经验71:使冷僻用例不冷僻 64
经验72:小缺陷也值得报告和修改 65
经验73:时刻明确严重等级和优先等级
之间的差别 66
经验74:失效是错误征兆,不是错误本身 66
经验75:针对看起来很小的代码错误
执行后续测试 67
经验76:永远都要报告不可重现的错误,
这样的错误可能是时间 68
经验77:不可重现程序错误是可重现的 68
经验78:注意错误报告的处理成本 69
经验79:特别处理与工具或环境有关的
程序错误 70
经验80:在报告原型或早期个人版本的
程序错误之前,要先征得同意 71
经验81:重复错误报告是能够自我解决
的问题 71
经验82:每个程序错误都需要单独
的报告 72
经验83:归纳行是错误报告中最重要
的部分 72
经验84:不要夸大程序错误 73
经验85:清楚地报告问题,但不要试图
解决问题 73
经验86:注意自己的语气。所批评的每个人
都会看到报告 74
经验87:使自己的报告具有可读性,即使
对象是劳累和暴躁的人 75
经验88:提高报告撰写技能 75
经验89:如果合适,使用市场开发或技术
支持数据 76
经验90:相互评审错误报告 76
经验91:与将阅读错误报告的
程序员见面 76
经验92:最好的方法可能是向程序员演示
所发现的程序错误 77
经验93:当程序员说问题已经解决时,
要检查是否真的没有问题了 77
经验94:尽快检验程序错误修改 77
经验95:如果修改出现问题,应与
程序员沟通 78
经验96:错误报告应该由测试员封存 78
经验97:不要坚持要求修改所有程序
错误,要量力而行 78
经验98:不要让延迟修改的程序
错误消失 79
经验99:测试惰性不能成为程序错误
修改推迟的原因 79
经验100:立即对程序错误延迟
决定上诉 80
经验101:如果决定据理力争,就一定
要赢! 80
第5章 测试自动化 81
经验102:加快开发过程,而不是试图在
测试上省钱 82
经验103:拓展测试领域,不要不断重复
相同的测试 83
经验104:根据自己的背景选择自动化
测试策略 84
经验105:不要强求100%的自动化 84
经验106:测试工具并不是策略 85
经验107:不要通过自动化使无序情况
更严重 85
经验108:不要把手工测试与自动化测试
等同起来 86
经验109:不要根据测试运行的频率来估
计测试的价值 87
经验110:自动化的回归测试发现少部分
程序错误 87
经验111:在自动化测试时考虑什么样的
程序错误没有发现 88
经验112:差的自动化测试的问题是没有
人注意 88
经验113:捕获回放失败 90
经验114:测试工具也有程序错误 91
经验115:用户界面变更 92
经验116:根据兼容性、熟悉程度和服务
选择GUI测试工具 92
经验117:自动回归测试消亡 93
经验118:测试自动化是一种软件
开发过程 94
经验119:测试自动化是一种重要投资 95
经验120:测试自动化项目需要程序设计、
测试和项目管理方面的技能 95
经验121:通过试点验证可行性 96
经验122:请测试员和程序员参与测试
自动化项目 96
经验123:设计自动化测试以推动评审 97
经验124:在自动化测试设计上不要
吝啬 97
经验125:避免在测试脚本中使用
复杂逻辑 98
经验126:不要只是为了避免重复编码而
构建代码库 98
经验127:数据驱动的自动化测试更便于
运行大量测试变种 98
经验128:关键词驱动的自动化测试更便于
非程序员创建测试 99
经验129:利用自动化手段生成测试输入 100
经验130:将测试生成与测试执行分开 101
经验131:使用标准脚本语言 101
经验132:利用编程接口自动化测试 102
经验133:鼓励开发单测试包 104
经验134:小心使用不理解测试的测试
自动化设计人员 104
经验135:避免使用不尊重测试的测试
自动化设计人员 105
经验136:可测试性往往是比测试自动化
更好的投资 106
经验137:可测试性是可视性和控制 106
经验138:尽早启动测试自动化 107
经验139:为集中式测试自动化小组
明确章程 108
经验140:测试自动化要立即见效 108
经验141:测试员拥有的测试工具会比所
意识到的多 109
第6章 测试文档 111
经验142:为了有效地应用解决方案,
需要清楚地理解问题 112
经验143:不要使用测试文档模板:除非
可以脱离模板,否则模板
就没有用 112
经验144:使用测试文档模板:模板能够
促进一致的沟通 113
经验145:使用IEEE标准829作为测试
文档 113
经验146:不要使用IEEE标准829 114
经验147:在决定要构建的产品之前先分析
需求,这一点既适用于软件也同
样适用于文档 116
经验148:为了分析测试文档需求,可采
用类似以下给出的问题清单
进行调查 117
经验149:用简短的语句归纳出核心
文档需求 120
第7章 与程序员交互 121
经验150:理解程序员怎样思考 121
经验151:获得程序员的信任 122
经验152:提供服务 123
经验153:测试员的正直和能力需要尊重 123
经验154:将关注点放在产品上,
而不是人上 124
经验155:程序员喜欢谈论自己的工作。
应该问他们问题 125
经验156:程序员乐于通过可测试性
提供帮助 126
第8章 管理测试项目 129
经验157:建设一种服务文化 129
经验158:不要尝试建立一种控制文化 130
经验159:要发挥耳目作用 130
经验160:测试经理管理的是提供测试服务
的子项目,不是开发项目 131
经验161:所有项目都会演变。管理良好的
项目能够很好地演变 131
经验162:总会有很晚的变更 132
经验163:项目涉及功能、可靠性、时间和
资金之间的折衷 132
经验164:让项目经理选择项目周期 133
经验165:瀑布周期把可靠性与时间
对立起来 134
经验166:进化周期把功能与时间
对立起来 135
经验167:愿意在开发初期将资源分配
给项目团队 135
经验168:合同驱动的开发不同于寻求
市场的开发 136
经验169:要求可测试性功能 137
经验170:协商版本开发进度计划 137
经验171:了解程序员在交付版本之前会
做什么(以及不会做什么) 138
经验172:为被测版本做好准备 138
经验173:有时测试员应该拒绝测试
某个版本 138
经验174:使用冒烟测试检验版本 139
经验175:有时正确的决策是停止测试,
暂停改错,并重新设计软件 139
经验176:根据实际使用的开发实践调整
自己的测试过程 140
经验177:“项目文档是一种有趣的幻想:
有用,但永远不足” 141
经验178:测试员除非要用,否则
不要索要 141
经验179:充分利用其他信息源 141
经验180:向项目经理指出配置管理问题 142
经验181:程序员就像龙卷风 143
经验182:好的测试计划便于后期变更 144
经验183:只要交付工作制品,就会
出现测试机会 145
经验184:做多少测试才算够?这方面还
没有通用的计算公式 145
经验185:“足够测试”意味着“有足够的
信息可供客户做出好决策” 145
经验186:不要只为两轮测试做出预算 146
经验187:为一组任务确定进度计划,估计
每个任务所需的时间 146
经验188:承担工作的人应该告诉测试经理
完成该任务需要多长时间 147
经验189:在测试员与开发人员之间没有
正确的比例 148
经验190:调整任务和不能胜任的人员 148
经验191:轮换测试员的测试对象 149
经验192:尽量成对测试 149
经验193:为项目指派一位问题查找高手 150
经验194:确定测试的阶段计划,特别是
探索式测试的阶段计划 150
经验195:分阶段测试 151
经验196:通过活动日志来反映对测试员
工作的干扰 151
经验197:定期状态报告是一种强
有力的工具 152
经验198:再也没有比副总裁掌握统计
数据更危险的了 153
经验199:要小心通过程序错误数度量
项目进展 154
经验200:使用的覆盖率度量越独立,
了解的信息越多 154
经验201:利用综合计分牌产生考虑
多个因素的状态报告 155
经验202:以下是周状态报告的推荐
结构 156
经验203:项目进展表是另一种展示
状态的有用方法 157
经验204:如果里程碑定义得很好,
里程碑报告很有用 158
经验205:不要签署批准产品的发布 159
经验206:不要签字承认产品经过测试
达到测试经理的满意程度 159
经验207:如果测试经理要编写产品发布
报告,应描述测试工作和结果,
而不是自己对该产品的看法 159
经验208:在产品最终发布报告中列出
没有排除的程序错误 159
经验209:有用的发布报告应列出批评者
可能指出的10个最糟糕的问题 160
第9章 测试小组的管理 161
经验210:平庸是一种保守期望 161
经验211:要把自己的员工当作执行经理 162
经验212:阅读自己员工完成的错误报告 163
经验213:像评估执行经理那样评估
测试员 163
经验214:如果测试经理确实想知道实际
情况,可与员工一起测试 164
经验215:不要指望别人能够高效处理
多个项目 165
经验216:积累自己员工的专业领域知识 165
经验217:积累自己员工相关技术方面的
专门知识 166
经验218:积极提高技能 166
经验219:浏览技术支持日志 166
经验220:帮助新测试员获得成功 167
经验221:让新测试员对照软件核对文档 167
经验222:通过正面测试使新测试员
熟悉产品 167
经验223:让测试新手在编写新错误报告
之前,先改写老的错误报告 168
经验224:让新测试员在测试新程序错误
之前,先重新测试老程序错误 168
经验225:不要派测试新手参加几乎完成
的项目 169
经验226:员工的士气是一种重要资产 169
经验227:测试经理不要让自己被滥用 170
经验228:不要随意让员工加班 171
经验229:不要让员工被滥用 172
经验230:创造培训机会 172
经验231:录用决策是最重要的决策 173
经验232:在招募期间利用承包人争
取回旋余地 173
经验233:谨慎把其他小组拒绝的人
吸收到测试小组中 173
经验234:对测试小组需要承担的任务,
以及完成这些任务所需的技能
做出规划 174
经验235:测试团队成员要有不同背景 174
经验236:录用其他渠道的应聘者 175
经验237:根据大家意见决定录用 175
经验238:录用热爱自己工作的人 175
经验239:录用正直的人 176
经验240:在面谈时,让应聘者展示期望
有的技能 176
经验241:在面谈时,请应聘者通过非正
式能力测验展示其在工作中
能够运用的技能 176
经验242:在录用时,要求应聘者提供
工作样本 177
经验243:一旦拿定主意就迅速录用 177
经验244:要将录用承诺形成文字,
并遵守诺言 177
第10章 软件测试职业发展 179
经验245:确定职业发展方向并不懈努力 179
经验246:测试员的收入可以超过程序员
的收入 181
经验247:可大胆改变职业发展方向
并追求其他目标 181
经验248:不管选择走哪条路,都要
积极追求 182
经验249:超出软件测试拓展自己的
职业发展方向 182
经验250:超出公司拓展自己的
职业发展方向 183
经验251:参加会议是为了讨论 183
经验252:很多公司的问题并不比本公司
的问题少 184
经验253:如果不喜欢自己的公司,就再
找一份不同的工作 184
经验254:为寻找新工作做好准备 184
经验255:积累并维护希望加入的公司
的名单 185
经验256:积累材料 185
经验257:把简历当作推销工具 186
经验258:找一位内部推荐人 187
经验259:搜集薪金数据 187
经验260:如果是根据招聘广告应聘,
应根据广告要求调整自己
的申请 187
经验261:充分利用面谈机会 187
经验262:了解准备应聘的招聘公司 188
经验263:在应聘时询问问题 188
经验264:就自己的工作岗位进行谈判 190
经验265:留意人力资源部 191
经验266:学习Perl语言 191
经验267:学习Java或C++ 192
经验268:下载测试工具的演示版
并试运行 192
经验269:提高自己的写作技巧 192
经验270:提高自己的公众讲话技巧 193
经验271:考虑通过认证 193
经验272:不要幻想只需两个星期就能够
得到黑带柔道段位 194
经验273:有关软件工程师认可制度的
警告 194
第11章 计划测试策略 199
经验274:有关测试策略要问的三个基本问题
是“为什么担心?”、“谁关心?”、
“测试多少?” 199
经验275:有很多种可能的测试策略 199
经验276:实际测试计划是指导测试过程
的一套想法 200
经验277:所设计的测试计划要符合
自己的具体情况 201
经验278:利用测试计划描述在测试策略、
保障条件和工作产品上所做的
选择 202
经验279:不要让保障条件和工作产品
影响实现测试策略 202
经验280:如何利用测试用例 202
经验281:测试策略要比测试用例重要 203
经验282:测试策略要解释测试 203
经验283:运用多样化的折衷手段 204
经验284:充分利用强有力测试策略的
原始材料 204
经验285:项目的初始测试策略总是错的 205
经验286:在项目的每个阶段,可自问
“我现在可以测试什么,能够
怎样测试”? 205
经验287:根据产品的成熟度确定
测试策略 206
经验288:利用测试分级简化测试
复杂性的讨论 207
经验289:测试灰盒 208
经验290:在重新利用测试材料时,
不要迷信以前的东西 208
经验291:两个测试员测试同样的内容
也许并不是重复劳动 209
经验292:设计测试策略时既要考虑产品
风险,也要考虑产品要素 209
经验293:把测试周期看作是测试
过程的韵律 210
附录:软件测试的语境驱动方法 221
参考文献 225
编辑推荐
作者结合自己丰富的软件测试实验经验,大胆地对软件测试界很多人多年来鼓吹的所谓实践、关键活动、甚至国际标准进行了深刻的反思,令人信服地提出了自己的观点,对一些关键问题做了哲学思考,内容涉及与软件测试有关的各个方面,很适合有一定实际经验的软件测试、项目管理、软件开发、软件工程等方面的工程技术人员阅读。
提出软件工程知识体系(Software Engineering Body of Knowledge,SWEBOK)的目标是为颁发政府执照、规范软件工程师以及开设软件工程大学课程提供一种恰当的基础。SWEBOK文件声称以大部分人的意见为基础,希望这样的文件能够包容这个领域已经积累的知识和智慧(已经积累的经验教训)。 有关探索式测试,SWEBOK只有如下的叙述: 也许,最广泛采用的手段还仍然是专门定制的测试,即依靠测试员的技能和直觉(“探索”测试),依靠测试员在类似工程上积累的经验所导出的测试。虽然人们建议采用更系统化的方法,但是专门定制测试方法对于确定形式化手段不能轻易“捕获”的特殊测试用例还是很有用的(但是只有当这些测试员都是真正专家的时候)。此外还必须指出,这种手段的有效性会有大幅度的变动(SWEBOK 0.95,2001,第5~9页)。 SWEBOK怎样看待这种在测试领域中被最广泛地采用的手段呢?它丝毫没有涉及这种手段的使用方法,只是说应该由真正专家进行探索,建议使用其他方法,认为其他形式化的手段会使有效性更加稳定。 哈! 我们并不打算向读者正式描述反映测试领域大多数人观点的所谓知识体系,但是我们确实要大量谈论这个领域中最常见的实践。本书不是要排斥探索式测试,而是要站在使用探索法(以及很多其他方法)在现实条件下达到最佳测试效果的人员立场上,来描述测试应该是怎样的。 欢迎阅读本书 本书是我们实际软件开发经验的总结。我们几个人加起来已经有了50~60年的开发经验(当然这要看怎样计算了),其间,我们既看到了大量出色的工作,也看到了大量不那么出色的工作。 本书并不打算讨论软件工程在更有规则、更受控的环境中怎样运用,而是要讨论我们所要面对的现实世界。 在我们的世界中,软件开发团队常常要在时间很紧张的情况下工作,要在探索该做什么的同时,探索该怎样做。所使用的方法,有时比较正尸有时就不那么正式。这取决于千差万别的实际环境。 我们采用的是软件测试中的语境驱动法(context-driven approach)。我们认为在某些环境中很有效的方法,在另外一些环境中就没有效果。我们不谈论最佳实践,而是谈论最适合当前特定环境的实践。本书的最后要讨论语境驱动法,但是从本质上看,语境驱动的测试要从“谁”、“什么时候”、“哪里”、“为什么”和“如果这样会出现什么”五个方面,来研究测试的“内涵”(手段、工具、策略等)。 我们的目标是将所选择的实践与当前具体环境匹配起来,以取得理想的测试效果。我们不认为通过接管项目,或通过跺着脚告诉项目经理(或执行经理)“真正的专业人士”该怎样管理项目,就能够取得理想的测试效果;不认为通过强迫程序员,或通过奉承他们,就能够取得理想的测试效果;不认为通过填写数以千计的小卡片(或对应的电子记录),或通过在没有必要的过程上浪费其他所有人的时间,就能够干好测试工作。 我们并没有严格的条条框框,也没有理想化的有关测试的灵丹妙药。 这种灵丹妙药根本就不存在! 我们认为好的测试包括要求具有很高技能的技术工作(搜索缺陷)和准确、有说服力的沟通。 技艺高超的搜索毕竟也是一种探索。有无限多的测试工作要做,但是只有少量时间,只能完成其中很小一部分测试。要完成的每个测试,要写的每份文档,要参加的每个会议,都要占用可能会发现关键缺陷的测试时间。面对这种限制,我们要优化测试过程,以便充分利用不断积累的产品及产品市场、产品应用和产品弱点等方面的知识。我们今天所学的知识,会在明天更好的测试中体现出来。即使: @产品被相当完备地描述。 @规格说明准确地反映了需求文档。 @需求文档准确地表达了产品项目相关人员的实际需要。 (读者是否确实见过具备所有这些条件的项目),我们在测试这样的产品时,仍然会学到很多这种产品的测试方法。具体地说,当发现错误时,我们知道这组程序员会犯怎样的错误。规格说明告诉我们,程序如果编写正确,应该怎样完成功能,但是不会告诉我们预期会出现的错误,也不会说明应该如何设计测试以发现这些错误。对于这件关键工作,我们要从头至尾地在一个项目中逐渐改进,一个项目一个项目地逐渐改进。 不管外界怎么看,只要我们在用我们的头脑进行测试,我们的工作就是探索。 本书的读者对象 本书针对测试软件和管理测试员的所有读者,针对在其软件开发项目中要与测试员打交道的所有读者。 我们主要针对的读者应该已经从事了几年的测试工作,可能最近被提升到管理岗位。我们希望这样的读者能够从本书找出大量与自己的经历一致的内容,从而对我们的经验能够有新的理解,能够找出可以向自己的经理转述的经验,能够很喜欢我们的一些阐述,以至于将我们所说的话放大贴在办公室中的显著位置。读者也许会对我们的至少一句话反应如此强烈,以至于将它贴在自己的飞镖靶盘上。(我们要启发读者的思想,而不只是想让读者赞同我们的观点。) 刚开始从事测试工作的读者(以及正在申请从事测试工作的读者)不会有很多机会感觉到已经经历过我们所谈论的问题。对于这样的读者,本书可以提供一些早期认识和忠告,对测试员要面临的问题有一个很好的体验。 提示 如果读者对测试绝对是新手,正在找一本书来研究,以便为一次工作面试做准备,那么本书是不合适的。如果这是你能够找到的惟一一本书,那么请仔细研究第3章和第10章中的内容。如果有多本书可以挑选,我们建议阅读《测试计算机软件》(Testing Computer Software)(Kaner等,1993)的前5章。 对于必须与测试员打交道的程序员、项目经理和执行经理,本书会有助于这些人正确期望测试小组的工作。我们希望本书有助于这些读者在不赞同测试小组的政策,或感到他们没有明智地利用自己的时间时,能够评估和讨论对测试小组的意见。 本含的内容 多年以来,我们学会了很多有用的实践和很有帮助的问题评估方法。我们得出结论的基础是经验。本书归纳了我们的很多经验,将这些经验组织为接近300个短小、可读性好的经验系列描述。 选择这些经验时,我们遵循了以下一些准则: @经验应该是有用的,或有自己的观点。 @经验应该通过90分钟独立思考的考验。如果是什么人漫不经心地花90分钟就可以提出观点的话,那么这样的经验不值得收入本书。 @经验必须基于我们的实际经历。我们中至少有一人(最好是三人)曾经成功地运用过我们给出的建议;我们中至少有两人在尝试我们所批判的实践时,遭受过挫折。(请注意:有时我们会根据自己不同的经历,分别得出不同的结论。偶尔读者会发现我们决定提供两种观点,而不是一种。即使只提供一种观点,读者也不能就认为我们三人都完全赞同这种观点。当出现不同意见时,我们三人很可能会服从对该问题有最多经验的一两个人。) @经验应该根据我们同事的经历进行调整。通过“测试自动化Los Altos研讨会”、“软件测试经理圆桌协会”、“启发式与探索测试技术研讨会”、“测试自动化Austin研讨会”、“软件测试模式研讨会”、“基于模型的自动化测试研讨会”、“系统有效性管理集团”等几十个软件测试会议,以及不太正式的同级相互培训(例如在Crested Butte举行的一年一度的顾问营),我们收集了详细的经验报告。 @经验应该简短,切中有害,但又易于理解。 @经验可以长一些,但是只限于解释如何做,或提供有用的工具。很长的解释和详细背景信息不适合本书。 @经验应该是自完备的,读者可以从书中任何地方开始阅读。 @经验合在一起,应该使读者对我们怎样做测试以及考虑测试,能有一定的认识。 本书不包含的内容 本书并不是软件测试的综合指南。 本书并不是永远都正确的经验汇集。这些经验是我们自己的经验,依据的是我们的经历。我们相信这些经验可以广泛运用,但是有些在我们的经历中被证明是很有用、很重要的经验,可能并不适用于读者。读者要自己进行判断。应该指出,本书适用性的一个具体限制因素是,我们更多从事的是面向大众市场的软件开发,以及以具体合同为基础的软件开发,自用软件开发的经验较少。我们在开发关键软件和嵌入式软件方面的经验也不多。 本书并不是最佳实践的汇集。事实上,我们并不相信“最佳实践”。我们相信在一定环境中,有些实践比另外一些更有用。我们注意到有很多东西被作为最佳实践,不加批判地向并不适合的场合推广(并应用)。 如何使用本书 本书的结构设计旨在便于读者浏览或有选择性地阅读,而不是从头读到尾。有时(我们希望)读者会发现“金块”,发现对自己非常有吸引力的思想。我们建议读者不要不加批判地运用这些思想。(我们的经验并不是最佳实践。)相反,我们强烈希望读者能够评估这些经验对于自己实际环境的适合性。 以下是一些有助于读者进行评估的问题: @在什么条件下,自己的公司运用这个经验会收到效果? @在什么条件下,运用这个经验不会收到效果? @你认识什么人以前尝试过类似的经验吗?效果怎样?为什么会有这种结果?你当前的项目与那个人的项目有哪些不同?这些差别重要吗? @通过尝试运用这个经验,谁最有可能受益? @通过尝试运用这个经验,谁的利益最有可能受到影响? @通过尝试运用这个经验,你可以学到什么? @尝试任何新东西都会增加风险。通过试点,即不是投入太多地尝试该经验,或在低风险环境中研究该经验运用于自己的公司有多大作用,这有意义吗?在公司中引入试点,对当前项目(或对其服务)尝试该经验是否可行? @你怎么知道运用该经验是否有作用?如果有作用,你怎么知道之所以取得成功,更多的是因为该经验的内在价值,而不是靠尝试该思想时的最初热情?如果继续运用该经验,这种成功会持续下去吗? @作为尝试运用该经验的结果,对你会出现什么最好和最坏的事情? @会对其他项目相关人员,例如一个用户或开发团队的其他成员,出现什么最好和最坏的事情? @如果公司中有一位关键人物不赞同你要尝试的经验会出现什么情况?你怎样克服他们的反对,并向他们推销要尝试的经验? 我们希望本书能够引出不同意见和争论 本书显示出我蜜点和其他观点之间的鲜明对比。我们认为这种对比有助于引起在测试领域展开本来就应该展开的论战。我们认为在软件测试或作为整体的软件工程中,还没有一种已经被普遍接受的范型,这是为什么我们不赞同通过标准化一种知识体来推动政府颁发执照、规范软件工程师的原因。根据我们的经验,对于要推行的最佳方法,还有一些有显著不同的有说服力的观点。 我们要非常明确地提出这些观点。我们经常对我们非常尊重的人们的工作提出批评。在很多情况下,我们所批评的工作是由我们很好的朋友完成的。不要把对某种思想的批判,错误地当作对该思想的支持者或提出者个人的攻击。 我们认为通过直接比较、对比这些观点,会使整个测试领域受益。对于测试领域来说,重要的是对我们的方法展开讨论。我们倡导进一步发展每一个主要方法范畴内的实践,最终我们都会认识到不同方法最适用的实际环境,到那时才会出现百花齐放的局面。 一些词汇的解释 以下是本书用到的一些关键词及其在本书中的含义: 我们。作者。 你们。读者。 缺陷(fault)是程序实现或设计中的错误、失误。 错误(error)在本书中就是缺陷。 失效(failure)是程序的错误行为,由包含缺陷的程序产生。 失效在一定条件(condition)下发生。例如,当程序试图进行除数是0的计算时,就会出现崩溃。在这种情况下,缺陷是允许被0除的代码,失效是崩溃。但是只有在除法中的一个关键变量取值为0时,才会看到失效。那个变量取值为0是失效发生必须满足的关键条件。 征兆(symptom)与失效类似,但是不那么严重。例如,如果程序存在内存泄漏,则程序在给出内存耗尽错误消息之前很久就开始逐渐慢下来。这种降速就是不能直接看得到的内部问题(内存短缺)的征兆。 程序错误(bug)是含义很广的词,可以指任何软件问题。报告程序错误的人描述的可能是缺陷、失效或使程序对项目相关人员的价值减弱的局限性。 如果把质量(quality)定义为对某人的价值(Weinberg,1998,2.i.),那么错误报告(bug report)就是一种陈述,说明有人认为由于被描述为程序错误的东西使该产品的价值降低。 过失(defect)有一种法律指责含义,表示“产品肯定出现了问题”。有些公司不允许这样的词出现在错误报告或与程序错误有关的备忘录中。 有些公司喜欢用异常(anomaly)、问题(problem、issue)替代程序错误。 当报告一个程序错误之后,程序员(或“变更控制委员会”)会将其更正,或决定不更正。他们会把这个程序错误标识为已解决(resolved)(已更正、推迟、不可重现、设计如此等)。 黑盒测试(black box testing)。通过向程序送入输入,并检查其输出,来测试程序的外部行为。在一般的黑盒测试中,测试员没有代码内部知识,但是更熟悉显式和隐式产品需求,例如使用程序的方尸有可能输入程序的数据类型,与软件试图解决或帮助解决的问题有关的任何管理问题,以及软件将使用的硬件和软件环境。 行为测试(behavioral testing)。测试程序的外部行为,类似黑盒测试,但是尽可能利用测试员能够得到并与测试有关的程序内部知识。 功能测试(functional testing)。黑盒或行为测试。 白盒或玻璃盒测试(white box或glass box testing)。利用程序内部知识的测试。 结构测试(structural testing)。关注程序内部结构的白盒测试,例如从一个决策或行动到下一个决策或行动的控制流。 冒烟测试或版本确认测试(smoke testing或build verification testing)。用于软件新版本的标准测试包。这种测试检查版本基本功能是否稳定,或检查是否遗漏关键功能,是否满足基本要求。如果版本没有通过这些测试,则不再进行进一步的测试,而是继续测试老版本,或等待新版本。 项目经理(project manager)。负责按时在预算限度内交付恰当产品的人。有些公司将上述工作划分给程序经理和开发经理完成。 最大整数(MaxInt)。用户平台或程序员开发语言可以使用的最大整数。大于最大整数的数不能作为整数存储。 客户(client)。公司要满足其利益要求的人。在一定程度上可能包括与项目有关的所有人,以及产品的最终用户。
0
热门设计服务