目录
第1章引言1
1.1概述1
1.1.1什么是软件1
1.1.2软件的两种类型1
1.1.3什么是软件开发3
1.2软件工程发展简史3
1.2.1软件开发早期阶段3
1.2.2软件工程理论体系形成和发展阶段4
1.2.3软件工程丰富和发展阶段5
1.2.4软件工程智能化自动化阶段6
1.3软件过程8
1.3.1惯例过程模型8
1.3.2敏捷过程模型8
1.3.3DevOps8
1.4软件工程核心关注点9
1.5本书写作动机10
1.6推荐阅读10
1.7思考练习题11
第2章软件全生命周期质量保障12
2.1概述12
2.2软件质量12
2.2.1软件质量的定义12
2.2.2外部质量和内部质量13
2.3典型的软件质量模型14
2.3.1ISO/IEC 25010质量模型14
2.3.2ISO/IEC 9126质量模型15
2.3.3Boehm质量模型17
2.3.4McCall质量模型172.3.5SQOOSS质量模型18
2.4软件质量保障问题19
2.4.1软件开发后期阶段软件质量保障19
2.4.2软件开发早期阶段软件质量保障20
2.4.3全生命周期软件质量保障20
2.5软件质量与软件缺陷23
2.5.1软件缺陷对软件质量的影响23
2.5.2软件全生命周期缺陷检测方法24
2.6软件质量保障方法26
2.6.1先验方法和后验方法26
2.6.2定性方法和定量方法26
2.6.3静态方法和动态方法26
2.7推荐阅读27
2.8思考练习题27
目录〖3〗第3章软件缺陷理解28
3.1概述28
3.2软件缺陷产生原因30
3.2.1参与者方面的原因30
3.2.2技术方面的原因30
3.2.3管理方面的原因31
3.2.4环境方面的原因31
3.3软件缺陷类型31
3.3.1从软件开发过程的角度分类32
3.3.2从软件产品的角度分类34
3.3.3从用户需求的角度分类37
3.4软件缺陷相关的几个问题38
3.4.1缺陷严重性问题38
3.4.2缺陷处理的优先级问题38
3.4.3缺陷修复代价问题39
3.4.4缺陷状态跟踪问题39
3.4.5缺陷管理问题40
3.5为什么需要缺陷检测40
3.6全方位软件缺陷检测技术41
3.6.1全方位内涵41
3.6.2全方位缺陷检测技术42
3.7推荐阅读42
3.8思考练习题43
第4章软件评审44
4.1概述44
4.2软件评审过程45
4.3软件评审需求45
4.3.1软件开发过程评审需求46
4.3.2软件管理过程评审需求46
4.4典型的软件评审方法47
4.4.1技术评审48
4.4.2管理评审49
4.4.3同行评审49
4.4.4走查50
4.4.5结构化走查51
4.4.6代码走查51
4.4.7审查52
4.4.8代码审查53
4.4.9代码审计54
4.4.10代码阅读56
4.5案例分析57
4.5.1代码走查案例57
4.5.2代码审查案例59
4.6软件评审技术的发展历程60
4.7推荐阅读60
4.8思考练习题61
第5章程序分析62
5.1概述62
5.2控制流分析63
5.2.1什么是控制流分析63
5.2.2控制流图构造64
5.2.3过程内控制流分析65
5.2.4过程间控制流分析66
5.2.5过程内控制流分析和过程间控制流分析比较68
5.3数据流分析69
5.3.1什么是数据流分析69
5.3.2数据流图构造69
5.3.3过程内数据流分析70
5.3.4过程间数据流分析73
5.3.5过程内数据流分析和过程间数据流分析比较74
5.4抽象解释75
5.5符号执行76
5.6污点分析77
5.7关系分析78
5.7.1关联关系78
5.7.2泛化特化关系79
5.7.3聚集关系和组合关系79
5.8依赖分析80
5.8.1控制依赖分析80
5.8.2数据依赖分析80
5.8.3程序依赖图81
5.8.4程序切片81
5.9因果分析82
5.9.1因果图82
5.9.2因果图分析83
5.10修改影响分析84
5.10.1什么是修改影响分析84
5.10.2静态修改影响分析84
5.10.3动态修改影响分析85
5.10.4静态CIA和动态CIA比较86
5.11修改传播分析88
5.11.1什么是修改传播分析88
5.11.2修改传播分析方法88
5.12程序分析工具及应用89
5.13程序分析技术的发展历程91
5.14推荐阅读91
5.15思考练习题92
第6章软件度量93
6.1概述93
6.2软件项目度量94
6.2.1软件规模度量94
6.2.2软件成本度量97
6.2.3顾客满意度度量方法100
6.2.4信息熵度量100
6.2.5软件进度度量102
6.3软件过程度量104
6.3.1软件过程度量的定性方法105
6.3.2软件过程度量的定量方法106
6.4软件产品度量108
6.4.1软件产品结构度量108
6.4.2软件产品质量度量111
6.5软件团队度量112
6.5.1效能与产出112
6.5.2协作与沟通112
6.5.3技能与成长112
6.5.4健康与文化112
6.6软件度量技术的发展历程113
6.7推荐阅读114
6.8思考练习题114
第7章软件测试115
7.1概述115
7.1.1软件测试定义115
7.1.2开发者测试116
7.1.3用户测试119
7.1.4第三方测试119
7.2典型软件测试过程119
7.2.1测试需求分析120
7.2.2测试计划制订120
7.2.3测试设计121
7.2.4测试开发121
7.2.5测试执行与测试结果验证121
7.2.6测试评估122
7.2.7测试报告生成123
7.3常见的软件测试类型123
7.3.1结构化测试123
7.3.2功能测试125
7.3.3性能测试125
7.3.4安全性测试126
7.3.5可靠性测试127
7.3.6兼容性测试127
7.3.7健壮性测试128
7.3.8标准符合度测试128
7.3.9GUI测试129
7.4软件测试有效策略129
7.4.1静态测试与动态测试结合130
7.4.2白盒测试与黑盒测试结合130
7.4.3内部测试与外部测试结合131
7.4.4局部测试与整体测试结合132
7.4.5正面测试与负面测试结合132
7.5几个典型的软件测试方法133
7.5.1组合测试133
7.5.2随机测试133
7.5.3蜕变测试134
7.5.4演化测试134
7.5.5变异测试135
7.6软件测试的几个核心问题136
7.6.1测试用例生成问题136
7.6.2测试预言问题136
7.6.3测试充分性问题137
7.7软件测试技术的发展历程137
7.8推荐阅读138
7.9思考练习题139
第8章软件仿真140
8.1概述140
8.1.1连续系统仿真141
8.1.2离散系统仿真141
8.1.3混合系统仿真141
8.2软件系统功能性仿真和非功能性仿真142
8.2.1软件系统功能性仿真142
8.2.2软件系统非功能性仿真143
8.3典型软件仿真场景145
8.3.1软件架构仿真146
8.3.2软件接口仿真146
8.3.3模块设计仿真147
8.3.4数据结构仿真148
8.3.5数据库设计仿真148
8.3.6外部调用仿真149
8.3.7算法设计仿真149
8.4典型的软件仿真方法150
8.4.1软件原型仿真150
8.4.2模型仿真151
8.4.3数学仿真153
8.5软件系统仿真技术的发展历程155
8.6推荐阅读156
8.7思考练习题157
第9章软件缺陷预测158
9.1概述158
9.2软件缺陷预测的一般过程159
9.2.1数据收集与处理159
9.2.2特征提取与选择161
9.2.3模型构建与训练161
9.2.4模型评估与优化161
9.3软件缺陷预测类型162
9.3.1版本内缺陷预测162
9.3.2跨版本缺陷预测164
9.3.3项目内缺陷预测169
9.3.4跨项目缺陷预测172
9.3.5公司内缺陷预测179
9.3.6跨公司缺陷预测180
9.3.7行业内缺陷预测183
9.3.8跨行业缺陷预测183
9.4缺陷预测的典型应用184
9.4.1出错倾向性预测184
9.4.2缺陷分布预测185
9.4.3缺陷数量预测187
9.4.4缺陷类型预测188
9.4.5缺陷严重性预测189
9.5典型应用案例190
9.5.1项目内缺陷预测案例190
9.5.2跨项目缺陷预测案例192
9.6软件缺陷预测技术的发展历程193
9.7推荐阅读194
9.8思考练习题195
第10章形式化验证196
10.1概述196
10.2典型的形式化验证技术197
10.2.1等效性检验198
10.2.2定理证明200
10.2.3模型检验203
10.3典型应用207
10.4形式化验证技术的发展历程208
10.5推荐阅读209
10.6思考练习题210
第11章软件监控211
11.1概述211
11.2软件开发过程监控212
11.2.1项目进度表212
11.2.2需求跟踪212
11.3软件运行阶段监控216
11.3.1代码插桩216
11.3.2日志分析219
11.3.3执行轨迹跟踪220
11.3.4路径剖析223
11.3.5观察者模式224
11.3.6面向方面编程225
11.4软件监控技术的发展历程226
11.5推荐阅读226
11.6思考练习题227
第12章知识驱动软件缺陷检测228
12.1概述228
12.2基本术语229
12.2.1数据、信息和知识229
12.2.2知识网络、知识本体和知识图谱229
12.2.3知识表示和知识推理232
12.3基于知识图谱的缺陷检测233
12.3.1知识图谱构建和补全233
12.3.2基于模式匹配的缺陷检测235
12.4典型缺陷检测分析236
12.4.1遍历map缺陷检测236
12.4.2重入漏洞检测239
12.5知识驱动软件缺陷检测技术的发展历程242
12.6推荐阅读243
12.7思考练习题244
第13章智能化软件缺陷检测245
13.1概述245
13.2智能化软件缺陷检测的典型方法246
13.2.1基于传统机器学习的软件缺陷检测246
13.2.2基于深度学习的软件缺陷检测247
13.2.3基于大语言模型的软件缺陷检测248
13.3应用案例介绍250
13.3.1基于AI的测试用例生成250
13.3.2基于AI的测试用例排序252
13.3.3基于AI的静态代码缺陷检测252
13.3.4基于图神经网络的庞氏合约检测255
13.3.5基于大语言模型的日志异常检测260
13.4智能化软件缺陷检测技术的发展历程265
13.5推荐阅读265
13.6思考练习题266
第14章标准和规范依从性检查268
14.1概述268
14.1.1常见术语解释269
14.1.2标准的分类和等级划分269
14.2软件工程领域的标准270
14.2.1软件工程标准体系简介270
14.2.2软件质量标准273
14.2.3软件安全标准和规范277
14.2.4软件安全保障规范279
14.3标准和规范依从性检查方法282
14.4典型案例283
14.4.1视频图像信息的标准依从性检查283
14.4.2网站信息无障碍标准依从性检查284
14.5软件质量标准化的发展历程285
14.6推荐阅读286
14.7思考练习题286
第15章缺陷检测自动化287
15.1概述287
15.2缺陷检测自动化的前提条件288
15.3自动化评审288
15.3.1何谓自动化评审288
15.3.2典型的评审工具288
15.4自动化程序分析291
15.4.1何谓自动化程序分析291
15.4.2典型程序分析工具291
15.5自动化软件度量294
15.5.1何谓自动化软件度量294
15.5.2典型软件度量工具294
15.6自动化测试296
15.6.1何谓自动化测试297
15.6.2典型的测试工具297
15.7自动化仿真302
15.7.1何谓自动化仿真302
15.7.2典型的软件仿真工具302
15.8自动化缺陷预测303
15.8.1何谓自动化缺陷预测303
15.8.2典型的缺陷预测工具304
15.9自动化监控305
15.9.1何谓自动化监控305
15.9.2典型的监控工具305
15.10自动化验证307
15.10.1何谓自动化验证307
15.10.2典型的形式化验证工具307
15.11知识驱动软件缺陷检测自动化309
15.11.1何谓知识驱动软件缺陷检测自动化309
15.11.2典型的知识驱动软件缺陷检测工具310
15.12自动化智能化软件缺陷检测311
15.12.1何谓自动化智能化软件缺陷检测311
15.12.2典型的智能化缺陷检测工具312
15.13自动化缺陷管理313
15.13.1何谓自动化缺陷管理313
15.13.2典型的缺陷管理工具314
15.14自动化缺陷报告生成314
15.14.1何谓自动化缺陷报告生成314
15.14.2缺陷报告生成工具315
15.15缺陷检测自动化的发展历程316
15.16推荐阅读317
15.17思考练习题317
结语318
