第1篇 面向过程的软件工程第1章 软件危机、软件工程 1
1.1 软件工程的发展史 1
1.1.1 程序设计时代 1
1.1.2 程序系统时代 1
1.1.3 软件工程时代 2
1.2 软件危机主要表现形式 2
1.3 产生软件危机的原因及解决途径 3
1.3.1 产生软件危机的原因 3
1.3.2 解决软件危机的途径 3
1.4 软件和软件工程 4
1.4.1 软件 4
1.4.2 软件工程 4
1.5 软件质量 5
1.6 软件的生存周期及开发模型 5
1.6.1 软件生存周期 5
1.6.2 软件开发模型 7
1.7 习题 12
第2章 可行性研究 13
2.1 可行性研究的目的与任务 13
2.2 可行性研究的步骤 13
2.3 系统流程图 14
2.3.1 系统流程图的符号 15
2.3.2 系统流程图示例 16
2.4 成本-效益分析 16
2.4.1 货币的时间价值 16
2.4.2 投资回收期 17
2.4.3 纯收入 17
2.5 可行性研究报告的主要内容 17
2.6 习题 18
第3章 软件需求分析 19
3.1 需求分析的任务和步骤 19
3.1.1 需求分析的任务 19
3.1.2 需求分析的步骤 20
3.2 需求获取的常用方法 21
3.2.1 常规的需求获取方法 21
3.2.2 快速建立软件原型来获取需求 22
3.3 需求分析的方法 23
3.3.1 功能分解方法 23
3.3.2 结构化分析方法 23
3.3.3 信息建模方法 23
3.3.4 面向对象的分析 24
3.4 结构化分析方法 24
3.4.1 自顶向下逐层分解的分析策略 24
3.4.2 结构化分析描述工具 25
3.4.3 数据流图 25
3.4.4 数据字典 28
3.4.5 加工逻辑的描述 30
3.5 需求分析图形工具 32
3.5.1 层次方框图 32
3.5.2 Warnier图 33
3.5.3 IPO图 33
3.6 SA方法的应用 34
3.7 习题 39
第4章 软件总体设计 40
4.1 软件总体设计的目标和任务 40
4.2 软件设计的概念和原理 40
4.2.1 模块和模块化 40
4.2.2 抽象 41
4.2.3 信息隐蔽和局部化 42
4.2.4 模块独立性及其度量 42
4.3 软件结构设计准则 44
4.4 软件结构设计的图形工具 46
4.4.1 软件结构图 46
4.4.2 层次图 47
4.4.3 HIPO图 47
4.5 结构化设计方法 48
4.5.1 数据流图的类型 48
4.5.2 结构化设计方法的步骤 49
4.5.3 变换型分析设计 49
4.5.4 事务型分析设计 51
4.6 习题 52
第5章 软件详细设计 54
5.1 详细设计的目的与任务 54
5.2 结构化程序设计 54
5.3 详细设计工具 55
5.3.1 程序流程图 55
5.3.2 N-S图 55
5.3.3 PAD图 56
5.3.4 过程设计语言 57
5.4 习题 60
第6章 软件编码 62
6.1 程序设计语言的分类 62
6.1.1 基础语言 62
6.1.2 结构化语言 63
6.1.3 面向对象的语言 64
6.2 程序设计语言的选择 65
6.3 程序设计风格 66
6.3.1 程序内部文档 66
6.3.2 数据说明 67
6.3.3 语句构造 67
6.3.4 输入/输出 67
6.3.5 效率 68
6.4 习题 69
第7章 软件测试 70
7.1 软件测试的目标 70
7.2 软件测试的原则 70
7.3 软件测试方法 71
7.3.1 静态测试与动态测试 71
7.3.2 黑盒测试法与白盒测试法 72
7.4 软件测试用例的设计 73
7.4.1 白盒技术 73
7.4.2 黑盒技术 78
7.5 软件测试过程 82
7.5.1 单元测试 82
7.5.2 集成测试 84
7.5.3 确认测试 86
7.5.4 系统测试 87
7.6 调试 87
7.6.1 调试的目的 87
7.6.2 调试技术 87
7.7 习题 89
第8章 软件维护 90
8.1 软件维护的分类 90
8.2 软件维护的特点 91
8.2.1 结构化维护与非结构化维护 92
8.2.2 维护的代价 93
8.2.3 软件维护中存在的问题 93
8.3 软件可维护性 94
8.3.1 软件可维护性的定义 94
8.3.2 软件可维护性的度量 96
8.3.3 提高软件可维护性的方法 96
8.4 维护的副作用 98
8.5 软件再工程 99
8.5.1 软件再工程与逆向工程的概念 99
8.5.2 实施软件再工程的原因 100
8.5.3 软件再工程技术 101
8.6 习题 102
第2篇 UML与面向对象的软件工程第9章 UML简介 103
9.1 UML概述 103
9.1.1 UML的组成 104
9.1.2 UML的特点和用途 107
9.1.3 UML的模型视图简介 108
9.2 UML软件开发工具简介 110
9.2.1 Rational Rose 110
9.2.2 Visio简介 114
9.3 习题 114
第10章 面向对象的概念 115
10.1 面向对象的方法学 115
10.1.1 面向对象建模 115
10.1.2 面向对象的方法与传统软件方法的比较 118
10.2 对象与类及其UML表示 119
10.2.1 对象 119
10.2.2 类与实例 120
10.2.3 对象属性与操作 120
10.2.4 对象类的关联 123
10.3 聚集、组合、继承和多态 127
10.3.1 聚集与组合 127
10.3.2 抽象与继承 129
10.3.3 多态 131
10.4 习题 132
第11章 对象设计模式 133
11.1 对象设计模式概念 133
11.1.1 历史背景 133
11.1.2 对象设计模式 134
11.1.3 设计模式的分类 135
11.2 几种典型的对象设计模式及应用 136
11.2.1 行为型模式中的职责键模式及应用 136
11.2.2 结构型模式中的外观模式及应用 138
11.2.3 创建型模式中的抽象工厂模式及应用 142
11.3 对象类的高级概念 146
11.3.1 抽象类、参数对象类、型与实现对象类 146
11.3.2 接口 147
11.3.3 版型 148
11.4 组件、包和结点 149
11.4.1 组件 149
11.4.2 包和包图 153
11.4.3 结点 159
11.5 习题 160
第12章 面向对象的软件开发过程 162
12.1 RUP概述 162
12.1.1 RUP的历史 162
12.1.2 RUP的特色 163
12.2 RUP软件开发生命周期和建模 164
12.2.1 RUP软件开发的生命周期 164
12.2.2 RUP的动态结构 165
12.2.3 RUP的静态结构 165
12.2.4 RUP的建模 166
12.3 面向对象软件开发过程的案例分析 167
12.3.1 系统需求 167
12.3.2 系统的静态结构模型 168
12.3.3 顺序图和协作图 168
12.3.4 状态图和活动图 170
12.3.5 组件图和部署图 171
12.4 习题 172
第13章 软件开发工具Rose 173
13.1 Rose的用例图与类图 173
13.1.1 用例图 174
13.1.2 类图 176
13.2 Rose的交互图与状态机图 177
13.2.1 交互图 177
13.2.2 状态机图 180
13.3 包、组件图与部署图 182
13.3.1 包 182
13.3.2 组件图 183
13.3.3 部署图 185
13.4 Rose的代码生成和逆向工程 187
13.4.1 代码生成 187
13.4.2 逆向工程 188
13.5 Rose应用举例 188
13.6 习题 189
第14章 Rose及其应用 190
14.1 Rose的主要功能 190
14.2 Rose的使用 190
14.2.1 Rose主菜单窗口 190
14.2.2 模型与工作方式的组织 192
14.3 教学管理系统的分析与设计 193
14.3.1 系统需求分析 193
14.3.2 系统问题领域分析 194
14.3.3 静态结构模型的建立 198
14.3.4 动态行为模型的建立 201
14.3.5 物理模型的建立 205
14.4 UML类图与VB代码的转换 206
14.4.1 VB代码生成属性 206
14.4.2 Rose模型—VB代码的生成 207
14.4.3 VB代码的逆向工程 207
14.5 UML类图与Java代码的转换 208
14.5.1 UML类图—Java代码的生成 208
14.5.2 Java代码的逆向工程 209
14.6 习题 209
第15章 面向对象的软件体系结构 211
15.1 软件体系结构概述 211
15.2 流程处理与客户机/服务器体系结构 212
15.2.1 流程处理 212
15.2.2 客户机/服务器体系结构 213
15.3 三层和多层体系结构 214
15.3.1 三层体系结构 215
15.3.2 浏览器/服务器体系结构风格 216
15.3.3 多层体系结构 217
15.3.4 团聚与串行 218
15.4 公共对象请求代理体系结构 219
15.5 基于层次消息总线的体系结构风格 221
15.6 异构结构风格 222
15.7 习题 224
第16章 软件工程新技术 225
16.1 软件复用技术 225
16.1.1 软件复用概念及分类 225
16.1.2 软件复用的关键技术和复用粒度 226
16.2 中间件技术 226
16.2.1 中间件概念及特点 226
16.2.2 中间件的分类 228
16.3 组件技术 229
16.3.1 组件与组件化 230
16.3.2 组件模型及描述语言 231
16.3.3 组件的检索与组装 233
16.4 计算机辅助软件工程技术 237
16.4.1 CASE的基本概念 237
16.4.2 CASE工具与集成CASE环境 237
16.5 软件产品线技术 240
16.5.1 软件产品线基本概念 240
16.5.2 软件产品线方法 243
16.5.3 北大青鸟工程 243
16.6 软件过程与标准化 245
16.6.1 软件过程及其改进 245
16.6.2 ISO 9000标准 246
16.6.3 软件能力成熟度模型 247
16.7 习题 250
第3篇 软件工程实验 251
第17章 软件工程实验大纲 251
17.1 面向过程的软件工程实验 252
17.1.1 实验1 图书馆图书管理系统的可行性分析 253
17.1.2 实验2 图书馆图书管理系统的项目开发计划 253
17.1.3 实验3 图书馆图书管理系统的需求分析 254
17.1.4 实验4 图书馆图书管理系统的总体设计 254
17.1.5 实验5 图书馆图书管理系统的详细设计及编码实现 255
17.1.6 实验6 图书馆图书管理系统的系统测试 256
17.1.7 实验7 图书馆图书管理系统用户手册的撰写 257
17.1.8 实验8 图书馆图书管理系统项目开发总结报告的撰写 257
17.2 面向对象的软件工程实验 257
17.2.1 实验1 浏览器系统的可行性分析 258
17.2.2 实验2 浏览器系统的项目开发计划 258
17.2.3 实验3 浏览器系统的需求分析 259
17.2.4 实验4 浏览器系统的体系结构设计 265
17.2.5 实验5 采用面向对象方法进行浏览器系统的详细设计 267
17.2.6 实验6 利用Rational Rose正向工程功能完成编码的实验 269
17.2.7 实验7 利用Rational Rose逆向工程完成修改设计的实验 270
17.2.8 实验8 浏览器系统的测试 270
17.2.9 实验9 浏览器系统用户手册的撰写 272
17.2.10 实验10 浏览器系统项目开发总结报告的撰写 272
附录 273
附录A UML图总结 273
附录B UML中定义的常用版型、约束和标记 278
附录C GOF给出的软件设计模式 280
参考文献 291