描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111690702丛书名: 计算机科学丛书
内容简介
本书自第1版出版至今,近40年来在软件工程界产生了巨大而深远的影响。第9版继承了之前版本的风格与优势,全面系统地讲解软件过程、建模、质量与安全、软件项目管理等知识,涵盖相关的概念、原则、方法和工具,并且提供了丰富的扩展阅读资源和网络资源。同时,本书调整了篇章结构,使内容更加简洁,更适于教学。本书是面向本科生的版本,保留了完整版中的基础内容,压缩或删除了一些高级内容,更加适合作为高等院校计算机、软件工程及相关专业的软件工程课程教材。
目 录
改编者序
译者序
前言
作者简介
第1章 软件与软件工程 1
1.1 软件的本质 3
1.1.1 定义软件 4
1.1.2 软件应用领域 5
1.1.3 遗留软件 6
1.2 定义软件工程学科 6
1.3 软件过程 7
1.3.1 过程框架 7
1.3.2 普适性活动 8
1.3.3 过程的适应性调整 9
1.4 软件工程实践 9
1.4.1 实践的精髓 9
1.4.2 通用原则 10
1.5 这一切是如何开始的 12
1.6 小结 13
习题与思考题 13
部分 软件过程
第2章 过程模型 16
2.1 通用过程模型 16
2.2 定义框架活动 18
2.3 明确任务集 19
2.4 惯用过程模型 19
2.4.1 瀑布模型 20
2.4.2 原型开发过程模型 21
2.4.3 演化过程模型 22
2.4.4 统一过程模型 24
2.5 产品和过程 26
2.6 小结 27
习题与思考题 27
第3章 敏捷和敏捷过程 29
3.1 什么是敏捷 30
3.2 敏捷及变更成本 30
3.3 什么是敏捷过程 31
3.3.1 敏捷原则 31
3.3.2 敏捷开发战略 32
3.4 Scrum 32
3.4.1 Scrum团队和制品 34
3.4.2 冲刺规划会议 34
3.4.3 每日Scrum会议 34
3.4.4 冲刺评审会议 35
3.4.5 冲刺回顾 35
3.5 其他敏捷框架 35
3.5.1 XP框架 36
3.5.2 看板法 37
3.5.3 DevOps 38
3.6 小结 39
习题与思考题 40
第4章 推荐的过程模型 41
4.1 需求定义 44
4.2 初步体系结构设计 44
4.3 资源估算 45
4.4 首次原型构建 46
4.5 原型评价 48
4.6 继续与否的决策 49
4.7 原型演化 50
4.7.1 新原型范围 51
4.7.2 构建新原型 51
4.7.3 测试新原型 51
4.8 原型发布 52
4.9 维护发布软件 52
4.10 小结 54
习题与思考题 55
第5章 软件工程的人员方面 56
5.1 软件工程师的特质 56
5.2 软件工程心理学 57
5.3 软件团队 58
5.4 团队结构 59
5.5 社交媒体的影响 60
5.6 全球化团队 60
5.7 小结 61
习题与思考题 61
第二部分 建模
第6章 理解需求 64
6.1 需求工程 65
6.1.1 起始 65
6.1.2 获取 65
6.1.3 细化 66
6.1.4 协商 66
6.1.5 规格说明 66
6.1.6 确认 67
6.1.7 需求管理 67
6.2 建立根基 68
6.2.1 确认利益相关者 68
6.2.2 识别多重观点 68
6.2.3 协作 68
6.2.4 首次提问 69
6.2.5 非功能需求 70
6.2.6 可追溯性 70
6.3 获取需求 70
6.3.1 协作收集需求 70
6.3.2 使用场景 73
6.3.3 获取工作产品 74
6.4 开发用例 74
6.5 构建分析模型 77
6.5.1 分析模型的元素 78
6.5.2 分析模式 79
6.6 协商需求 80
6.7 需求监控 81
6.8 确认需求 81
6.9 小结 81
习题与思考题 82
第7章 需求建模——?一种推荐的方法 83
7.1 需求分析 84
7.1.1 总体目标和原理 84
7.1.2 分析的经验原则 85
7.1.3 需求建模原则 85
7.2 基于场景建模 86
7.2.1 参与者和用户概要文件 86
7.2.2 创建用例 86
7.2.3 编写用例 89
7.3 基于类建模 91
7.3.1 识别分析类 91
7.3.2 定义属性和操作 93
7.3.3 UML类模型 94
7.3.4 类–职责–协作者建模 96
7.4 功能建模 98
7.4.1 过程视图 98
7.4.2 UML顺序图 99
7.5 行为建模 100
7.5.1 识别用例事件 100
7.5.2 UML状态图 101
7.5.3 UML活动图 102
7.6 小结 104
习题与思考题 105
第8章 设计概念 106
8.1 软件工程中的设计 107
8.2 设计过程 109
8.2.1 软件质量指导原则和属性 109
8.2.2 软件设计的演化 110
8.3 设计概念 111
8.3.1 抽象 111
8.3.2 体系结构 112
8.3.3 模式 112
8.3.4 关注点分离 113
8.3.5 模块化 113
8.3.6 信息隐蔽 114
8.3.7 功能独立 114
8.3.8 逐步求精 115
8.3.9 重构 115
8.3.10 设计类 116
8.4 设计模型 118
8.4.1 设计建模原则 119
8.4.2 数据设计元素 120
8.4.3 体系结构设计元素 120
8.4.4 接口设计元素 120
8.4.5 构件级设计元素 122
8.4.6 部署级设计元素 122
8.5 小结 123
习题与思考题 124
第9章 体系结
译者序
前言
作者简介
第1章 软件与软件工程 1
1.1 软件的本质 3
1.1.1 定义软件 4
1.1.2 软件应用领域 5
1.1.3 遗留软件 6
1.2 定义软件工程学科 6
1.3 软件过程 7
1.3.1 过程框架 7
1.3.2 普适性活动 8
1.3.3 过程的适应性调整 9
1.4 软件工程实践 9
1.4.1 实践的精髓 9
1.4.2 通用原则 10
1.5 这一切是如何开始的 12
1.6 小结 13
习题与思考题 13
部分 软件过程
第2章 过程模型 16
2.1 通用过程模型 16
2.2 定义框架活动 18
2.3 明确任务集 19
2.4 惯用过程模型 19
2.4.1 瀑布模型 20
2.4.2 原型开发过程模型 21
2.4.3 演化过程模型 22
2.4.4 统一过程模型 24
2.5 产品和过程 26
2.6 小结 27
习题与思考题 27
第3章 敏捷和敏捷过程 29
3.1 什么是敏捷 30
3.2 敏捷及变更成本 30
3.3 什么是敏捷过程 31
3.3.1 敏捷原则 31
3.3.2 敏捷开发战略 32
3.4 Scrum 32
3.4.1 Scrum团队和制品 34
3.4.2 冲刺规划会议 34
3.4.3 每日Scrum会议 34
3.4.4 冲刺评审会议 35
3.4.5 冲刺回顾 35
3.5 其他敏捷框架 35
3.5.1 XP框架 36
3.5.2 看板法 37
3.5.3 DevOps 38
3.6 小结 39
习题与思考题 40
第4章 推荐的过程模型 41
4.1 需求定义 44
4.2 初步体系结构设计 44
4.3 资源估算 45
4.4 首次原型构建 46
4.5 原型评价 48
4.6 继续与否的决策 49
4.7 原型演化 50
4.7.1 新原型范围 51
4.7.2 构建新原型 51
4.7.3 测试新原型 51
4.8 原型发布 52
4.9 维护发布软件 52
4.10 小结 54
习题与思考题 55
第5章 软件工程的人员方面 56
5.1 软件工程师的特质 56
5.2 软件工程心理学 57
5.3 软件团队 58
5.4 团队结构 59
5.5 社交媒体的影响 60
5.6 全球化团队 60
5.7 小结 61
习题与思考题 61
第二部分 建模
第6章 理解需求 64
6.1 需求工程 65
6.1.1 起始 65
6.1.2 获取 65
6.1.3 细化 66
6.1.4 协商 66
6.1.5 规格说明 66
6.1.6 确认 67
6.1.7 需求管理 67
6.2 建立根基 68
6.2.1 确认利益相关者 68
6.2.2 识别多重观点 68
6.2.3 协作 68
6.2.4 首次提问 69
6.2.5 非功能需求 70
6.2.6 可追溯性 70
6.3 获取需求 70
6.3.1 协作收集需求 70
6.3.2 使用场景 73
6.3.3 获取工作产品 74
6.4 开发用例 74
6.5 构建分析模型 77
6.5.1 分析模型的元素 78
6.5.2 分析模式 79
6.6 协商需求 80
6.7 需求监控 81
6.8 确认需求 81
6.9 小结 81
习题与思考题 82
第7章 需求建模——?一种推荐的方法 83
7.1 需求分析 84
7.1.1 总体目标和原理 84
7.1.2 分析的经验原则 85
7.1.3 需求建模原则 85
7.2 基于场景建模 86
7.2.1 参与者和用户概要文件 86
7.2.2 创建用例 86
7.2.3 编写用例 89
7.3 基于类建模 91
7.3.1 识别分析类 91
7.3.2 定义属性和操作 93
7.3.3 UML类模型 94
7.3.4 类–职责–协作者建模 96
7.4 功能建模 98
7.4.1 过程视图 98
7.4.2 UML顺序图 99
7.5 行为建模 100
7.5.1 识别用例事件 100
7.5.2 UML状态图 101
7.5.3 UML活动图 102
7.6 小结 104
习题与思考题 105
第8章 设计概念 106
8.1 软件工程中的设计 107
8.2 设计过程 109
8.2.1 软件质量指导原则和属性 109
8.2.2 软件设计的演化 110
8.3 设计概念 111
8.3.1 抽象 111
8.3.2 体系结构 112
8.3.3 模式 112
8.3.4 关注点分离 113
8.3.5 模块化 113
8.3.6 信息隐蔽 114
8.3.7 功能独立 114
8.3.8 逐步求精 115
8.3.9 重构 115
8.3.10 设计类 116
8.4 设计模型 118
8.4.1 设计建模原则 119
8.4.2 数据设计元素 120
8.4.3 体系结构设计元素 120
8.4.4 接口设计元素 120
8.4.5 构件级设计元素 122
8.4.6 部署级设计元素 122
8.5 小结 123
习题与思考题 124
第9章 体系结
前 言
如果有这样一款计算机软件—它能满足用户的需求,能在相当长的时间内无故障地运行,修改起来轻松便捷,使用起来更是得心应手,那么,这款软件必定是成功的,它切实改善了我们的生活。但是,如果有这样一款软件—它令用户失望,错误频出,修改起来困难重重,使用起来更是举步维艰,那么,这必定是一款失败的软件,它使我们的生活一团糟。谁都希望开发出优秀的软件,为我们的生活带来便利,而不是让自己陷入失败的深渊。要想使软件获得成功,在设计和构建软件时就需要有规范,需要采用工程化的方法。
本书第1版问世以来的近40年中,软件工程已经从少数倡导者提出的一些朦胧概念发展成为一门正规的工程学科,已被公认是一个值得深入研究、认真学习和热烈讨论的课题。在整个行业中,软件工程师已经成为人们优先选择的工作岗位,软件过程模型、软件工程方法和软件工具都已在全行业的所有环节被成功采用。
尽管管理人员和一线专业人员都承认需要有更规范的软件方法,但他们却始终在争论应该采用什么样的规范。有许多个人和公司至今仍在杂乱无章地开发着自己的软件,即使他们正在开发的系统要服务于当今的技术,状况也是如此。许多专业人员和学生并不了解现代方法,这导致他们所开发的软件质量很差,因而造成了严重的后果。此外,有关软件工程方法真实本质的争论一直在持续进行着。软件工程的地位问题已成为一门对比研究课题。人们对软件工程的态度已经有所改善,研究工作已取得了进展,不过要使软件工程成为一门完全成熟的学科,我们还有大量工作要做。
第9版的新变化
我们希望本书能够成为引导读者进入正在走向成熟的软件工程学科的入门读物。和以前的8个版本一样,第9版对学生和专业人员同样具有很强的吸引力。它既是软件专业人员的工作指南,也是高年级本科生和一年级研究生的综合性参考书。
第9版中包含了许多新的内容,它绝不只是前一版的简单更新。这一版不仅对内容做了适当的修改,而且调整了全书的结构,以改进教学顺序。同时,更加强调一些新的、重要的软件工程过程和软件工程实践知识。此外,本书进一步加强了“支持系统”,为学生、教师和专业人员提供了更为丰富的知识资源。
过去几版的读者会注意到,第9版的篇幅有所减少。我们的目标是简明扼要,使这本书从教学的角度来看更有利,并使希望阅读整本书的读者不那么畏惧。关于著名数学家和物理学家布莱斯·帕斯卡(Blaise Pascal)的一个趣闻中提到,帕斯卡在写给朋友的一封很长的信中以这句话结尾:“我想给你写一封简短的信,但我没有时间。”当对第9版进行精简时,我们开始体会到帕斯卡所说这句话的意义。
篇章结构
本书共30章,分为五个部分。这种划分有利于那些无法在一个学期内讲完全书内容的教师灵活安排教学工作。
部分“软件过程”给出了有关软件过程的各种不同观点,讨论了几种重要的过程模型和框架,还涉及惯用过程和敏捷过程在指导思想上的分歧。第二部分“建模”给出了分析方法和设计方法,重点讲解面向对象方法和UML建模,介绍基于模式的设计以及用于移动应用程序的设计。此外,用户体验设计也在本部分展开。第三部分“质量与安全”介绍了有关质量管理的概念、规程、技术和方法,帮助软件团队很好地评估软件质量,评审软件工程工作产品,实施软件质量保证规程,并正确地运用有效的测试策略和技术。此外,我们还介绍了如何在增量软件开发模型中插入软件安全性实践。第四部分“软件项目管理”介绍了与计划、管理和控制软件开发项目的人员有关的问题。第五部分“高级课题”讨论了软件过程改进和软件工程的发展趋势。在本书中,还通过模块的方式,介绍了一个软件团队(虚构的)所经历的考验和困难,并提供了与章节主题相关的方法和工具的补充材料。
这五个部分的划分有利于教师根据学时和教学要求安排课堂内容。在一个学期内可以安排一个部分的内容,也可以安排多个部分的内容。软件工程概论课程可以从五个部分中选择若干章作为教材。侧重分析和设计的软件工程课程可以从部分和第二部分中选取素材。面向测试的软件工程课程则可以从部分和第三部分中选取素材,还应加上第二部分中的一些内容。侧重管理的课程应突出部分和第四部分的内容。我们用上述方式组织第9版的内容,旨在为教师提供多种教学安排的选择。但无论如何选择这些内容,都可以从“支持系统”中获得补充资源。
相关资源
可以通过教师网站访问各种资源,包括一个资源丰富的在线学习中心(其中包括习题解决方案)、各种基于Web的资源(软件工程检查单)、一套不断演化的“小工具”以及综合案例研究。专业资源提供了数百种分类的Web参考资料,使学生可以更深入地探索软件工程,同时,参考资料库还有指向数百个可下载参考资料的链接,这些参考资料提供了获取高级软件工程信息的深入来源。此外,还提供了完整的在线教师指南,包括辅助教学材料以及可用于授课的PPT。
在本书的教师指南中,我们为各种类型的软件工程课程提出了建议,提供了与课程配合开展的软件项目、部分习题的题解和许多有用的教学辅助工具。
由于有了在线支持系统的配合,本书既有内容上的深度,又有一定的灵活性,这些优势是传统的教科书所无法比拟的。
布鲁斯·马克西姆(Bruce Maxim)编写了第9版的新内容,而罗杰·普莱斯曼(Roger Pressman)则担任主编,并对相关内容做出了贡献。
扫描二维码可获得的中文材料
本书采用一书一码的方式,即一本书对应一个专有的二维码(见本书前面的衬纸)。扫描二维码获取阅读权限后,可浏览以下电子数据资源。
附录1 UML简介
参考文献
未来我们还可能通过该二维码提供更多的增值服务,例如习题答案、教师的授课视频等。
致谢
卡内基·梅隆大学软件工程研究所的Nancy Mead撰写了有关软件安全工程的章节;渥太华大学的Tim Lethbridge协助我们编写了UML和OCL示例,以及本书配套的案例研究;Colby学院的Dale Skrien编写了附录1的UML教程;密歇根大学迪尔伯恩分校的William Grosky与他的学生Terry Ruas合作编写了附录2的数据科学概述;我们的澳大利亚同事Margaret Kellow更新了本书配套的Web教学资料。此外,我们还要感谢Austin Krauss,他从高级软件工程师的角度,对电子游戏产业的软件开发提供了宝贵意见。
特别感谢
十分高兴有机会与罗杰合作,参与本书第9版的撰写工作。在此期间我的儿子Benjamin成为软件工程经理,而我的女儿Katherine则利用她的艺术背景创建了本书各章中的插图。我十分高兴地看到他们已经长大成人,并和他们的孩子(Isla、Emma和 Thelma)一起享受快乐时光。同时非常感谢妻子Norma,她的支持使我能够将所有空闲时间都投入到本书的写作之中。
布鲁斯·R. 马克西姆(Bruce R. Maxim)
随着本书各版本的不断推出,我的两个儿子Mathew和Michael也逐渐从小男孩成长为男子汉。他们在生活中的成熟、品格和成功鼓舞着我。经过多年的职业发展,我们三个人现在一起在我们于2012年创立的公司中工作,没有什么比这更让我自豪了。我的两个儿子现在也已经有了自己的孩子—Maya和Lily。后要感谢我的妻子Barbara,她对我花费如此多的时间在办公室工作表示理解与支持,并且鼓励我继续写作本书的下一个版本。
罗杰·S.普莱斯曼(Roger S. Pressman)
本书第1版问世以来的近40年中,软件工程已经从少数倡导者提出的一些朦胧概念发展成为一门正规的工程学科,已被公认是一个值得深入研究、认真学习和热烈讨论的课题。在整个行业中,软件工程师已经成为人们优先选择的工作岗位,软件过程模型、软件工程方法和软件工具都已在全行业的所有环节被成功采用。
尽管管理人员和一线专业人员都承认需要有更规范的软件方法,但他们却始终在争论应该采用什么样的规范。有许多个人和公司至今仍在杂乱无章地开发着自己的软件,即使他们正在开发的系统要服务于当今的技术,状况也是如此。许多专业人员和学生并不了解现代方法,这导致他们所开发的软件质量很差,因而造成了严重的后果。此外,有关软件工程方法真实本质的争论一直在持续进行着。软件工程的地位问题已成为一门对比研究课题。人们对软件工程的态度已经有所改善,研究工作已取得了进展,不过要使软件工程成为一门完全成熟的学科,我们还有大量工作要做。
第9版的新变化
我们希望本书能够成为引导读者进入正在走向成熟的软件工程学科的入门读物。和以前的8个版本一样,第9版对学生和专业人员同样具有很强的吸引力。它既是软件专业人员的工作指南,也是高年级本科生和一年级研究生的综合性参考书。
第9版中包含了许多新的内容,它绝不只是前一版的简单更新。这一版不仅对内容做了适当的修改,而且调整了全书的结构,以改进教学顺序。同时,更加强调一些新的、重要的软件工程过程和软件工程实践知识。此外,本书进一步加强了“支持系统”,为学生、教师和专业人员提供了更为丰富的知识资源。
过去几版的读者会注意到,第9版的篇幅有所减少。我们的目标是简明扼要,使这本书从教学的角度来看更有利,并使希望阅读整本书的读者不那么畏惧。关于著名数学家和物理学家布莱斯·帕斯卡(Blaise Pascal)的一个趣闻中提到,帕斯卡在写给朋友的一封很长的信中以这句话结尾:“我想给你写一封简短的信,但我没有时间。”当对第9版进行精简时,我们开始体会到帕斯卡所说这句话的意义。
篇章结构
本书共30章,分为五个部分。这种划分有利于那些无法在一个学期内讲完全书内容的教师灵活安排教学工作。
部分“软件过程”给出了有关软件过程的各种不同观点,讨论了几种重要的过程模型和框架,还涉及惯用过程和敏捷过程在指导思想上的分歧。第二部分“建模”给出了分析方法和设计方法,重点讲解面向对象方法和UML建模,介绍基于模式的设计以及用于移动应用程序的设计。此外,用户体验设计也在本部分展开。第三部分“质量与安全”介绍了有关质量管理的概念、规程、技术和方法,帮助软件团队很好地评估软件质量,评审软件工程工作产品,实施软件质量保证规程,并正确地运用有效的测试策略和技术。此外,我们还介绍了如何在增量软件开发模型中插入软件安全性实践。第四部分“软件项目管理”介绍了与计划、管理和控制软件开发项目的人员有关的问题。第五部分“高级课题”讨论了软件过程改进和软件工程的发展趋势。在本书中,还通过模块的方式,介绍了一个软件团队(虚构的)所经历的考验和困难,并提供了与章节主题相关的方法和工具的补充材料。
这五个部分的划分有利于教师根据学时和教学要求安排课堂内容。在一个学期内可以安排一个部分的内容,也可以安排多个部分的内容。软件工程概论课程可以从五个部分中选择若干章作为教材。侧重分析和设计的软件工程课程可以从部分和第二部分中选取素材。面向测试的软件工程课程则可以从部分和第三部分中选取素材,还应加上第二部分中的一些内容。侧重管理的课程应突出部分和第四部分的内容。我们用上述方式组织第9版的内容,旨在为教师提供多种教学安排的选择。但无论如何选择这些内容,都可以从“支持系统”中获得补充资源。
相关资源
可以通过教师网站访问各种资源,包括一个资源丰富的在线学习中心(其中包括习题解决方案)、各种基于Web的资源(软件工程检查单)、一套不断演化的“小工具”以及综合案例研究。专业资源提供了数百种分类的Web参考资料,使学生可以更深入地探索软件工程,同时,参考资料库还有指向数百个可下载参考资料的链接,这些参考资料提供了获取高级软件工程信息的深入来源。此外,还提供了完整的在线教师指南,包括辅助教学材料以及可用于授课的PPT。
在本书的教师指南中,我们为各种类型的软件工程课程提出了建议,提供了与课程配合开展的软件项目、部分习题的题解和许多有用的教学辅助工具。
由于有了在线支持系统的配合,本书既有内容上的深度,又有一定的灵活性,这些优势是传统的教科书所无法比拟的。
布鲁斯·马克西姆(Bruce Maxim)编写了第9版的新内容,而罗杰·普莱斯曼(Roger Pressman)则担任主编,并对相关内容做出了贡献。
扫描二维码可获得的中文材料
本书采用一书一码的方式,即一本书对应一个专有的二维码(见本书前面的衬纸)。扫描二维码获取阅读权限后,可浏览以下电子数据资源。
附录1 UML简介
参考文献
未来我们还可能通过该二维码提供更多的增值服务,例如习题答案、教师的授课视频等。
致谢
卡内基·梅隆大学软件工程研究所的Nancy Mead撰写了有关软件安全工程的章节;渥太华大学的Tim Lethbridge协助我们编写了UML和OCL示例,以及本书配套的案例研究;Colby学院的Dale Skrien编写了附录1的UML教程;密歇根大学迪尔伯恩分校的William Grosky与他的学生Terry Ruas合作编写了附录2的数据科学概述;我们的澳大利亚同事Margaret Kellow更新了本书配套的Web教学资料。此外,我们还要感谢Austin Krauss,他从高级软件工程师的角度,对电子游戏产业的软件开发提供了宝贵意见。
特别感谢
十分高兴有机会与罗杰合作,参与本书第9版的撰写工作。在此期间我的儿子Benjamin成为软件工程经理,而我的女儿Katherine则利用她的艺术背景创建了本书各章中的插图。我十分高兴地看到他们已经长大成人,并和他们的孩子(Isla、Emma和 Thelma)一起享受快乐时光。同时非常感谢妻子Norma,她的支持使我能够将所有空闲时间都投入到本书的写作之中。
布鲁斯·R. 马克西姆(Bruce R. Maxim)
随着本书各版本的不断推出,我的两个儿子Mathew和Michael也逐渐从小男孩成长为男子汉。他们在生活中的成熟、品格和成功鼓舞着我。经过多年的职业发展,我们三个人现在一起在我们于2012年创立的公司中工作,没有什么比这更让我自豪了。我的两个儿子现在也已经有了自己的孩子—Maya和Lily。后要感谢我的妻子Barbara,她对我花费如此多的时间在办公室工作表示理解与支持,并且鼓励我继续写作本书的下一个版本。
罗杰·S.普莱斯曼(Roger S. Pressman)
评论
还没有评论。