论文部分内容阅读
并发程序能够极大提高程序执行效率,因而备受关注并已在实际应用中得到推广。但是并发程序容易引入数据竞争、原子性违反和顺序违反等错误,可能会造成人员或财产损失。因此如何有效发现并发程序错误就成为至关重要的问题。并发程序错误检测技术应运而生并持续发展。本文在分析当前并发程序错误检测的主流技术和主要技术指标的基础上,从可扩展性、效率、有效性以及检测结果的可理解性四个方面,对基于预测分析的并发程序错误检测技术作进一步研究,主要工作和贡献如下:?针对程序执行轨迹中的冗余事件和残余事件,提出两阶段轨迹过滤技术。该技术首先扫描待测轨迹,计算每个线程的当前并发上下文信息并联合部分事件对应代码的所在位置,构造二维等价计算模型收集完全等价事件标准和等价线程标准,以移除本地冗余事件和全局冗余事件;然后利用冗余事件已移除的轨迹和冗余线程中的消息标识,自动识别并移除锁残余事件和通信残余事件。实验表明,两阶段轨迹过滤技术可有效缩减待测轨迹的规模,从而提高检测技术的可扩展性。?针对顺序违反错误,提出区间限定的双向预测方法。该方法首先双向扫描正常轨迹,收集两类期望的数据流信息并计算约束信息,构造基于期望的双向预测模型;接着用保守策略识别双向预测模型中的潜在顺序违法事件序列区间,以在此区间内双向预测潜在顺序违反事件是否可行;然后生成与预测结果对应的调度以检测顺序违反错误。实验表明,采用区间限定的双向预测方法的检测技术可快速有效的发现顺序违反错误。?针对空指针解引用异常问题,提出约束指导的预测分析与主动随机测试技术相结合的检测技术。该技术首先扫描待测轨迹,计算其约束信息、记录线程连续执行区间信息并收集共享数据流信息,构造基于约束指导的预测模型;接着约束指导地重排从预测模型获取的数据流生成导致空指针解引用错误的关键场景;然后针对预测出的关键场景,主动控制线程调度以检测导致空指针解引用的恶性竞争。实验表明,约束指导的预测分析与主动随机测试技术相结合可有效地检测出这一类恶性竞争。?针对轨迹中的上下文频繁切换问题,提出渐进地轨迹简化技术。该技术首先扫描待测轨迹,构造双层轨迹简化模型,其顶层模型收集轨迹中的依赖信息,底层矩阵标识上下文切换信息。接着在不改变依赖关系的前提下,渐进地合并底层矩阵中同一线程的相邻执行区间;然后根据区间合并后的矩阵重组执行轨迹。实验表明,渐进地轨迹简化技术可显著缩减轨迹中的上下文切换数量,从而提高程序员理解该错误轨迹的效率。