第1章 软件工程概述 1
1.1 软件 1
1.1.1 软件的概念与特点 1
1.1.2 软件的分类 4
1.2 软件危机 4
1.3 软件工程 6
1.3.1 软件工程的概念 6
1.3.2 软件工程的基本目标 7
1.3.3 软件工程的基本原理 7
1.3.4 软件工程的原则 8
1.4 软件生存周期 9
1.4.1 软件的定义阶段 10
1.4.2 软件的开发阶段 10
1.4.3 软件的使用、维护和退役阶段 11
1.5 软件的开发模型 12
1.5.1 瀑布模型 12
1.5.2 原型模型 13
1.5.3 螺旋模型 14
1.5.4 喷泉模型 16
1.5.5 基于第四代技术的模型 16
1.5.6 增量模型 17
1.5.7 迭代模型 18
1.6 软件开发方法和工具 22
1.6.1 结构化方法 22
1.6.2 面向对象方法 23
1.6.3 软件工具与开发环境 23
小结 24
习题 25
第2章 软件需求基础 26
2.1 需求分析概述 26
2.1.1 需求分析的难点 26
2.1.2 需求分析的基本原则 26
2.1.3 需求分析的基本任务 27
2.2 可行性研究 31
2.2.1 可行性研究的内容 31
2.2.2 可行性研究的具体步骤 32
2.2.3 可行性研究报告的内容 33
2.3 初步需求获取方法 33
2.3.1 访谈与会议 33
2.3.2 观察用户工作流程 34
2.3.3 建立联合小组 34
2.3.4 其他获取方法 34
2.4 需求分析的过程及方法 36
2.4.1 需求分析过程 36
2.4.2 软件需求建模 38
2.4.3 需求分析方法 39
2.5 软件需求规格说明和需求评审 41
2.5.1 软件需求规格说明和初步用户手册 41
2.5.2 软件需求评审 43
小结 44
习题 44
第3章 软件设计基础 46
3.1 软件设计概述 46
3.1.1 软件设计在开发阶段的重要性 46
3.1.2 软件设计的任务 47
3.1.3 软件设计的目标 48
3.1.4 软件设计的过程 48
3.2 软件设计的基本概念 51
3.2.1 抽象与逐步求精 51
3.2.2 模块化 54
3.2.3 信息隐蔽 56
3.2.4 模块独立 57
3.3 软件体系结构设计 67
3.3.1 基本概念 67
3.3.2 体系结构设计的风格 70
3.4 数据结构设计 73
3.4.1 数据结构设计 73
3.4.2 在设计程序结构时数据结构的选择方法 73
3.5 软件过程设计 75
3.5.1 结构化程序设计方法 75
3.5.2 图形设计工具 77
3.5.3 判定表和判定树 79
3.5.4 过程设计语言PDL 81
3.6 软件设计规格说明及评审 81
小结 83
习题 84
第4章 结构化分析与设计 85
4.1 结构化分析方法概述 85
4.2 数据流图 87
4.2.1 数据流图的图形表示 87
4.2.2 分层数据流图的画法 88
4.2.3 分层数据流图的审查 92
4.3 数据字典 94
4.3.1 数据字典的描述符号 94
4.3.2 字典条目 95
4.3.3 数据字典的实现 98
4.4 描述基本加工的小说明 99
4.5 E-R图 102
4.6 结构化设计方法概述 103
4.7 数据流图到软件体系结构的映射 104
4.7.1 信息流类型 104
4.7.2 映射步骤 105
4.7.3 变换分析 106
4.7.4 事务分析 107
4.8 启发式设计策略 108
小结 110
习题 110
第5章 面向对象的分析与设计 112
5.1 面向对象的概念 113
5.1.1 对象(Object) 113
5.1.2 类(Class) 114
5.1.3 实例(Instance) 114
5.1.4 消息(Message) 115
5.1.5 属性(Attribute) 115
5.1.6 操作和方法(Operation and method) 115
5.1.7 继承(Inheritance) 116
5.1.8 封装(Encapsulation) 116
5.1.9 多态性(Polymorphism) 116
5.1.10 重载(Overload) 116
5.1.11 面向对象方法的要点 117
5.2 UML概述 117
5.2.1 UML发展历史 118
5.2.2 UML简介 118
5.3 RUP统一过程开发模型 120
5.4 用例建模 122
5.4.1 用例图(Vse Case Diagram) 122
5.4.2 用例图分析流程 125
5.4.3 用例建模小结 126
5.5 静态建模 126
5.5.1 类图(Class Diagram) 127
5.5.2 类与类之间的静态关系 128
5.5.3 对象图(Object Diagram) 132
5.5.4 包图 133
5.5.5 静态建模的基本方法及举例 134
5.5.6 静态建模小结 137
5.6 动态建模 138
5.6.1 顺序图(Sequence Diagram) 138
5.6.2 合作图(Collaboration Diagram) 142
5.6.3 状态图(State Diagram) 144
5.6.4 活动图(Activity Diagram) 147
5.6.5 动态建模小结 151
5.7 物理体系结构建模 151
5.7.1 构件图(Component Diagram) 151
5.7.2 布署图(Deployment Diagram) 154
5.8 面向对象的软件建模工具 155
5.8.1 建模工具简介 155
5.8.2 Rational Rose简介 156
小结 159
习题 160
第6章 人机界面设计 162
6.1 人的因素 162
6.1.1 人对感知过程的认识 162
6.1.2 用户的技能和用户间的差异 162
6.2 人机界面的风格与交互方式 163
6.2.1 人机界面的风格 163
6.2.2 人机界面的交互方式 165
6.3 人机界面的设计过程 167
6.3.1 界面设计中涉及的模型 167
6.3.2 任务分析与建模 168
6.3.3 界面设计中的一般问题 168
6.3.4 实现工具 170
6.3.5 界面评估 170
6.4 界面设计中应遵循的原则 171
小结 174
习题 174
第7章 编码 176
7.1 编码概述 176
7.1.1 编码的质量要求 176
7.1.2 程序设计语言的发展与特性 177
7.1.3 程序设计语言的特点与选择 179
7.2 编码的风格 182
7.2.1 程序的风格 182
7.2.2 程序的效率 184
7.3 程序编码优化 185
7.3.1 程序编码结构优化的基本方法 186
7.3.2 程序编码效率优化的基本方法 187
7.4 程序的复杂性度量 189
7.4.1 代码行度量法 189
7.4.2 McCabe度量法 189
7.4.3 Halstead方法 191
小结 192
习题 192
第8章 软件测试 194
8.1 基本概念 194
8.1.1 软件测试的定义 194
8.1.2 软件测试的基本原则 195
8.1.3 软件测试的种类 196
8.1.4 软件测试的信息流 197
8.1.5 软件测试的对象 198
8.2 软件测试技术 198
8.2.1 黑盒测试 198
8.2.2 白盒测试 205
8.3 软件测试的策略 212
8.3.1 单元测试 213
8.3.2 集成测试 215
8.3.3 确认测试 218
8.3.4 系统测试 219
8.4 测试工具 220
8.4.1 人工测试 220
8.4.2 测试工具的分类 222
8.4.3 测试工具的选择 223
8.5 调试 224
8.5.1 调试过程 224
8.5.2 调试的策略 225
8.5.3 调试的原则 226
小结 227
习题 227
第9章 软件维护 229
9.1 软件维护的概念 229
9.1.1 软件维护的含义 229
9.1.2 软件维护的内容 229
9.2 软件维护的特点 230
9.2.1 软件工程与软件维护的关系 230
9.2.2 维护成本 231
9.2.3 影响维护工作量的因素 232
9.3 软件维护的过程 233
9.3.1 建立维护机构 233
9.3.2 维护工作流程 233
9.3.3 保存维护记录 235
9.3.4 评价维护结果 236
9.4 软件的可维护性 236
9.4.1 可维护性的地位 236
9.4.2 软件的可维护性度量 236
9.4.3 提高软件可维护性的方法 237
9.5 程序的修改 239
9.5.1 程序修改的步骤 239
9.5.2 修改程序的副作用 240
9.6 软件再生工程 241
小结 242
习题 242
第10章 软件项目管理 244
10.1 软件项目管理概述 244
10.1.1 什么是软件项目管理 244
10.1.2 软件项目管理的内容 244
10.2 软件度量 246
10.2.1 度量、测量和估算 246
10.2.2 面向规模的度量 246
10.2.3 面向功能的度量 248
10.2.4 代码行度量与功能度量的比较 250
10.3 软件质量的度量 250
10.3.1 软件质量及三层次度量模型 250
10.3.2 软件质量要素 251
10.3.3 软件质量要素评价准则 251
10.4 软件项目的估算 253
10.4.1 代码行、功能点和工作量估算 253
10.4.2 软件项目估算模型 255
10.5 软件项目进度安排 256
10.5.1 进度安排中应考虑的几个问题 256
10.5.2 进度安排的方法 257
10.6 软件风险管理 258
10.6.1 风险的分类 258
10.6.2 风险的识别 258
10.6.3 风险评估 259
10.6.4 风险的管理与控制 260
10.7 软件项目的组织 261
10.7.1 软件项目管理的组织模式 261
10.7.2 人员组织与管理 262
10.8 软件配置管理 263
10.8.1 软件配置管理基本概念 263
10.8.2 软件配置管理的主要活动 264
10.9 软件过程成熟度模型(CMM) 265
10.9.1 基本概念 266
10.9.2 软件过程能力成熟度等级 266
小结 267
习题 268
第11章 软件工程标准化与软件文档 269
11.1 软件工程标准化的意义 269
11.1.1 什么是软件工程标准 269
11.1.2 软件工程标准化的意义 269
11.1.3 软件工程标准的制定与推行 270
11.2 我国的软件工程标准化工作 271
11.2.1 软件工程标准分类 271
11.2.2 我国的软件工程标准化工作 272
11.3 软件文档的作用与分类 273
11.3.1 什么是软件文档 273
11.3.2 软件文档的作用 274
11.3.3 文档的分类 274
11.4 软件文档管理 275
11.4.1 主要文档 275
11.4.2 文档的使用 276
11.4.3 软件生命周期与文档编写 276
11.4.4 编写文档应考虑的因素 277
11.4.5 文档管理 279
11.5 GB/T8567—2006建议的基本文档格式规范 281
11.5.1 GB/T8567—2006标准的结构 281
11.5.2 面向对象软件的文档编制 283
11.5.3 GB/T8567—2006标准建议的基本文档格式规范 283
小结 297
习题 297
第12章 Web工程 299
12.1 基于Web的系统与应用特点 299
12.2 Web工程 301
12.2.1 Web工程过程 301
12.2.2 Web工程开发方法 303
12.2.3 开发方法应具备的特性 303
12.2.4 Web工程开发工具 304
12.3 Web项目策划 304
12.3.1 Web工程团队 304
12.3.2 组建团队 305
12.3.3 Web工程的项目管理 306
12.4 Web应用分析 308
12.4.1 Web应用分析的任务 308
12.4.2 Web应用分析活动 309
12.5 Web应用设计 310
12.5.1 Web应用设计的任务 310
12.5.2 Web应用设计活动 310
12.6 Web应用测试 315
12.6.1 Web应用测试的基本概念 315
12.6.2 Web测试策略 316
12.6.3 Web测试过程 316
12.6.4 内容测试 318
12.6.5 用户界面测试 319
12.6.6 构件级测试 322
12.6.7 导航测试 323
12.6.8 配置测试 324
12.6.9 可信、安全性测试 325
12.6.10 性能测试 326
小结 327
习题 327
参考文献 328