论文部分内容阅读
软件作为计算机系统的神经中枢已经延伸到现代社会的各个角落,无所不在。一方面,软件是设计师塑造的、功能强大的工具;但另一方面,寄生着各种“bug”的软件,顷刻间又可以演变为破坏力强大的敌人,这就是软件的“双重效应”。Mark Paulk博士指出现阶段软件系统中出现错误在所难免。建立高可靠的软件生产线能够最大程度地保证软件质量,特别对于航天飞行器、汽车电子、测控系统等高可靠性应用场合具有重要意义,可缩短软件开发时间、降低开发成本,提高服务质量。本文研究了软件行为建模方法,多层次多角度地对软件系统的可靠性进行验证,检测和定位系统中存在的软件错误,提高软件的可用性,降低软件错误引起系统故障的风险。本文研究实现了体系结构扩展支持的软件调试技术,从系统体系结构层面提供软件故障诊断与分析的自动化与智能化技术支持,从而减少程序员诊断软件故障时所付出的辛苦,提高软件调试效率,达到缩短系统软件开发周期,降低开发成本,提高可靠性的目的。本文首先全面介绍了目前软件故障检测和定位方面的一系列相关研究和实现技术,并分析了这些领域主要的研究内容、研究方法和部分商用系统的发展现状,同时指出了已有研究的缺点与不足,从而引出了本文的研究。首先,构建了C语言的bug分类体系,在此基础上,分析了开源大型系统软件的bug列表,总结了bug发展趋势以及对调试技术的要求;结合软件动态运行状态变化的特点,从指令流、数据流以及两者的关联约束出发,分析研究软件行为的自相似性规律,在此基础上,提出了软件行为模型,并阐述了目前软件bug分布规律的原因。同时,在结合软件行为模型,提出了基于体系结构扩展支持的故障检测框架,并且讨论了体系结构扩展实现时语义重载和任务语义感知等关键技术。本文从研究软件运行过程中指令与指令间的统计自相似性规律,提出了采用数据挖掘的方法挖掘软件系统中的隐性编程规则,从而检测软件系统中存在的bug。通过分析Bide挖掘算法,对BEE操作进行优化提出了Bide+挖掘算法。同时,采用体系结构扩展支持的方法实现数据的采集以及在线故障检测。同时对规则生成和检测过程中的一些优化问题进行了讨论。针对控制流错误成为bug主流的问题,研究软件状态跳转行为的统计性规律,在分析现有统计调试模型不足的基础上,提出了在线统计调试模型。在此基础上,讨论了基于体系结构扩展支持的在线统计调试实现方法,同时探讨研究了数据采集和检测阶段的一些优化技术。结合软件行为模型,定义了数据竞争问题,并讨论了数据竞争问题难以调试的原因。提出了更强必要条件的增强型锁集合算法。该算法分析处理线程结束情况,理解分析变量的线程信息,精化数据竞争检测条件。算法实现采用系统体系结构扩展的方法,扩展锁表部件,精确映射集合操作到位图操作,进一步提高检测精度和减少误报。最后,采用扩展虚拟机体系结构的方法进行了实验。实验结果验证了本文研究的体系结构扩展支持的故障检测和定位技术,在对软件编程规则挖掘、控制流错误以及数据竞争等软件故障行为检测方面的有效性。