彩图 1
序言 1
前言 3
第1章 引论 1
1.1 软件工程概述 1
1.2 传统软件工程体系是线性思维产物 3
1.3 传统软件工程体系的缺点 4
1.4 NSE体系的产生 5
1.5 NSE体系及其支撑平台 5
第2章 传统软件工程体系的过程模型 9
2.1 软件工程过程模型的概念 9
2.2 瀑布模型 9
2.3 增量迭代模型 11
2.4 演化模型 11
2.5 过程模型 13
2.5.1 Rational统一过程 13
2.5.2 规范开发 14
2.5.3 敏捷开发 17
2.6 平衡敏捷与规范 19
2.7 提倡超越敏捷与规范及其平衡 19
2.7.1 部分专家的评论 20
2.7.2 软件工程存在更本质的问题 26
2.7.3 期待“破冰之旅” 26
第3章 传统软件工程体系存在的主要问题及其根源 28
3.1 颠倒了人与过程的主次关系 28
3.2 放任软件缺陷的引入 29
3.3 放任软件缺陷的传播 30
3.4 盲目进行软件的修改维护 31
3.5 分不清主要矛盾与次要矛盾 32
3.6 应用效果 33
3.7 根源—基于线性思维和简单性科学 34
第4章 NSE体系的理论基础与创立工作框架 35
4.1 基本概念 35
4.2 非线性思维与现代系统科学 42
4.2.1 非线性现象的发现 42
4.2.2 系统科学及其应用所要遵从的基本原则 42
4.2.3 实现从线性思维到非线性系统思维的转变 43
4.3 复杂系统与复杂性科学 44
4.3.1 复杂系统 44
4.3.2 复杂性科学 44
4.4 五维结构综合法 51
4.4.1 预言:新一轮更深刻、更广泛的产业革命的来临 52
4.4.2 五维结构综合法的创立背景 52
4.4.3 五维结构综合法的创立目的 53
4.4.4 五维结构综合法的内涵 54
4.4.5 五维结构综合法的特点 59
4.4.6 五维结构综合法的应用实例 60
第5章 非线性整体软件工程体系概述 66
5.1 NSE体系的概念 66
5.2 NSE体系的创立目的 66
5.3 NSE体系的技术路线 67
5.4 NSE体系的构成 69
5.5 NSE体系的主要特点 73
第6章 非线性整体软件工程体系的过程模型 75
6.1 专家对线性模型的评论和对非线性模型的期待 75
6.2 NSE模型的图形化描述 76
6.3 NSE模型的预处理过程步骤 79
6.4 NSE模型的主过程处理步骤 87
6.5 NSE模型的特点 94
6.6 非线性系统思维原则和复杂性科学原则的体现 101
6.6.1 非线性系统思维原则在NSE模型中的具体体现 101
6.6.2 扩展原则在NSE模型及NSE体系中的体现 107
第7章 双向多级自动追溯机制 110
7.1 白盒结构测试覆盖率分析的实现原理 110
7.2 一个小程序的白盒结构测试分析 111
7.3 时间标签的自动设置与使用 117
7.4 正向自动追溯 118
7.5 逆向自动追溯 120
7.6 软件开发各阶段所有相关制品间的双向自动追溯 122
7.7 方案特点 124
第8章 非线性整体软件工程体系的开发方法 126
8.1 概述 126
8.2 非线性系统思维与复杂性科学原则的体现 129
8.3 企业级多项目并行开发支撑 132
8.4 在软件开发与维护各阶段的应用要点 132
8.5 NSE软件开发方法的特点 141
第9章 非线性整体软件工程体系的支撑图式 142
9.1 3J图式的概念 142
9.2 3J图式的特点 142
9.3 J-Cha 143
9.4 J-Diagram 150
9.5 J-Flow 156
第10章 软件测试的基础知识 162
10.1 软件测试的目的 162
10.2 量化软件测评 165
10.3 黑盒功能测试方法 165
10.4 白盒结构测试方法 167
10.5 性能测试 169
10.6 其他非功能性测试 170
10.7 单元测试、集成测试与系统测试 170
10.8 回归测试 172
10.9 验收测试 172
10.10 软件测试脚本 172
10.11 面向对象的软件测试 172
10.12 Web应用软件测试 174
10.13 测试计划与测试文档 175
10.14 使用专业软件测试工具的必要性 175
第11章 软件测试用例设计 177
11.1 软件测试用例设计基础 177
11.2 最小等效测试用例集的自动生成 182
11.3 高效率测试用例的半自动设计 183
第12章 深度与广度软件测试 186
12.1 集成化单元测试 186
12.2 功能测试过程操作的自动捕获与选择性回放 196
12.3 MC/DC测试覆盖率分析 198
12.4 性能测试分析 208
12.5 内存泄漏与违规使用分析 212
12.6 动态运行错误分类与定位和执行路径追溯 212
12.7 面向对象程序的头文件与类的测试覆盖率分析 214
12.8 嵌入式软件测试支撑 218
第13章 透明盒测试法及其应用 231
13.1 传统的软件测试方法所存在的主要问题 231
13.2 新的解决方案—透明盒测试法 232
13.3 透明盒测试法的测试用例描述 234
13.4 实例 235
13.5 透明盒测试法在软件开发全生命周期中的应用 240
13.6 透明盒测试法与黑盒测试法的主要区别 251
第14章 非线性整体软件工程的质量保证体系 252
14.1 软件缺陷产生的主动预防 255
14.1.1 需求开发阶段的缺陷预防 255
14.1.2 软件设计阶段的缺陷预防 256
14.1.3 软件编码阶段的缺陷预防 256
14.1.4 软件维护阶段的缺陷预防 257
14.2 软件缺陷传播的主动预防 259
14.2.1 独立于编程风格的图形化源码阅读查错 259
14.2.2 基于逻辑图与控制流程图的逻辑查错 261
14.2.3 半自动软件评审与走查支撑 263
14.3 基于复杂性分析和性能分析的软件模块重构 266
14.4 深度与广度软件测试 270
14.5 软件质量的量化度量 270
14.6 NSE质量保证体系的综合应用效果估算 275
14.6.1 定性分析 275
14.6.2 定量分析 276
第15章 非线性整体软件工程的系统化与量化软件维护体系 284
15.1 非线性整体软件工程体系的维护过程模型 285
15.2 非线性系统科学和复杂性科学原则的体现 286
15.3 系统化软件维护 288
15.3.1 系统化的定义 288
15.3.2 系统化软件维护的实现 288
15.4 量化软件维护 289
15.4.1 “量化”的定义 289
15.4.2 量化软件维护的实现 289
15.5 基于NSE模型的规范化软件维护 291
15.5.1 “规范”的定义 291
15.5.2 规范化软件维护的实现 292
15.6 软件维护的未来—从源头做起 292
第16章 非线性整体软件工程的“活文档”体系 294
16.1 “活文档”的定义 294
16.2 “活文档”的制作与处理 295
16.3 “活文档”数据库的建立、特点与增量式更新 295
16.4 NSE“活文档”的综合特性 296
16.4.1 海量 296
16.4.2 准确 300
16.4.3 精确 302
16.4.4 可相互链接、追溯、转换 302
16.4.5 隐式 302
16.4.6 动态超高速显示 302
16.4.7 交互操作 302
16.4.8 以网页形式输出 303
16.4.9 实现文档组织的结构化 303
16.5 应用 303
16.5.1 一般应用 303
16.5.2 在软件外包项目的全方位全自动验收中的应用 303
第17章 非线性整体软件工程体系的支撑技术 307
17.1 具有唯一性的软件工程自动化技术 307
17.2 其他技术 310
17.3 特点 312
第18章 非线性整体软件工程的项目计划与管理 313
18.1 传统软件工程体系的项目计划与管理概述 313
18.2 传统的项目计划与管理所存在的主要问题 317
18.2.1 颠倒了人与过程的主次关系 317
18.2.2 没有抓住软件工程的主要矛盾 317
18.2.3 虽然具有理论指导意义但缺乏实施基础 317
18.2.4 基于预设性而脱离客观现实 317
18.2.5 缺乏必要的模型与工具的支持 318
18.2.6 实际应用效果—项目成功率:35%左右 318
18.2.7 根源:基于线性思维与简单性科学 318
18.3 非线性软件工程体系的项目计划与管理支撑 318
18.3.1 以人为本 318
18.3.2 将项目计划与管理和软件开发过程融为一体 319
18.3.3 支持适应性动态项目计划与管理 319
18.3.4 紧紧抓住软件产品开发的主要矛盾—软件维护 320
18.3.5 一系列的自动化工具支持 321
18.3.6 基础:非线性系统思维与复杂性科学 321
18.4 对企业级多项目并行开发的支撑 321
第19章 非线性整体软件工程体系的支撑工具与支撑平台 322
19.1 非线性整体软件工程体系的支撑工具 322
19.2 非线性整体软件工程体系的支撑平台 329
19.2.1 Panorama++/艾赛银弹的发展历史 330
19.2.2 Panorama++/艾赛银弹的基本操作 334
19.2.3 Panorama++和艾赛银弹的主要特点 338
第20章 非线性整体软件工程体系的应用 340
20.1 在新软件项目开发的应用 340
20.2 在正在开发的软件项目中应用 341
20.3 剖析CMMI、支持CMMI、超越CMMI 342
20.3.1 剖析CMMI 342
20.3.2 支持CMMI 343
20.3.3 超越CMMI 345
20.4 非线性整体软件工程体系与敏捷方法的可能结合 346
20.5 非线性整体软件工程体系与RUP的可能结合 348
20.6 非线性整体软件工程体系与软件复用之路 350
20.6.1 一个与“软件工程”同龄的软件开发方法 350
20.6.2 CBSE与系统科学和复杂性科学的基本原则 351
20.6.3 软件复用所面临的主要技术瓶颈 351
20.6.4 NSE与CBSE的未来 352
第21章 两颗不同类型的候选“银弹” 353
21.1 准确适度而令人十分佩服的大师预言 353
21.2 《人月神话》所基于的是线性软件工程体系 354
21.2.1 《人月神话》的1975年版本 354
21.2.2 《人月神话》的1995年版本 354
21.3 一颗候选银弹:双向多级自动可追溯性技术 355
21.4 另一颗候选银弹:非线性整体软件工程体系 356
21.4.1 我们需要另一类“银弹” 356
21.4.2 对软件开发进度与预算的控制 357
21.4.3 数量级地提高所开发的软件质量 359
21.4.4 Brooks论断与非线性整体软件工程体系 359
21.4.5 有效地解决软件系统的复杂性问题 363
21.4.6 有效地解决软件的一致性问题 368
21.4.7 有效地解决软件的可变性问题 369
21.4.8 有效地解决软件开发过程的不可见性问题 370
21.5 NSE非线性整体软件工程体系的特点 376
21.6 综合比较 383
21.7 应用NSE体系及其支撑平台的几点建议 387
21.8 共同推动21世纪的软件工程革命 388
附录A 需求规格说明书模板源码 390
附录B 在增量式单元测试中自动设置被调用的单元的返回值方法 399
附录C 实现100%MC/DC(修改条件/判断覆盖)测试覆盖率分析实例 403
参考文献 416