A Survey of Recent Trends in Testing Concurrent Software Systems
本文提供了一个测试并发系统的通用框架,框架给出了测试并发系统的技术包括的关键特征。指出了一系列分类标准来回顾和比较这些技术,并在细节上讨论了它们的优缺点。
并发系统测试方法
基于并发特性的方法
利用指令交错的相关属性(如数据竞争、死锁、原子性等)来选择相关的交错子集。
数据竞争
低层次数据竞争检测
- lockset 分析:识别不受锁保护的并发内存访问
- happens-before 分析:检测并发内存访问之间的顺序关系
通过只考虑基于锁的同步,lockset分析相比于hapens-before明显提高了效率,但是由于忽略了其他同步机制导致的顺序关系,精度会有所缺失。而近几年关于数据竞争的检测倾向于减少误判,所以happens-before分析又重新获得了关注。
高层次数据竞争检测
- 针对复杂数据结构的分析
各种方法的改进方向与思路——低层、lockset相关
提高精度:
- Shacham et al.:结合动态lockset分析和model checking
- ACCORD:针对基于数组的fork-join模型的并发程序(如OpenMP,CILK和TBB),利用代码中的注释说明(1)哪些内存访问可以发生在无锁的时候(2)哪些内存访问只能发生在有锁的时候作为模型输入,加强了lockset分析
提高性能:
- Racez:只捕获目标系统的同步操作和内存访问的子集;算法只检测同步操作;内存操作的检测被委托给硬件性能监控单元(PMU)完成
扩展到新的范式:
- von Praun and Gross : 利用面向对象语言的特性,将只能被某一线程访问到的对象和对象区域排除在检测之外;同时利用静态分析——检测封装特性,和动态loceset分析——检测内存访问
各种方法的改进方向与思路——低层、Happens-Before相关
提高精度:
- WebRacer : 减少针对的应用范围(只用于分析Web应用)
- EventRacer : 减少针对的应用范围(只用于分析基于事件的应用)