第1章 软件工程概述 1
1.1 软件和软件危机 1
1.2 软件的分类 3
1.2.1 按软件功能划分 3
1.2.2 按软件规模划分 3
1.3 软件工程概念 4
1.4 软件工程的7条基本原理 5
1.5 软件开发过程模型 6
1.5.1 瀑布模型 6
1.5.2 原型模型 7
1.5.3 螺旋模型 7
1.5.4 构件组装模型 9
1.5.5 统一过程模型RUP 9
1.6 软件过程 10
1.7 软件开发方法简述 12
1.7.1 Parnas方法 12
1.7.2 Yourdon方法 12
1.7.3 面向数据结构的方法 12
1.7.4 问题分析法 13
1.7.5 面向对象的方法 13
1.7.6 可视化开发 15
1.7.7 ICASE 15
1.8 软件工程的最新发展动向 16
1.9 软件工程相关的技术规范和标准 17
1.10 国外软件开发模式介绍 19
1.11 Rational Suite产品简介 23
1.11.1 用于开发的工具 23
1.11.2 团队开发工具 23
第2章 需求工程 24
2.1 需求工程的概念和任务 24
2.1.1 需求分类 25
2.1.2 需求工程的主要活动 26
2.1.3 什么是高质量的需求 26
2.1.4 影响需求质量的因素 28
2.2 确定系统目标和范围 30
2.3 需求获取 31
2.3.1 用户的权利与义务 33
2.3.2 制定调研计划 36
2.3.3 准备调研的资料 37
2.3.4 访谈用户 42
2.3.5 编写调研报告 42
2.3.6 需求的其他来源 43
2.4 需求分析 43
2.4.1 需求分析的任务 44
2.4.2 需求分析的原则 44
2.5 需求分析的方法 45
2.5.1 结构化分析方法 46
2.5.2 结构化分析方法的步骤 52
2.5.3 定义软件的质量属性 53
2.5.4 需求优先级 56
2.6 编写需求文档 57
2.7 审查需求 59
2.8 需求管理 61
2.8.1 管理需求变更 61
2.8.2 需求跟踪 65
2.9 一个综合实例 67
2.9.1 系统功能描述 67
2.9.2 系统涉及的机构和服务器分布 80
2.9.3 系统总体应用软件结构 81
2.9.4 系统总体支撑软件结构 81
2.9.5 系统远程链接示意图 82
2.9.6 数据流程图 83
2.9.7 数据存储一览表 94
2.9.8 处理说明一览表 95
2.9.9 数据存储描述 97
第3章 软件设计 98
3.1 总体设计的目标和任务 98
3.2 总体设计的过程 100
3.3 设计原则和影响设计的因素 101
3.4 软件设计的概念 103
3.4.1 模块 103
3.4.2 模块化 104
3.4.3 模块独立性 105
3.4.4 抽象 109
3.4.5 信息隐藏 110
3.4.6 设计复用 111
3.4.7 体系结构设计 111
3.4.8 软件体系结构风格 111
3.4.9 程序结构 113
3.5 数据设计 116
3.5.1 数据设计的原则 116
3.5.2 数据结构设计 117
3.5.3 文件设计 117
3.5.4 数据库设计 119
3.6 结构化设计方法 119
3.6.1 数据流的类型 121
3.6.2 变换分析 123
3.6.3 事务分析 125
3.6.4 优化软件设计 126
3.6.5 关于设计的说明 129
3.6.6 设计复查 130
3.7 接口设计 132
3.7.1 模块间的接口设计 132
3.7.2 模块的外部接口设计 132
3.8 软件设计研究的新课题 133
第4章 编写程序 134
4.1 程序设计语言 134
4.1.1 程序设计语言的特点 135
4.1.2 程序设计语言的分类 139
4.1.3 选择一种语言 141
4.2 良好的编程习惯 142
4.2.1 关于GOTO语句的争论 142
4.2.2 结构化程序设计的原则 143
4.2.3 程序设计自顶向下、逐步细化 146
4.2.4 数据结构的合理化 148
4.2.5 程序设计风格 148
4.2.6 复用 156
4.3 编程标准和过程 157
4.3.1 标准 157
4.3.2 某个项目编程规范 158
第5章 软件测试 161
5.1 软件测试简介 161
5.1.1 测试的重要性 161
5.1.2 软件测试的研究热点 162
5.1.3 测试目的和原则 162
5.1.4 测试技术分类 163
5.1.5 测试的步骤 164
5.2 单元测试 164
5.3 集成测试 166
5.4 验收测试 167
5.5 设计测试方案 167
5.5.1 程序结构测试(白盒测试) 167
5.5.2 功能测试(黑盒测试) 172
5.5.3 测试策略 177
5.6 测试相关的文档 178
5.7 软件可靠性 181
5.7.1 估算平均无故障时间的方法 181
5.7.2 估计故障总数的方法 182
5.8 软件辅助测试工具介绍 184
5.8.1 白盒测试工具——NuMega DevPartner Studio 184
5.8.2 黑盒测试工具——QACenter 187
5.8.3 数据库测试数据自动生成工具——TESTBytes 188
5.8.4 嵌入式软件测试工具——LOGISCOPE 189
第6章 系统维护 192
6.1 软件维护概念 192
6.1.1 影响维护的因素 193
6.1.2 软件维护的策略 194
6.1.3 维护的成本 194
6.2 维护过程 195
6.2.1 相关维护报告 196
6.2.2 源程序修改策略 200
6.3 提高软件的可维护性 202
第7章 面向对象 204
7.1 为什么讨论面向对象技术 204
7.1.1 3种主要方法论简介 204
7.1.2 结构化方法存在的问题以及原因 205
7.1.3 面向对象分析和设计解决的两个经典问题 206
7.1.4 面向对象方法的特点 206
7.1.5 当前的研究及实践领域 207
7.2 面向对象的基本概念 209
7.3 几种主要面向对象方法的比较 212
7.3.1 Booch方法 212
7.3.2 OMT方法 212
7.3.3 Coad/Yourdon方法 214
7.3.4 OOSE方法 214
7.4 统一建模语言 215
7.4.1 UML概述 215
7.4.2 UML的架构 217
7.4.3 UML的视图、图、模型 217
第8章 面向对象方法的需求获取 226
8.1 用例图 226
8.1.1 用例 226
8.1.2 角色 227
8.1.3 关系 228
8.1.4 图注说明 229
8.1.5 用例模型的获取 230
8.2 活动图 230
8.3 状态图 232
8.3.1 状态图的元素 233
8.3.2 并发状态图 235
8.3.3 何时使用状态图 235
8.4 获取需求的主要活动 236
8.4.1 活动一:建立业务模型 236
8.4.2 活动二:确定角色和用例 237
8.4.3 活动三:定义用例的优先级 240
8.4.4 活动四:详细描述每个用例 240
8.4.5 活动五:构造用例模型 240
8.4.6 活动六:构造用户界面的原型 241
8.5 需求获取阶段的产品 242
第9章 基于UML的面向对象分析过程 243
9.1 对象交互 244
9.1.1 寻找对象 245
9.1.2 寻找角色 246
9.1.3 顺序图 246
9.1.4 协作图 248
9.2 类图 248
9.2.1 类图的抽象层次和细化关系 249
9.2.2 类的表示和获取 250
9.2.3 类的属性 251
9.2.4 类的操作 252
9.2.5 类的关系 253
9.2.6 类的版型 256
9.2.7 使用类图的几个建议 258
9.3 包 258
9.3.1 包的表示 259
9.3.2 服务包 259
9.3.3 包的依赖和继承 259
9.4 分析阶段的活动 260
9.4.1 活动一:构架分析 260
9.4.2 活动二:确定用例实现 261
9.4.3 活动三:分析每个类的职责、属性和关联 262
9.4.4 活动四:研究分析包 263
9.5 分析阶段的产品 263
第10章 面向对象设计 265
10.1 面向对象的设计原则 266
10.2 配置图 269
10.3 中间件 271
10.3.1 什么是中间件 271
10.3.2 中间件的分类 271
10.4 基于UML的面向对象设计过程 275
10.4.1 活动一:构架设计 275
10.4.2 活动二:用例实现-设计 279
10.4.3 活动三:设计一个类 281
10.4.4 活动四:数据存储设计 285
10.5 面向对象设计结果 286
10.6 设计人员 288
第11章 软件复用 289
11.1 软件复用技术的发展和存在的障碍 290
11.1.1 软件复用技术的发展 290
11.1.2 可复用的软件制品 291
11.1.3 软件复用存在的一些障碍 292
11.1.4 建立复用途径的一些建议 293
11.2 几种构件模型的比较 293
11.2.1 CORBA 294
11.2.2 COM+/DCOM 294
11.2.3 JavaBean 294
11.2.4 软件构架技术 297
11.2.5 比较分析 297
11.3 基于可复用构件的软件开发 298
11.3.1 构件的获取 300
11.3.2 构件的表示和检索 300
11.3.3 构件组装 302
11.3.4 构件库及其标准化 302
11.4 构件的开发 303
11.4.1 开发可复用构件的分析和设计 304
11.4.2 构造方法 305
11.5 实例研究 305
11.5.1 EJB开发实例 305
11.5.2 配置 306
11.5.3 开发一个会话Bean 308
11.5.4 配置会话Bean 314
11.5.5 开发一个实体Bean 315
11.5.6 小结 319
第12章 面向对象实现 320
12.1 选择编程语言 320
12.1.1 面向对象语言的特点 320
12.1.2 选择面向对象语言 323
12.2 程序设计风格 323
12.2.1 提高可复用性 324
12.2.2 提高可扩展性 325
12.3 实现阶段的人员分工 326
12.4 实现阶段的工作流程 326
12.5 实现阶段的产品 329
第13章 面向对象的测试 331
13.1 面向对象测试的特点 331
13.2 面向对象的测试策略 332
13.3 测试阶段的产品 333
13.4 参加测试的人员的职责 335
13.5 测试步骤 335
附录:软件工程相关资料网址 339
参考书目 340