论文部分内容阅读
并发数据结构可以支持多线程并发访问。为了支持并发的访问,并发数据结构必须具有协调同时来自不同线程的读、写请求的能力。如何对并发数据结构进行测试是近些年的一个被不断研究的难题。首先,由于并发程序难以穷举的线程交互空间,如果不在测试的过程中加入主动的导向和控制,并发程序很难通过自身运行来触发一些潜在的并发错误。其次,因为并发数据结构并非一个完整的可以直接编译运行的程序,所以需要生成一个调用这个待测的并发数据结构的并发测试程序,然后通过编译并且执行这个并发测试程序来发现并发数据结构的潜在的错误。本文的主要研究工作及贡献如下: 第一,针对待测的C/C++并发数据结构,我们提出了并发测试程序自适应随机生成方法,并实现了相应的并发测试用例自动生成工具Mars。这些并发测试程序构成并发数据结构的测试用例。 第二,我们提出面向并发数据结构的适应式主动测试方法。这些适应式主动测试方法通过遴选最优测试用例对并发数据结构进行主动测试。 第三,我们通过对九个实际并发数据结构的实现进行测试,分析了我们提出的适应式主动测试方法的测试效率和错误发现能力。具体分析指标包括:完成完整的测试所需要的时间开销、完成完整测试所需要的主动测试的次数、发现潜在并发错误的能力,以及发现第一个并发错误所需要的时间。与Maple主动测试方法相比,我们提出的三种适应式主动测试方法只需执行更少的主动测试次数,能够在较大程度上缩短完整测试所需的时间开销,还可以发现更多的线程交错实例。