第1章 软件工程学概述 1
1.1 软件 1
1.1.1 软件发展历史 1
1.1.2 软件特点 1
1.1.3 软件分类 3
1.2 软件危机 3
1.2.1 软件缺陷案例 3
1.2.2 软件危机产生原因 4
1.3 软件工程研究范畴 5
1.3.1 软件开发方法 5
1.3.2 软件开发工具 6
1.3.3 软件开发过程 7
1.4 软件开发模型 8
1.4.1 瀑布模型 8
1.4.2 原型模型 10
1.4.3 增量模型 10
1.4.4 螺旋模型 11
1.4.5 喷泉模型 12
1.5 软件工程基本原理 13
1.6 软件产业 14
1.6.1 国内外软件产业的现状 14
1.6.2 对软件人才的要求 14
小结 15
习题 15
第2章 软件可行性与项目计划 16
2.1 可行性研究目的 16
2.2 可行性研究内容 16
2.2.1 分析现有系统 16
2.2.2 技术可行性 16
2.2.3 经济可行性 17
2.2.4 其他可行性 17
2.3 可行性研究步骤 18
2.4 项目计划 19
2.4.1 项目计划作用 19
2.4.2 项目计划种类 19
2.4.3 项目计划内容 20
2.4.4 项目计划目的 21
小结 21
习题 22
第3章 软件需求分析 23
3.1 需求分析内容 23
3.2 需求分析困难 24
3.3 需求分析步骤 24
3.4 相关图表 25
3.4.1 实体关系图 26
3.4.2 数据流图 27
3.4.3 数据字典 29
3.4.4 状态转换图 30
3.4.5 层次方框图 30
3.4.6 加工逻辑工具 31
小结 32
习题 32
第4章 软件设计 33
4.1 软件设计概述 33
4.1.1 数据结构设计 33
4.1.2 接口设计 34
4.1.3 过程设计 34
4.2 软件设计的基本原理 34
4.2.1 模块化设计 34
4.2.2 耦合性和内聚性 35
4.2.3 改进软件结构的指导原则 37
4.3 两种设计方法 38
4.3.1 面向数据流设计方法 38
4.3.2 面向数据结构设计方法 39
4.4 软件体系结构 41
4.4.1 二层模式——C/S体系结构 41
4.4.2 三层模式——MVC模式 42
4.5 人机界面设计 43
4.5.1 用户特性 43
4.5.2 人机界面设计原则 44
4.5.3 人机界面设计四个问题 46
4.6 相关图表 47
4.6.1 程序流程图 47
4.6.2 N-S图 48
小结 49
习题 50
第5章 编程 51
5.1 编程语言 51
5.1.1 程序设计语言历史 51
5.1.2 结构化程序设计 52
5.1.3 选择语言的标准 53
5.2 高级程序设计语言 54
5.2.1 面向过程程序设计语言 54
5.2.2 面向对象程序设计语言 55
5.2.3 面向过程与面向对象的区别 57
5.3 编码规范 59
5.3.1 编码风格 59
5.3.2 程序效率 60
5.4 程序调试 63
5.4.1 调试策略 63
5.4.2 三种调试工具 63
小结 65
习题 65
第6章 测试 67
6.1 测试历史演变 67
6.2 测试目的和原则 67
6.3 测试模型 68
6.3.1 V模型 69
6.3.2 W模型 69
6.3.3 H模型 70
6.3.4 X模型 70
6.4 测试用例 71
6.5 测试方法 71
6.5.1 白盒测试 71
6.5.2 黑盒测试 74
6.6 测试生命周期 81
6.6.1 测试计划 81
6.6.2 测试分析 81
6.6.3 测试设计 82
6.6.4 测试执行 82
6.6.5 评估测试 87
6.7 自动测试技术 88
6.7.1 自动化测试适用场合 88
6.7.2 测试工具原理 88
小结 89
习题 90
第7章 软件项目验收与维护 92
7.1 软件项目验收 92
7.1.1 项目结束 92
7.1.2 项目验收过程 92
7.1.3 项目移交与清算 93
7.1.4 项目评价 94
7.2 软件维护 95
7.2.1 软件维护种类 95
7.2.2 软件维护过程 96
7.2.3 软件维护副作用 98
7.2.4 软件可维护性 98
小结 98
习题 99
第8章 软件项目管理 100
8.1 项目管理与软件质量 100
8.1.1 项目管理 100
8.1.2 软件质量 101
8.1.3 软件测试与质量保证 103
8.2 成本管理 103
8.2.1 代码行法 104
8.2.2 功能点法 104
8.2.3 构造型成本模型法 106
8.3 进度管理 107
8.3.1 图示方法 107
8.3.2 活动历时估计 108
8.4 人力资源管理 110
8.4.1 项目人员角色 110
8.4.2 项目组织结构 110
8.5 风险管理 112
8.5.1 风险类型 112
8.5.2 风险管理主要活动 113
8.6 配置管理 114
8.6.1 相关概念 114
8.6.2 配置管理流程 115
小结 116
习题 117
第9章 软件过程 118
9.1 过程改进 118
9.2 ISO 9000系列 118
9.2.1 ISO 9000-3介绍 119
9.2.2 ISO/IEC 9126标准 120
9.3 CMM/PSP/TSP 120
9.3.1 软件能力成熟度模型 120
9.3.2 个体软件过程 122
9.3.3 群组软件过程 123
9.4 ISO/IEC 15504过程评估 124
9.5 其他软件过程 125
9.5.1 Rational统一过程 126
9.5.2 敏捷过程 129
9.5.3 微软解决方案框架 130
小结 132
习题 133
第10章 面向对象开发与UML 134
10.1 面向对象开发过程 134
10.1.1 面向对象分析 134
10.1.2 面向对象设计 134
10.1.3 面向对象实现 135
10.2 统一建模语言 137
10.2.1 UML简介 137
10.2.2 UML模型图概述 138
10.2.3 用例图、时序图、状态图举例说明 138
10.3 UML在三种模型中的应用 140
10.3.1 对象模型 140
10.3.2 动态模型 144
10.3.3 功能模型 148
小结 149
习题 149
第11章 软件工具与开发环境 151
11.1 软件工具与开发环境 151
11.2 软件工具分类 151
11.3 通用项目管理工具 152
11.4 分析与设计工具 153
11.4.1 Project 153
11.4.2 GanttProject 155
11.4.3 Excel 156
11.4.4 Visio 156
11.4.5 PowerDesigner 156
11.5 软件测试工具 158
11.5.1 测试管理软件TestDirector 158
11.5.2 功能测试工具WinRunner 158
11.5.3 性能测试工具LoadRunner 158
11.5.4 单元测试工具JUnit 158
11.6 缺陷跟踪工具 163
11.6.1 Rational ClearQuest 164
11.6.2 JIRA 164
11.6.3 Bugzilla 165
11.7 软件配置工具 165
11.7.1 Subversion (SVN) 165
11.7.2 VSS 165
11.7.3 ClearCase 166
11.7.4 CVS 166
11.8 UML工具 166
11.8.1 Rational Rose 166
11.8.2 ArgoUML 167
小结 169
习题 169
第12章 文档 170
12.1 文档作用 170
12.2 文档编制原则 170
12.3 文档分类 171
12.3.1 可行性研究报告 172
12.3.2 项目开发计划 172
12.3.3 软件需求说明书 172
12.3.4 概要设计说明书 173
12.3.5 详细设计说明书 173
12.3.6 测试计划 174
12.3.7 测试分析报告 174
12.3.8 用户手册 174
12.3.9 项目开发总结报告 174
小结 174
习题 174
第13章 软件工程进展 175
13.1 软件外包 175
13.1.1 外包分类 175
13.1.2 外包项目监理 176
13.2 开源软件 176
13.2.1 开源软件文档 177
13.2.2 开源软件协议 177
13.2.3 开源软件简介 178
13.3 净室软件工程 180
13.3.1 净室软件工程历史 180
13.3.2 净室软件工程内容 180
13.4 软件再工程 182
13.4.1 设计恢复 182
13.4.2 逆向工程 182
13.4.3 正向工程 183
13.4.4 重构 183
13.5 软件复用 183
13.5.1 软件复用分类 184
13.5.2 软件复用技术 184
13.6 面向方面的编程 185
13.6.1 AOP概述 185
13.6.2 AOP术语 186
13.6.3 AOP语言 187
13.6.4 AOP研究方向 187
13.7 多Agent软件体系结构 187
13.7.1 Agent概述 187
13.7.2 面向对象与面向代理 188
13.7.3 MAS系统 189
13.7.4 MAS优点 189
13.8 网格动态体系结构 190
13.8.1 基本概念 190
13.8.2 网格的定义 190
13.8.3 网格的技术特征 191
13.8.4 网格的体系结构 191
小结 193
习题 193
第14章 软件工程案例 194
14.1 面向过程开发案例——学生宿舍管理系统 194
14.1.1 需求分析 195
14.1.2 软件设计 199
14.1.3 系统实现 201
14.2 面向对象开发案例——广告管理系统 202
14.2.1 需求分析 202
14.2.2 软件设计 202
14.2.3 系统实现 205
小结 205
习题 205
第15章 软件工程实验指导 206
15.1 实验内容 206
15.1.1 实验目的 206
15.1.2 实验要求 206
15.1.3 实验组织形式 206
15.2 实验题目 207
15.2.1 工资管理系统需求 207
15.2.2 学校课程安排系统需求 207
15.2.3 学校教材订购系统需求 208
15.2.4 实验室设备管理系统需求 208
15.2.5 机票预订系统需求 209
小结 209
习题 209
参考文献 210