软件工程(英文版·第10版)
作者 : [英]伊恩·萨默维尔(Ian Sommerville) 著
丛书名 : 经典原版书库
出版日期 : 2017-09-21
ISBN : 978-7-111-58096-6
定价 : 129.00元
教辅资源下载
扩展信息
语种 : 英文
页数 : 780
开本 : 16
原书名 : Software Engineering,Tenth Edition
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

全书共四个部分,完整讨论了软件工程各个阶段的内容。其中,第一部分是对软件工程的一般性介绍,包括软件工程过程和敏捷开发以及面向对象的设计和设计模式的使用;第二部分介绍可依赖性和信息安全性问题;第三部分介绍高级软件工程;第四部分介绍软件管理,重点介绍技术管理问题。本书适合作为高校计算机、软件工程及相关专业作为软件工程双语课程的教材,也适合作为软件开发技术人员的参考书。

图书特色

本书是软件工程领域的经典教材,自1982年第1版出版至今,伴随着软件工程学科的发展不断更新,影响了一代又一代的软件工程人才,对学科建设也产生了积极影响。全书共四个部分,完整讨论了软件工程各个阶段的内容,是软件工程相关专业本科生和研究生的优秀教材,也是软件工程师必备的参考书籍。

新版重要更新
全面更新了关于敏捷软件工程的章节,增加了关于Scrum的新内容。此外还根据需要对其他章节进行了更新以反映敏捷方法在软件工程中日益增长的应用。
增加了关于韧性工程、系统工程、系统之系统的新章节。
对于涉及可靠性、安全性、信息安全性的三章进行了彻底的重新组织。
在面向服务的软件工程一章中增加了关于RESTful服务的新内容。
更新和修改了关于配置管理的章节,增加了关于分布式版本控制系统的新内容。
将关于面向方面的软件工程以及过程改进的章节从本书的纸质版移到了网站上。
在网站上新增了补充材料,包括一系列教学视频。

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

图书前言

软件工程在过去50年之中取得了令人瞩目的进展。我们的社会已经无法在缺少大型的专业化软件系统的情况下正常运转了。国家的公用事业和基础设施(如能源、通信、交通)全都依赖于复杂和可靠的计算机系统。软件使得我们可以探索空间,并创造了万维网这一人类历史上最重要的信息系统。智能手机和平板电脑无处不在,而为这些设备开发软件的整个“应用开发产业”已经在过去几年中悄然形成。
人类现在正面临着一系列迫切的挑战:气候变化和极端天气、自然资源的减少、需要为更多的人口提供食物和住房、国际恐怖主义的威胁,以及为老年人提供令人满意的生活的要求。我们需要新技术来帮助我们应对这些挑战,可以肯定的是软件将在这些技术中扮演核心角色。因此,软件工程对于我们在这个星球上的未来极其重要。我们必须继续培养软件工程师并推动软件工程学科的持续发展,从而满足开发更多的软件系统以及创造我们所需要的越来越复杂的未来系统的需要。
当然,软件项目还存在很多问题。系统仍然有时会延迟交付并且成本超支。我们正在创造越来越复杂的软件系统之系统(software systems of systems),在这条道路上遇到各种困难也是不足为奇的。然而,我们不应该让这些问题掩盖软件工程领域已经取得的巨大成就以及所形成的各种令人印象深刻的软件工程方法和技术。
本书的不同版本已经有超过30年的历史。这一版同样遵循了在本书第1版中所建立的基本原则:
按照工业界实践介绍软件工程,不对任何特定的方法(例如敏捷开发、形式化方法)持倾向性态度。在现实中,工业界往往将各种技术(例如敏捷以及基于计划的开发)混合在一起使用,这一点也在本书中有所反映。
根据我所知道的和所理解的知识来介绍软件工程。我得到过很多关于增加并详细介绍其他相关话题的建议,例如开源软件开发、UML的使用以及移动软件工程等。但是我对这些领域了解得并不够多。我个人的工作主要是在系统可靠性和系统工程方面,这一点在我为本书所选择的高级主题中有所反映。
我认为现代软件工程的关键问题是管理复杂性,将敏捷和其他方法结合起来,并确保系统是安全的且有韧性的。这些问题是促使我在这一版中修改和新增内容的驱动力。
对第9版的更新
这一版对第9版的更新内容汇总如下:
全面更新了关于敏捷软件工程的章节,增加了关于Scrum的新内容。此外还根据需要对其他章节进行了更新以反映敏捷方法在软件工程中日益增长的应用。
增加了关于韧性工程、系统工程、系统之系统的新章节。
对于涉及可靠性、安全性、信息安全性的三章进行了彻底的重新组织。
在面向服务的软件工程一章中增加了关于RESTful服务的新内容。
更新和修改了关于配置管理的章节,增加了关于分布式版本控制系统的新内容。
将关于面向方面的软件工程以及过程改进的章节从本书的纸质版移到了网站上。
在网站上新增了补充材料,包括一系列教学视频。我在视频中对于一些关键话题进行了解释并且推荐了相关的YouTube视频。
这一版保留了本书在此前版本中采用的四部分结构,但我对其中每个部分都进行了大量的修改。
在第一部分软件工程导论中,我彻底重写了第3章(敏捷方法)并对其进行了更新以反映Scrum方法在实践中日益增长的应用。第1章中增加了一个关于数字化学习环境的案例研究,这个案例在其他几章中也有用到。第9章更加详细地介绍了遗留系统。所有其他章节都进行了少量的修改和更新。
第二部分介绍系统可依赖性,这部分进行了修改和重新组织。原来采用的面向活动的组织方式使得与安全性、信息安全性、可靠性相关的信息分散在多个章节中,而重新组织之后,安全性、信息安全性、可靠性各属于一章。这使得相关内容(例如信息安全性)可以更加方便地作为独立的专题在更加综合性的课程中使用。我增加了一个全新的关于韧性工程的章节,其中涉及网络安全、组织韧性以及韧性系统设计。
第三部分增加了关于系统工程、系统之系统的新章节,并对与面向服务的系统工程相关的内容进行了全面修改以反映RESTful服务的应用增长趋势。面向方面的软件工程相关的章节从本书的纸质版中移除,但在网站上作为在线章节保留。
第四部分对配置管理相关的内容进行了更新以反映分布式版本控制工具(如Git)的日益普及。过程改进相关的章节从本书的纸质版中移除,但在网站上作为在线章节保留。
本书补充材料中的一个重要变化是为每个章节增加了视频。我制作了关于一系列不同主题的40多段视频,放在我的YouTube频道上,并在本书网页上提供链接。对于没有制作视频的地方,我推荐了一些可能有用的YouTube视频。
我在下面这个视频中解释了我在这一版中所做的修改背后的原因:http://iansommerville.com/software-engineering-book/videos/10th-edition-changes-2/。
读者对象
本书主要面向各大学和学院里正在学习软件和系统工程的初高级课程的学生。我假设读者对于编程基础和基本数据结构都已有所理解。
工业界的软件工程师们也会发现它是一本很好的读物,能帮助他们在软件复用、体系结构设计、可依赖性和信息安全性以及系统工程等方面获得新的知识。
教学建议
针对三种不同类型的软件工程课程,我对本书进行了如下设计:
软件工程一般导论课程。本书的第一部分专门用于一个学期的软件工程导论课程。这部分包括9章,涵盖了软件工程领域的基础内容。如果你的课程中包含实践性教学环节,那么可以选讲第四部分中关于管理的章节。
软件工程特定主题的导论课程或进阶课程。通过使用本书第二~四部分的内容,可以创建一系列更高级的课程。例如,我采用第二部分的各章加上关于系统工程和质量管理的两章来讲授以关键系统为主题的课程。而对于讨论软件密集型系统的课程,我选择的章节涉及系统工程、需求工程、系统之系统、分布式软件工程、嵌入式软件、项目管理和项目计划。
软件工程特定主题的更高阶课程。对于这类课程,本书的各章可以构成课程的基础,然后辅之以更多的阅读以便进一步探索某个主题。例如,关于软件复用的课程就可以基于第15~18章的内容。
用书教师可以访问培生网站获取相关教辅资源,网址为http://www.pearsonhighered.com/sommerville。部分资源为加密内容,可在网站上通过注册来获取密码。教辅资源包括:
部分章末练习题的答案。
每章的测验题目及答案。
配套网站
本书采用纸质图书和在线网站内容相结合的方式,其中纸质书的核心信息可以链接到网站上的补充材料。有些章节包含特别编写的“在线段落”以提供更多的信息。网站上还有6个在线章节,介绍了几个纸质版中未涉及的主题。
读者可以从本书网站software-engineering-book.com下载各种丰富的补充材料,包括:
本书所有章节的PowerPoint幻灯片。
我所录制的针对一系列软件工程主题的视频,我还推荐了一些有助于学习本书内容的YouTube视频。
针对课程教师的指南,其中给出了在教授不同课程过程中如何使用本书的建议。
关于本书中案例研究(胰岛素泵、心理健康护理系统、野外气象站系统、数字化学习系统)的附加信息,以及其他一些案例研究(例如阿丽亚娜5型发射器失效故障)。
6个在线章节介绍了过程改进、形式化方法、交互设计、应用体系结构、文档化以及面向方面的开发。
为每个章节提供补充内容的在线段落,这些在线段落可以通过每一章中用方框突出显示的链接来访问。
一些附加的涉及一系列系统工程主题的PowerPoint幻灯片。
应读者的要求,我已经在本书的网站上发布了其中一个系统案例研究的完整需求规格说明。对于学生而言,获得这种文档并理解其结构和复杂性有些困难。为了避免保密问题,我对这个来自于真实系统的需求文档进行了再工程,因此使用该文档没有任何限制。
联系信息
网站     software-engineering-book.com
邮件 名字:software.engineering.book;域名:gmail.com
博客 iansommerville.com/systems-software-and-technology
YouTube youtube.com/user/SoftwareEngBook
Facebook facebook.com/sommerville.software.engineering
Twitter @SoftwareEngBook 或者 @iansommerville(有一些更广泛的推文)
欢迎在Twitter或Facebook上关注我以及时获得关于软件和系统工程的新材料和新评论。
致谢
多年以来许多人都对本书的成长做出了贡献,在此我想感谢每一位曾经评论过本书之前的版本并且给出了建设性意见的人(审阅人、学生、读者)。我想特别感谢我的家人Anne、Ali和Jane,感谢他们在我编写本书(以及此前所有版本)过程中给予我的爱、帮助和支持。

Ian Sommerville
2014年9月

上架指导

计算机\软件工程

封底文字

本书是软件工程领域的经典教材,自1982年第1版出版至今,伴随着软件工程学科的发展不断更新,影响了一代又一代的软件工程人才,对学科建设也产生了积极影响。全书共四个部分,完整讨论了软件工程各个阶段的内容,是软件工程相关专业本科生和研究生的优秀教材,也是软件工程师必备的参考书籍。

新版重要更新:
·全面更新了关于敏捷软件工程的章节,增加了关于Scrum的新内容。此外还根据需要对其他章节进行了更新以反映敏捷方法在软件工程中日益增长的应用。
·增加了关于韧性工程、系统工程、系统之系统的新章节。
·对于涉及可靠性、安全性、信息安全性的三章进行了彻底的重新组织。
·在面向服务的软件工程一章中增加了关于RESTful服务的新内容。
·更新和修改了关于配置管理的章节,增加了关于分布式版本控制系统的新内容。
·将关于面向方面的软件工程以及过程改进的章节从本书的纸质版移到了网站上。
·在网站上新增了补充材料,包括一系列教学视频。

作者简介

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

图书目录

Contents

Part1 Introduction to Software Engineering 01
Chapter 1 Introduction 03
1.1 Professional software development 05
1.2 Software engineering ethics 14
1.3 Case studies 17
Chapter 2 Software processes 29
2.1  Software process models 31
2.2  Process activities 40
2.3  Coping with change 47
2.4  Process improvement 51
Chapter 3 Agile software development 58
3.1 Agile methods 61
3.2 Agile development techniques 63
3.3 Agile project management 70
3.4 Scaling agile methods 74
Chapter 4 Requirements engineering 87
4.1 Functional and non-functional requirements 91
4.2 Requirements engineering processes 97
4.3 Requirements elicitation 98
4.4 Requirements specification 106
4.5 Requirements validation 115
4.6 Requirements change 116
Chapter 5 System modeling 124
5.1 Context models 127
5.2 Interaction models 130
5.3 Structural models 135
5.4 Behavioral models 140
5.5 model-driven architecture 145
Chapter 6 Architectural design 153
6.1  Architectural design decisions 157
6.2  Architectural views 159
6.3  Architectural patterns 161
6.4  Application architectures 170
Chapter 7 Design and implementation 182
7.1 Object-oriented design using the UmL 184
7.2 Design patterns 195
7.3 Implementation issues 198
7.4 Open-source development 205
Chapter 8 Software testing 212
8.1 Development testing 217
8.2 Test-driven development 228
8.3 Release testing 231
8.4 User testing 235
Chapter 9 Software evolution 241
9.1 Evolution processes 244
9.2 Legacy systems 247
9.3 Software maintenance 256
Part 2 System Dependability and Security 269
Chapter 10 Dependable systems 271
10.1 Dependability properties 274
10.2 Sociotechnical systems 277
10.3 Redundancy and diversity 281
10.4 Dependable processes 283
10.5 Formal methods and dependability 285
Chapter 11 Reliability engineering 292
11.1 Availability and reliability 295
11.2 Reliability requirements 298
11.3 Fault-tolerant architectures 304
11.4 Programming for reliability 311
11.5 Reliability measurement 317
Chapter 12 Safety engineering 325
12.1 Safety-critical systems 327
12.2 Safety requirements 330
12.3 Safety engineering processes 338
12.4 Safety cases 347
Chapter 13 Security engineering 359
13.1 Security and dependability 362
13.2 Security and organizations 366
13.3 Security requirements 368
13.4 Secure systems design 374
13.5 Security testing and assurance 388
Chapter 14 Resilience engineering 394
14.1 Cybersecurity 398
14.2 Sociotechnical resilience 402
14.3 Resilient systems design 410
Part 3 Advanced Software Engineering 421
Chapter 15 Software reuse 423
15.1 The reuse landscape 426
15.2 Application frameworks 429
15.3 Software product lines 432
15.4 Application system reuse 439
Chapter 16 Component-based software engineering 450
16.1 Components and component models 453
16.2 CBSE processes 459
16.3 Component composition 466
Chapter 17 Distributed software engineering 476
17.1 Distributed systems 478
17.2 Client–server computing 485
17.3 Architectural patterns for distributed systems 487
17.4 Software as a service 498
Chapter 18 Service-oriented software engineering 506
18.1 Service-oriented architecture 510
18.2 RESTful services 515
18.3 Service engineering 519
18.4 Service composition 527
Chapter 19 Systems engineering 537
19.1 Sociotechnical systems 542
19.2 Conceptual design 549
19.3 System procurement 552
19.4 System development 556
19.5 System operation and evolution 560
Chapter 20 Systems of systems 566
20.1 System complexity 570
20.2 Systems of systems classification 573
20.3 Reductionism and complex systems 576
20.4 Systems of systems engineering 579
20.5 Systems of systems architecture 585
Chapter 21 Real-time software engineering 596
21.1 Embedded system design 599
21.2 Architectural patterns for real-time software 606
21.3 Timing analysis 612
21.4 Real-time operating systems 617
Part 4 Software Management 625
Chapter 22 Project management 627
22.1 Risk management 630
22.2 managing people 638
22.3 Teamwork 642
Chapter 23 Project planning 653
23.1 Software pricing 656
23.2 Plan-driven development 658
23.3 Project scheduling 661
23.4 Agile planning 666
23.5 Estimation techniques 668
23.6 COCOmO cost modeling 672
Chapter 24 Quality management 686
24.1 Software quality 689
24.2 Software standards 692
24.3 Reviews and inspections 696
24.4 Quality management and agile development 700
24.5 Software measurement 702
Chapter 25 Configuration management 716
25.1 Version management 721
25.2 System building 726
25.3 Change management 731
25.4 Release management 736
Glossary 743




目  录
第一部分 软件工程导论
第1章 概述 3
1.1 专业化软件开发 5
1.2 软件工程职业道德 14
1.3 案例研究 17
第2章 软件过程 29
2.1 软件过程模型 31
2.2 过程活动 40
2.3 应对变化 47
2.4 过程改进 51
第3章 敏捷软件开发 58
3.1 敏捷方法 61
3.2 敏捷开发技术 63
3.3 敏捷项目管理 70
3.4 敏捷方法的伸缩 74
第4章 需求工程 87
4.1 功能性和非功能性需求 91
4.2 需求工程过程 97
4.3 需求抽取 98
4.4 需求规格说明 106
4.5 需求确认 115
4.6 需求变更 116
第5章 系统建模 124
5.1 上下文模型 127
5.2 交互模型 130
5.3 结构模型 135
5.4 行为模型 140
5.5 模型驱动的体系结构 145
第6章 体系结构设计 153
6.1 体系结构设计决策 157
6.2 体系结构视图 159
6.3 体系结构模式 161
6.4 应用体系结构 170
第7章 设计和实现 182
7.1 使用UML的面向对象设计 184
7.2 设计模式 195
7.3 实现问题 198
7.4 开源开发 205
第8章 软件测试 212
8.1 开发测试 217
8.2 测试驱动的开发 228
8.3 发布测试 231
8.4 用户测试 235
第9章 软件演化 241
9.1 演化过程 244
9.2 遗留系统 247
9.3 软件维护 256
第二部分 可依赖性和信息安全
第10章 可依赖系统 271
10.1 可依赖性属性 274
10.2 社会技术系统 277
10.3 冗余性和多样性 281
10.4 可依赖的过程 283
10.5 形式化方法与可依赖性 285
第11章 可靠性工程 292
11.1 可用性和可靠性 295
11.2 可靠性需求 298
11.3 容错体系结构 304
11.4 编程的可靠性 311
11.5 可靠性度量 317
第12章 安全性工程 325
12.1 安全关键系统 327
12.2 安全需求 330
12.3 安全工程过程 338
12.4 安全示例 347
第13章 信息安全工程 359
13.1 信息安全和可依赖性 362
13.2 信息安全和组织 366
13.3 信息安全性需求 368
13.4 信息安全系统设计 374
13.5 信息安全测试和保证 388
第14章 韧性工程 394
14.1 网络安全 398
14.2 社会技术韧性 402
14.3 韧性系统设计 410
第三部分 高级软件工程
第15章 软件复用 423
15.1 复用概览 426
15.2 应用框架 429
15.3 软件产品线 432
15.4 应用系统复用 439
第16章 基于构件的软件工程 450
16.1 构件和构件模型 453
16.2 基于构件的软件工程过程 459
16.3 构件组装 466
第17章 分布式软件工程 476
17.1 分布式系统 478
17.2 客户机–服务器计算 485
17.3 分布式系统的体系结构模式 487
17.4 软件即服务 498
第18章 面向服务的软件工程 506
18.1 面向服务的体系结构 510
18.2 RESTful服务 515
18.3 服务工程 519
18.4 服务组合 527
第19章 系统工程 537
19.1 社会技术系统 542
19.2 概念设计 549
19.3 系统采购 552
19.4 系统开发 556
19.5 系统运行和演化 560
第20章 系统之系统 566
20.1 系统复杂度 570
20.2 系统之系统的分类 573
20.3 还原论和复杂系统 576
20.4 系统之系统工程 579
20.5 系统之系统的体系结构 585
第21章 实时软件工程 596
21.1 嵌入式系统设计 599
21.2 体系结构模式 606
21.3 时序分析 612
21.4 实时操作系统 617
第四部分 软件管理
第22章 项目管理 627
22.1 风险管理 630
22.2 人员管理 638
22.3 团队协作 642
第23章 项目计划 653
23.1 软件报价 656
23.2 计划驱动的开发 658
23.3 项目进度安排 661
23.4 敏捷计划 666
23.5 估算技术 668
23.6 COCOMO成本建模 672
第24章 质量管理 686
24.1 软件质量 689
24.2 软件标准 692
24.3 复查与审查 696
24.4 质量管理与敏捷开发 700
24.5 软件度量 702
第25章 配置管理 716
25.1 版本管理 721
25.2 系统构建 726
25.3 变更管理 731
25.4 发布版本管理 736
术语表 743

教学资源推荐
作者: [英]伊恩·萨默维尔(Ian Sommerville) 著
作者: Bob Hughes;Mike Cotterell
作者: (德)Klaus Pohl 著
参考读物推荐
作者: Leszek A.Maciaszek
作者: (美)Barry W. Boehm
作者: (美)Tom DeMarco,Timothy Lister著
作者: [美]伦·巴斯(Len Bass),[美]保罗·克莱门茨(Paul Clements),[美]瑞克·凯兹曼(Rick Kazman) 著