第1章 软件工程概述 1
1.1 软件 1
1.1.1 软件的定义 2
1.1.2 软件的特点 2
1.1.3 软件的产生与发展 3
1.2 软件危机 4
1.2.1 软件危机的产生 4
1.2.2 软件危机的表现与原因 5
1.3 软件工程 6
1.3.1 软件工程的定义 6
1.3.2 软件工程的目标 6
1.3.3 软件工程的原则 7
1.4 软件生存周期 7
1.5 软件开发模型 9
1.5.1 瀑布模型 10
1.5.2 快速原型模型 11
1.5.3 增量模型 12
1.5.4 喷泉模型 12
1.5.5 螺旋模型 13
1.6 实例解析 14
本章小结 15
习题1 16
第2章 可行性研究和需求分析 18
2.1 软件的可行性研究 18
2.1.1 可行性研究的任务 18
2.1.2 可行性研究步骤 19
2.1.3 可行性研究的文档 20
2.2 需求分析 21
2.2.1 需求分析的重要性 21
2.2.2 需求分析的任务 21
2.2.3 需求分析的步骤 23
2.3 系统流程图 24
2.4 数据流图 26
2.4.1 数据流图中的符号 26
2.4.2 设计数据流图的步骤 28
2.4.3 数据流图的绘制 29
2.5 数据字典 32
2.5.1 数据字典的内容及格式 32
2.5.2 数据字典的用途 34
2.5.3 数据字典的实现 34
2.6 实例解析 35
本章小结 36
习题2 37
第3章 概要设计 39
3.1 概要设计的任务 39
3.1.1 概要设计的任务 39
3.1.2 概要设计说明书的主要内容 40
3.2 设计过程 40
3.3 设计原理 42
3.3.1 模块化 42
3.3.2 抽象与逐步求精 43
3.3.3 信息隐蔽 44
3.3.4 模块独立性 45
3.4 描绘软件结构的图形工具 47
3.4.1 软件结构图 47
3.4.2 层次图 49
3.5 启发规则 50
3.6 面向数据流的设计方法 52
3.6.1 变换分析 53
3.6.2 事务分析 54
3.6.3 设计优化 55
3.7 实例解析 55
本章小结 60
习题3 60
第4章 详细设计 62
4.1 详细设计的任务与原则 62
4.1.1 详细设计的任务 62
4.1.2 详细设计的原则 63
4.2 结构化程序设计 63
4.2.1 结构化设计技术的形成 63
4.2.2 结构化设计技术的概念 64
4.2.3 结构化程序设计的原则 65
4.3 过程设计的工具 65
4.3.1 程序流程图PFC 65
4.3.2 盒图N-S 66
4.3.3 问题分析图PAD 66
4.3.4 过程设计语言PDL 67
4.3.5 判定表(Decision Table) 68
4.3.6 判定树 69
4.4 用户界面设计 70
4.4.1 用户界面应具备的特性及设计过程 70
4.4.2 用户界面的风格 70
4.4.3 用户界面的基本类型 72
4.4.4 用户界面设计指南 72
4.5 面向数据结构的设计方法 74
4.5.1 Jackson方法简介 74
4.5.2 Jackson方法的设计过程 75
4.6 程序复杂程度的定量度量 78
4.6.1 McCabe度量法 78
4.6.2 Halstead方法 79
4.7 实例解析 80
本章小结 81
习题4 82
第5章 面向对象的方法 84
5.1 面向对象方法概述 84
5.1.1 传统软件工程方法存在的问题 84
5.1.2 面向对象方法概述 85
5.1.3 面向对象的基本概念 88
5.1.4 面向对象的开发方法 92
5.2 面向对象分析 94
5.2.1 面向对象分析基本过程及原则 95
5.2.2 确定对象 98
5.2.3 确定结构 99
5.2.4 确立主题 100
5.2.5 确定属性 100
5.2.6 确定服务和消息 101
5.3 面向对象设计 102
5.3.1 面向对象设计的准则 102
5.3.2 面向对象设计的内容 104
5.3.3 人机交互子系统的设计 105
5.3.4 问题域子系统的设计 106
5.3.5 任务管理子系统的设计 107
5.3.6 数据管理子系统的设计 108
5.4 实例解析 108
本章小结 112
习题5 113
第6章 统一建模语言UML 115
6.1 UML概述 115
6.1.1 UML的产生和发展 115
6.1.2 UML的组成 116
6.1.3 UML的主要特点 117
6.1.4 UML的应用 117
6.2 通用模型元素 118
6.2.1 模型元素 118
6.2.2 约束 119
6.2.3 依赖关系 119
6.2.4 细化 120
6.2.5 注释 120
6.3 UML的静态建模机制 120
6.3.1 用例图 121
6.3.2 类图和对象图 124
6.3.3 包 130
6.3.4 构件图 131
6.3.5 配置图 132
6.4 UML的动态建模机制 132
6.4.1 消息 133
6.4.2 顺序图 133
6.4.3 协作图 134
6.4.4 状态图 135
6.4.5 活动图 137
6.5 实例解析 140
本章小结 144
习题6 145
第7章 软件测试 147
7.1 编码 147
7.1.1 程序设计语言的选择 147
7.1.2 程序设计风格 149
7.2 软件测试基础 151
7.2.1 软件测试的目的 151
7.2.2 软件测试的特点和原则 152
7.2.3 软件测试的基本步骤 153
7.2.4 静态分析与动态测试 153
7.3 白盒测试技术 154
7.3.1 逻辑覆盖 154
7.3.2 基本路径测试 157
7.3.3 条件测试 158
7.3.4 循环测试 158
7.3.5 白盒法测试步骤的总结 159
7.4 黑盒测试技术 159
7.4.1 等价分类法 159
7.4.2 边界值分析法 160
7.4.3 错误推测法 161
7.4.4 因果图法 161
7.4.5 综合策略 161
7.5 软件测试过程 162
7.5.1 单元测试 162
7.5.2 集成测试 163
7.5.3 确认测试 165
7.5.4 系统测试 166
7.6 调试 166
7.6.1 调试的目的 166
7.6.2 调试方法 166
7.6.3 调试原则 167
7.7 实例解析 168
本章小结 171
习题7 171
第8章 软件维护 173
8.1 软件维护的内容 173
8.1.1 软件维护的定义 173
8.1.2 软件维护的类型及策略 174
8.2 软件维护的特点 175
8.3 软件维护过程 176
8.3.1 维护组织 176
8.3.2 维护工作的流程 177
8.3.3 维护技术 178
8.4 软件的可维护性 179
8.4.1 软件可维护性的定义 179
8.4.2 可维护性的度量 179
8.4.3 提高可维护性的方法 181
8.5 软件再工程过程 183
8.6 实例解析 185
本章小结 186
习题8 187
第9章 软件项目管理 189
9.1 度量软件规模 189
9.1.1 面向规模的度量 190
9.1.2 面向功能的度量 190
9.2 成本估算 192
9.2.1 软件开发成本估计方法 192
9.2.2 成本估算模型 193
9.3 进度计划 194
9.3.1 进度安排的方法 194
9.3.2 制定开发进度计划 196
9.4 人员组织 196
9.5 质量保证 198
9.6 软件配置管理 200
9.6.1 软件配置项(简称SCI) 200
9.6.2 基线 200
9.6.3 软件配置管理的过程 201
9.7 能力成熟度模型 203
9.7.1 CMM概述 203
9.7.2 CMM的五个级别详述 204
9.7.3 关键过程域 204
9.7.4 应用软件过程评估 206
9.8 实例解析 206
本章小结 207
习题9 207
第10章 综合应用 209
10.1 “图书馆管理信息系统”的立项背景 209
10.2 可行性研究 210
10.2.1 现有系统存在的问题 210
10.2.2 新系统的功能 210
10.2.3 软件开发环境 211
10.2.4 可行性分析 211
10.3 需求分析 212
10.3.1 需求分析概述 212
10.3.2 组织结构调查 212
10.3.3 系统用户分析 213
10.3.4 UML用例图建模 213
10.3.5 数据流图 213
10.3.6 数据字典 215
10.3.7 IPO图 218
10.3.8 用户其他需求 219
10.4 概要设计 219
10.4.1 系统结构设计 219
10.4.2 数据库设计 221
10.5 详细设计 226
10.5.1 登录模块详细设计 226
10.5.2 读者管理子系统详细设计 227
10.6 系统实现 231
10.6.1 登录窗体 231
10.6.2 读者管理 233
10.7 系统测试 235
10.7.1 功能测试 235
10.7.2 系统测试 238
10.7.3 测试结论 238
本章小结 238
第11章 实训 239
11.1 实训指导 239
11.2 实训流程 240
11.3 实训内容 242
实训1 学校排课系统 242
实训2 学校教材定购系统 242
实训3 机票预定系统 243
实训4 学生公寓管理系统 243
实训5 实训室设备管理系统 243
参考文献 245