软件复用和软件生产 1
1.1 软件工程 2
1.1.1 软件生命周期 2
1.1.2 软件加工模型 5
1.1.3 软件开发方法 13
1.1.4 软件开发抽象 16
1.2 软件复用 19
1.2.1 复用的概念 19
1.2.2 复用软件的动机 20
1.2.3 软件复用的历史 21
1.2.4 软件复用抽象 23
1.2.5 软件复用量纲 24
1.2.6 软件复用技术的有效性 26
1.3 软件工厂与计算机辅助软件工程环境 27
1.3.1 软件工厂 27
1.3.2 计算机辅助软件工程(CASE)环境 32
1.4 软件复用对开发方法的影响 38
1.4.1 面向领域——领域分析和领域工程 41
1.4.2 软件自动化 43
软件可复用性 47
2.1 影响可复用性的因素 48
2.1.1 管理因素 48
2.1.2 法律因素 48
2.1.3 经济因素 49
2.1.4 技术因素 49
2.2 软件可复用性属性模型 50
2.1.5 度量标准 50
2.2.1 基本可复用性属性 51
2.2.2 度量标准 53
2.2.3 软件可复用性度量 56
2.3 软件可复用性问题及解决途径 59
2.3.1 抽象问题 59
2.3.2 形式化问题 60
2.3.3 技术问题 61
2.3.4 操作问题 61
2.3.5 接口问题 62
2.3.6 系统化复用问题 63
软件分类复用 66
3.1.1 分类原理 67
3.1 分类原理和分类模型 67
3.1.2 分类复用模型 72
3.2 软件复用对象及其分类 74
3.2.1 软件复用对象 74
3.2.2 软件分类 76
3.3 软件复用方法 91
3.3.1 合成-生成性软件复用谱系 96
3.3.2 合成性软件复用 97
3.3.3 生成性软件复用 97
3.4 软件分层复用 98
3.4.1 实现层软件复用 98
3.4.2 设计层软件复用 99
3.4.3 体系结构层软件复用 100
可复用资源获取 101
4.1 创造可复用软件资源 102
4.1.1 概述 103
4.1.2 可复用资源构造 103
4.1.3 建立复用程序 106
4.2 提取可复用软件资源 109
4.2.1 构件抽取 109
4.2.2 构件识别 110
4.3 可复用软件构件合格检验 111
4.4 复用实例代价 113
4.5 讨论 115
可复用软件库 117
5.1 为软件构件编索引 118
5.1.1 丰富的索引单位:词语搭配 120
5.1.2 从词语搭配到索引 124
5.2 软件构件分类、编目 126
5.2.1 营造索引仓库 128
5.2.2 建立浏览层次结构的聚类技术 129
5.3 可复用软件库组织和管理 134
5.3.1 可复用软件库设计 134
5.3.2 可复用软件库组织 137
5.3.3 可复用软件库管理 139
5.4 软件构件检索和评价 142
5.4.1 评价机制 142
5.4.2 Score 146
5.4.3 确认 148
软件构件检索 151
6.1 构件检索问题 152
6.2 查询规格说明 156
6.3 构件检索方法 157
6.3.1 线性检索 157
6.3.2 浏览,基于聚类的检索 159
6.3.3 基于偏序的检索 160
6.3.4 基于距离的检索 161
6.3.5 基于文本的“编码”与检索 161
6.3.6 基于词法主字码的编码与检索 162
6.3.7 基于规格说明的编码与检索 165
6.3.8 人工智能与信息检索 167
6.4 检索性能评价 169
7.1 复用框架和组织结构 172
用可复用软件建造软件 172
7.2 基于复用的加工模型 176
7.2.1 同步活动 178
7.2.2 异步活动 179
7.3 构件合成 180
7.3.1 合成验证与确认 180
7.3.2 自底向上开发 182
7.4 可复用构件改写 185
7.4.1 选取 186
7.4.2 修改 187
面向对象的程序设计 191
8.1 面向对象的基本概念 192
8.1.1 对象和消息 192
8.1.3 类体系和继承性 194
8.1.2 对象类和对象实例 194
8.1.4 重载和迟耦合 195
8.1.5 封闭性 195
8.2 面向对象与软件复用 196
8.3 面向对象的软件开发方法 201
8.3.1 面向对象的分析 201
8.3.2 面向对象的设计 203
8.3.3 面向对象的程序设计语言 204
8.4 面向对象开发中的可复用性问题 206
8.4.1 面向对象分析中的可复用性问题 206
8.4.2 面向对象设计中的可复用性问题 209
8.5 可复用性和面向对象的程序设计 211
8.6 当前趋势 213
高级语言复用 215
9.1 高级语言抽象 215
9.2 选择 216
9.3 特殊化 216
9.4 集成 217
9.5 高级语言复用技术评价 217
设计和代码提取复用 219
10.1 设计和代码提取中的抽象 219
10.2 选择 220
10.3 特殊化 220
10.4 集成 221
10.5 设计和代码提取复用技术评价 221
源代码构件复用 223
11.1 源代码构件抽象 224
11.2 选择 225
11.3 特殊化 227
11.4 集成 228
11.5 面向对象的构件复用变种 229
11.5.1 继承和子类 229
11.5.2 多重继承 230
11.6 源代码构件复用技术评价 231
软件模式复用 234
12.1 软件模式抽象 235
12.2 选择 238
12.2.1 分类 239
12.2.2 检索 240
12.2.3 解释 242
12.3 特殊化 243
12.4 集成 245
12.5 软件模式复用技术评价 246
应用生成程序复用 249
13.1 应用生成程序 249
13.1.1 应用程序自动生成原理和技术 250
13.1.2 应用生成程序的基本结构 253
13.1.3 应用生成程序中的抽象 254
13.1.4 选择 255
13.1.5 特殊化 255
13.2 使用应用生成程序的软件生命周期 256
13.2.1 使用应用生成程序 256
13.1.6 集成 256
13.2.2 建造应用生成程序 258
13.3 特殊的应用生成程序 263
13.3.1 “惯用的”应用生成程序 263
13.3.2 专家系统生成程序 264
13.3.3 分析程序和编译程序生成程序 266
13.3.4 面向结构的编辑程序生成程序 267
13.3.5 其他 268
13.4 应用生成程序复用技术评价 268
甚高级语言复用 271
14.1 甚高级语言抽象 272
14.1.1 SETL 273
14.1.2 PAISLey 275
14.1.3 MODEL 276
14.2 选择 276
14.3 特殊化 277
14.4 集成 278
14.5 甚高级语言复用技术评价 279
变换系统复用 282
15.1 基于变换的程序设计 283
15.1.1 程序变换的基本思想 284
15.1.2 程序变换系统的基本结构 290
15.2 变换系统抽象 295
15.2.1 原型 295
15.2.2 开发历史 295
15.2.3 变换 296
15.3 选择 297
15.5 集成 298
15.4 特殊化 298
15.6 变换系统复用技术评价 299
软件体系结构复用 301
16.1 软件体系结构中的抽象 302
16.2 选择 303
16.3 特殊化 303
16.4 集成 304
16.5 软件体系结构复用技术评价 305
实例研究 307
17.1 SoftCAD及其支撑系统 307
17.2 基于智能拍纸的软件开发 314
17.2.2 IP拍纸的基本功能和操作 315
17.2.1 基本思想 315
17.2.3 拍纸的种类及管理 316
17.2.4 基于IP的软件开发方法 317
17.2.5 IP方法的特点 317
17.3 CARE系统 317
总结与讨论 320
18.1 软件复用问题 320
18.2 编目和分类 321
18.3 认识距离 322
18.4 软件复用成本与收益 324
18.5 总结论 327
18.6 结束语 328
参考文献 330