本书面向软件质量管理人员,分别从理论、实践、管理的角度介绍了软件测试与质量管理的精华与要点。在理论部分,介绍了软件开发流程、软件错误的种类、测试配置、问题跟踪系统与软件测试流程。在实践部分,介绍了测试用例设计与实际测试示范,并讲解了如何撰写Test Plan、Test Case、FAQ、相容测试报告、性能使用报告和测试报告,提供了各类文件的范本与示范程序,方便读者直接把握实践的要点。在管理部分,介绍了项目管理的技巧、QA人员的角色与责任、衡量时间的技术与方法,以及其他管理中应该注意的事项。随书光盘内容为书中的范例文件。
本书的主要读者对象是企业软件质量管理人员和软件测试人员,以及高校软件工程专业相关师生。本书也可以作为软件学院的教学参考书。
第1篇 理 论 篇
第1章 质量管理 3
1.1 软件公司生存三要素 4
1.2 质量管理简介与模式 6
1.2.1 顾客导向模式 6
1.2.2 标准衡量模式 7
1.2.3 全面质量管理 7
1.2.4 选择质量管理模式的考虑方向 7
1.3 被遗弃的软件质量管理 9
1.4 软件质量管理的重要性 10
1.4.1 降低维护成本 10
1.4.2 法律上的要求 11
1.4.3 市场竞争 12
1.4.4 质量标准化趋势 13
1.5 软件质量标准化 13
1.5.1 CMM 14
1.5.2 ISO 9000 14
1.5.3 IEEE 730 15
1.6 实施质量管理对软件公司所造成的影响 15
1.6.1 运作模式的影响 16
1.6.2 员工培训 16
1.6.3 员工态度 16
1.7 小结 16
第2章 软件生命周期简介 17
2.1 软件3 N 18
2.2 软件开发生命周期模型
(Software Development Life Cycle Models) 19
2.2.1 建构修改循环模型(Build and Fix Model) 20
2.2.2 瀑布式开发模型(Waterfall Model) 21
2.2.3 增量模型(Incremental Model) 22
2.2.4 V形开发模型(V Shape Model) 22
2.2.5 快速原型模型(Rapid Prototype Model) 23
2.2.6 螺旋型开发模型(Spiral Model) 24
2.2.7 极限型开发模型(Extreme Programming Model) 26
2.2.8 如何组合使用 27
2.3 现实环境的软件开发模型 28
2.4 小结 30
第3章 软件质量管理 31
3.1 质量控制(QC) 32
3.1.1 测试(Testing) 32
3.1.2 跟踪(Tracking) 32
3.1.3 监督(Monitoring) 33
3.2 质量保证(QA) 33
3.3 软件质量管理流程 36
3.4 小结 38
第4章 软件测试 39
4.1 测试形态(Testing Types) 40
4.1.1 建构性测试(Construction Testing) 40
4.1.2 系统测试(System Testing) 42
4.1.3 专项测试(Special Testing) 43
4.2 测试技术 (Testing Techniques) 45
4.2.1 准备工作(Preparation) 46
4.2.2 执行方式(Execution) 46
4.3 测试方法(Approach) 47
4.3.1 白盒测试(White-Box Testing) 48
4.3.2 黑盒测试(Black-Box Testing) 49
4.4 小结 49
第5章 软件缺陷的种类 51
5.1 Bug的历史 52
5.2 造成软件缺陷的原因 53
5.2.1 程序编写错误 53
5.2.2 编写程序未按照规定 54
5.2.3 软件越来越复杂 56
5.2.4 开发人员的态度 57
5.2.5 测试人员的经验与技巧不足 57
5.2.6 沟通上的问题 57
5.2.7 需求变更太过频繁 58
5.2.8 进度上的压力 58
5.2.9 管理上的缺失 59
5.3 缺陷的种类 59
5.3.1 功能不正常 60
5.3.2 难以使用的软件 60
5.3.3 未做良好规划的软件 61
5.3.4 所提供的功能不足 61
5.3.5 与使用者的互动 62
5.3.6 使用性能太差 62
5.3.7 未做好错误处理 63
5.3.8 边界错误 63
5.3.9 计算错误 64
5.3.10 使用一段时间所产生的错误 65
5.3.11 控制流程的错误 65
5.3.12 在压力之下所产生的错误 66
5.3.13 不同硬件设备所产生的错误 66
5.3.14 版本控制不良所产生的错误 67
5.3.15 文件的错误 67
5.4 小结 68
第2篇 实 战 篇
第6章 问题跟踪系统 71
6.1 实施目的 72
6.1.1 质量无法控制 72
6.1.2 问题无法量化 72
6.1.3 重复问题接连产生 73
6.1.4 解决问题的知识无法保留 74
6.2 问题的生命周期(Bug Lifecycle) 74
6.3 设置问题的等级(Bug Priority and Bug Severity) 76
6.4 系统的基本功能(Basic Functions) 78
6.4.1 功能 78
6.4.2 字段 78
6.5 如何运用问题跟踪系统 81
6.5.1 基本使用规则 81
6.5.2 测试人员使用规则 82
6.5.3 开发人员使用规则 83
6.5.4 管理人员使用规则 83
6.5.5 运用层面 84
6.6 购买还是自行建置 86
6.6.1 预算 86
6.6.2 组织结构 87
6.6.3 教育训练 87
6.6.4 管理 87
6.6.5 维护 87
6.6.6 输出文件 88
6.6.7 系统安全 88
6.6.8 系统可扩展性 88
6.7 小结 88
第7章 配置测试环境 93
7.1 测试环境的快速变迁 94
7.2 配置测试环境的困难点 95
7.2.1 资源不足 95
7.2.2 操作系统的更新 95
7.2.3 硬设备的更新 96
7.2.4 新的软件不断地推出 96
7.2.5 客户端复杂的使用环境 97
7.3 如何配置测试环境 97
7.3.1 环境设立建议 98
7.3.2 硬件规格建议 99
7.3.3 安装软件建议 100
7.3.4 操作环境建议 101
7.3.5 专业管理人员 102
7.4 测试环境配置需求清单 103
7.5 测试环境与外界真实环境 105
7.6 个案讨论 106
第8章 测试用例设计 111
8.1 何谓测试用例 112
8.2 为什么软件测试需要测试用例 113
8.3 测试用例的种类 114
8.3.1 边界测试用例(Boundary Test) 114
8.3.2 功能测试用例(Functional Test) 118
8.3.3 设置测试用例(Configuration Test) 125
8.3.4 状态测试用例(Stage Test) 129
8.3.5 压力测试用例(Stress Test) 133
8.3.6 错误处理测试用例(Error Handling Test) 135
8.3.7 回归测试用例(Regression Test) 143
8.3.8 其他测试用例 144
8.4 测试用例设计技巧 150
8.4.1 设计方法 150
8.4.2 设计技巧 152
8.4.3 所需工具 153
8.5 小结 153
第9章 软件测试工具 155
9.1 使用软件测试工具的目的 156
9.1.1 帮助测试寻找问题 156
9.1.2 协助问题的诊断 157
9.1.3 节省测试时间 158
9.2 测试工具的种类 158
9.2.1 侦错用途 159
9.2.2 一般用途 159
9.2.3 自动化用途 160
9.2.4 专项目的用途 160
9.2.5 以产品功能测试为主的用途 161
9.3 Compuware NuMega侦错软件 161
9.3.1 BoundsChecker 162
9.3.2 CodeReview 162
9.3.3 SmartCheck 163
9.3.4 JCheck 164
9.3.5 SoftICE 165
9.3.6 TrueTime 165
9.3.7 TrueCoverage 166
9.3.8 FailSafe 166
9.4 GUI接口自动化测试 167
9.4.1 Visual Test 168
9.4.2 QA Wizard 171
9.5 Network Sniffer Pro 176
9.6 Sysinternals所提供的工具 183
9.6.1 Filemon 184
9.6.2 Regmon 186
9.6.3 TCPView 187
9.6.4 NthandelEx 188
9.6.5 PsTools 189
9.7 其他测试工具 190
9.7.1 Resource Kit 190
9.7.2 市售专业测试工具 191
9.7.3 自行开发的测试软件 192
9.8 小结 193
第10章 测试计划 195
10.1 编写测试计划的目的 196
10.1.1 帮助软件测试进行得更顺利 197
10.1.2 明确测试方向、促进彼此沟通 198
10.1.3 让软件测试更易于管理 198
10.2 计划的种类 199
10.3 计划的纲要 200
10.4 STP的范例 202
10.5 DTP的范例 202
10.6 小结 203
第11章 其他文件准备 205
11.1 软件开发所应准备的文件类别 206
11.1.1 销售用途 206
11.1.2 设计用途 207
11.1.3 产品用途 208
11.1.4 客服用途 210
11.1.5 测试用途 211
11.2 准备文件的目的 212
11.3 如何准备文件 214
11.4 测试人员所应准备的文件及模板 215
11.4.1 Bug Report用例 216
11.4.2 FAQ用例 217
11.4.3 Test Script 用例 217
11.4.4 Performance Test Report用例 218
11.4.5 Compatibility Test Report用例 218
11.5 小结 218
第12章 I18N的介绍与L10N的测试 219
12.1 什么是I18N与L10N 220
12.2 I18N与L10N的重要性 221
12.3 多国语言的问题 223
12.3.1 Unicode与DBCS的问题 223
12.3.2 地区性数值设置(Local Setting)
与字体设置(Font Setting) 224
12.3.3 扩展字符(Extended Characters) 225
12.3.4 断字(Truncation)问题 226
12.3.5 执行中所组成的字符串
(Run-Time Composite Strings) 227
12.3.6 使用对象的问题 229
12.3.7 图形内容的问题 230
12.4 如何避免问题发生 230
12.5 如何实施L10N 232
12.6 如何进行L10N的测试 233
12.6.1 接口测试(Pseudo UI) 233
12.6.2 先行测试(Pilot Project) 234
12.7 小结 235
第3篇 管 理 篇
第13章 项目管理的技巧 239
13.1 经验的积累 240
13.1.1 后期诊断分析 241
13.1.2 前置问题列表 241
13.1.3 管理事务的四大项目 242
13.2 工作分割和单位化 243
13.2.1 分割的模式 243
13.2.2 分割的方法 245
13.3 分析工具 246
13.3.1 REDC 246
13.3.2 SWOT 248
13.4 建立检查单(Check List) 251
13.5 小结 252
第14章 QA人员的角色与责任 253
14.1 组织结构介绍 254
14.1.1 功能式组织结构 256
14.1.2 矩阵式组织结构 257
14.1.3 项目式组织结构 258
14.2 软件开发人员的组织结构 259
14.3 QA人员的组织结构 263
14.3.1 以产品或项目划分 263
14.3.2 以专业项目划分 263
14.3.3 以产品划分的建议事项 264
14.4 QA人员的角色扮演 264
14.4.1 QA Engineer 265
14.4.2 QA Lead 266
14.4.3 QA Manager 267
14.5 小结 268
第15章 衡量进度的技巧与方法 269
15.1 安排进度的基本观念 270
15.1.1 进度安排三要项 271
15.1.2 进度安排三重点 271
15.2 Gantt Chart(甘特图) 272
15.2.1 依存关系(Dependency) 273
15.3 PERT Chart与CPM的运用 275
15.4 COCOMO开发进度估算法 278
15.4.1 模块等级 279
15.4.2 程序代码的行数与Effort 279
15.4.3 产品分类表 279
15.4.4 计算公式表 280
15.5 EQF预估进度准确度 282
15.6 软件缺陷比率的估算 285
15.6.1 缺陷数量估算法 285
15.6.2 平均值估算法 286
15.6.3 缺陷密度估算法 286
15.6.4 缺陷群组预测法 287
15.7 小结 288
第16章 其他管理要项 289
16.1 软件缺陷反馈的漏洞 290
16.2 F4产品稳定状态图 293
16.3 文件管理 296
16.3.1 文件管理的目的 296
16.3.2 文件管理系统的管理方法 297
16.4 其他管理项目建议 298
16.5 小结 300
附录 光盘内容说明 301
一般人对软件业的刻板印象(Stereotype)就如同对广告业一样。 当笔者在广告公司任职时,经常有人问笔者:“你在广告公司上班,那你一定很会画图了?”可是笔者对绘图却是一窍不通。当笔者在软件公司任职时,同样也有人问笔者:“你在软件公司上班,那你一定很会写程序了?”之所以会出现如此的误解,除了对这两个行业不了解之外,最主要的原因是刻板印象所导致的。软件产品是由许多的专业人员在共同努力下完成的,而编写程序只是开发软件流程中的一个重要环节而已。
就软件业而言,一个软件之所以能够成功,必须仰赖多方面的配合,这些配合项目除了要达到产品需求、符合市场预期、功能优于竞争对手、产品服务令人满意之外,最重要的是软件质量必须能够赢得使用者的信任。
以中国台湾地区软件专业人员分布趋势来看,软件开发人员是占全体人数最多的部分。 可是在软件质量与开发管理这两方面,并没有得到相应的重视。这也是为什幺么大部分在台湾地区开发的软件,无法行销全球的主要原因之一。
对于全球行销而言,产品质量是没有妥协余地的。对软件质量来说,软件测试是提高软件质量最实际、最彻底的方法之一。至于软件测试是什么?相信每个人对它的解释都会有所不同。不管你对它有多少认识,软件测试与软件质量这两者之间都存在着极大的关联性。而这本书的内容,绝对可以颠覆你对软件测试所拥有的刻板印象。
笔者相当感谢在趋势科技任职的这几年中,公司提供了许多的机会使笔者可以与世界各地优秀的工程师合作,共同开发属于世界级的软件产品。虽然过程相当艰辛,却让笔者在软件业中能够以更宏观的思考角度,来看待所有的软件质量与软件规划。
撰写这本书的目的,是为了能够让有志于从事软件行业的人员了解软件质量的重要性,以及实施软件质量管理的方法。为了能对软件测试与质量管理做一个深入浅出的介绍,本书共分3篇,这3篇分别为:理论篇、实战篇和管理篇。理论篇是让读者对质量管理能够有一个基础的概念与认识。实战篇是为了方便读者在今后的软件测试过程中,能够以系统化的方式来进行软件测试。而最后的管理篇是希望管理人员能够采用更科学的管理方法,来进行软件质量管理。
这里除了要感谢趋势科技对笔者的栽培之外,还要感谢笔者所辅导过的软件公司所提供的机会。
谢谢父母多年来对我的鼓励与期望,特别是当我处于困境时,向我伸出援手,这是笔者永远无法忘怀的。
最后要感谢的是我心爱的妻子,没有你的体谅与鼓励,这本书是无法完成的。另外要感谢我尚未出生的小宝贝,我真的迫不及待地等着迎接你的到来。
瑜,这本书是给你的。
许育诚
Steven Hsu
于新店深山内
stevenhs@ms13.hinet.net
软件工程是一类工程,而工程是将理论和知识应用于实践的科学。就软件工程而言,它借鉴了传统工程的原则和方法,以求高效地开发高质量的软件,其中应用了计算机科学、数学和管理科学。计算机科学和数学用于构造模型与算法,工程科学用于制定规范、设计泛型、评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理。
根据调查,中国的现状几乎和美国10多年前的情况一样,软件开发过程没有明确规定,文档不完整,也不规范,软件项目的成功往往归功于软件开发组的一些杰出个人或小组的努力。这种依赖于个别人员的成功并不能为全组织的软件生产率和质量的提高奠定有效的基础。只有通过建立全组织的过程改善,采用严格的软件工程方法和管理,并且坚持不懈地付诸实践,才能取得全组织的软件过程能力的不断提高。而产生国内这种现状很重要的原因之一,就是国内缺乏软件工程方面优秀的图书。很多国外的软件工程方面的书进入中国以后,在应用上与中国实际国情还有一定的差距。鉴于上述现状,电子工业出版社飞思科技产品研发中心经过充分的市场调查,数次与国内外软件工程专家交流、座谈,精心推出了“软件工程研究院”系列图书。
本丛书由电子工业出版社飞思科技产品研发中心组织国内外软件工程专家精心编写,是一套陪伴中国软件人才成长的高质量图书。“软件工程研究院”具有如下特色:
内容清晰、体系完整,包括软件工程方法学理论、团队与项目管理、UML、软件框架、软件过程、软件测试、需求工程、软件质量、软件文档、面向对象技术等方面。
风格严谨,而表达方式不拘一格。
理论结合实际,为企业提供最具有实效的指导。
权威经典。引进国外专著,或由国内学术界和企业界最知名的专家学者编写。
丛书读者对象主要是软件学院的高年级学生、企业的中高级软件方面人才。
本丛书首次向读者献上的一份厚礼就是美籍华人阎宏的《Java与模式》一书。该书作者阎宏博士,凭借深厚的自然科学和中国传统哲学功底,以及多年来对模式理论的研究,通过这本书向读者讲解软件设计模式的理论,它的简要历史,以及它与中国道家文化的渊源。这是一本实用的教材和手册,同时又是一本散发着思想火花的作品。
随着“软件工程研究院”品牌在国内的影响不断扩大,越来越多的优秀作者汇聚到飞思旗下。后期我们还陆续推出了由国内软件工程专家林锐博士多年从事软件工程工作经验的结晶——《CMMI 3级软件过程改进方法与规范》、《高质量程序设计指南——C++/C语言》、《高质量Java程序设计》、《软件工程与项目管理解析》等高质量的图书,共同奏响属于中国软件工程的优美乐章。同时,我们希望这乐曲能为中国软件工程的发展描绘出一幅欣欣向荣的蓝图。
本书由电子工业出版社计算机研发部策划引进并组织改编,王慧文老师负责改编工作,张克东老师审校,其他参与人员还有白洁、孙海英、夏鹏等人,在此一并表示感谢。
我们的努力需要您的支持。为了使我们的脚步更坚实、使我们的队伍永葆活力和创造力,我们期待着您能为我们的前进贡献出您的意见和建议。同时,我们也在等待着您的加入。
我们的联系方式如下:
咨询电话:(010)68134545 68131648
答疑邮件:support@fecit.com.cn
服务网址:http://www.fecit.com.cn http://www.fecit.net
通用网址:计算机图书、FECIT、飞思教育、飞思科技、飞思
电子工业出版社计算机研发部
飞思科技产品研发中心