目 录
第1章 软件工程概述 1
1.1 软件危机 2
1.1.1 工程学科的发展历程 2
1.1.2 软件危机的介绍 3
1.1.3 软件危机的原因 5
1.1.4 消除软件危机的途径 6
1.2 软件工程 6
1.2.1 软件工程的出现 7
1.2.2 软件工程的基本原理 12
1.3 本章小结 14
1.4 思考与练习 15
第2章 软件过程 16
2.1 软件生命周期 16
2.1.1 为什么使用软件生命周期 16
2.1.2 软件生命周期的各个阶段 17
2.1.3 阶段出入标准 17
2.2 瀑布模型 18
2.3 迭代模型 20
2.4 增量模型 21
2.5 螺旋模型 23
2.6 喷泉模型 24
2.7 敏捷软件开发 26
2.7.1 敏捷过程概述 26
2.7.2 极限编程 27
2.8 本章小结 29
2.9 思考与练习 30
第3章 需求分析与软件需求规约 31
3.1 需求定义 32
3.1.1 清晰明确 32
3.1.2 没有歧义 32
3.1.3 一致 32
3.1.4 具有优先级 33
3.1.5 可验证 34
3.1.6 应避免使用的词 34
3.2 需求分类 35
3.2.1 受众导向的需求 35
3.2.2 FURPS 36
3.2.3 FURPS+ 37
3.2.4 通用需求 38
3.3 需求记录与分析 39
3.3.1 UML记录 39
3.3.2 用户故事记录 39
3.3.3 原型记录 40
3.3.4 需求说明 41
3.3.5 需求分析 41
3.4 软件需求规约 42
3.4.1 SRS文档内容 42
3.4.2 功能需求 43
3.4.3 如何识别功能需求 44
3.4.4 可追踪性 45
3.4.5 优质SRS文档的特征 45
3.5 本章小结 46
3.6 思考与练习 46
第4章 结构化分析 47
4.1 概述 47
4.2 实体-关系图 48
4.2.1 E-R图 49
4.2.2 实体之间的联系 51
4.2.3 案例分析-图书借阅管理系统 53
4.3 数据流图 54
4.3.1 数据流图及符号 54
4.3.2 同步和异步操作 55
4.3.3 气泡的编号 56
4.3.4 范围图 56
4.3.5 开发一个系统的DFD模型 56
4.3.6 案例分析-学籍管理系统 57
4.4 状态转换图 59
4.4.1 状态转换图概述 59
4.4.2 状态转换图的符号表示 60
4.4.3 案例分析-机票预定系统 60
4.5 数据字典 61
4.6 本章小结 62
4.7 思考与练习 63
第5章 结构化设计 64
5.1 结构化设计与结构化分析的关系 64
5.2 结构化设计的概念和原理 66
5.2.1 模块化 67
5.2.2 抽象 67
5.2.3 逐步求精 68
5.2.4 信息隐藏 68
5.3 度量模块独立性的标准 69
5.3.1 内聚 69
5.3.2 耦合 70
5.4 启发规则 71
5.4.1 什么是启发式? 71
5.4.2 典型的启发式规则 72
5.5 体系结构设计 73
5.5.1 典型的数据流类型和体系结构 73
5.5.2 基于数据流方法的设计过程 74
5.5.3 映射方法 76
5.6 接口设计 77
5.6.1 接口设计的分类 77
5.6.2 人机交互界面 78
5.6.3 设计原则 78
5.7 数据设计 79
5.7.1 文件设计 79
5.7.2 数据库设计 80
5.8 过程设计 80
5.8.1 结构化程序设计语言与伪代码 81
5.8.2 程序流程图 82
5.8.3 盒图 83
5.8.4 PAD图 84
5.8.5 判定表与判定树 84
5.9 面向数据结构的设计方法 85
5.9.1 Jackson方法 85
5.9.2 Jackson图及其优缺点 86
5.9.3 改进Jackson图 87
5.10 本章小结 90
5.11 思考与练习 91
第6章 面向对象分析 92
6.1 面向对象方法学概述 92
6.2 面向对象方法学的优点 94
6.3 面向对象分析过程 94
6.3.1 概述 94
6.3.2 三个子模型 95
6.3.3 五个层次 96
6.4 需求陈述 96
6.5 建立对象模型 97
6.5.1 创建对象模型 97
6.5.2 确定类与对象 97
6.5.3 确定关联 98
6.5.4 划分主题 99
6.5.5 确定属性 100
6.5.6 识别继承关系 101
6.6 建立动态模型 101
6.6.1 编写脚本 101
6.6.2 设计用户界面 102
6.6.3 确定时间跟踪图 102
6.6.4 确定状态图 103
6.6.5 审查动态模型 104
6.7 建立功能模型 104
6.8 定义服务 105
6.9 本章小结 105
6.10 思考与练习 106
第7章 面向对象设计 108
7.1 面向对象设计原则 108
7.2 启发规则 123
7.3 系统分解 125
7.3.1 分解思想及子系统相关概念 126
7.3.2 面向对象的设计模型 126
7.3.3 子系统之间的交互方式 128
7.3.4 组织系统的方案 129
7.4 设计问题域子系统 129
7.5 设计人-机交互子系统 130
7.5.1 设计人-机交互界面的概念 131
7.5.2 设计人-机交互界面的准则 131
7.5.3 设计人-机交互子系统的策略 132
7.6 设计任务管理子系统 133
7.6.1 设计任务管理子系统的必要性 133
7.6.2 设计步骤 134
7.7 设计数据管理子系统 135
7.7.1 选择数据存储管理模式 135
7.7.2 设计数据库管理子系统 136
7.8 设计类中的服务 137
7.8.1 确定类中应有的服务 137
7.8.2 设计实现服务的方法 138
7.9 设计关联 139
7.10 设计优化 140
7.10.1 确定优先级 140
7.10.2 提高效率的技术 141
7.10.3 调整继承关系 141
7.11 本章小结 142
7.12 思考与练习 143
第8章 统一建模语言 144
8.1 概述 144
8.1.1 UML产生 144
8.1.2 UML图 146
8.1.3 UML的应用领域 148
8.2 静态建模机制 149
8.2.1 用例图 149
8.2.2 类图 156
8.3 动态建模机制 161
8.3.1 消息 161
8.3.2 顺序图 162
8.3.3 协作图 163
8.3.4 状态图 164
8.3.5 活动图 165
8.4 本章小结 166
8.5 思考与练习 167
第9章 编码与测试 168
9.1 编码概述 169
9.2 测试目的 171
9.3 bug产生的原因 171
9.4 测试级别 174
9.4.1 单元测试 174
9.4.2 集成测试 176
9.4.3 自动化测试 177
9.4.4 组件接口测试 178
9.4.5 系统测试 178
9.4.6 验收性测试 179
9.4.7 其他测试类型 179
9.5 测试技术 181
9.5.1 穷举测试 181
9.5.2 黑盒测试 182
9.5.3 白盒测试 183
9.5.4 灰盒测试 188
9.6 调试 188
9.6.1 调试方法 189
9.6.2 调试指南 189
9.7 程序分析工具 190
9.7.1 静态分析工具 190
9.7.2 动态分析工具 190
9.8 本章小结 191
9.9 思考与练习 191
第10章 软件项目管理 193
10.1 项目管理概述 193
10.2 估算软件规模 196
10.2.1 代码行技术 196
10.2.2 功能点技术 197
10.3 估算工作量 198
10.3.1 静态单变量模型 199
10.3.2 动态多变量模型 199
10.3.3 COCOMO II模型 200
10.4 进度管理 201
10.4.1 PERT图 201
10.4.2 关键路径 205
10.4.3 甘特图 208
10.4.4 软件日程安排 209
10.4.5 估算时间 209
10.5 质量保证 211
10.5.1 软件质量 212
10.5.2 软件质量管理体系 212
10.6 ISO 9000 213
10.6.1 什么是ISO 9000认证 213
10.6.2 软件行业的ISO 9000 214
10.6.3 为什么要获得ISO 9000认证 214
10.6.4 如何获得ISO 9000认证 215
10.6.5 ISO 9001需求的显著特征 215
10.6.6 ISO 9000认证的缺点 216
10.7 能力成熟度模型 216
10.8 本章小结 218
10.9 思考与练习 219
参考文献 220