第1章 软件工程概述 1
1.1软件工程的发展历程 1
1.1.1软件危机 1
1.1.2软件危机出现的原因 3
1.1.3软件工程的发展 4
1.2软件工程的概念 5
1.2.1软件工程的定义 5
1.2.2软件工程的目标 6
1.2.3软件工程的实施原则 8
1.2.4软件工程的基本原理 9
1.3软件与软件过程 10
1.3.1软件的概念 11
1.3.2软件的分类 12
1.3.3软件生命周期 13
1.3.4软件过程 15
1.4软件过程模型 16
1.4.1瀑布模型 16
1.4.2原型模型 17
1.4.3增量模型 18
1.4.4螺旋模型 19
1.4.5喷泉模型 20
1.4.6敏捷过程模型 21
1.4.7渐进交付迭代模型 23
1.4.8微软解决框架过程模型 24
1.4.9软件过程模型的比较 26
1.5软件开发方法 26
1.5.1结构化开发方法 27
1.5.2面向对象开发方法 27
1.6案例描述 28
1.6.1简历信息自动获取和查询系统 28
1.6.2试卷自动生成系统 29
1.7本章小结 30
习题 31
第2章 软件需求工程 33
2.1软件需求的基本概念 33
2.1.1需求分析的任务 33
2.1.2需求分析的原则 34
2.1.3需求分析的内容 35
2.2可行性分析 36
2.2.1可行性分析的内容 36
2.2.2系统流程图 38
2.3需求工程的过程 39
2.3.1需求工程中的参与人员 39
2.3.2需求工程中的活动 40
2.3.3需求工程的管理 41
2.4需求获取技术 42
2.5结构化需求分析和建模 45
2.5.1结构化需求分析概述 45
2.5.2面向数据的数据建模 45
2.5.3面向数据流的功能建模 47
2.5.4面向状态转换的行为建模 51
2.6数据字典 54
2.6.1数据字典的编写要求 54
2.6.2数据字典的定义 55
2.7案例——简历自动获取和查询系统的需求建模 56
2.7.1数据建模——E-R图描述 56
2.7.2功能建模——数据流图 57
2.7.3行为建模——状态转换图 59
2.7.4加工逻辑——PDL语言的描述 59
2.7.5数据字典 59
2.8需求评审 61
2.8.1软件需求规格说明 61
2.8.2需求评审标准及需求验证 64
2.8.3需求变更管理 66
2.9本章小结 67
习题 67
第3章 软件设计基础 70
3.1软件设计概述 70
3.1.1软件设计与软件需求 70
3.1.2软件设计的任务 71
3.1.3软件设计的原则 73
3.2软件体系结构设计 74
3.2.1体系结构设计概述 74
3.2.2以数据为中心的数据仓库模型 74
3.2.3客户端/服务器模式的分布式结构 75
3.2.4层次模型 77
3.2.5 MVC模型 78
3.3模块化设计 80
3.3.1软件模块化与分解 80
3.3.2抽象 81
3.3.3信息隐藏 81
3.3.4模块独立性 82
3.3.5启发式规则 85
3.4界面设计 88
3.4.1界面设计的任务 88
3.4.2界面设计的原则 89
3.4.3界面设计的特性 90
3.5软件设计评审 91
3.5.1软件设计规格说明 91
3.5.2软件设计评审标准 94
3.5.3软件设计验证 96
3.6本章小结 97
习题 98
第4章 结构化设计方法 99
4.1结构化设计方法概述 99
4.2面向数据流的设计方法 100
4.2.1层次图和结构图 100
4.2.2变换分析法 102
4.2.3事务分析法 106
4.2.4混合分析法 107
4.3案例——简历自动获取和查询系统的数据流设计方法 108
4.3.1用变换分析法进行设计 108
4.3.2用事务分析法进行设计 109
4.3.3两种方法的比较 111
4.4结构化详细设计的工具 111
4.4.1程序流程图 111
4.4.2盒图 113
4.4.3问题分析图 114
4.4.4判定树 115
4.4.5判定表 116
4.4.6详细设计工具的比较 116
4.5本章小结 117
习题 118
第5章 软件实现 120
5.1程序设计语言 120
5.1.1程序设计语言的分类 120
5.1.2程序设计语言的特性 121
5.1.3选择程序设计语言 122
5.2程序设计风格 124
5.2.1程序编排和组织的准则 124
5.2.2程序设计的效率 128
5.3代码重用 130
5.4代码评审 131
5.5本章小结 135
习题 135
第6章 软件测试 138
6.1软件测试基础 138
6.1.1软件测试概念 138
6.1.2软件测试过程模型 139
6.1.3软件测试原则 141
6.1.4软件测试在软件开发各阶段的工作流程 143
6.1.5软件测试信息流 145
6.1.6软件测试技术分类 145
6.2白盒测试 147
6.2.1逻辑覆盖 147
6.2.2循环测试 150
6.2.3路径测试 152
6.3黑盒测试 156
6.3.1等价类划分 156
6.3.2边界值分析 158
6.3.3错误推测法 158
6.3.4因果图法 159
6.4白盒测试和黑盒测试的比较 161
6.4.1应用角度的不同 161
6.4.2白盒测试的优点与不足 162
6.4.3黑盒测试的优点与不足 162
6.5软件测试策略 162
6.5.1单元测试 162
6.5.2集成测试 165
6.5.3确认测试 169
6.5.4系统测试 170
6.6调试 172
6.6.1软件调试过程 172
6.6.2软件调试方法 173
6.7软件测试报告 174
6.7.1软件测试说明 174
6.7.2软件测试报告 176
6.8本章小结 177
习题 177
第7章 统一建模语言UML 180
7.1 UML的发展 180
7.1.1 UML的产生 180
7.1.2 UML的构成 181
7.1.3 UML的特点 182
7.2面向对象的基本概念 182
7.3 UML视图 188
7.4 UML的图和模型元素 189
7.4.1用例图 189
7.4.2类图 191
7.4.3包图 192
7.4.4状态图 193
7.4.5活动图 193
7.4.6顺序图 195
7.4.7协作图 196
7.4.8构件图 197
7.4.9配置图 198
7.5 UML的关系 198
7.5.1关联关系 199
7.5.2泛化关系 202
7.5.3依赖关系 205
7.5.4实现关系 206
7.6 UML的通用机制 206
7.6.1修饰 206
7.6.2注释 207
7.6.3规格说明 207
7.6.4扩展机制 207
7.7基于UML的软件过程 209
7.8本章小结 211
习题 211
第8章 面向对象分析 213
8.1面向对象分析概述 213
8.1.1传统软件过程中的不足 213
8.1.2面向对象的特点 214
8.1.3面向对象分析的基本过程 215
8.1.4面向对象分析的3类模型 215
8.1.5静态模型的5个层次 216
8.2建立功能模型(用例模型) 217
8.2.1识别参与者 218
8.2.2识别用例 218
8.2.3识别用例间关系 220
8.2.4用例描述文档 221
8.3建立静态模型(对象模型) 222
8.3.1识别类与对象 222
8.3.2划分主题 224
8.3.3确定结构 225
8.3.4确定属性 226
8.3.5确定服务 226
8.3.6类图描述文档 227
8.3.7包图描述文档 228
8.4建立动态模型 229
8.4.1建立顺序图及其描述文档 229
8.4.2建立状态图及其描述文档 231
8.4.3建立协作图及其描述文档 232
8.4.4建立活动图及其描述文档 233
8.5“会议中心系统”的面向对象分析案例研究 234
8.5.1建立功能模型——用例分析 235
8.5.2建立静态模型——5层结构 235
8.5.3建立动态模型——交互行为 238
8.6本章小结 239
习题 240
第9章 面向对象设计 241
9.1面向对象设计概述 241
9.1.1面向对象分析与设计的关系 241
9.1.2面向对象设计原则 242
9.2精化类及类间关系 243
9.2.1设计类的属性 243
9.2.2设计类的方法 244
9.2.3设计类间泛化关系 244
9.2.4设计关联类 247
9.3数据设计 247
9.3.1基于关系数据库的数据设计 247
9.3.2基于其他方式的数据设计 250
9.4人机交互设计 250
9.5建立实现模型 251
9.5.1构件图及其描述文档 252
9.5.2配置图及其描述文档 253
9.6设计模式简介 255
9.6.1概述 255
9.6.2 Singleton模式 256
9.6.3 Abstract Factory模式 257
9.6.4 Mediator模式 258
9.6.5 Adapter模式 261
9.6.6 Iterator模式 263
9.6.7 State模式 266
9.7面向对象的测试 268
9.7.1面向对象测试概述 268
9.7.2面向对象的单元测试 269
9.7.3基于过程的面向对象单元测试 273
9.8本章小结 273
习题 274
第10章 软件维护 277
10.1软件维护概述 277
10.1.1软件维护的任务 277
10.1.2软件维护的特点 278
10.1.3软件维护的分类 278
10.2软件维护过程 279
10.2.1软件维护方式 280
10.2.2软件维护管理的基本内容 281
10.2.3维护中存在的问题 285
10.2.4维护活动记录 286
10.3软件的可维护性 287
10.3.1可维护性因素 287
10.3.2提高软件的可维护性 288
10.4逆向工程 290
10.5软件维护评审 292
10.5.1软件维护规格说明文档 292
10.5.2软件维护评审 295
10.6本章小结 296
习题 297
第11章 软件项目管理 299
11.1软件项目管理概述 299
11.1.1软件项目管理的特点和内容 299
11.1.2软件项目管理目标 300
11.1.3软件项目管理的4P观点 301
11.2软件项目规模度量 302
11.2.1代码行技术 303
11.2.2功能点计算 304
11.2.3代码行与功能点间的转换 307
11.3软件项目估算 308
11.3.1代码行和功能点的其他估算模型 308
11.3.2专家估算模型 308
11.3.3 Putnam模型 309
11.3.4 COCOMO模型 309
11.3.5项目估算模型的小结 312
11.4项目进度管理 312
11.4.1项目进度控制 312
11.4.2甘特图 313
11.4.3工程网络图 314
11.5项目风险管理 316
11.5.1软件风险概念 316
11.5.2风险管理过程 317
11.6项目质量管理 320
11.6.1软件质量因素 320
11.6.2软件质量保证活动 324
11.6.3软件质量保证计划 325
11.7软件配置管理 327
11.7.1软件配置项 327
11.7.2配置管理过程 328
11.7.3软件配置管理计划 331
11.8项目人员组织管理 332
11.8.1团队组织 332
11.8.2团队组织方式 333
11.9软件能力成熟度模型 335
11.9.1基本概念 335
11.9.2软件能力成熟度模型等级 336
11.9.3关键过程域 337
11.10本章小结 338
习题 339
参考文献 341