论文部分内容阅读
现代软件系统已经成为目前最不可或缺且最复杂的人工系统之一,而随着软件的愈发庞大和复杂,其不可避免地存在故障或错误,从而迫切需要研究和发展软件故障定位技术来促进软件故障调试和修复。然而,现有的软件故障定位技术往往仅关注软件测试执行过程中软件实体的执行覆盖情况,而忽略了软件实体之间交互关联关系的分析和利用。本文以软件函数实体为分析对象,结合基于频谱的软件故障定位(Spectrum-Based Fault Localization,SBFL)技术,基于复杂网络理论建立描述函数间不同关联关系的动态软件网络表征模型,分析并挖掘软件函数实体之间的控制关系、故障关联关系、故障影响关系和故障相似关系,提出改进基于频谱的故障定位技术的方法。本文的研究内容和创新成果如下:
首先,介绍了基于动态软件网络表征进行软件故障定位方法研究的背景和意义,从软件实体间动态行为交互关系角度分析了方法的可行性。通过研究现状分析,对现有的软件故障定位方法进行了总结和对比,学习了现有方法的解决思路和优缺点,重点对SBFL方法进行了归纳。同时,对现有软件动态行为分析方法进行了整理,分析了软件网络模型在表征软件实体动态行为关系上的优势。通过总结对比,发现了当前存在的问题和面临的挑战,给出了解决故障定位问题的新思路。
其次,开展了基于动态控制行为挖掘的软件函数关联性分析,通过描述软件动态执行过程中的函数实体间语义化行为模式,来揭示软件函数实体间交互关系分析和度量的重要性。软件语义网络建模以分析函数间的调用控制关系为出发点,从动态执行轨迹中识别和提取函数间的动态控制模式。基于复杂网络理论,构建一种多标签软件语义网络表征模型,以函数为节点,函数控制调用关系为边,通过在网络边上附加控制关系标签和对应的动态控制概率标签来描述语义关系,分析函数间的关联关系的复杂性和重要性。
再次,针对SBFL中的测试频谱特征构建,提出了一种融合实体故障关联性分析的测试频谱特征构建方法——网络聚合频谱,通过聚合关联实体的影响优化频谱特征构建方法。网络聚合频谱用于改进原始SBFL方法中的频谱计算方法,通过建立软件频谱关联网络表征模型,度量函数实体间的故障关联强度,实现软件故障频谱层面的函数故障关联性分析,并进一步提出融合故障关联性分析的网络聚合频谱计算方法,增强软件频谱特征因子描述函数实体故障可疑程度的准确性。
然后,针对SBFL中的故障定位器(也叫公式、函数),分别提出基于PageRank的故障定位方法和基于故障中心性的故障定位方法,以关联更多高可疑函数实体的函数更可能存在故障的启发式来优化故障可疑性计算方法。基于PageRank的故障定位方法,建立软件故障影响力网络,使用根据原始SBFL定位器计算的可疑性评分初始化函数节点权重,应用PageRank链接分析算法进行全局的函数实体间故障影响力分析,并优化函数故障可疑性的计算。基于故障中心性的故障定位方法,以复杂网络中的中心性度量为指导,建立同时描述函数初始可疑性和函数间故障影响力系数的软件故障网络,进行局部的函数间故障影响力分析,提出一种故障中心性故障可疑性度量,通过综合关联函数的故障可疑程度来改进故障可疑性评分的计算。
最后,进行了动态软件网络下的软件故障定位综合应用分析,将所提出的网络聚合频谱,分别于基于PageRank的故障定位方法、基于故障中心性的故障定位方法进行整合应用,实施针对测试频谱和故障定位器两阶段改进的故障定位方法。网络聚合频谱与基于PageRank的故障定位方法和基于故障中心性的故障定位方法分别处于SBFL方法的不同阶段,对两阶段的改进进行整合能够获得更好的故障定位性能,同时也可以检验这两阶段基于动态软件网络表征的优化的有效性和必要性。
本文所提出的基于动态软件网络表征的软件故障定位改进方法依赖于原始的SBFL方法,且都是对现有的SBFL方法的通用改进方法,即对现有的SBFL故障定位器都适用,在理论上对开发语言、软件类型和规模没有要求。由于真实数据有限,实验在Java语言编写的不同类型和规模的软件故障数据集上进行,在现有33个原始SBFL定位器上进行了性能检验,结果表明所提出的改进方法具有一定的有效性和扩展性,证明函数间交互关联关系分析对于故障定位具有重要意义,也证明动态软件网络表征模型能够为软件故障定位分析提供新的模式。
首先,介绍了基于动态软件网络表征进行软件故障定位方法研究的背景和意义,从软件实体间动态行为交互关系角度分析了方法的可行性。通过研究现状分析,对现有的软件故障定位方法进行了总结和对比,学习了现有方法的解决思路和优缺点,重点对SBFL方法进行了归纳。同时,对现有软件动态行为分析方法进行了整理,分析了软件网络模型在表征软件实体动态行为关系上的优势。通过总结对比,发现了当前存在的问题和面临的挑战,给出了解决故障定位问题的新思路。
其次,开展了基于动态控制行为挖掘的软件函数关联性分析,通过描述软件动态执行过程中的函数实体间语义化行为模式,来揭示软件函数实体间交互关系分析和度量的重要性。软件语义网络建模以分析函数间的调用控制关系为出发点,从动态执行轨迹中识别和提取函数间的动态控制模式。基于复杂网络理论,构建一种多标签软件语义网络表征模型,以函数为节点,函数控制调用关系为边,通过在网络边上附加控制关系标签和对应的动态控制概率标签来描述语义关系,分析函数间的关联关系的复杂性和重要性。
再次,针对SBFL中的测试频谱特征构建,提出了一种融合实体故障关联性分析的测试频谱特征构建方法——网络聚合频谱,通过聚合关联实体的影响优化频谱特征构建方法。网络聚合频谱用于改进原始SBFL方法中的频谱计算方法,通过建立软件频谱关联网络表征模型,度量函数实体间的故障关联强度,实现软件故障频谱层面的函数故障关联性分析,并进一步提出融合故障关联性分析的网络聚合频谱计算方法,增强软件频谱特征因子描述函数实体故障可疑程度的准确性。
然后,针对SBFL中的故障定位器(也叫公式、函数),分别提出基于PageRank的故障定位方法和基于故障中心性的故障定位方法,以关联更多高可疑函数实体的函数更可能存在故障的启发式来优化故障可疑性计算方法。基于PageRank的故障定位方法,建立软件故障影响力网络,使用根据原始SBFL定位器计算的可疑性评分初始化函数节点权重,应用PageRank链接分析算法进行全局的函数实体间故障影响力分析,并优化函数故障可疑性的计算。基于故障中心性的故障定位方法,以复杂网络中的中心性度量为指导,建立同时描述函数初始可疑性和函数间故障影响力系数的软件故障网络,进行局部的函数间故障影响力分析,提出一种故障中心性故障可疑性度量,通过综合关联函数的故障可疑程度来改进故障可疑性评分的计算。
最后,进行了动态软件网络下的软件故障定位综合应用分析,将所提出的网络聚合频谱,分别于基于PageRank的故障定位方法、基于故障中心性的故障定位方法进行整合应用,实施针对测试频谱和故障定位器两阶段改进的故障定位方法。网络聚合频谱与基于PageRank的故障定位方法和基于故障中心性的故障定位方法分别处于SBFL方法的不同阶段,对两阶段的改进进行整合能够获得更好的故障定位性能,同时也可以检验这两阶段基于动态软件网络表征的优化的有效性和必要性。
本文所提出的基于动态软件网络表征的软件故障定位改进方法依赖于原始的SBFL方法,且都是对现有的SBFL方法的通用改进方法,即对现有的SBFL故障定位器都适用,在理论上对开发语言、软件类型和规模没有要求。由于真实数据有限,实验在Java语言编写的不同类型和规模的软件故障数据集上进行,在现有33个原始SBFL定位器上进行了性能检验,结果表明所提出的改进方法具有一定的有效性和扩展性,证明函数间交互关联关系分析对于故障定位具有重要意义,也证明动态软件网络表征模型能够为软件故障定位分析提供新的模式。