论文部分内容阅读
在软件的开发和使用中,人们总是希望软件行为的表现与预期相一致,但是目前在设计和开发可信软件时缺乏理论和技术上的指导,许多已知和未知的软件缺陷无法避免,同时由于软件本身的复杂性和运行环境的开放、动态、多变等原因,使得软件行为具有不可控性和不确定性,由此引发的软件行为与预期不相符合的现象是软件开发和使用过程中必须面对的重要问题。本文着重讨论了提高和保障软件可信性的若干关键技术,这些技术对可信软件的研究具有重要的理论意义和应用价值,本文在此方面开展了相关的研究工作,取得的主要研究成果如下:(1)针对现有的软件行为模型对环境因素考虑不足、性能影响较大等问题,提出了基于环境约束的软件行为控制流模型,分析了影响程序运行的环境因素,结合静态分析方法优点,建立程序行为分析模型,利用标记函数调用指令的方法,在动态运行时进行返回值一致性约束,从而提高模型的精确性;同时根据程序的局部运行原理,将分析范围限定在函数范围内,减少了性能开销。(2)针对现有软件结构复杂,软件故障定位困难等问题,提出了两种以人工智能理论为基础的软件故障定位的自动化方法和模型:基于故障传播感知的软件故障定位方法和基于神经网络的多故障定位模型。前者从故障传播对故障定位的影响出发,通过引入故障传播趋势的概念来捕获故障在程序节点中的传播,进而消除故障传播对故障定位精度的影响;后者考虑多故障间相互干扰对故障定位的影响,首先通过故障相关性分析确定故障间的相互影响,然后利用神经网络学习故障与位置的对应关系并通过构造理想测试用例来确定每个可疑位置的可疑度。最后通过实验分析了方法的准确性和快速性,从而为软件故障修复提供支撑,进而提高软件的可信性。(3)对软件自动修复技术进行深入研究,在此基础上提出了基于进化计算的软件自动修复技术,其主要思想是采用控制流图作为进化个体的编码方式,测试用例约束的控制流图节点集的势、结构相似度、不变量约束等作为影响适应度函数的因素,将软件的修复过程转化为适应度函数指导的进化过程,从而达到软件自动化修复的目的。文中分析了进化计算在软件修复中的高度可用性,并进一步的从初始种群生成、进化操作位置的细粒度控制、相关参数的设置等方面进行了分析和改进;接下来研究了其在模块化软件容错中的具体应用,从而在可靠性、可用性、长生存能力等不同角度满足人们对软件质量方面的需求。(4)针对现有研究缺乏对软件修复变更风险和修复后验证方面的研究,分析了针对软件修复的变更风险,引入了变更风险深度、变更风险密度等概念来对软件修复变更风险进行量化,进而指导软件修复的验证工作。同时利用软件修复的局部性和针对性特点,提出了软件修复的相对相似性评价模型,在实验中分别对补丁和动态修复进行研究,对比了地址对序列、系统调用序列以及混杂序列,说明了评价模型的工作方式,实验表明了模型的有效性,同时说明了混杂序列具有更强的表达能力。通过该模型将修复验证和评价问题转化为修复后软件行为相似性度量问题,从而实现对软件修复可信性的有效评价,为软件修复的部署和应用提供依据。