
| 作 者 | 孙艳春 黄罡 邓水光 |
|---|---|
| 单 位 | 北京大学 |
| 内容提要 | 本书为101计划规划教材,以“中国特色、世界一流、101特色”为目标组织编写。
本书通过完整、系统的软件工程案例,改变目前软件工程教学中抽象、空泛的现状,并在一定程度上激发学生的学习兴趣,能够提高软件工程课程的教学质量,让学生真正学有所用 。教 材的内容组织科学、合理、系统,理论与实践并重,是一本非常适合本科教学的软件工程课程教材。本书内容新颖、体例丰富,配有大量的图表、案例和习题,大大提高了本书的可读性和易学性。 |
软件定义一切,软件已经成为信息化社会重要的基础设施。近到人们生活中随处可见的手机,记录人间烟火,远到遥望星空中火星上的探测车,探索宇宙奥秘,软件都蕴含其中。近年来,随着人工智能(AI)、区块链(Blockchain)、云计算(Cloud Computing)、大数据(Big Data)、物联网(IoT)等新兴技术的不断发展和应用,软件的规模和复杂度大幅提升。如何利用经典、现代和前沿的软件工程理论、方法和技术,系统化、工程化、高效地构建复杂软件系统,已经成为我国软件产业高质量发展和我国软件工程人才培养面临的重要问题。
本书的作者长期从事软件工程教学和科研工作,希望通过本书的编写,帮助读者系统而完整地梳理经典、现代和前沿的软件工程理论、方法和技术,通过案例分析使读者了解其运用,并以浅显易懂的方式讲授业界广泛使用的方法和技术如敏捷开发方法、群智化开发方法——开源和众包、DevOps方法等。而且,作者结合北京大学和浙江大学在软件工程前沿的研究成果,首次在国内外软件工程教材中,系统化地介绍了人工智能、区块链、云计算、大数据、物联网等新兴技术驱动的前沿软件工程的理论、方法和技术,以此拓宽读者的软件工程视野。
本书系统地介绍了经典、现代和前沿的软件工程理论、方法和技术,以教育部计算机领域本科教育教学改革试点工作(简称“101计划”)软件工程课程的建设目标为导向,全面覆盖了“101计划”中的“软件工程”课程知识体系,同时结合了美国电气与电子工程师协会(IEEE)发布的软件工程知识体系(Software Engineering Body of Knowledge,SWEBOK),并且增加了前沿软件工程的理论、方法和技术。通过大量案例深入浅出地讲授软件工程理论、方法和技术,既体现了知识的系统性,也体现了知识的先进性和实践性。本着基础理论和工程实践并重的宗旨,本书不仅要使学生们掌握软件工程理论、方法和技术,而且还要能够对现实世界中的复杂问题进行系统分析和设计,并能选用相应的开发平台和框架进行软件系统的开发、维护和管理,培养学生的工程实践能力和软件项目管理能力。本书通过案例分析、实践设计,以及前沿软件工程的讲授,将极大地提升学生们的软件开发综合实践能力和创新能力。
本书内容包括经典软件工程、现代软件工程,以及前沿软件工程三大模块:
(1) 经典软件工程包括第1章软件工程概述,第2章软件过程,第3章软件需求工程,第4章结构化开发方法,第5章面向对象开发方法,第6章编码实现,第7章软件测试,第8章软件集成、交付与部署,第9章软件开发工具和环境,第10章软件维护和演化,第11章软件项目管理等,共11章;
(2) 现代软件工程包括第12章敏捷开发方法,第13章群智化开发方法——开源和众包,第14章DevOps方法等,共3章;
(3) 前沿软件工程包括第15章面向人工智能系统的软件工程,第16章区块链驱动的软件工程,第17章云计算驱动的软件工程,第18章大数据时代的软件工程,第19章面向物联网的软件工程等,共5章。
本书不仅满足高校计算机专业和信息大类专业的“软件工程”课程的本科教学需求,同时也满足双一流高校拔尖软件工程人才培养的需求。本书同时可以作为软件工程从业者的参考用书。可供参考的课件、习题参考答案、课程实践设计、课程实践指导和案例可以从北京大学出版社网站下载。
本书由北京大学计算机学院与浙江大学计算机学院的软件工程教研团队合作撰写完成。编写分工如下: 孙艳春负责第1~8章、第10章、第12~13章的编写,同时负责全书的修改和统稿;黄罡负责第14~18章的编写;邓水光负责第1章的1.5节、第2章的2.3节、第4章的4.2.1节、第6章的6.4节、第7章的7.3节和7.8节、第9章、第11章、第19章的编写。除了以上三位作者,景翔、蔡华谦、柳熠、姜海鸥、马新建、马郓、张宁、智晨、高艺、向正哲、王东京和韩俊晓也参与了部分章节的编写和修改工作,为本书的出版做出了贡献,在此一并表示感谢。
感谢梅宏院士为本书作序。感谢南京大学李宣东教授审阅了全书,并提出许多宝贵意见。同时感谢北京大学计算机学院的领导和老师们对本书的大力支持!
由于完成时间紧迫,加之作者水平有限,本书难免有不足和疏漏之处,请广大读者批评指正。
第 1 章 软件工程概念
1.1 软件概述
1.2 软件工程概念
1.3 软件开发的本质和基本手段
1.4 软件工程的目标、原则和活动
1.5 软件工程职业道德规范
1.6 本章小结
第 2 章 软件过程
2.1 软件生存周期过程
2.2 软件生存周期模型
2.3 软件过程改进
2.4 本章小结
第 3 章 软件需求工程
3.1 如何认识需求工程
3.2 需求与需求获取
3.3 软件需求的规约、评审和管理
3.4 本章小结
第 4 章 结构化开发方法
4.1 结构化分析
4.2 结构化总体设计
4.3 结构化详细设计
4.4 软件设计规约及评审
4.5 本章小结
第 5 章 面向对象开发方法
5.1 面向对象开发方法概述
5.2 统一建模语言 UML
5.3 面向对象分析
5.4 面向对象设计
5.5 设计模式
5.6 面向对象编程
5.7 本章小结
第 6 章 编码实现
6.1 防御式编程
6.2 代码风格
6.3 编码规范
6.4 代码重用
6.5 本章小结
第 7 章 软件测试
7.1 软件测试概念、思想和原则
7.2 软件测试目标与软件测试过程模型
7.3 软件测试技术
7.4 软件测试步骤
7.5 测试驱动的开发
7.6 面向对象软件的测试技术
7.7 常用测试工具
7.8 案例研究
7.9 本章小结
第 8 章 软件集成、交付与部署
8.1 软件集成、交付与部署概念
8.2 持续集成、持续交付与持续部署
8.3 软件集成、交付与部署实践
8.4 本章小结
第 9 章 软件开发工具和环境
9.1 计算机辅助软件工程(CASE)
9.2 工具集成模型
9.3 软件开发框架与工具
9.4 本章小结
第 10 章 软件维护和演化
10.1 软件维护概念
10.2 软件维护活动
10.3 程序修改
10.4 软件演化
10.5 软件再工程
10.6 本章小结
第 11 章 软件项目管理
11.1 项目管理概念
11.2 项目管理知识体系与人才认证
11.3 软件项目管理的过程
11.4 软件项目管理常用技术和工具
11.5 案例研究
11.6 本章小结
第二部分 现代软件工程
第 12 章 敏捷开发方法
12.1 敏捷开发概述
12.2 敏捷开发价值观
12.3 敏捷开发工程实践——以极限编程(XP)为例
12.4 敏捷开发管理实践——以 Scrum 为例
12.5 基于 Git 和 GitHub 的敏捷开发实践
12.6 敏捷开发与传统开发方法的比较
12.7 本章小结
第 13 章 群智化开发方法—— 开源和众包
13.1 开源软件
13.2 软件众包
13.3 开源实践案例
13.4 本章小结
第 14 章 DevOps 方法
14.1 DevOps 演化
14.2 DevOps 理论
14.3 基于容器的 DevOps 技术实践
14.4 本章小结
第三部分 前沿软件工程
第 15 章 面向人工智能系统的软件工程
15.1 人工智能与人工智能系统
15.2 人工智能系统的软件工程方法
15.3 人工智能系统的软件开发实践
15.4 本章小结
第 16 章 区块链驱动的软件工程
16.1 区块链介绍
16.2 面向区块链的软件工程
16.3 区块链技术在软件工程中的应用
16.4 本章小结
第 17 章 云计算驱动的软件工程
17.1 云计算的起源
17.2 云计算的定义与架构
17.3 云计算对软件工程带来的影响
17.4 将传统软件迁移到云平台
17.5 基于云平台开发云原生应用
17.6 案例研究
17.7 本章小结
第 18 章 大数据时代的软件工程
18.1 大数据与软件需求
18.2 大数据与软件开发
18.3 大数据与软件测试
18.4 案例研究
18.5 本章小结
第 19 章 面向物联网的软件工程
19.1 物联网概述
19.2 面向物联网的软件开发
19.3 物联网软件质量保证
19.4 案例研究
19.5 本章小结

