论文部分内容阅读
多核处理器的出现使得多线程技术发展迅速,多线程并发程序的软件质量保障受到业界的普遍关注。多线程并发程序由于线程调度序列(Thread Scheduling Sequence, TSS)的不同,使得程序执行将产生不同的结果。线程调度序列是多线程并发程序测试的关键。随着线程数的增加,线程调度序列的数量呈指数型增长。线程调度序列数量多,测试生成开销大,严重影响了多线程并发程序的测试效率。测试覆盖准则作为一项度量测试有效性的指标,可用来指导并发程序的测试生成。根据并发测试覆盖准则来生成线程调度序列,更加偏重于测试程序的并发特点,因此,针对并发覆盖准则,探讨一种有效的线程调度序列的生成方法,已成为多线程并发程序测试中的一个亟待解决的问题。同步机制是多线程并发程序的一个重要特征。本文提出了一种基于全同步对覆盖的线程调度序列生成方法(TSS Generation based on ASPC, TGBA)。具体而言,对于并发程序中的同步语句,定义了同步对和全同步对覆盖准则(All Synchronization Pairs Coverage Criteria, ASPC),给出了一个同步对-线程关联图构建方法,在此基础上,探讨了满足全同步对覆盖准则的线程调度序列自动生成方法。最后,借助于模型检验工具JPF,设计并实现了一个基于JPF的线程调度序列生成器,用于多线程并发程序线程调度序列的自动生成。为评估TGBA方法的有效性,本文选用了6个Java类库并发程序作为被测程序,利用开发的线程调度序列生成器进行线程调度序列生成实验,并分别与常用的三种线程调度序列生成方法在生成效率方面进行了对比分析。实验结果表明TGBA方法生成的线程调度序列不仅能够覆盖被测程序的全部同步对,而且当满足全同步对覆盖准则时,测试生成所需要的状态数、迁移数都较少,相比于其他方法,生成效率平均提高了1.85倍,为后续进行线程调度序列对并发程序故障检测效果的研究奠定了基础。