第1篇 软件工程学概述 1
第1章 概述 1
1.1基本概念 1
1.1.1软件 2
1.1.2软件危机 6
1.1.3软件工程 9
1.1.4软件生命周期 13
1.1.5软件过程模型 16
1.1.6软件工程面临的挑战 24
1.2软件工程从业人员的职业和道德素养 24
习题1 27
第2章 计算机系统工程 28
2.1系统与系统工程 29
2.1.1系统总体特性 29
2.1.2硬件和硬件工程 30
2.1.3软件和软件工程 31
2.1.4人机交互工程 33
2.1.5数据库工程 34
2.2系统模型与建模活动 35
2.2.1系统模型 35
2.2.2系统建模及模拟 36
2.3系统规格及评审说明 38
2.3.1系统规格 38
2.3.2评审说明 38
习题2 39
第2篇 软件定义 40
第3章 可行性研究 40
3.1可行性研究的任务 40
3.2可行性研究过程 41
3.3系统流程元素及模型表达 43
3.3.1元素符号 43
3.3.2举例 45
3.4成本/效益分析 45
3.4.1成本估计 45
3.4.2成本/效益分析方法 46
3.5技术分析 48
3.6方案的分配与权衡 49
习题3 50
第4章 结构化需求分析 52
4.1需求分析基础 52
4.1.1需求分析的任务与原则 52
4.1.2需求初步获取技术 53
4.1.3需求建模 55
4.1.4问题抽象、问题分解与多视点分析 56
4.1.5支持需求分析的快速原型技术 56
4.1.6需求规格说明与评审 57
4.2面向数据流的结构化需求分析方法 59
4.2.1实体-联系图 59
4.2.2状态转换图 62
4.2.3数据流图 64
4.3其他图形工具 70
4.3.1层次方框图 70
4.3.2 Wamier图 71
4.3.3 IPO图 72
习题4 73
第5章 面向对象的需求分析过程 74
5.1面向对象的概念与思想 74
5.2 UML 77
5.2.1 UML的语言机制 77
5.2.2基于UML的软件开发过程 80
5.3基于UML的需求分析 82
5.3.1开发场景 83
5.3.2生成用例 84
5.3.3活动图细化用例 85
5.3.4生成用例图 87
5.3.5建立顶层架构 87
5.3.6建立领域概念模型 90
习题5 92
第3篇 软件开发与维护 93
第6章 体系结构设计 93
6.1系统构成 95
6.1.1容器模型 96
6.1.2客户机/服务器模型 97
6.1.3分层模型 98
6.2控制模型 99
6.2.1集中式控制 99
6.2.2事件驱动系统 101
6.3模块化分解 102
6.3.1对象模型 103
6.3.2数据流模型 104
6.4领域相关的体系结构 105
6.4.1类模型 105
6.4.2参考体系结构 106
习题6 107
第7章 结构化总体设计 109
7.1软件设计的基本概念和原理 109
7.1.1抽象 109
7.1.2信息隐蔽 110
7.1.3模块化设计 110
7.1.4模块独立 111
7.1.5耦合 112
7.1.6内聚 112
7.2软件结构的描绘工具 113
7.2.1层次图和HIPO图 113
7.2.2结构图 114
7.3面向数据流的设计过程 115
7.3.1基本概念和设计过程 116
7.3.2变换分析 117
7.3.3事务分析 123
7.4启发式设计 126
7.5设计优化原则 129
习题7 129
第8章 结构化详细设计 130
8.1结构化程序设计基础 130
8.2人机界面设计 132
8.2.1设计问题 132
8.2.2设计过程 134
8.2.3人机界面设计指南 135
8.3过程设计的工具 137
8.3.1程序流程图 137
8.3.2盒图(N-S图) 138
8.3.3 PAD图 138
8.3.4判定表 140
8.3.5判定树 141
8.3.6过程设计语言 142
8.4面向数据结构的设计方法 142
8.4.1 Jackson图 143
8.4.2改进的Jackson图 144
8.4.3 Jackson方法 145
8.5程序复杂程度的定量度量 149
8.5.1 McCabe方法 149
8.5.2 Halstead方法 152
习题8 152
第9章 面向对象的软件设计方法 155
9.1设计用例实现方案 156
9.1.1顺序图 156
9.1.2协作图 157
9.1.3提取边界类、实体类和控制类 158
9.1.4构造交互图 159
9.1.5精化类图 161
9.2设计技术支撑方案 163
9.2.1数据持久存储服务 163
9.2.2并发与同步控制服务 164
9.2.3技术支撑方案与用例实现方案的融合 164
9.3用户界面设计 164
9.4精化设计模型 165
9.4.1状态图 166
9.4.2精化体系结构 167
9.4.3精化类之间的关系 168
9.4.4精化类的属性和操作 170
9.4.5状态图设计 172
9.4.6活动图设计 172
习题9 173
第10章 面向过程的软件实现 175
10.1编码 176
10.1.1程序设计语言的特性 176
10.1.2程序设计语言的基本机制 177
10.1.3程序设计语言的演变和分类 178
10.1.4程序设计语言的选择 179
10.1.5编程标准 180
10.1.6编程风格 181
10.2测试 182
10.2.1测试目标 182
10.2.2测试准则 183
10.2.3测试方法 183
10.2.4测试步骤 184
10.2.5测试阶段的信息流 185
10.3单元测试 186
10.3.1测试重点 186
10.3.2代码审查 187
10.3.3计算机测试 188
10.4集成测试 189
10.4.1自顶向下集成 190
10.4.2自底向上集成 191
10.4.3不同集成测试策略的比较 192
10.4.4回归测试 192
10.5确认测试 193
10.5.1确认测试的范围 193
10.5.2软件配置复查 194
10.5.3 Alpha和Beta测试 194
10.6白盒测试技术 194
10.6.1逻辑覆盖 195
10.6.2控制结构测试 198
10.7黑盒测试技术 204
10.7.1等价划分 204
10.7.2边界值分析 207
10.7.3错误推测 208
10.8调试 209
10.8.1调试过程 209
10.8.2调试途径 210
10.9软件可靠性 211
习题10 212
第11章 面向对象的软件实现 215
11.1程序设计语言 215
11.1.1面向对象语言的优点 215
11.1.2面向对象语言的技术特点 216
11.1.3选择面向对象语言 220
11.2程序设计风格 220
11.2.1提高可重用性 221
11.2.2提高可扩充性 223
11.2.3提高健壮性 223
11.3测试策略 224
11.3.1面向对象的单元测试 224
11.3.2面向对象的集成测试 225
11.3.3面向对象的确认测试 225
11.4设计测试用例 225
11.4.1测试类的方法 226
11.4.2集成测试方法 227
习题11 230
第12章 软件维护 231
12.1软件维护的分类 231
12.2维护过程 232
12.2.1结构化维护与非结构化维护 232
12.2.2维护成本 233
12.2.3可能存在的问题 233
12.3可维护性 234
12.3.1影响可维护性的因素 234
12.3.2若干量化的测度 234
12.3.3保证可维护性的复审 235
12.4维护活动 235
12.4.1维护组织 235
12.4.2维护的报告与评估 236
12.4.3维护活动的事件流 236
12.44保存维护记录 238
12.4.5评价维护活动 238
12.5维护的副作用 239
12.6逆向工程与重构工程 240
12.6.1恢复信息的级别 240
12.6.2恢复信息的方法 240
习题12 241
第4篇 软件项目管理 242
第13章 软件项目管理 242
13.1估算软件规模 242
13.1.1代码行技术 242
13.1.2功能点技术 243
13.2工作量估算 245
13.2.1静态单变量模型 245
13.22动态多变量模型 245
13.2.3 COCOMO2模型 246
13.3进度计划 248
13.3.1估算开发时间 249
13.3.2 Gantt图 251
13.3.3工程网络 252
13.3.4估算工程进度 253
13.3.5关键路径 255
13.3.6机动时间 255
13.4人员组织 257
13.4.1民主制程序员组 257
13.4.2主程序员组 258
13.4.3现代程序员组 259
13.5质量保证 261
13.5.1软件质量 261
13.5.2软件质量保证措施 262
13.6软件配置管理 265
13.6.1软件配置 265
13.6.2软件配置管理过程 266
13.7能力成熟度模型 268
习题13 271
参考文献 273