摘要 | 第4-5页 |
Abstract | 第5页 |
1 绪论 | 第9-14页 |
1.1 软件测试技术的意义 | 第9-10页 |
1.2 并发程序测试介绍 | 第10-11页 |
1.3 并发程序测试相关技术 | 第11-13页 |
1.4 课题主要研究工作 | 第13-14页 |
2 课题背景 | 第14-23页 |
2.1 并发程序的设计与并发错误 | 第14-17页 |
2.1.1 并发程序的设计特点 | 第14页 |
2.1.2 并发程序的同步机制 | 第14-15页 |
2.1.3 并发错误和死锁 | 第15-17页 |
2.2 Thrille并发测试框架 | 第17-23页 |
2.2.1 Thrille与Pthread API | 第17-18页 |
2.2.2 Thrille与LLVM低级虚拟机 | 第18页 |
2.2.3 Thrille并发测试工具的流程结构 | 第18-23页 |
3 基于Thrille框架的并发测试工具底层设计 | 第23-34页 |
3.1 需求分析 | 第23-24页 |
3.2 系统底层事件接口设计 | 第24-28页 |
3.2.1 事件接口的插桩方法 | 第24-25页 |
3.2.2 静态竞争中事件的接口功能 | 第25-26页 |
3.3.3 动态调度中事件的接口功能 | 第26-28页 |
3.3 系统底层流程设计 | 第28-31页 |
3.3.1 静态竞争流程设计 | 第28-29页 |
3.3.2 动态调度流程设计 | 第29-30页 |
3.3.3 单步调度流程设计 | 第30-31页 |
3.4 系统底层数据结构设计 | 第31-34页 |
3.4.1 静态竞争数据结构设计 | 第31-32页 |
3.4.2 动态调度数据结构设计 | 第32-34页 |
4 基于Thrille框架的并发测试工具底层实现 | 第34-48页 |
4.1 静态竞争检查功能实现 | 第34-36页 |
4.2 动态调度统计功能实现 | 第36-40页 |
4.2.1 线程信息分类 | 第36-37页 |
4.2.2 调度点信息记录 | 第37-39页 |
4.2.3 内存点、同步信息记录 | 第39-40页 |
4.3 单步调度功能实现 | 第40-45页 |
4.3.1 调度的实现 | 第40-43页 |
4.3.2 随机调度的实现 | 第43-44页 |
4.3.3 单步调度的实现 | 第44-45页 |
4.4 底层工具编译与测试 | 第45-48页 |
4.4.1 源码编译过程 | 第45-47页 |
4.4.2 程序测试过程 | 第47-48页 |
5 并发测试工具上层设计与实现 | 第48-60页 |
5.1 系统上层功能及界面设计 | 第48-55页 |
5.1.1 主界面设计 | 第49-50页 |
5.1.2 文件加载功能及界面设计 | 第50-51页 |
5.1.3 历史文件加载功能及界面设计 | 第51-52页 |
5.1.4 编译文件功能及界面设计 | 第52页 |
5.1.5 随机运行功能及界面设计 | 第52-54页 |
5.1.6 单步运行功能及界面设计 | 第54-55页 |
5.2 系统上层功能实现 | 第55-60页 |
5.2.1 编译文件功能实现 | 第55-57页 |
5.2.2 随机运行功能实现 | 第57-58页 |
5.2.3 单步运行功能实现 | 第58-60页 |
6 并发测试工具并发错误重演与分析 | 第60-71页 |
6.1 实例benchmarks/example并发错误重演与分析 | 第60-64页 |
6.1.1 benchmarks/example代码分析 | 第60页 |
6.1.2 benchmarks/example测试过程 | 第60-61页 |
6.1.3 benchmarks/example重演与异常分析 | 第61-63页 |
6.1.4 benchmarks/example异常结果说明 | 第63-64页 |
6.2 其他测试文件测试结果 | 第64-71页 |
6.2.1 benchmarks/bbuf异常分析 | 第64-67页 |
6.2.2 benchmarks/pbzip2异常分析 | 第67-69页 |
6.2.3 benchmarks/Canneal异常分析 | 第69-71页 |
结论 | 第71-72页 |
参考文献 | 第72-74页 |
附录A 测试程序代码 | 第74-76页 |
致谢 | 第76-77页 |