论文创新点 | 第6-14页 |
摘要 | 第14-16页 |
Abstract | 第16-17页 |
1 绪论 | 第18-30页 |
1.1 研究背景及意义 | 第18-19页 |
1.2 基于测试的软件调试方法相关研究 | 第19-25页 |
1.2.1 传统软件调试方法 | 第19页 |
1.2.2 基于智能理解的错误定位 | 第19-20页 |
1.2.3 差分式调试方法 | 第20-21页 |
1.2.4 基于切片的软件调试方法 | 第21页 |
1.2.5 统计式错误定位方法 | 第21-24页 |
1.2.6 基于测试的程序错误诊断 | 第24页 |
1.2.7 软件调试、测试用例的优化及约简 | 第24-25页 |
1.2.8 软件漏洞的自动化分析与调试 | 第25页 |
1.3 论文的出发点、主要工作及贡献 | 第25-28页 |
1.3.1 本文的出发点 | 第25-26页 |
1.3.2 本文的主要工作 | 第26-27页 |
1.3.3 本文的主要贡献 | 第27-28页 |
1.4 论文结构 | 第28-30页 |
2 执行上下文感知的半自动化软件调试框架 | 第30-38页 |
2.1 基本定义 | 第30-33页 |
2.1.1 软件缺陷、错误及失效 | 第30-32页 |
2.1.2 程序的结构化表示 | 第32-33页 |
2.1.3 基于测试的软件调试问题描述 | 第33页 |
2.2 执行上下文感知的软件调试框架 | 第33-34页 |
2.3 本文各章节之间的关系 | 第34页 |
2.4 错误定位的准确性与精度 | 第34-35页 |
2.5 错误定位与错误诊断的协同和导向性 | 第35-36页 |
2.6 软件漏洞的调试 | 第36-37页 |
2.7 本章小结 | 第37-38页 |
3 执行过程差异化的错误定位方法 | 第38-62页 |
3.1 研究动机 | 第38-41页 |
3.2 基本定义与总体设计 | 第41-43页 |
3.2.1 基本定义 | 第41-42页 |
3.2.2 总体设计 | 第42-43页 |
3.3 覆盖向量的失效率 | 第43-45页 |
3.4 基本块的错误可疑度计算 | 第45-46页 |
3.5 相同可疑度情况下的置信度 | 第46-47页 |
3.6 实验及结果分析 | 第47-61页 |
3.6.1 实验样本 | 第47-48页 |
3.6.2 评估指标 | 第48页 |
3.6.3 不同方法的横向对比 | 第48-51页 |
3.6.4 交叉性实验结果 | 第51-54页 |
3.6.5 与同等方法的对比 | 第54-57页 |
3.6.6 PAFL方法与测试用例相似度的关系 | 第57-60页 |
3.6.7 讨论 | 第60-61页 |
3.7 本章小结 | 第61-62页 |
4 基于切片的统计式错误定位方法 | 第62-76页 |
4.1 研究动机 | 第62-63页 |
4.2 基于切片的感染链切割 | 第63-68页 |
4.2.1 程序输出与测试预言的结构化表示 | 第64页 |
4.2.2 逆向依赖分析 | 第64-65页 |
4.2.3 半动态切片 | 第65-67页 |
4.2.4 基于切片的感染链统计分析 | 第67-68页 |
4.3 受控实验中的实现细节 | 第68-69页 |
4.3.1 失效结果与I/O代码的映射 | 第68-69页 |
4.3.2 基于执行轨迹的半动态切片 | 第69页 |
4.4 实验及结果分析 | 第69-75页 |
4.4.1 实验样本 | 第69-70页 |
4.4.2 评估指标 | 第70-71页 |
4.4.3 实验结果总体分析 | 第71-72页 |
4.4.4 不同类别错误定位结果分析 | 第72-74页 |
4.4.5 讨论 | 第74-75页 |
4.5 本章小结 | 第75-76页 |
5 基于序列挖掘的错误/失效关联分析方法 | 第76-98页 |
5.1 研究动机 | 第76-79页 |
5.2 程序失效执行规则 | 第79-80页 |
5.3 面向序列挖掘的频繁集求解 | 第80-83页 |
5.3.1 路径的覆盖向量表示 | 第80-81页 |
5.3.2 频繁集求解 | 第81-82页 |
5.3.3 代码检查次序组织 | 第82-83页 |
5.3.4 复杂度分析 | 第83页 |
5.4 实验及结果分析 | 第83-94页 |
5.4.1 实验样本 | 第83-84页 |
5.4.2 评估指标 | 第84页 |
5.4.3 实验结果总体分析 | 第84-86页 |
5.4.4 不同类型的实验结果分析 | 第86-90页 |
5.4.5 不同程序的独立结果分析和相互比较 | 第90-93页 |
5.4.6 针对不同错误的结果分析 | 第93-94页 |
5.5 讨论 | 第94-96页 |
5.5.1 序列挖掘方法的不足 | 第94页 |
5.5.2 案例分析 | 第94-95页 |
5.5.3 可改进之处 | 第95-96页 |
5.6 本章小结 | 第96-98页 |
6 错误定位导向的测试用例差分组合与选择方法 | 第98-112页 |
6.1 研究动机 | 第98-99页 |
6.2 基本定义与模型设计 | 第99-102页 |
6.2.1 差异化的失效分析 | 第100-101页 |
6.2.2 PIE模型之于CBFL方法的差异化分析 | 第101-102页 |
6.2.3 状态差异的最小化 | 第102页 |
6.3 基于最小差异化的测试用例组合 | 第102-105页 |
6.3.1 以代数平均数为基准的差异化度量 | 第102-103页 |
6.3.2 加权Jaccard相似度系数 | 第103-104页 |
6.3.3 失效用例的优先级 | 第104-105页 |
6.4 实验设计与结果分析 | 第105-111页 |
6.4.1 实验样本 | 第105-106页 |
6.4.2 评估指标 | 第106-107页 |
6.4.3 测试用例选择对错误定位结果的影响 | 第107-111页 |
6.4.4 讨论 | 第111页 |
6.5 本章小节 | 第111-112页 |
7 基于结构化污点的漏洞调试方法 | 第112-133页 |
7.1 漏洞测试及调试的研究现状 | 第112-115页 |
7.1.1 现有软件调试方法之于漏洞调试的挑战 | 第113-114页 |
7.1.2 动态污点分析技术 | 第114-115页 |
7.1.3 研究问题与目标 | 第115页 |
7.2 研究动机及主要挑战 | 第115-119页 |
7.2.1 研究动机示例 | 第116-118页 |
7.2.2 主要挑战 | 第118-119页 |
7.3 基本定义与总体设计 | 第119-121页 |
7.3.1 基本定义 | 第119页 |
7.3.2 模式异常 | 第119-120页 |
7.3.3 基于结构化污点的漏洞调试主要步骤 | 第120-121页 |
7.4 基于结构化污点的漏洞调试实现细节 | 第121-127页 |
7.4.1 细粒度的结构化动态污点分析 | 第121-122页 |
7.4.2 数据域的动态分析 | 第122-125页 |
7.4.3 模式归一化 | 第125页 |
7.4.4 数据流异常检测 | 第125-127页 |
7.5 实验设计和结果分析 | 第127-132页 |
7.5.1 实验设计 | 第127页 |
7.5.2 实验样本 | 第127-128页 |
7.5.3 实验结果 | 第128页 |
7.5.4 实例分析 | 第128-131页 |
7.5.5 讨论 | 第131-132页 |
7.6 本章小结 | 第132-133页 |
8 总结与展望 | 第133-135页 |
8.1 总结 | 第133页 |
8.2 工作展望 | 第133-135页 |
参考文献 | 第135-153页 |
攻读博士期间的科研成果 | 第153-155页 |
致谢 | 第155页 |