1软件工程概论 1
1.1软件危机引发的思考 1
1.1.1软件的发展与软件危机 1
1.1.2产生软件危机的根源 3
1.1.3软件产品的特征 4
1.1.4软件产品的生产过程与软件生存期 4
1.1.5解决软件危机的途径 6
1.2软件工程的概念与原理 6
1.2.1软件工程的概念 6
1.2.2软件工程项目的基本目标 7
1.2.3软件工程与传统工程的区别 7
1.2.4软件工程的基本原理 8
1.2.5软件质量评价 10
1.3软件生命周期模型 10
1.3.1瀑布模型 10
1.3.2演化模型 13
1.3.3螺旋模型 14
1.3.4增量模型 14
1.3.5喷泉模型 18
1.4软件开发方法 19
1.4.1结构化分析与设计方法 19
1.4.2面向对象的分析与设计 22
1.4.3软件工具与软件开发环境 22
习题与思考题 24
2可行性分析 25
2.1可行性分析的主要任务 25
2.1.1分析和澄清问题定义 25
2.1.2确定问题是否值得去解 26
2.2可行性分析的步骤 26
2.2.1复查系统的规模和目标 26
2.2.2通过对现实环境的调查研究,获得更多的信息 26
2.2.5导出可供选择的方案并进行评价 27
2.2.3确定新系统的高层逻辑模型 27
2.2.4对新系统的逻辑模型进行验证并重新定义问题 27
2.2.6向决策人员提交行动建议 28
2.2.7书写文档提交审查 28
2.3可行性分析的技术方法 28
2.3.1系统流程图 28
2.3.2数据流图 31
2.3.3数据字典 34
2.4成本/效益分析 36
2.4.1成本估计 36
2.4.2成本/效益分析 37
习题与思考题 38
3需求分析 40
3.1需求分析的任务 40
3.1.2分析目标系统的数据要求 41
3.1.3导出目标系统的逻辑模型 41
3.1.1确定目标系统的综合要求 41
3.1.4修正软件项目开发计划 42
3.1.5开发原型系统 42
3.1.6编写软件需求规格说明书 42
3.2需求分析的过程 42
3.3数据驱动的分析方法 44
3.3.1数据流图 44
3.3.2数据字典 47
3.4功能驱动的分析方法 49
3.4.1状态迁移图 49
3.4.2 Petri网 51
3.5快速原型驱动的分析方法 53
3.6数据与数据库需求 54
3.6.1 E-R模型 54
3.6.2数据结构的规范化 56
3.7.2软件需求验证的方法 57
3.7.1如何验证软件需求的正确性 57
3.7需求验证 57
习题与思考题 58
4总体设计 60
4.1总体设计的目标与任务 60
4.2软件设计的基本原理 62
4.2.1抽象化 62
4.2.2模块化 62
4.2.3信息隐蔽原理 63
4.2.4模块独立性(模块的内聚性,模块间的耦合性) 63
4.3软件结构准则 66
4.3.1软件结构图 66
4.3.2软件结构设计的优化准则 68
4.4软件设计的图形工具 70
4.4.1 IPO图 70
4.4.2 HIPO图 71
4.5.1变换流分析 72
4.5结构化设计方法 72
4.5.2事务流分析 74
习题与思考题 75
5详细设计 77
5.1详细设计的目标和任务 77
5.2程序的基本结构 78
5.3详细设计工具 79
5.3.1程序流程图 79
5.3.2 N-S图 79
5.3.3 PAD图 81
5.3.4判定表和判定树 82
5.3.5伪码 84
5.4 Jackson方法 85
5.4.1 Jackson图 86
5.4.2 JSP方法 88
5.5 Warnier方法 89
5.4.3 JSD方法 89
习题与思考题 91
6编码实现 93
6.1对源程序质量的要求 93
6.2程序设计的风格 94
6.3程序设计语言的选择 96
6.4程序复杂性度量 97
6.4.1代码行度量法 97
6.4.2 McCabe度量法 97
6.4.3综合度量 99
习题与思考题 99
7面向对象的方法学 102
7.1“面向对象”的概念 102
7.1.1对象 103
7.1.2类 103
7.1.5封装、继承、多态和重载 104
7.1.4消息 104
7.1.3属性、操作和方法 104
7.2面向对象的方法学简介 105
7.2.1面向对象方法的基本活动 106
7.2.2 Coad Yourdon方法 106
7.2.3 OMT方法 107
7.2.4 Booch方法 108
7.2.5 UML技术 109
7.3面向对象的分析 110
7.3.1面向对象分析概述 110
7.3.2面向对象分析的原则 110
7.3.3面向对象分析的基本过程 111
7.4面向对象建模 123
7.4.1面向对象建模概述 123
7.4.2基于UML语言的模型类型 123
7.4.3基于UML语言的建模过程 124
7.4.4建模实例 125
习题与思考题 131
8面向对象的设计与实现 132
8.1面向对象的设计方法 132
8.1.1面向对象的设计概述 133
8.1.2面向对象设计的任务 134
8.1.3面向对象设计的过程 135
8.2基于UML的系统设计 144
8.2.1基于UML的设计模型 144
8.2.2设计模型的结构 144
8.2.3基于UML的设计实例 145
8.3面向对象的实现 147
8.3.1面向对象实现概述 147
8.3.2面向对象实现的基本准则 147
8.3.3面向对象语言的选择 148
8.3.4实现的工作流程 148
习题与思考题 150
9软件测试 151
9.1软件测试的基本概念 151
9.2软件测试的目的和原则 152
9.2.1软件测试的目的 152
9.2.2软件测试的原则 152
9.2.3测试与软件开发各阶段的关系 154
9.3软件测试的方法 154
9.3.1静态测试与动态测试 155
9.3.2黑盒测试与白盒测试 157
9.4白盒测试的测试用例设计 158
9.4.1逻辑覆盖 158
9.4.2基本路径覆盖 163
9.5黑盒测试的测试用例设计 167
9.5.1等价类划分 167
9.5.2边界值分析 170
9.5.4因果图 172
9.5.3错误推测法 172
9.6软件测试的策略(过程/步骤) 175
9.6.1单元测试 176
9.6.2组装集成测试 178
9.6.3确认测试 182
9.6.4系统测试 183
9.7测试终止标准 183
9.8调试 184
9.8.1调试的目的 184
9.8.2调试的技术策略 184
习题与思考题 188
10软件维护 189
10.1维护的概念与内容 189
10.1.1软件维护的定义 189
10.1.2软件维护的内容 190
10.2.1维护机构与维护申请报告 192
10.2软件维护的过程 192
10.2.2软件维护工作流程 193
10.2.3维护档案记录 195
10.2.4维护活动评价 195
10.3软件的可维护性 196
10.3.1软件可维护性的定义与度量 196
10.3.2提高可维护性的方法 201
习题与思考题 202
11软件工程项目管理 204
11.1软件项目管理概述 204
11.1.1软件项目失控原因分析 205
11.1.2软件项目管理的特点 205
11.1.3软件项目管理的内容 206
11.2软件规模度量 208
11.2.1软件度量的分类 208
11.2.2代码行度量法 210
11.2.3功能点度量法 211
11.2.4特征点度量法 212
11.2.5代码行与功能点度量的比较 213
11.3软件开发成本估算 214
113.1估算方法 214
11.3.2分解与类推 215
11.3.3基于代码行和功能点的估算 217
11.3.4经验估算模型 218
11.4软件项目资源管理 221
11.4.1人力资源 221
11.4.2硬件资源计划 223
11.4.3软件资源 224
11.4.4软件复用性及软件部件库 225
11.5进度计划 226
11.5.1进度安排 226
11.5.2甘特图 226
11.5.3工程网络 227
11.5.4软件开发任务的并行性 228
11.6风险管理 229
11.6.1风险识别 230
11.6.2风险估计 230
11.6.3风险评价 231
11.6.4风险驾驭和监控 232
11.7软件工程标准化和软件文档标准化 234
11.7.1软件工程标准化的定义 234
11.7.2软件工程标准化的层次 235
11.7.3文档的作用、分类与编制要求 236
习题与思考题 239
12软件质量保证 240
12.1软件质量模型 240
12.1.1软件质量的定义 240
12.1.2软件质量特性 241
12.1.3 McCall软件质量模型 243
12.2软件质量度量 245
12.2.1软件质量度量概论 245
12.2.2软件正确性度量 246
12.2.3软件可靠性度量 247
12.2.4易使用性和可维护性度量 250
12.3软件质量保证 251
12.3.1软件质量保证的概念 251
12.3.2软件质量保证的任务 252
12.3.3提高软件质量的技术途径 252
12.3.4软件质量保证体系 253
12.4质量检验和评审 254
12.4.1各阶段质量检验的项目 254
12.4.2软件质量检验方法 256
12.4.3软件质量评审 258
12.5.1不成熟的与成熟的软件机构的对比 261
12.5软件能力成熟度模型(CMM) 261
12.5.2软件机构能力成熟度模型 262
12.5.3成熟度级别的内部结构 265
12.5.4关键过程领域 266
12.5.5成熟度提问单 266
12.5.6利用CMM对软件机构进行成熟度评估 268
习题与思考题 269
A可行性研究报告 271
附录软件开发文档编写指南 271
B项目开发计划 274
C需求规格说明书 275
D概要设计说明书 277
E详细设计说明书 279
F测试计划 280
G测试分析报告 281
H开发进度月报 282
参考文献 284