教材主要包含四个部分:第一部分是对软件工程的一般性介绍,包括软件及软件工程过程等的基本概念;第二部分主要介绍面向对象的设计及设计模式的使用;第三部分介绍团队开发管理和敏捷开发方法;第四部分面向特定领域的软件工程-数字传媒工程的兴起。
1. 以案例分析贯穿教材,适宜教师开展项目式教学。
2. 对软件工程以及软件开发热点问题展开讨论,有利于学生把握前沿,尽早确定研究方向。
3. 加入很多诸如敏捷开发、数字传媒技术等主题的新材料, 并以数字传媒为契机,探讨面向特定领域的软件工程。
第1章 软件工程概述 1
1.1 软件及其特性 1
1.2 软件工程的产生与发展 2
1.2.1 软件危机 2
1.2.2 软件工程的发展 3
1.3 软件工程的基本概念 4
1.3.1 什么是软件工程 4
1.3.2 软件工程的基本要素 5
1.3.3 软件工程的基本原理 7
1.4 软件工程的现状与发展趋势 8
1.4.1 敏捷开发 8
1.4.2 开放计算 9
1.4.3 云计算 10
习题一 11
第2章 软件过程 12
2.1 软件过程概述 12
2.2 软件过程模型 14
2.2.1 瀑布模型 15
2.2.2 原型法模型 16
2.2.3 迭代式开发 16
2.2.4 可转换模型 18
2.3 敏捷开发过程 18
2.3.1 敏捷方法的由来 19
2.3.2 计划驱动开发和敏捷开发 20
2.3.3 敏捷方法 21
习题二 23
第3章 对象模型 24
3.1 面向对象基础 24
3.1.1 面向对象的基本概念 25
3.1.2 对象、属性与方法 26
3.2 面向对象方法的要素 27
3.2.1 对象元素的访问控制 30
3.2.2 对象职责 32
3.2.3 通过继承和组合实现重用和扩展 32
3.3 统一建模语言UML 33
3.3.1 UML的基本实体 33
3.3.2 UML图的使用实例 34
习题三 37
第4章 需求获取 38
4.1 需求分析与用户故事 38
4.2 需求及其分类 41
4.2.1 需求的定义 41
4.2.2 需求的内容 41
4.2.3 需求的分类 42
4.3 需求获取技术 44
4.4 需求分析方法 47
4.4.1 结构化分析 47
4.4.2 面向对象分析 50
4.4.3 面向问题域的分析 51
4.5 需求分析的工具 62
4.5.1 SADT 62
4.5.2 PSL/PSA 63
4.6 传统的软件建模 64
4.6.1 软件建模 64
4.6.2 数据模型的建立 65
4.6.3 功能模型、行为模型的建立及数据
字典 66
习题四 68
第5章 用例建模 69
5.1 用例模型的基本概念 69
5.1.1 系统 69
5.1.2 参与者 70
5.1.3 用例 71
5.1.4 关系 71
5.2 用例建模过程 73
5.2.1 寻找参与者 74
5.2.2 寻找用例 75
5.3 用例建模技巧 77
5.3.1 用例定义与功能分解 77
5.3.2 关联关系的确定 78
5.3.3 详细的用例规约 79
5.4 行为建模 80
5.4.1 顺序图建模 81
5.4.2 状态建模 83
习题五 85
第6章 软件体系结构 86
6.1 软件体系结构的概念 86
6.1.1 体系结构的由来 86
6.1.2 软件体系结构的内容 86
6.1.3 软件体系结构的目标 87
6.1.4 软件体系结构的发展 87
6.1.5 体系结构风格、设计模式与软件
框架 88
6.2 系统设计 89
6.2.1 问题架构 89
6.2.2 软件设计原则 91
6.3 软件体系结构风格 94
6.3.1 管道/过滤器风格 94
6.3.2 调用/返回风格 95
6.3.3 基于事件的隐式调用风格 98
6.3.4 仓库风格 99
6.3.5 体系结构风格的选择 100
6.4 软件设计过程 100
习题六 103
第7章 面向对象设计 104
7.1 “好的”软件设计 104
7.1.1 对象职责分配 104
7.1.2 GRASP职责分配原则 106
7.2 SOLID设计原则 109
7.3 类图建模 113
7.3.1 类的定义 113
7.3.2 类关系 115
7.3.3 类图建模 118
7.4 CRC卡片分拣法 119
7.5 设计模式 121
7.5.1 桥梁模式 122
7.5.2 其他常用GOF模式 125
习题七 127
第8章 编写高质量代码 129
8.1 程序设计语言 129
8.1.1 程序设计语言的发展及分类 129
8.1.2 程序设计语言的选择 130
8.2 良好的编程风格 131
8.2.1 源程序文档化 132
8.2.2 数据说明的方法 133
8.2.3 表达式和语句结构 133
8.2.4 输入/输出方面 133
8.3 程序的复杂性及度量 134
8.3.1 程序的复杂性 134
8.3.2 McCabe 度量法 134
8.3.3 Halstead方法 135
8.4 代码审查与代码优化 136
8.4.1 代码审查 136
8.4.2 代码优化 137
8.5 结对编程实践 138
习题八 140
第9章 测试驱动的实现 141
9.1 软件测试的目的与准则 141
9.1.1 软件测试的目标 141
9.1.2 软件测试的准则 142
9.2 软件测试的类型 143
9.3 软件测试的方法 145
9.3.1 测试用例 145
9.3.2 测试通过率和测试覆盖率 146
9.3.3 黑盒测试方法 146
9.3.4 白盒测试方法 149
9.3.5 测试方法的选择 152
9.4 软件测试过程 153
9.4.1 单元测试 153
9.4.2 集成测试 155
9.4.3 确认测试 157
9.4.4 系统测试 158
9.5 回归测试 159
9.6 本章小结 159
习题九 160
第10章 团队开发管理 161
10.1 团队组织与管理 161
10.1.1 人力资源规划 162
10.1.2 开发团队 163
10.1.3 团队建设 164
10.1.4 团队管理 166
10.2 项目沟通管理 167
10.3 项目估算 169
10.3.1 项目计划 169
10.3.2 项目估算方法 170
习题十 173
第11章 敏捷开发与配置管理 174
11.1 敏捷开发之Scrum 174
11.1.1 Scrum框架之角色 174
11.1.2 Scrum框架之制品 175
11.1.3 Scrum框架之活动 177
11.2 用户故事与估算 177
11.2.1 用户故事 178
11.2.2 构造好的用户故事 178
11.2.3 用户故事的划分 179
11.2.4 故事点估算 180
11.2.5 策划扑克估算 182
11.3 软件配置管理 183
11.4 配置管理工具Git 185
11.4.1 版本控制系统 186
11.4.2 版本库操作 187
11.4.3 分支管理 188
习题十一 189
第12章 数字传播工程 190
12.1 数字出版概述 190
12.1.1 数字出版及特征 190
12.1.2 数字出版与数字传播 192
12.1.3 数字出版传播的现状 193
12.2 数字出版ERP选题系统设计与
实现 194
12.2.1 系统概述 194
12.2.2 选题系统的需求分析 195
12.2.3 选题系统的概要设计 201
12.2.4 选题详细功能设计 208
12.2.5 选题系统的测试 215
12.3 数字出版技术发展趋势 219
习题十二 221
第13章 软件开发实践 222
13.1 敏捷开发实践之结对编程 222
13.1.1 待解决问题描述——生命游戏 222
13.1.2 若干结对编程实战 223
13.2 UML建模 228
13.2.1 待解决问题描述——网上选课
系统 228
13.2.2 用例建模 228
13.2.3 行为建模 231
13.2.4 对象建模 234
13.3 Git开发实践 237
13.3.1 安装配置Git 237
13.3.2 Git基本操作 238
13.3.3 Eclipse中使用Git进行版本
控制 240
参考文献 242