猜你喜欢

现代软件工程:面向软件产品

书籍作者:[英] 伊恩·萨默维尔 ISBN:9787111674641
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:3539
创建日期:2021-10-07 发布日期:2021-10-07
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书由国际知名的软件工程专家伊恩·萨默维尔撰写,系统地介绍了软件产品工程化的基本思想、原理和方法。与同类书籍不同的是,本书重点关注与软件产品相关的工程化过程和技术,而不是传统的以过程为基础的项目驱动型软件工程技术。
本书的核心内容包括软件产品、软件架构、敏捷软件工程、人物角色、场景、用户故事、基于云的软件、微服务架构、安全和隐私以及DevOps等。建议读者具有一定的Java或Python等面向对象语言的编程经验,在学习过程中注重从产品工程化的视角来理解软件工程技术,从而为开发高质量、高安全性、高可靠性的软件产品打好基础。

作者简介

作者简介
伊恩·萨默维尔(Ian Sommerville) 英国著名软件工程专家,曾任圣安德鲁斯大学软件工程系教授。他在软件工程的教学和科研方面有40多年的工作经验,研究领域包括需求工程、大规模复杂系统和系统可靠性等。他撰写的软件工程教材畅销全球,销量超过75万册。


主要译者简介
李必信 东南大学计算机科学与工程学院教授,中国计算机学会软件工程专委会委员、容错计算专委会常务委员,江苏省计算机学会软件专委会副主任。主要研究方向是软件开发方法与技术、算法设计与分析、高级软件工程、软件架构建模/分析/测试与验证、软件系统演化及软件质量保证等。

编辑推荐

从软件产品工程化的视角全面讨论软件产品开发所需的方法和技术。
涵盖同类书籍较少涉及的主题,如人物角色和场景、云计算、微服务、安全和DevOps等。
内容组织灵活,每章都包含大量的示例、图表、要点分析、推荐阅读和习题等。

前言

译 者 序

Engineering Software Products: An Introduction to Modern Software Engineering

我们处在万物互联互通的时代,也是软件定义一切的时代。各种软件产品已经改变了我们的日常生活和工作,还有更多的软件产品正在试图改变我们的日常生活和工作。然而,软件产品的高质量、高安全性和高可靠性需求问题一直没有得到很好的解决,究其原因,我认为传统的以过程为基础的项目驱动软件工程思想有局限性,在面对这些问题时有些力不从心。虽然全世界有几万家软件公司,几十万名软件工程师从事软件产品开发,但是他们受传统的软件工程思想束缚,很难在软件产品工程化方面取得突破性的进展,也很难在软件的高质量、高安全性和高可靠性方面给出令人满意的解决方案。本书就是在这样的背景之下,为了适应软件工程发展的需求以及软件产品高质量、高安全性和高可靠性需求而诞生的。

本书共10章,涵盖软件产品、敏捷软件工程、特征/场景和用户故事、软件架构、基于云的软件、微服务架构、安全和隐私、可信赖编程、测试、DevOps和代码管理等内容。与大多数软件工程教材不同的是,本书关注软件产品而不是软件项目,所介绍的技术是其他软件工程教材没有的,例如,人物角色和场景、云计算、微服务、安全和DevOps等。只要你具有现代面向对象语言的编程经验,也熟悉基本的对象计算概念,就可轻松理解书中的例子。

本书的读者对象是刚刚开始学习软件工程课程的学生,以及那些准备进行软件产品开发但又没有多少软件工程经验的技术人员。本书可作为高等学校软件工程专业二年级以上学生的教材,也可作为软件开发人员的参考书。

参加本书翻译的人员除本人外,其他人员主要是来自东南大学软件工程研究所、东南大学计算机科学与工程学院的师生,包括廖力、王璐璐、孔祥龙、周颖、宋启威、韩伟娜、李慧丹、谢仁松、胡甜媛等。在此,对他们的辛苦劳动表示衷心的感谢。

限于水平,译稿中难免存在不当之处,在此敬请读者批评指正。本书是一本非常优秀的软件工程读物,各位读者认真地阅读本书后一定会受益匪浅。


李必信

2020年11月于南京九龙湖




前  言

Engineering Software Products: An Introduction to Modern Software Engineering

软件产品(例如独立程序、Web应用和服务、移动应用等)改变了我们的日常生活和工作。全世界有几万家软件产品公司,几十万名软件工程师从事软件产品开发。

与一些人的想法不同,我认为软件产品工程化需要的技能远比编码技能多得多,因此撰写了本书,旨在介绍一些重要的软件工程活动,这些活动对开发高可信、高安全性的软件产品至关重要。

本书读者对象

本书的读者对象是刚刚开始学习软件工程课程的学生。对那些准备进行软件产品开发又没有多少软件工程经验的技术人员来说,本书也非常适用。

需要一本关注产品的软件工程书籍的原因

大多数软件工程教材关注基于项目的软件工程。基于项目的软件工程的核心思想是:客户给出需求规约,公司开发软件。然而,用于大规模项目开发的软件工程技术和方法,不适合软件产品开发。

学生们通常很难理解大的定制软件系统。我的看法是,当学生关注他们经常使用的软件类型时,他们会发现理解软件工程技术其实并不难。同样,当学生在做项目时,若更多地关注产品工程化技术而不是面向项目的技术,他们会更容易理解软件工程技术。

本书是作者其他的软件工程教材的新版本吗?

不是,这本书考虑的是完全不同的方法,除了几幅图之外,没有重用任何来自《软件工程》(第10版)的材料。

本书内容

本书共10章,涵盖了软件产品、敏捷软件工程、特征/场景和用户故事、软件架构、基于云的软件、微服务架构、安全和隐私、可信赖编程、测试、DevOps和代码管理等内容。

本书适合一个学期的软件工程课程使用。

本书与其他的软件工程导论教材的不同

正如前面所说,本书关注产品而不是项目,介绍的技术是其他软件工程教材没有的,如人物角色和场景、云计算、微服务、安全和DevOps等。 由于产品创新不是来自高校科研,所以书中没有应用或提及科研成果,本书的写作风格也是“非正式”的。

如何才能从本书获得价值?

只需要你具有现代面向对象语言的编程经验,例如,你能熟练地使用Java或者Python语言编程,熟悉有意义的命名,也熟悉基本的计算概念,如对象、类和数据库等。书中的示例程序尽管是用Python语言写的,但任何具有编程经验的人都能轻松理解。

教辅资源

1. 教师手册,其中包含每章习题和测验问题的解答。

2. 有关如何在一个学期的软件工程课程中使用本书的建议。

3. 教学讲义(Keynote、PowerPoint和PDF三种形式)。

你可以通过访问网站https://www.pearsonhighered.com/sommerville获得这些材料。本书的其他辅助材料(PPT、视频、拓展链接)也可以从如下网站获得:https://iansommerville.com/engineering-software-products/。

致谢

感谢所有的评审人,他们在评审本书的初始写作计划时给出了有建设性的建议,他们是:

Paul Eggert—加州大学洛杉矶分校

Jeffrey Miller—南加州大学

Harvey Siy—内布拉斯加大学奥马哈分校

Edmund S. Yu—雪城大学

Gregory Gay—南加州大学

Josh Delinger—陶森大学

Rocky Slavin—得克萨斯大学圣安东尼奥分校

Bingyang Wei—中西部州立大学

感谢圣安德鲁斯大学的Adam Barker,他帮我与本书的制作人Rose Kernan建立了很好的联系。

和以前一样,我要感谢我的家人,他们在我撰写本书的过程中给了我无私的帮助和支持。特别感谢我的女儿Jane,她对稿件做了大量的阅读和评论。她是一个严格的编辑!她提出的修改意见大大提高了本书的质量。

最后,特别感谢我们家的新成员—我可爱的孙子Cillian,他在我撰写本书期间出生。他活泼的个性和开心的微笑,缓解了我写作和编辑过程中的枯燥。

Ian Sommerville


目录

Engineering Software Products: An Introduction to Modern Software Engineering

出版者的话

译者序

前言

第1章 软件产品 1

1.1 产品愿景 6

1.2 软件产品管理 9

1.2.1 产品愿景管理 11

1.2.2 产品路线图管理 11

1.2.3 用户故事和场景开发 11

1.2.4 产品待定项管理 12

1.2.5 验收测试 12

1.2.6 客户测试 12

1.2.7 用户界面设计 12

1.3 产品原型设计 13

要点 14

推荐阅读 15

习题 16

第2章 敏捷软件工程 17

2.1 敏捷方法 17

2.2 极限编程 20

2.3 Scrum争球模型 22

2.3.1 产品待定项 27

2.3.2 限时冲刺 30

2.3.3 自组织团队 35

要点 39

推荐阅读 39

习题 40

第3章 特征、场景和用户故事 42

3.1 人物角色 46

3.2 场景 50

3.3 用户故事 55

3.4 特征识别 59

3.4.1 特征推导 62

3.4.2 特征列表 64

要点 67

推荐阅读 67

习题 68

第4章 软件架构 69

4.1 为什么架构很重要 71

4.2 架构设计 74

4.3 系统分解 77

4.4 分布架构 86

4.5 技术议题 91

4.5.1 数据库 92

4.5.2 传播平台 93

4.5.3 服务器 93

4.5.4 开源 94

4.5.5 开发技术 95

要点 95

推荐阅读 96

习题 97

第5章 基于云的软件 98

5.1 虚拟化和容器 100

5.2 一切即服务 104

5.3 软件即服务 107

5.4 多租户系统和多实例系统 111

5.4.1 多租户系统 111

5.4.2 多实例系统 116

5.5 云软件架构 118

5.5.1 数据库组织 118

5.5.2 可扩展性和可恢复性 120

5.5.3 软件结构 121

5.5.4 云平台 122

要点 124

推荐阅读 125

习题 126

第6章 微服务架构 127

6.1 微服务 130

6.2 微服务架构 133

6.2.1 架构设计决策 135

6.2.2 服务通信 136

6.2.3 数据分发与共享 139

6.2.4 服务协调 142

6.2.5 故障管理 144

6.3 RESTful服务 147

6.4 服务部署 151

要点 154

推荐阅读 155

习题 156

第7章 安全和隐私 157

7.1 攻击和防范 159

7.1.1 注入攻击 160

7.1.2 跨站点脚本攻击 161

7.1.3 会话劫持攻击 162

7.1.4 拒绝服务攻击 163

7.1.5 暴力攻击 164

7.2 认证 165

7.2.1 联合身份 167

7.2.2 移动设备认证 169

7.3 授权 170

7.4 加密 172

7.4.1 对称和非对称加密 173

7.4.2 TLS和数字签名 176

7.4.3 数据加密 177

7.4.4 密钥管理 179

7.5 隐私 181

要点 184

推荐阅读 184

习题 186

第8章 可信赖编程 187

8.1 避免错误 189

8.1.1 程序复杂度 190

8.1.2 设计模式 198

8.1.3 重构 202

8.2 输入验证 204

8.2.1 正则表达式 206

8.2.2 数字检查 209

8.3 失效管理 210

要点 216

推荐阅读 216

习题 217

第9章 测试 219

9.1 功能测试 221

9.1.1 单元测试 223

9.1.2 特征测试 226

9.1.3 系统和发布测试 227

9.2 自动化测试 230

9.3 测试驱动开发 238

9.4 安全测试 241

9.5 代码评审 243

要点 246

推荐阅读 247

习题 248

第10章 DevOps和代码管理 250

10.1 代码管理 253

10.1.1 源代码管理基础 254

10.1.2 使用Git 259

10.2 DevOps自动化 263

10.2.1 持续集成 264

10.2.2 持续交付和部署 268

10.2.3 基础设施即代码 270

10.3 DevOps度量 272

要点 276

推荐阅读 276

习题 277

索引 279