第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软件工程的基本原理 7
1.2.3软件工程方法学 9
1.3软件生命周期 11
1.4软件过程 14
1.4.1瀑布模型 15
1.4.2快速原型模型 16
1.4.3增量模型 17
1.4.4螺旋模型 19
1.4.5喷泉模型 21
1.4.6 Rational统一过程 22
1.4.7敏捷过程与极限编程 25
1.4.8微软过程 29
1.5小结 31
习题1 32
第2章 可行性研究 35
2.1可行性研究的任务 35
2.2可行性研究过程 36
2.3系统流程图 38
2.3.1符号 38
2.3.2例子 38
2.3.3分层 40
2.4数据流图 40
2.4.1符号 40
2.4.2例子 42
2.4.3命名 44
2.4.4用途 45
2.5数据字典 47
2.5.1数据字典的内容 47
2.5.2定义数据的方法 47
2.5.3数据字典的用途 48
2.5.4数据字典的实现 49
2.6成本/效益分析 49
2.6.1成本估计 50
2.6.2成本/效益分析的方法 51
2.7小结 53
习题2 53
第3章 需求分析 55
3.1需求分析的任务 56
3.1.1确定对系统的综合要求 56
3.1.2分析系统的数据要求 57
3.1.3导出系统的逻辑模型 58
3.1.4修正系统开发计划 58
3.2与用户沟通获取需求的方法 58
3.2.1访谈 58
3.2.2面向数据流自顶向下求精 59
3.2.3简易的应用规格说明技术 59
3.2.4快速建立软件原型 61
3.3分析建模与规格说明 62
3.3.1分析建模 62
3.3.2软件需求规格说明 62
3.4实体-联系图 62
3.4.1数据对象 63
3.4.2属性 63
3.4.3联系 63
3.4.4实体-联系图的符号 64
3.5数据规范化 64
3.6状态转换图 65
3.6.1状态 65
3.6.2事件 65
3.6.3符号 66
3.6.4例子 66
3.7其他图形工具 67
3.7.1层次方框图 68
3.7.2 Warnier图 68
3.7.3 IPO图 69
3.8验证软件需求 70
3.8.1从哪些方面验证软件需求的正确性 70
3.8.2验证软件需求的方法 70
3.8.3用于需求分析的软件工具 71
3.9小结 72
习题3 73
第4章 形式化说明技术 75
4.1概述 75
4.1.1非形式化方法的缺点 75
4.1.2形式化方法的优点 76
4.1.3应用形式化方法的准则 76
4.2有穷状态机 77
4.2.1概念 77
4.2.2例子 79
4.2.3评价 82
4.3 Petri网 82
4.3.1概念 82
4.3.2例子 84
4.4 Z语言 85
4.4.1简介 85
4.4.2评价 88
4.5小结 88
习题4 89
第5章 总体设计 91
5.1设计过程 91
5.2设计原理 94
5.2.1模块化 94
5.2.2抽象 95
5.2.3逐步求精 95
5.2.4信息隐藏和局部化 96
5.2.5模块独立 97
5.3启发规则 99
5.4描绘软件结构的图形工具 102
5.4.1层次图和HIPO图 102
5.4.2结构图 103
5.5面向数据流的设计方法 104
5.5.1概念 104
5.5.2变换分析 105
5.5.3事务分析 111
5.5.4设计优化 112
5.6小结 113
习题5 114
第6章 详细设计 117
6.1结构程序设计 117
6.2人机界面设计 119
6.2.1设计问题 119
6.2.2设计过程 121
6.2.3人机界面设计指南 122
6.3过程设计的工具 124
6.3.1程序流程图 124
6.3.2盒图 125
6.3.3 PAD图 126
6.3.4判定表 127
6.3.5判定树 128
6.3.6过程设计语言 128
6.4面向数据结构的设计方法 129
6.4.1 Jackson图 130
6.4.2改进的Jackson图 131
6.4.3 Jackson方法 132
6.5程序复杂程度的定量度量 136
6.5.1 McCabe方法 137
6.5.2 Halstead方法 139
6.6小结 140
习题6 140
第7章 实现 145
7.1编码 146
7.1.1选择程序设计语言 146
7.1.2编码风格 147
7.2软件测试基础 149
7.2.1软件测试的目标 150
7.2.2软件测试准则 150
7.2.3测试方法 151
7.2.4测试步骤 151
7.2.5测试阶段的信息流 152
7.3单元测试 153
7.3.1测试重点 153
7.3.2代码审查 154
7.3.3计算机测试 155
7.4集成测试 156
7.4.1自顶向下集成 157
7.4.2自底向上集成 158
7.4.3不同集成测试策略的比较 159
7.4.4回归测试 160
7.5确认测试 160
7.5.1确认测试的范围 160
7.5.2软件配置复查 161
7.5.3 Alpha和Beta测试 161
7.6白盒测试技术 162
7.6.1逻辑覆盖 162
7.6.2控制结构测试 165
7.7黑盒测试技术 171
7.7.1等价划分 172
7.7.2边界值分析 175
7.7.3错误推测 175
7.8调试 176
7.8.1调试过程 176
7.8.2调试途径 178
7.9软件可靠性 179
7.9.1基本概念 179
7.9.2估算平均无故障时间的方法 180
7.10小结 182
习题7 183
第8章 维护 189
8.1软件维护的定义 189
8.2软件维护的特点 190
8.2.1结构化维护与非结构化维护差别巨大 190
8.2.2维护的代价高昂 190
8.2.3维护的问题很多 191
8.3软件维护过程 192
8.4软件的可维护性 194
8.4.1决定软件可维护性的因素 194
8.4.2文档 195
8.4.3可维护性复审 196
8.5预防性维护 197
8.6软件再工程过程 198
8.7小结 200
习题8 201
第9章 面向对象方法学引论 203
9.1面向对象方法学概述 203
9.1.1面向对象方法学的要点 203
9.1.2面向对象方法学的优点 205
9.2面向对象的概念 209
9.2.1对象 209
9.2.2其他概念 211
9.3面向对象建模 215
9.4对象模型 216
9.4.1类图的基本符号 217
9.4.2表示关系的符号 218
9.5动态模型 223
9.6功能模型 224
9.6.1用例图 224
9.6.2用例建模 227
9.7.3种模型之间的关系 228
9.8小结 229
习题9 229
第10章 面向对象分析 231
10.1面向对象分析的基本过程 231
10.1.1概述 231
10.1.2 3个子模型与5个层次 232
10.2需求陈述 233
10.2.1书写要点 233
10.2.2例子 234
10.3建立对象模型 235
10.3.1确定类与对象 236
10.3.2确定关联 238
10.3.3划分主题 241
10.3.4确定属性 241
10.3.5识别继承关系 244
10.3.6反复修改 244
10.4建立动态模型 247
10.4.1编写脚本 247
10.4.2设想用户界面 248
10.4.3画事件跟踪图 249
10.4.4画状态图 250
10.4.5审查动态模型 251
10.5建立功能模型 253
10.5.1画出基本系统模型图 253
10.5.2画出功能级数据流图 254
10.5.3描述处理框功能 254
10.6定义服务 255
10.7小结 256
习题10 256
第11章 面向对象设计 259
11.1面向对象设计的准则 259
11.2启发规则 261
11.3软件重用 263
11.3.1概述 263
11.3.2类构件 265
11.3.3软件重用的效益 266
11.4系统分解 267
11.5设计问题域子系统 270
11.6设计人机交互子系统 273
11.7设计任务管理子系统 275
11.8设计数据管理子系统 277
11.8.1选择数据存储管理模式 277
11.8.2设计数据管理子系统 278
11.8.3例子 280
11.9设计类中的服务 280
11.9.1确定类中应有的服务 280
11.9.2设计实现服务的方法 281
11.10设计关联 282
11.11设计优化 283
11.11.1确定优先级 283
11.11.2提高效率的几项技术 284
11.11.3调整继承关系 285
11.12小结 287
习题11 288
第12章 面向对象实现 289
12.1程序设计语言 289
12.1.1面向对象语言的优点 289
12.1.2面向对象语言的技术特点 290
12.1.3选择面向对象语言 294
12.2程序设计风格 294
12.2.1提高可重用性 295
12.2.2提高可扩充性 297
12.2.3提高健壮性 297
12.3测试策略 298
12.3.1面向对象的单元测试 298
12.3.2面向对象的集成测试 299
12.3.3面向对象的确认测试 299
12.4设计测试用例 299
12.4.1测试类的方法 300
12.4.2集成测试方法 301
12.5小结 303
习题12 304
第13章 软件项目管理 305
13.1估算软件规模 305
13.1.1代码行技术 305
13.1.2功能点技术 306
13.2工作量估算 308
13.2.1静态单变量模型 308
13.2.2动态多变量模型 308
13.2.3 COCOMO2模型 309
13.3进度计划 312
13.3.1估算开发时间 312
13.3.2 Gantt图 314
13.3.3工程网络 315
13.3.4估算工程进度 316
13.3.5关键路径 318
13.3.6机动时间 318
13.4人员组织 320
13.4.1民主制程序员组 320
13.4.2主程序员组 321
13.4.3现代程序员组 322
13.5质量保证 324
13.5.1软件质量 324
13.5.2软件质量保证措施 326
13.6软件配置管理 328
13.6.1软件配置 329
13.6.2软件配置管理过程 329
13.7能力成熟度模型 331
13.8小结 334
习题13 335
附录A C++类库管理系统的分析与设计 337
A.1面向对象分析 337
A.1.1需求 337
A.1.2建立对象模型 338
A.2面向对象设计 339
A.2.1设计类库结构 339
A.2.2设计问题域子系统 340
A.2.3设计人机交互子系统 341
A.2.4设计其他类 344
参考文献 347