第一版前言5
修订版(第二版)前言7
第三版前言9
第四版前言11
第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.5小结21
习题122
第2章可行性研究25
2.1可行性研究的任务25
2.2可行性研究过程26
2.3系统流程图282.3.1符号28
2.3.2例子28
2.3.3分层30
2.4数据流图30
软件工程导论目录2.4.1符号30
2.4.2例子32
2.4.3命名34
2.4.4用途35
2.5数据字典37
2.5.1数据字典的内容37
2.5.2定义数据的方法37
2.5.3数据字典的用途38
2.5.4数据字典的实现39
2.6成本/效益分析39
2.6.1成本估计40
2.6.2成本/效益分析的方法41
2.7小结43
习题243
第3章需求分析45
3.1需求分析的任务46
3.1.1确定对系统的综合要求46
3.1.2分析系统的数据要求47
3.1.3导出系统的逻辑模型48
3.1.4修正系统开发计划48
3.2与用户沟通获取需求的方法48
3.2.1访谈48
3.2.2面向数据流自顶向下求精49
3.2.3简易的应用规格说明技术49
3.2.4快速建立软件原型51
3.3分析建模与规格说明52
3.3.1分析建模52
3.3.2软件需求规格说明52
3.4实体联系图52
3.4.1数据对象53
3.4.2属性53
3.4.3联系53
3.4.4实体联系图的符号54
3.5数据规范化54
3.6状态转换图55
3.6.1状态55
3.6.2事件55
3.6.3符号56
3.6.4例子56
3.7其他图形工具57
3.7.1层次方框图58
3.7.2Warnier图58
3.7.3IPO图59
3.8验证软件需求60
3.8.1从哪些方面验证软件需求的正确性60
3.8.2验证软件需求的方法60
3.8.3用于需求分析的软件工具61
3.9小结62
习题363
第4章形式化说明技术65
4.1概述65
4.1.1非形式化方法的缺点65
4.1.2形式化方法的优点66
4.1.3应用形式化方法的准则66
4.2有穷状态机67
4.2.1概念67
4.2.2例子69
4.2.3评价72
4.3Petri网72
4.3.1概念72
4.3.2例子74
4.4Z语言75
4.4.1简介75
4.4.2评价78
4.5小结78
习题479
第5章总体设计81
5.1设计过程81
5.2设计原理84
5.2.1模块化84
5.2.2抽象85
5.2.3逐步求精85
5.2.4信息隐藏和局部化86
5.2.5模块独立87
5.3启发规则89
5.4描绘软件结构的图形工具92
5.4.1层次图和HIPO图92
5.4.2结构图93
5.5面向数据流的设计方法94
5.5.1概念94
5.5.2变换分析95
5.5.3事务分析101
5.5.4设计优化102
5.6小结103
习题5104
第6章 详细设计107
6.1结构程序设计107
6.2人机界面设计109
6.2.1设计问题109
6.2.2设计过程111
6.2.3人机界面设计指南112
6.3过程设计的工具114
6.3.1程序流程图114
6.3.2盒图(NS图)114
6.3.3PAD图116
6.3.4判定表117
6.3.5判定树118
6.3.6过程设计语言118
6.4面向数据结构的设计方法119
6.4.1Jackson图120
6.4.2改进的Jackson图121
6.4.3Jackson方法122
6.5程序复杂程度的定量度量126
6.5.1McCabe方法127
6.5.2Halstead方法129
6.6小结130
习题6130
第7章 实现135
7.1编码136
7.1.1选择程序设计语言136
7.1.2编码风格137
7.2软件测试基础139
7.2.1软件测试的目标140
7.2.2软件测试准则140
7.2.3测试方法141
7.2.4测试步骤141
7.2.5测试阶段的信息流142
7.3单元测试143
7.3.1测试重点143
7.3.2代码审查144
7.3.3计算机测试145
7.4集成测试146
7.4.1自顶向下集成147
7.4.2自底向上集成148
7.4.3不同集成测试策略的比较149
7.4.4回归测试150
7.5确认测试150
7.5.1确认测试的范围150
7.5.2软件配置复查151
7.5.3Alpha和Beta测试151
7.6白盒测试技术152
7.6.1逻辑覆盖152
7.6.2控制结构测试155
7.7黑盒测试技术161
7.7.1等价划分162
7.7.2边界值分析165
7.7.3错误推测165
7.8调试166
7.8.1调试过程166
7.8.2调试途径168
7.9软件可靠性169
7.9.1基本概念169
7.9.2估算平均无故障时间的方法170
7.10小结172
习题7173
第8章 维护179
8.1软件维护的定义179
8.2软件维护的特点180
8.2.1结构化维护与非结构化维护差别巨大180
8.2.2维护的代价高昂180
8.2.3维护的问题很多181
8.3软件维护过程182
8.4软件的可维护性185
8.4.1决定软件可维护性的因素185
8.4.2文档186
8.4.3可维护性复审187
8.5预防性维护188
8.6软件再工程过程188
8.7小结191
习题8192
第9章面向对象方法学引论193
9.1面向对象方法学概述193
9.1.1面向对象方法学的要点193
9.1.2面向对象方法学的优点195
9.1.3喷泉模型199
9.2面向对象的概念200
9.2.1对象200
9.2.2其他概念202
9.3面向对象建模206
9.4对象模型207
9.4.1类图的基本符号208
9.4.2表示关系的符号209
9.5动态模型215
9.6功能模型215
9.6.1用例图215
9.6.2用例建模218
9.73种模型之间的关系219
9.8小结220
习题9220
第10章面向对象分析223
10.1面向对象分析的基本过程223
10.1.1概述223
10.1.23个子模型与5个层次224
10.2需求陈述225
10.2.1书写要点225
10.2.2例子226
10.3建立对象模型227
10.3.1确定类与对象228
10.3.2确定关联230
10.3.3划分主题233
10.3.4确定属性233
10.3.5识别继承关系236
10.3.6反复修改236
10.4建立动态模型239
10.4.1编写脚本239
10.4.2设想用户界面240
10.4.3画事件跟踪图241
10.4.4画状态图242
10.4.5审查动态模型244
10.5建立功能模型245
10.5.1画出基本系统模型图245
10.5.2画出功能级数据流图245
10.5.3描述处理框功能246
10.6定义服务247
10.7小结247
习题10248
第11章面向对象设计249
11.1面向对象设计的准则249
11.2启发规则251
11.3软件重用253
11.3.1概述253
11.3.2类构件255
11.3.3软件重用的效益256
11.4系统分解257
11.5设计问题域子系统260
11.6设计人机交互子系统263
11.7设计任务管理子系统265
11.8设计数据管理子系统267
11.8.1选择数据存储管理模式267
11.8.2设计数据管理子系统268
11.8.3例子270
11.9设计类中的服务270
11.9.1确定类中应有的服务270
11.9.2设计实现服务的方法271
11.10设计关联272
11.11设计优化273
11.11.1确定优先级273
11.11.2提高效率的几项技术274
11.11.3调整继承关系275
11.12小结277
习题11278
第12章面向对象实现279
12.1程序设计语言279
12.1.1面向对象语言的优点279
12.1.2面向对象语言的技术特点280
12.1.3选择面向对象语言284
12.2程序设计风格284
12.2.1提高可重用性285
12.2.2提高可扩充性287
12.2.3提高健壮性287
12.3测试策略288
12.3.1面向对象的单元测试288
12.3.2面向对象的集成测试289
12.3.3面向对象的确认测试289
12.4设计测试用例289
12.4.1测试类的方法290
12.4.2集成测试方法291
12.5小结293
习题12294
第13章软件项目管理295
13.1估算软件规模295
13.1.1代码行技术295
13.1.2功能点技术296
13.2工作量估算298
13.2.1静态单变量模型298
13.2.2动态多变量模型298
13.2.3COCOMO2模型299
13.3进度计划302
13.3.1估算开发时间302
13.3.2Gantt图304
13.3.3工程网络305
13.3.4估算工程进度306
13.3.5关键路径308
13.3.6机动时间308
13.4人员组织310
13.4.1民主制程序员组310
13.4.2主程序员组311
13.4.3现代程序员组312
13.5质量保证314
13.5.1软件质量314
13.5.2软件质量保证措施316
13.6软件配置管理318
13.6.1软件配置319
13.6.2软件配置管理过程319
13.7能力成熟度模型321
13.8小结324
习题13325
附录327
附录AC++类库管理系统的分析与设计327
A.1面向对象分析327
A.1.1需求327
A.1.2建立对象模型328
A.2面向对象设计329
A.2.1设计类库结构329
A.2.2设计问题域子系统330
A.2.3设计人机交互子系统331
A.2.4设计其他类333
附录B一个汉字行编辑程序的设计335
B.1设计规格说明335
B.1.1外部编辑命令335
B.1.2编辑命令335
B.1.3输出信息336
B.2概要设计337
B.2.1正文文件337
B.2.2两个工作模式339
B.2.3数据元素339
B.2.4过程340
B.3概要设计结果341
B.4详细设计344
B.4.1数据元素344
B.4.2控制数据元素346
B.4.3编辑过程346
B.4.4输入模式的过程347
B.4.5编辑模式的过程348
B.5详细设计结果351
B.5.1编辑程序的详细结构351
B.5.2类PASCAL伪码352
B.5.3实现编辑程序的算法354
参考文献381