第1章 软件工程概述 1
1.1 软件的概念和特点 1
1.1.1 计算机系统的构成及实现 1
1.1.2 软件的概念 1
1.1.3 软件的特点 2
1.1.4 计算机软件的分类 2
1.2 软件的发展和软件危机 3
1.2.1 计算机软件的发展过程 3
1.2.2 软件危机 3
1.3 软件工程及其原理 5
1.3.1 软件工程的概念 5
1.3.2 软件工程的要素 5
1.3.3 软件工程的目标 6
1.3.4 软件工程的原则 6
1.3.5 软件工程的基本原理 7
1.3.6 软件开发方法 8
1.4 软件生存周期及其模型 9
1.4.1 软件定义时期 9
1.4.2 软件开发时期 10
1.4.3 软件运行与维护时期 10
1.4.4 软件生存周期模型 11
习题一 15
第2章 可行性研究 17
2.1 问题定义 17
2.1.1 问题定义的内容 17
2.1.2 问题定义的步骤 17
2.1.3 问题定义报告 18
2.2 可行性研究的任务 18
2.2.1 技术可行性 18
2.2.2 经济可行性 19
2.2.3 操作可行性 19
2.2.4 法律可行性 19
2.3 可行性研究的步骤 19
2.3.1 确定项目规模和目标 19
2.3.2 研究正在运行的系统 20
2.3.3 建立目标系统的高层逻辑模型 20
2.3.4 导出和评价各种方案 20
2.3.5 推荐可行的方案 20
2.3.6 编写可行性研究报告 20
2.4 系统流程图 21
2.4.1 系统流程图的作用 21
2.4.2 系统流程图的符号 21
2.5 成本—效益分析 22
2.5.1 成本估计 22
2.5.2 两种成本估算技术 23
2.5.3 度量效益的方法 24
2.6 可行性研究报告 24
2.7 项目开发计划 25
实训 25
习题二 26
第3章 需求分析 28
3.1 需求分析任务 28
3.1.1 需求分析的意义 28
3.1.2 需求分析的步骤 29
3.1.3 需求分析的具体任务 31
3.2 需求分析的基本原则 31
3.3 需求分析过程 32
3.3.1 需求获取 32
3.3.2 需求建模 33
3.3.3 编写需求分析文档 34
3.3.4 需求评审 34
3.4 需求获取方法 35
3.4.1 需求需要获取的内容 35
3.4.2 需求获取的方法 36
3.4.3 需求调研的步骤 37
3.5 需求分析模型 39
3.5.1 实体关系图 39
3.5.2 数据流图 41
3.5.3 状态转换图 46
3.6 数据字典 47
3.6.1 数据字典的概念和组成 47
3.6.2 数据字典各部分的描述 48
3.6.3 词条描述 49
3.6.4 数据字典中的符号 51
3.7 需求规格说明书 52
3.7.1 引言 53
3.7.2 任务概述 53
3.7.3 需求规定 53
3.7.4 运行环境规定 54
实训 54
习题三 56
第4章 概要设计 60
4.1 软件设计过程 60
4.1.1 软件设计过程 60
4.1.2 目标系统的运行环境 62
4.2 概要设计的目标和任务 62
4.2.1 概要设计的目标 62
4.2.2 概要设计的任务 62
4.3 概要设计原则 63
4.3.1 模块化 63
4.3.2 抽象 65
4.3.3 自顶向下,逐步细化 65
4.3.4 信息隐蔽 66
4.3.5 模块独立性 66
4.4 体系结构设计工具 70
4.4.1 结构图 70
4.4.2 HIPO图 72
4.5 概要设计的启发式规则 74
4.5.1 提高模块独立性 74
4.5.2 模块大小要适中 74
4.5.3 模块应具有高扇入和适当的扇出 74
4.5.4 软件结构中的深度和宽度不宜过大 75
4.5.5 模块的作用域应处于控制域之内 75
4.5.6 尽量降低模块的接口复杂度 77
4.5.7 设计单入口、单出口的模块 77
4.5.8 模块功能应该可以预测 77
4.6 面向数据流的设计方法 77
4.6.1 SD方法实施的步骤 78
4.6.2 变换分析 79
4.6.3 事务分析 87
4.6.4 软件模块结构的改进 88
4.6.5 设计后的处理 90
4.7 概要设计说明书 90
实训 91
习题四 93
第5章 详细设计 96
5.1 详细设计的任务与原则 96
5.1.1 详细设计的任务 96
5.1.2 详细设计的原则 97
5.2 结构化程序设计 97
5.2.1 结构化程序设计的概念 97
5.2.2 结构化和非结构化程序设计方法的比较 97
5.2.3 结构化程序设计的原则 98
5.2.4 结构化程序设计的优点 99
5.3 过程设计工具 99
5.3.1 程序流程图 99
5.3.2 盒图(N-S图) 102
5.3.3 PAD图 102
5.3.4 判定表 103
5.3.5 判定树 104
5.3.6 PDL语言 104
5.4 用户界面设计 106
5.4.1 用户界面设计的“黄金规则” 106
5.4.2 用户界面设计过程 106
5.4.3 用户界面的主要形式 107
5.4.4 界面设计应考虑的因素 109
5.4.5 用户界面设计分析 109
5.4.6 用户界面的质量要求 111
5.5 数据库设计 111
5.5.1 数据需求分析 112
5.5.2 概念结构设计 112
5.5.3 逻辑结构设计 112
5.5.4 物理结构设计 113
5.5.5 数据库的实施 113
5.6 接口设计 113
5.6.1 软件接口设计的依据 113
5.6.2 软件接口的类型 113
5.6.3 应用程序编程接口 114
5.7 详细设计说明书 114
实训 116
习题五 118
第6章 程序编码 120
6.1 程序编码的目的和任务 120
6.1.1 程序编码的目的 120
6.1.2 程序编码的任务 121
6.2 程序设计语言 121
6.2.1 程序设计语言的分类 121
6.2.2 程序设计语言的选择 122
6.3 编码风格 123
6.3.1 源程序文档化 123
6.3.2 数据说明 124
6.3.3 语句结构 125
6.3.4 输入/输出方式 126
6.4 程序效率 127
6.4.1 程序效率的准则 127
6.4.2 算法对效率的影响 127
6.4.3 存储效率 127
6.4.4 输入/输出效率 128
6.5 冗余编程及容错技术 128
6.5.1 冗余编程 128
6.5.2 软件容错技术 129
6.6 程序复杂性的度量 132
6.6.1 代码行度量法 132
6.6.2 McCabe度量法 133
实训 134
习题六 135
第7章 面向对象的分析与设计 137
7.1 面向对象概述 137
7.1.1 面向对象方法 137
7.1.2 面向对象的基本概念 139
7.1.3 面向对象的特性 145
7.2 面向对象分析与对象模型化技术 146
7.2.1 面向对象的分析过程 146
7.2.2 面向对象的开发方法 148
7.2.3 对象模型化技术 149
7.2.4 Coad&Yourdon面向对象分析 153
7.3 面向对象设计 158
7.3.1 面向对象设计准则 158
7.3.2 面向对象设计的启发式规则 160
7.3.3 Coad&Yourdon设计方法 161
7.4 面向对象编程 164
7.4.1 面向对象语言的优点 164
7.4.2 面向对象语言的技术特点 165
7.4.3 选择面向对象语言的现实因素 167
7.4.4 程序设计风格 168
案例:自动取款机(ATM)系统的分析与设计 169
习题七 178
第8章 统一建模语言UML 180
8.1 UML概述 180
8.1.1 UML的产生和发展 180
8.1.2 UML的组成 181
8.1.3 UML视图 182
8.1.4 UML的主要特点 184
8.1.5 UML的应用 185
8.2 通用模型元素 186
8.2.1 模型元素 186
8.2.2 约束 187
8.2.3 依赖关系 187
8.2.4 细化 188
8.2.5 注释 188
8.3 静态建模机制 189
8.3.1 用例图 189
8.3.2 类图和对象图 193
8.3.3 包图 200
8.3.4 构件图 201
8.3.5 配置图 202
8.4 动态建模机制 203
8.4.1 消息 203
8.4.2 顺序图 204
8.4.3 协作图 205
8.4.4 状态图 207
8.4.5 活动图 210
案例:医院电话挂号系统 213
实训 217
习题八 221
第9章 统一软件开发过程RUP 223
9.1 RUP概述 223
9.1.1 RUP的意义 223
9.1.2 RUP的特点 224
9.2 RUP的二维开发模型 227
9.3 RUP开发阶段及里程碑 228
9.3.1 初始阶段 229
9.3.2 细化阶段 229
9.3.3 构造阶段 230
9.3.4 交付阶段 231
9.4 RUP的四个要素 232
9.4.1 人员至关重要 233
9.4.2 项目创造产品 233
9.4.3 产品不仅仅是代码 234
9.4.4 过程指导项目 234
9.4.5 工具对于过程不可或缺 235
9.5 RUP制品 235
9.5.1 模型 235
9.5.2 其他制品 236
9.6 RUP的核心工作流 236
9.6.1 业务建模 237
9.6.2 需求 238
9.6.3 分析 240
9.6.4 设计 241
9.6.5 实现 244
9.6.6 测试 246
9.6.7 部署 248
9.6.8 配置和变更管理 249
9.6.9 项目管理 249
9.6.10 环境 249
9.7 RUP裁剪 251
9.8 RUP的迭代开发模式 251
习题九 253
第10章 软件测试 255
10.1 软件测试基础 255
10.1.1 软件测试的意义 255
10.1.2 软件测试的目标 256
10.1.3 软件测试的原则 256
10.1.4 软件测试的信息流 257
10.1.5 软件测试的对象 258
10.1.6 软件测试与软件开发阶段的关系 258
10.1.7 软件测试有关概念 259
10.2 软件测试方法 260
10.2.1 静态测试和动态测试 260
10.2.2 白盒测试和黑盒测试 260
10.2.3 测试用例的设计 262
10.3 软件测试策略 281
10.4 软件测试过程 281
10.4.1 单元测试 282
10.4.2 集成测试 283
10.4.3 确认测试 285
10.4.4 系统测试 287
10.4.5 调试 288
10.5 面向对象的测试 290
10.5.1 面向对象测试模型 291
10.5.2 面向对象分析的测试 291
10.5.3 面向对象设计的测试 293
10.5.4 面向对象编程的测试 294
10.5.5 面向对象的单元测试 294
10.5.6 面向对象的集成测试 295
10.5.7 面向对象的系统测试 295
10.6 测试计划和分析报告 295
10.6.1 软件测试计划 296
10.6.2 测试分析报告 298
实训 300
习题十 302
第11章 软件维护 305
11.1 软件维护概述 305
11.1.1 软件维护的定义 305
11.1.2 软件维护的类型 306
11.1.3 影响软件维护工作量的因素 307
11.1.4 造成软件维护困难的因素 308
11.1.5 结构化维护与非结构化维护 308
11.2 软件维护策略 309
11.2.1 改正性维护 309
11.2.2 适应性维护 309
11.2.3 完善性维护 310
11.3 软件维护成本 310
11.4 软件维护的实施 310
11.4.1 软件维护机构 310
11.4.2 软件维护报告 311
11.4.3 软件维护工作流程 312
11.4.4 软件维护步骤 312
11.4.5 编写维护档案记录 313
11.4.6 维护评价 314
11.5 软件的可维护性 314
11.5.1 影响软件可维护性的因素 314
11.5.2 软件可维护性的度量 315
11.5.3 提高软件可维护性的方法 318
11.6 软件维护的副作用 321
11.6.1 软件维护副作用的类型 321
11.6.2 控制软件维护副作用的策略 322
习题十一 322
第12章 软件项目管理 324
12.1 软件项目管理概述 324
12.1.1 软件项目管理的意义 324
12.1.2 软件项目的特点 325
12.1.3 软件项目管理的职能 325
12.2 软件项目计划 325
12.2.1 软件项目计划的目标和风险分析 325
12.2.2 软件项目计划的类型 325
12.2.3 项目实施计划中任务的划分 326
12.2.4 项目的进度安排 326
12.3 软件项目组织 328
12.3.1 组织原则 329
12.3.2 组织结构的模式 329
12.3.3 程序设计小组的组织形式 330
12.4 软件项目的人员配备 331
12.4.1 项目开发各阶段所需人员 332
12.4.2 配备人员的原则 332
12.4.3 对项目经理的要求 333
12.4.4 评价软件开发人员的标准 333
12.5 软件配置管理 333
12.5.1 软件配置管理的概念 333
12.5.2 软件配置管理的基本目标 334
12.5.3 基线 334
12.5.4 软件配置项 334
12.5.5 版本控制 335
12.5.6 变更控制 336
12.5.7 软件配置管理应注意的问题 337
12.6 软件质量管理 337
12.6.1 软件质量的含义 337
12.6.2 影响软件质量的因素 337
12.6.3 软件质量保证措施 339
12.7 软件能力成熟度模型 340
12.7.1 软件过程的度量 340
12.7.2 关键过程域 340
实训 342
习题十二 344
第13章 软件复用技术 346
13.1 软件复用概述 346
13.1.1 软件复用的意义 346
13.1.2 软件复用的层次 347
13.1.3 软件成分的重用级别 348
13.2 可复用的软件成分 348
13.3 软件复用过程 349
13.4 软件复用环境 350
13.5 面向对象的复用技术 351
13.5.1 类构件的复用 351
13.5.2 类库 352
13.5.3 产生所需类的次序 353
13.5.4 既存类的复用方法 353
习题十三 354
参考文献 356