软件测试:一个软件工艺师的方法(原书第4版)

软件测试:一个软件工艺师的方法(原书第4版) pdf epub mobi txt 电子书 下载 2025

[美] 保罗 C.乔根森(Paul C.Jorgensen) 著,李海峰 译
图书标签:
  • 软件测试
  • 测试方法
  • 软件工程
  • 质量保证
  • 软件工艺
  • 测试技术
  • 黑盒测试
  • 白盒测试
  • 自动化测试
  • 测试管理
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 机械工业出版社
ISBN:9787111581314
版次:1
商品编码:12219963
品牌:机工出版
包装:平装
丛书名: 计算机科学丛书
开本:16开
出版时间:2017-11-01
用纸:胶版纸
页数:324

具体描述

内容简介

本书是经典的软件测试教材,也可作为软件测试者、开发者和工程师的参考书。书中对基础知识、方法提供了系统的综合阐述,既涉及基于模型的开发,又介绍了测试驱动的开发,做到了理论与实践的完美结合,反映了软件标准和开发的新进展和变化。

作者简介

paul c.jorgensen博士,在其职业生涯的前20年中,主要从事电话交换系统的开发、支持和测试工作。1986年以来,他一直在大学为研究生讲授软件工程课程,先是亚利桑那州立大学,然后在大峡谷州立大学。

目录

Software Testing: A Craftsman’s Approach, Fourth Edition
出版者的话
译者序
前言
第一部分 数学基础
第1章 测试概述 2
1.1 基本概念 2
1.2 测试用例 3
1.3 利用维恩图来理解软件测试 3
1.4 构造测试用例 4
1.4.1 基于规格说明的测试 5
1.4.2 基于代码的测试 5
1.4.3 两种测试方法的对比 6
1.5 故障的分类 7
1.6 测试的层次 8
1.7 习题 8
1.8 参考文献 8
第2章 程序示例 9
2.1 通用伪代码 9
2.2 三角形问题 10
2.2.1 问题描述 10
2.2.2 三角形问题的讨论 11
2.2.3 三角形问题的经典实现 11
2.2.4 三角形问题的结构化实现 14
2.3 NextDate日期函数 15
2.3.1 问题描述 15
2.3.2 NextDate函数的讨论 16
2.3.3 NextDate函数的实现 16
2.4 佣金问题 18
2.4.1 问题描述 18
2.4.2 佣金问题的讨论 19
2.4.3 佣金问题的实现 19
2.5 SATM系统 20
2.5.1 问题描述 20
2.5.2 SATM系统的讨论 21
2.6 货币兑换计算器 22
2.7 雨刷控制器 22
2.8 车库门遥控开关 22
2.9 习题 23
2.10 参考文献 24
第3章 面向测试人员的离散数学 25
3.1 集合论 25
3.1.1 集合的成员关系 25
3.1.2 集合的定义方法 25
3.1.3 空集 26
3.1.4 集合的维恩图 26
3.1.5 集合运算 27
3.1.6 集合关系 28
3.1.7 集合划分 29
3.1.8 集合恒等 29
3.2 函数 30
3.2.1 定义域与值域 30
3.2.2 函数类型 30
3.2.3 函数复合 31
3.3 关系 32
3.3.1 集合之间的关系 32
3.3.2 单个集合上的关系 33
3.4 命题逻辑 34
3.4.1 逻辑运算符 34
3.4.2 逻辑表达式 35
3.4.3 逻辑等价 35
3.5 概率论 36
3.6 习题 37
3.7 参考文献 37
第4章 面向测试人员的图论 38
4.1 图 38
4.1.1 节点的度 38
4.1.2 关联矩阵 39
4.1.3 邻接矩阵 39
4.1.4 路径 40
4.1.5 连通性 40
4.1.6 压缩图 41
4.1.7 圈数 41
4.2 有向图 41
4.2.1 入度与出度 42
4.2.2 节点类型 42
4.2.3 有向图的邻接矩阵 43
4.2.4 路径与半路径 43
4.2.5 可达矩阵 44
4.2.6 n连通性 44
4.2.7 强分图 44
4.3 软件测试中常用的图 45
4.3.1 程序图 45
4.3.2 有限状态机 46
4.3.3 Petri网 47
4.3.4 事件驱动Petri网 49
4.3.5 状态图 50
4.4 习题 52
4.5 参考文献 52
第二部分 单元测试
第5章 边界值测试 54
5.1 边界值分析 54
5.1.1 边界值分析的拓展 55
5.1.2 边界值分析的局限性 56
5.2 健壮性测试 56
5.3 最坏情况测试 57
5.4 特殊值测试 57
5.5 示例 58
5.5.1 三角形问题的测试用例 58
5.5.2 NextDate函数的测试用例 59
5.5.3 佣金问题的测试用例 60
5.6 随机测试 62
5.7 边界值测试的原则 63
5.8 习题 65
第6章 等价类测试 66
6.1 等价类 66
6.2 传统的等价类测试 66
6.3 改进的等价类测试 67
6.3.1 弱一般等价类测试 68
6.3.2 强一般等价类测试 68
6.3.3 弱健壮等价类测试 68
6.3.4 强健壮等价类测试 69
6.4 三角形问题的等价类测试用例 69
6.5 NextDate函数的等价类测试用例 71
6.6 佣金问题的等价类测试用例 73
6.7 边缘测试 75
6.8 原则与注意事项 75
6.9 习题 76
6.10 参考文献 76
第7章 基于决策表的测试 77
7.1 决策表 77
7.2 决策表使用技巧 77
7.3 三角形问题的测试用例 80
7.4 Next Date函数的测试用例 81
7.4.1 第一轮尝试 81
7.4.2 第二轮尝试 82
7.4.3 第三轮尝试 83
7.5 佣金问题的测试用例 85
7.6 因果关系图 85
7.7 原则与注意事项 86
7.8 习题 87
7.9 参考文献 87
第8章 路径测试 88
8.1 程序图 88
8.2 DD路径 90
8.3 测试覆盖指标 92
8.3.1 基于程序图的覆盖度量方法 92
8.3.2 E. F. Miller的覆盖度量方法 92
8.3.3 复合条件下的闭合路径 95
8.3.4 示例 96
8.3.5 测试覆盖分析器 99
8.4 基路径测试 99
8.4.1 McCabe的基路径方法 100
8.4.2 McCabe基路径方法的考虑 102
8.4.3 McCabe方法的基本复杂度 103
8.5 原则与注意事项 105
8.6 习题 105
8.7 参考文献 106
第9章 数据流测试 107
9.1 定义/使用测试 107
9.1.1 举例 108
9.1.2 stocks的定义使用路径 110
9.1.3 locks的定义使用路径 110
9.1.4 totalLocks的定义使用路径 113
9.1.5 sales的定义使用路径 113
9.1.6 commission的定义使用路径 115
9.1.7 定义使用路径的测试覆盖指标 115
9.1.8 面向对象编码的定义/使用测试 116
9.2 基于程序切片的测试 116
9.2.1 举例 118
9.2.2 风格与技术 122
9.2.3 切片拼接 123
9.3 程序切片工具 124
9.4 习题 125
9.5 参考文献 125
第10章 单元测试回顾 126
10.1 测试方法的摇摆 126
10.2 测试方法摇摆问题探索 128
10.3 用于评估测试方法的指标 131
10.4 重新

前言/序言

Software Testing: A Craftsman’s Approach, Fourth Edition此次再版,我们增加了四章新内容,同时更加深入地讨论了基于路径的测试,从而拓展了本书18年以来一直侧重基于模型测试的传统。此前本书已经再版三次,经过了18年的教学和业界使用的检验。借助精心挑选的简单易懂的实例,本书把理论与实践紧密地结合在一起。此外,很多第3版中的内容被合并、重组在一起,使全书内容更加简洁流畅。把很多面向对象软件测试的内容和过程软件测试(procedural software testing)整合在一起形成了一个有机的整体。还有就是针对美国联邦航空管理局和美国国防部有关标准的要求,在“路径测试”一章中扩充了复杂条件测试(complex condition testing)和修正的条件判定覆盖率(modified condition decision coverage)指标等内容。
这一版新增加的章节如下:
软件技术评审(第22章)。侧重软件技术检验,这实际上被视为“静态测试”,而本书的前三版一直侧重于讨论如何利用精心挑选的测试用例来执行代码的“动态测试”。本章内容实际上来自一个软件开发公司20多年来的产业实践经验,该公司具有完善的技术评审流程。
附录。附录中给出了一套完整的用例集(采用UML),可以针对典型的客户需求实现实际产业开发所要求的技术检验。其中包括用例标准、用例故障严重程度定义、潜在问题的技术检验事项表,以及典型评审报告和最终报告的格式文档。
基于模型的综合系统测试(第17章)。由系统构成复杂系统的问题相对还是较新的(始于1999年)。软件测试从业人员现在是在追随几位大学研究人员的步伐,主要关注如何界定一个由若干系统构成的复杂系统。这一章介绍了“泳道事件驱动Petri网”,在表达能力上接近著名的状态图方法。有了它就可以对复杂系统实施基于模型的测试。
软件复杂度(第16章)。目前大部分文献都仅考察了在单元层面上的圈复杂度(cyclomatic,也称为McCabe)。本章从两个方面拓展了对单元层面复杂度的考量,引进了两种集成层面上的复杂度。对面向对象编程和系统层面的测试来说,需要涉及对复杂度的处理。在任何层面上,对复杂度的考量都是提升设计、编码、测试和维护工作的重要手段。保持一种一致的软件复杂度表述,对每个阶段都有很大的促进作用。
测试用例的评估(第21 章)。新增的这一章要研究一个难题:如何评估一个测试用例集?测试覆盖性是长期以来为人所接受的指标,但是其中总有一定程度的不确定性。古罗马关于“谁来守卫卫兵”的问题,在此变成了“谁来评估测试”的问题。十几年来,变异测试(mutation testing)逐渐成为一种解决方案,所以本章对其效果和贡献进行了介绍,同时也介绍了另外两种方法:漏洞挖掘(fuzzing)和故障注入(fault insertion)。
做了47年的软件开发人员和大学教授,我认为自己的软件测试知识既有深度也有广度。在大学里,我一直在数学系和计算机系授课,同时我还有20多年的工业软件开发和管理经验,这些经历使我能够很好地编写和改进我的软件测试教程并不断加深对于软件测试的理解。在我讲到书本以外的内容时,我经常会不断地产生新的看法。所以,我把本书的出版视为我对软件测试领域做出的一点贡献。最后,我还要感谢我的三位同事Roger Ferguson博士、Jagadeesh Nandigam博士和Christian Trefftz博士,感谢他们在面向对象测试这几章的撰写中给予我的巨大帮助。
非常感谢!
Paul C. Jorgensen于密歇根州罗克福德市
精益求精的软件艺术:一套系统性的质量保障之道 在软件开发的浩瀚海洋中,质量是航行的灯塔,而测试则是确保这艘巨轮安全抵达彼岸的罗盘与舵。本书并非仅仅罗列枯燥的测试用例或操作指南,它更像是一本集哲学、艺术与工程学于一体的匠心之作,旨在为每一个投身软件开发事业的“软件工艺师”提供一套系统、深刻且具有前瞻性的质量保障理念与实践框架。我们相信,真正的软件测试,超越了简单的“发现Bug”这一层面,它是一种贯穿整个软件生命周期的主动式质量构建过程,是塑造卓越软件产品不可或缺的灵魂。 超越“找虫”,拥抱“工艺” 本书的核心,在于重新定义“软件测试”的概念。它不再是开发流程末端的一道“验收关”,而是贯穿需求分析、设计、编码、部署乃至运维全过程的“质量意识”的具象化。我们倡导的“软件工艺师”心态,意味着每一个参与软件开发的人,都应将自己视为一名技艺精湛的工匠,对产品的每一个细节精雕细琢,对潜在的缺陷防微杜渐。这是一种主人翁意识,一种对用户体验负责的职业道德,一种追求卓越的工匠精神。 我们深入剖析了软件开发过程中常见的陷阱与挑战,并从工艺师的角度出发,提出了一系列行之有效的应对策略。这其中包括如何构建 robust 的系统,如何理解软件的复杂性,以及如何在快速迭代的环境中保持高质量的输出。本书强调,测试不仅仅是寻找缺陷,更是理解软件、验证设计、优化实现、甚至驱动创新的重要手段。一个优秀的测试人员,不仅是代码的“审判者”,更是软件的“守护者”和“合作者”。 系统性思维:构建稳固的质量基石 本书最大的特色之一,在于其强大的系统性。它不拘泥于某个具体的测试技术或工具,而是从宏观层面构建了一个完整的软件质量保障体系。这套体系强调各个环节之间的协同与联动,将测试的触角延伸至需求的源头,并与开发、运维紧密结合。 早期介入,预防为主: 我们坚信“防患于未然”的重要性。本书将详细阐述如何将测试的思维融入需求分析和设计阶段,通过评审、模型、以及早期可执行的规格说明来避免问题的产生,而非仅仅在后期才去发现和修复。这种“前置测试”的理念,能够显著降低开发成本,提高开发效率,并最终保障产品的质量。 多层次的测试策略: 软件的质量并非单一维度,而是由多个层次的验证共同构建。本书将系统性地介绍单元测试、集成测试、系统测试、验收测试等不同层级的测试目标、方法和最佳实践。我们关注如何在各个层级上实现有效的覆盖,以及如何将这些测试活动有机地整合起来,形成一个有机的整体。 风险导向的测试规划: 资源总是有限的,而软件的潜在风险却是无限的。本书将引导读者掌握如何进行有效的风险评估,并基于风险等级来规划测试活动。这意味着将有限的时间和精力投入到最可能出现问题、对业务影响最严重的区域,从而实现测试效益的最大化。 自动化与手动测试的平衡: 自动化测试是现代软件开发不可或缺的利器,但它并非万能。本书将深入探讨自动化测试的设计原则、实施策略以及其局限性。同时,我们也将强调手动测试在探索性测试、可用性测试以及那些难以自动化的场景中的关键作用,倡导一种理性、平衡的自动化与手动测试相结合的策略。 持续集成与持续交付中的测试: 在敏捷开发和 DevOps 的浪潮中,测试的角色变得尤为重要。本书将探讨如何在 CI/CD 流程中无缝地集成各种测试活动,确保代码变更的质量,并实现快速、可靠的软件交付。 精深的技术洞察与实践指导 在系统性思维的框架下,本书同样不乏对具体测试技术的精深洞察和实用指导。我们鼓励读者深入理解测试的底层原理,并在此基础上灵活运用各种技术。 探索性测试的艺术: 探索性测试并非盲目地“乱测”,而是一种基于经验、直觉和学习的、高度纪律性的测试活动。本书将带领读者领略探索性测试的精髓,学习如何设计有效的测试路径,如何从用户视角出发发现潜在问题,以及如何将探索性测试的发现转化为可复现的缺陷报告。 模型驱动的测试设计: 利用软件模型来驱动测试用例的设计,能够更 systematic 地覆盖软件的功能和状态。本书将介绍不同的建模技术,以及如何从这些模型中生成高质量的测试用例。 代码审查的价值: 代码审查是发现早期缺陷、提升代码质量、促进团队知识共享的重要手段。本书将探讨如何进行有效的代码审查,并将其融入到开发流程中。 性能与安全测试的考量: 软件的健壮性不仅仅体现在功能正确性上,更在于其性能和安全性。本书将提供对性能测试和安全测试的基本原则和实践指导,帮助读者构建更可靠、更安全的软件。 测试数据的管理与生成: 高质量的测试数据是有效测试的基石。本书将探讨测试数据的管理策略,以及如何利用各种技术生成具有代表性的测试数据。 不仅仅是技术,更是思维的升华 本书的深度远不止于技术层面,它更是一次思维的升华。我们鼓励读者从多个维度去理解软件质量: 用户体验的视角: 软件的最终价值在于能否为用户带来良好的体验。本书将引导读者从用户的角度思考问题,理解用户的需求和痛点,并设计出能够提升用户满意度的测试策略。 业务价值的考量: 测试活动最终是为了支撑业务目标的实现。本书将帮助读者理解如何将测试活动与业务价值挂钩,确保测试的投入能够带来最大的业务回报。 技术债务与质量的权衡: 在快速变化的市场环境中,我们常常需要在速度与质量之间做出权衡。本书将探讨技术债务的概念,以及如何在追求快速交付的同时,有效管理和控制技术债务,避免其对软件质量造成长期损害。 持续学习与成长: 软件技术日新月异,测试领域也在不断发展。本书倡导一种持续学习的态度,鼓励读者紧跟行业发展趋势,不断提升自己的技能和知识水平,成为一名与时俱进的软件工艺师。 献给所有追求卓越的软件从业者 无论您是经验丰富的测试专家,还是初涉软件开发的新人,本书都将为您提供宝贵的洞察和实用的指导。它适用于任何规模的团队,任何类型的项目,从小型初创公司到大型企业,从 Web 应用到嵌入式系统,其核心理念都具有普适性。 本书的目标,是帮助您构建一种“质量至上”的文化,让每一个软件开发环节都充满对卓越的追求。它不仅仅是一本技术手册,更是一份对软件工艺精神的传承与弘扬。我们相信,通过掌握本书所传达的理念与方法,您将能够更自信、更有效地构建出高质量的软件产品,成为一名真正意义上的“软件工艺师”,为软件行业的进步贡献您的力量。

用户评价

评分

坦白说,我对软件测试这个领域的热情,很大程度上源于对“如何让软件变得更好”的执着。我一直认为,一个优秀的产品,不仅仅是功能齐全,更在于它的健壮性、稳定性和用户体验。这本书的题目就击中了我内心深处的这个点。我非常好奇它如何将“软件工艺师”的理念贯穿于整个测试生命周期。比如,在需求理解阶段,它会不会强调如何通过深入的沟通和分析,挖掘出潜在的风险点?在测试设计阶段,又会提出哪些能够体现“工艺”精神的原则,比如如何设计出既能覆盖核心功能,又能发现隐藏缺陷的测试用例?我个人尤其关注书中关于“探索式测试”或者“基于风险的测试”的论述,因为我觉得这些更需要测试工程师的经验、判断力和创造力,这正是“工艺”所在。如果这本书能提供一些量化的指标或者度量方法,帮助我们评估测试的有效性和效率,那就更棒了。

评分

这本书的封面设计简洁大气,封面上“软件测试:一个软件工艺师的方法”这几个字,第一眼就吸引了我。作为一名在软件开发一线摸爬滚打多年的工程师,深知测试的重要性,但一直苦于没有系统性、深入的指导。市面上关于测试的书籍不少,但大多偏重于工具的使用或者局限于某个特定的测试类型,难以形成一个完整的知识体系。这本书的副标题“一个软件工艺师的方法”更是点睛之笔,让我预感到这不仅仅是一本介绍测试技术的书,更可能是一本关于如何用匠人心态去打磨产品、提升软件质量的指南。我非常期待它能提供一种更哲学、更系统化的视角来看待软件测试,帮助我跳出“发现 Bug”的层面,提升到“构建高质量软件”的战略高度。尤其是“软件工艺师”这个词,在我看来,意味着对细节的极致追求,对过程的严谨把控,以及对最终交付产品负责任的态度。这本书能否真正将这种“工艺师”的精神融入到软件测试的实践中,是我最关注的。

评分

作为一名刚刚入行不久的测试新人,我正在努力构建自己的知识体系,并且渴望找到一本能够引领我入门、并且具有深度和广度的书籍。这本书的标题,尤其是“软件工艺师的方法”,听起来非常吸引人,因为它暗示了一种对专业技能的极致追求,这正是我所向往的学习目标。我非常好奇,书中对于“工艺”的具体阐述会是如何体现的?例如,在学习如何编写清晰、可复用的测试脚本时,是否会强调代码的可读性和优雅性?在学习如何进行缺陷分析和根源定位时,是否会鼓励采用更深入、更系统的侦探式思维?我尤其希望能从书中学习到如何才能成为一个“优秀的”测试工程师,不仅仅是会执行测试,更能思考测试的价值,并且能够对产品的质量负责。这本书能否为我提供一套行之有效的学习路径和成长模型,帮助我在测试领域打下坚实的基础,并不断进步?

评分

最近一直在思考如何将测试更好地融入到敏捷开发流程中,特别是如何让开发人员和测试人员之间建立更紧密的协作关系。很多时候,测试被视为开发完成后的一个独立环节,导致信息传递不畅,返工率高。这本书的出现,让我看到了希望。我非常好奇它在“敏捷测试”或者“测试左移”方面会有怎样的论述。是不是能提供一些实用的方法和实践,帮助团队打破壁垒,让测试人员更早地参与到需求分析和设计阶段,从源头上规避问题?此外,对于自动化测试的深入探讨也是我非常期待的。目前我们团队的自动化测试覆盖率还有待提高,而且维护成本也比较高。这本书会不会提供一些关于如何设计可维护、高效率的自动化测试框架的思路?又或者,对于一些传统测试方法在敏捷环境下的演进和应用,是否有独到的见解?我希望它能像一位经验丰富的导师,为我指点迷津。

评分

在我看来,软件测试不仅仅是执行预设的测试用例,更是一种对产品质量的系统性思考和持续改进的过程。市面上很多测试书籍,侧重点往往是某种特定的测试技术或工具,但这本《软件测试:一个软件工艺师的方法》的名字,却让我感觉它更像是在探讨一种“道”的层面。我很好奇,书中是如何定义“软件工艺师”的,以及这种“工艺师”的精神如何体现在软件测试的各个环节?例如,在理解需求的深度、在设计测试方案的精妙性、在执行测试的细致程度、在发现和报告缺陷的清晰度,乃至在与开发团队沟通协作的方式上,是否都能体现出“工艺”的匠心?我希望这本书能提供一种更宏观的视角,帮助我理解测试在整个软件开发生命周期中的价值,并思考如何通过提升测试的“工艺水平”,从而真正地提升产品的整体质量。

评分

包装不错,下一次活动还会购买。

评分

给力

评分

物流很快,书页完整无损。

评分

还不错

评分

给力

评分

很有用的一本书

评分

评分

给力

评分

包装不错,下一次活动还会购买。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有