第1篇 软件工程与软件过程 1
第1章 软件工程概述 1
1.1软件危机与软件工程的起源 1
1.1.1计算机系统的发展历程 1
1.1.2软件危机介绍 2
1.1.3产生软件危机的原因 2
1.1.4消除软件危机的途径 4
1.2软件工程 5
1.2.1什么是软件工程 5
1.2.2软件工程的基本原理 5
1.3软件工程包含的领域 7
小结 9
习题 9
第2章 软件过程 11
2.1软件生命周期的基本任务 11
2.2瀑布模型 14
2.3快速原型模型 16
2.4增量模型 17
2.5螺旋模型 18
2.6喷泉模型 19
2.7 Rational统一过程 20
2.7.1最佳实践 21
2.7.2 RUP的十大要素 22
2.7.3 RUP生命周期 24
2.8敏捷过程与极限编程 26
2.8.1敏捷过程概述 26
2.8.2极限编程 27
2.9能力成熟度模型 29
2.9.1能力成熟度模型的结构 29
2.9.2能力成熟度等级 30
2.9.3关键过程域 31
2.9.4应用CMM 32
小结 32
习题 33
第2篇 传统方法学 35
第3章 结构化分析 35
3.1概述 35
3.2与用户沟通的方法 36
3.2.1访谈 36
3.2.2简易的应用规格说明技术 37
3.2.3软件原型 38
3.3分析建模与规格说明 39
3.3.1分析建模 39
3.3.2软件需求规格说明 39
3.4实体—关系图 41
3.5数据流图 42
3.5.1数据流图符号 43
3.5.2例子 44
3.5.3命名 46
3.6状态转换图 47
3.6.1状态 47
3.6.2事件 47
3.6.3符号 48
3.6.4例子 48
3.7数据字典 49
3.8结构化分析实例 51
3.8.1问题陈述 51
3.8.2问题定义 51
3.8.3可行性研究 52
3.8.4需求分析 57
小结 62
习题 63
第4章 结构化设计 67
4.1结构化设计与结构化分析的关系 67
4.2软件设计的概念和原理 68
4.2.1模块化 68
4.2.2抽象 70
4.2.3逐步求精 70
4.2.4信息隐藏 71
4.3模块独立 72
4.3.1耦合 72
4.3.2内聚 73
4.4启发规则 74
4.5表示软件结构的图形工具 76
4.5.1层次图和HIPO图 76
4.5.2结构图 78
4.6面向数据流的设计方法 79
4.6.1概念 79
4.6.2变换分析 80
4.6.3事务分析 85
4.6.4设计优化 86
4.7人—机界面设计 87
4.7.1人—机界面设计问题 87
4.7.2人—机界面设计过程 88
4.7.3界面设计指南 89
4.8过程设计 91
4.9过程设计的工具 92
4.9.1程序流程图 93
4.9.2盒图(N-S图) 93
4.9.3 PAD图 94
4.9.4判定表 95
4.9.5判定树 96
4.9.6过程设计语言 97
4.10面向数据结构的设计方法 97
4.10.1 Jackson图 98
4.10.2改进的Jackson图 99
4.10.3 Jackson方法 99
小结 103
习题 104
第5章 结构化实现 106
5.1编码 107
5.1.1选择程序设计语言 107
5.1.2编码风格 108
5.2软件测试基础 110
5.2.1测试目标 110
5.2.2黑盒测试和白盒测试 110
5.2.3测试准则 111
5.2.4流图 111
5.3逻辑覆盖 112
5.4控制结构测试 115
5.4.1基本路径测试 115
5.4.2条件测试 117
5.4.3数据流测试 119
5.4.4循环测试 120
5.5黑盒测试技术 121
5.5.1等价划分 121
5.5.2边界值分析 123
5.5.3错误推测 124
5.6测试策略 124
5.6.1测试步骤 125
5.6.2单元测试 125
5.6.3集成测试 127
5.6.4确认测试 130
5.7调试 131
5.7.1调试过程 131
5.7.2调试途径 132
5.8软件可靠性 133
5.8.1基本概念 134
5.8.2估算平均无故障时间的方法 134
小结 136
习题 137
第3篇 面向对象方法学 140
第6章 面向对象方法学导论 140
6.1面向对象程序设计实例 140
6.1.1用对象分解取代功能分解 140
6.1.2设计类等级 142
6.1.3定义属性和服务 143
6.2面向对象方法学概述 144
6.2.1面向对象方法学的要点 144
6.2.2面向对象的软件过程 146
6.3面向对象方法学的主要优点 146
6.4面向对象的概念 149
6.4.1对象 150
6.4.2其他概念 152
6.5面向对象建模 155
6.6对象模型 156
6.6.1表示类的符号 156
6.6.2表示关系的符号 158
6.7动态模型 162
6.8功能模型 163
6.9 3种模型之间的关系 163
小结 164
习题 164
第7章 面向对象分析 166
7.1分析过程 166
7.1.1概述 166
7.1.2 3个子模型与5个层次 167
7.2需求陈述 168
7.2.1书写要点 168
7.2.2例子 168
7.3建立对象模型 169
7.3.1确定类与对象 170
7.3.2确定关联 171
7.3.3划分主题 174
7.3.4确定属性 174
7.3.5识别继承关系 176
7.3.6反复修改 177
7.4建立动态模型 179
7.4.1编写脚本 179
7.4.2设想用户界面 180
7.4.3画事件跟踪图 181
7.4.4画状态图 182
7.4.5审查动态模型 184
7.5建立功能模型 184
7.6定义服务 186
7.7面向对象分析实例 186
7.7.1需求陈述 187
7.7.2建立对象模型 187
7.7.3建立动态模型 188
7.7.4建立功能模型 190
7.7.5进一步完善 190
小结 191
习题 192
第8章 面向对象设计 194
8.1面向对象设计的准则 194
8.2启发规则 196
8.3系统分解 197
8.3.1子系统之间的两种交互方式 198
8.3.2组织系统的两种方案 199
8.3.3设计系统的拓扑结构 199
8.4设计问题域子系统 199
8.5设计人—机交互子系统 201
8.5.1设计人—机交互界面的准则 201
8.5.2设计人—机交互子系统的策略 202
8.6设计任务管理子系统 203
8.6.1分析并发性 203
8.6.2设计任务管理子系统 204
8.7设计数据管理子系统 205
8.7.1选择数据存储管理模式 205
8.7.2设计数据管理子系统 206
8.7.3例子 207
8.8设计类中的服务 208
8.8.1确定类中应有的服务 208
8.8.2设计实现服务的方法 208
8.9设计关联 209
8.10设计优化 210
8.10.1确定优先级 210
8.10.2提高效率的几项技术 211
8.10.3调整继承关系 212
8.11面向对象分析与设计实例 213
8.11.1面向对象分析 214
8.11.2面向对象设计 215
小结 220
习题 220
第9章 面向对象实现 222
9.1程序设计语言 222
9.1.1面向对象语言的优点 222
9.1.2面向对象语言的技术特点 223
9.1.3选择面向对象语言 226
9.2程序设计风格 226
9.2.1提高可重用性 227
9.2.2提高可扩充性 228
9.2.3提高健壮性 229
9.3测试策略 229
9.3.1面向对象的单元测试 230
9.3.2面向对象的集成测试 230
9.3.3面向对象的确认测试 230
9.4设计测试用例 230
9.4.1测试类的方法 231
9.4.2集成测试方法 232
小结 234
习题 234
第10章 统一建模语言 236
10.1概述 236
10.1.1 UML的产生和发展 236
10.1.2 UML的系统结构 237
10.1.3 UML的图 238
10.1.4 UML的应用领域 239
10.2静态建模机制 240
10.2.1用例 240
10.2.2类图和对象图 244
10.3动态建模机制 245
10.3.1消息 245
10.3.2状态图 246
10.3.3顺序图 247
10.3.4协作图 248
10.3.5活动图 249
10.4描述物理架构的机制 249
10.4.1逻辑架构和物理架构 250
10.4.2构件图 250
10.4.3部署图 250
10.5使用和扩展UML 252
10.5.1使用UML的准则 252
10.5.2扩展UML的机制 253
小结 253
习题 254
第4篇 软件项目管理 257
第11章 计划 257
11.1度量软件规模 257
11.1.1代码行技术 257
11.1.2功能点技术 258
11.2 工作量估算 260
11.2.1静态单变量模型 260
11.2.2动态多变量模型 260
11.2.3 COCOMO2模型 261
11.3进度计划 263
11.3.1基本原则 264
11.3.2估算软件开发时间 264
11.3.3 Gantt图 265
11.3.4 工程网络 266
11.3.5估算进度 267
11.3.6关键路径 269
11.3.7机动时间 269
小结 270
习题 271
第12章 组织 273
12.1民主制程序员组 273
12.2主程序员组 274
12.3现代程序员组 276
12.4软件项目组 277
12.4.1 3种组织方式 277
12.4.2 4种组织范型 279
小结 279
习题 279
第13章 控制 281
13.1风险管理 281
13.1.1软件风险分类 281
13.1.2风险识别 282
13.1.3风险预测 286
13.1.4处理风险的策略 287
13.2质量保证 289
13.2.1软件质量 289
13.2.2软件质量保证措施 290
13.3配置管理 292
13.3.1软件配置 292
13.3.2软件配置管理过程 294
小结 299
习题 299
第14章 软件维护与软件文档 301
14.1软件维护 301
14.1.1软件维护的过程 301
14.1.2软件维护的分类 303
14.1.3软件的可维护性 303
14.1.4软件维护的副作用 304
14.2软件文档 305
小结 307
习题 307
第5篇 高级课题 309
第15章 形式化方法 309
15.1概述 309
15.1.1非形式化方法的缺点 309
15.1.2软件开发过程中的数学 310
15.1.3应用形式化方法的准则 310
15.2有穷状态机 311
15.2.1基本概念 311
15.2.2电梯问题 312
15.2.3评论 314
15.3 Petri网 315
15.3.1基本概念 315
15.3.2应用实例 316
15.4 Z语言 317
15.4.1简介 318
15.4.2评论 319
小结 320
习题 320
第16章 软件重用 322
16.1可重用的软件成分 322
16.2软件重用过程 323
16.2.1构件组装模型 323
16.2.2类构件 324
16.2.3重用过程模型 325
16.3领域工程 326
16.3.1分析过程 326
16.3.2领域特征 327
16.3.3结构建模和结构点 328
16.4开发可重用的构件 328
16.4.1为了重用的分析与设计 328
16.4.2基于构件的开发 329
16.5分类和检索构件 330
16.5.1描述可重用的构件 330
16.5.2重用环境 332
16.6软件重用的效益 333
小结 334
习题 334
参考文献 335