关于我们
书单推荐
新书推荐
|
软件工程(英文版·第10版)
本书是软件工程领域的经典教材,自1982年第1版出版至今,伴随着软件工程学科的发展不断更新,影响了一代又一代的软件工程人才,对学科建设也产生了积极影响。全书共四个部分,完整讨论了软件工程各个阶段的内容,是软件工程相关专业本科生和研究生的教材,也是软件工程师必备的参考书籍。
软件工程在过去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-technologyYouTubeyoutube.com/user/SoftwareEngBookFacebookfacebook.com/sommerville.software.engineeringTwitter@SoftwareEngBook 或者 @iansommerville(有一些更广泛的推文)欢迎在Twitter或Facebook上关注我以及时获得关于软件和系统工程的新材料和新评论。 致谢多年以来许多人都对本书的成长做出了贡献,在此我想感谢每一位曾经评论过本书之前的版本并且给出了建设性意见的人(审阅人、学生、读者)。我想特别感谢我的家人Anne、Ali和Jane,感谢他们在我编写本书(以及此前所有版本)过程中给予我的爱、帮助和支持。 Ian Sommerville2014年9月
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 s
你还可能感兴趣
我要评论
|