第1章 概述 1
1.1 软件 1
1.1.1 软件的特性 2
1.1.2 软件的发展 4
1.1.3 软件危机 5
1.2 软件工程 7
1.2.1 软件工程的概念 7
1.2.2 软件工程的三要素 7
1.2.3 软件质量的特性 8
1.2.4 软件工程方法 9
1.2.5 计算机辅助软件工程CASE 10
1.2.6 当前面临的主要挑战 12
1.3.1 SWEBOK项目介绍 14
1.3 软件工程知识体系(SWEBOK) 14
1.3.2 SWEBOK的组成 15
1.3.3 软件工程与其他相关学科的关系 19
1.4 软件工程职业道德规范 20
1.4.1 IEEE/ACM职业道德准则 20
1.4.2 软件工程人员的职业道德建设 21
习题 21
第2章 软件过程 23
2.1 软件过程的概念 23
2.1.1 任务思维与过程思维 23
2.1.2 软件过程的定义 24
2.1.3 软件过程的基本活动 25
2.1.4 软件过程的制品 26
2.2 软件过程模型 27
2.2.1 瀑布模型 27
2.2.2 快速原型模型 28
2.2.3 增量模型 29
2.2.4 螺旋模型 30
2.2.5 形式化方法模型 31
2.2.6 基于组件的开发模型 31
2.3 案例:微软公司的软件开发过程 32
2.3.1 微软公司的开发管理原则 32
2.3.2 微软公司的软件过程模型 33
2.3.3 递进式的软件开发策略 34
习题 35
第3章 软件项目管理 36
3.1 软件项目管理概述 36
3.1.1 软件项目的特征 36
3.1.2 软件项目管理的“4P” 37
3.1.3 软件项目管理活动 38
3.2 人员组织与管理 40
3.2.1 软件项目组织 40
3.2.2 案例:微软公司的软件开发组织 42
3.2.3 软件团队的建设 44
3.3 项目沟通管理 45
3.3.1 项目沟通复杂性 45
3.3.2 项目沟通方式 46
3.3.3 项目沟通活动 48
3.4 软件项目规划 50
3.4.1 软件规模估算 50
3.4.2 软件成本估算 54
3.4.3 软件项目计划 56
3.5 软件风险管理 57
3.5.1 风险识别 58
3.5.2 风险分析 62
3.5.3 风险规划 63
3.5.4 风险监控 64
3.6 软件配置管理 65
3.6.1 基本概念 65
3.6.2 配置管理活动 66
3.6.3 配置管理工具 69
习题 69
第4章 需求工程 71
4.1 软件需求 71
4.1.1 业务需求 72
4.1.2 用户需求 74
4.1.3 功能需求和非功能需求 74
4.1.4 系统需求 76
4.2 需求工程过程 76
4.2.2 需求分析 77
4.2.1 需求获取 77
4.2.3 需求规格说明 78
4.2.4 需求验证 81
4.2.5 需求管理 84
4.3 需求获取技术 87
4.3.1 面谈 87
4.3.2 需求专题讨论会 89
4.3.3 观察用户工作流程 90
4.3.4 原型化方法 91
4.3.5 基于用例的方法 91
4.4 案例:小型图书资料管理系统 92
4.4.1 确定参与者 92
4.4.2 确定场景 93
4.4.4 编写用例描述 94
4.4.3 确定用例 94
习题 96
第5章 软件工程中的形式化方法 98
5.1 形式化方法基本概念 99
5.1.1 形式规约(Formal Specification) 99
5.1.2 形式证明与验证(Formal Verification and Validation) 100
5.1.3 程序求精(Program Refinement) 101
5.2 时态逻辑 101
5.2.1 一阶线性时态逻辑 102
5.2.2 计算树逻辑 106
5.3 模型检验 110
5.4 Z语言 111
5.4.1 概述 111
5.4.2 Z语言表示 112
5.4.3 Z语言实例 115
5.5 Petri网 126
5.5.1 基本定义 126
5.5.2 Petri网规格实例——信号灯 130
习题 130
第6章 面向对象基础 133
6.1 面向对象方法概述 133
6.1.1 面向对象技术的发展历史 133
6.1.2 面向对象的软件工程方法 134
6.2 面向对象基本概念 135
6.2.1 对象 135
6.2.2 类 136
6.2.3 封装 136
6.2.5 消息 137
6.2.6 关联 137
6.2.4 继承 137
6.2.7 聚合 138
6.2.8 多态性 138
6.3 软件建模概念 138
6.3.1 系统、模型和视图 139
6.3.2 软件建模的重要性 139
6.4 统一建模语言UML 140
6.4.1 UML的发展历史 141
6.4.2 UML的概念模型 142
6.4.3 UML建模示例 146
6.4.4 UML应用 147
6.5 常用的UML图 148
6.5.1 用例图 148
6.5.2 类图 151
6.5.3 顺序图 153
6.5.4 状态图 154
习题 155
第7章 面向对象分析 157
7.1 分析的概念 157
7.1.1 分析类 157
7.1.2 分析活动 159
7.2 识别分析类 159
7.2.1 识别边界类 159
7.2.2 识别控制类 160
7.2.3 识别实体类 161
7.3 定义交互行为 164
7.4 建立分析类图 166
7.4.1 定义关系和属性 166
7.4.2 应用分析模式 167
7.5 评审分析模型 168
习题 169
第8章 面向对象设计 171
8.1 设计的概念 171
8.1.1 设计活动 171
8.1.2 设计原则 172
8.2 软件体系结构 174
8.2.1 仓库体系结构 175
8.2.2 分层体系结构 176
8.2.3 MVC体系结构 176
8.2.4 客户机/服务器体系结构 177
8.2.5 管道和过滤体系结构 178
8.2.6 案例:MiniLibraray系统体系结构 178
8.3 系统设计 180
8.3.1 识别设计元素 180
8.3.2 数据存储策略 181
8.3.3 部署子系统 182
8.3.4 系统设计评审 182
8.4 详细设计 183
8.4.1 方法建模 183
8.4.2 属性建模 184
8.4.3 状态建模 185
8.4.4 关系建模 185
8.4.5 详细设计评审 186
8.5 应用设计模式 186
8.5.1 Abstract Factory模式 187
8.5.2 Adaptor模式 187
8.5.3 Bridge模式 188
8.5.4 Facade模式 188
8.6.1 用户界面设计原则 189
8.6 用户界面设计 189
8.6.2 Web界面的设计 190
8.6.3 用户支持 190
8.7 设计文档 191
习题 193
第9章 软件实现 196
9.1 程序设计语言 196
9.2 软件编码规范 198
9.2.1 文件命名与组织 198
9.2.2 代码的版式 200
9.3 软件编码案例分析 206
9.3.1 程序注释问题 206
9.3.2 变量命名问题 209
9.3.3 内存异常问题 210
9.3.4 异常处理问题 214
9.3.5 性能问题 215
9.4 软件代码审查 217
习题 218
第10章 软件测试 221
10.1 验证与确认 221
10.1.1 软件的错误 221
10.1.2 验证与确认 222
10.1.3 V V的活动 223
10.2 软件测试基础 224
10.2.1 什么是软件测试 224
10.2.2 软件测试的基本原则 224
10.2.3 软件测试与软件开发各阶段的关系 226
10.2.4 测试文档 227
10.2.5 软件测试信息流 228
10.2.6 软件测试人员 229
10.3 软件测试策略 231
10.3.1 单元测试 231
10.3.2 集成测试 234
10.3.3 确认测试 236
10.3.4 系统测试 237
10.3.5 软件调试 238
10.4 软件测试方法 240
10.4.1 静态测试与动态测试 240
10.4.2 黑盒测试与白盒测试 241
10.4.3 黑盒测试方法 242
10.4.4 白盒测试方法 244
10.4.5 程序的静态测试 247
10.5 面向对象软件测试 247
10.5.1 面向对象测试类型 248
10.5.2 面向对象测试示例 249
10.5.3 GUI测试示例 253
10.6 软件测试工具 254
10.6.1 Junit 255
10.6.2 LoadRunner 258
习题 259
第11章 软件演化 261
11.1 软件演化的特性 261
11.2 软件维护 262
11.2.1 软件维护的概念 262
11.2.2 软件维护的特点 263
11.2.3 软件维护的过程 264
11.3 软件再工程 266
习题 268
参考文献 269