编辑: 思念那么浓 | 2013-04-17 |
s o f t w a r eb u g ;
f a u l tl o c a l i z a t i o n;
a u t o m a t i cd e b u g g i n g ;
p r o g r a m a n a l y s i s
1 引言随着软件系统越来越复杂, 软件经常不像人们 预期的那样运行, 换句 话说, 软 件不 总是可靠地运 行, 从而对计算机应用系统带来不利影响, 甚至造成 巨大的经济损失和灾难性的后果. 因此, 保证软件的 高可靠性已成为系统开发和维护工作的一个不可或 缺的重要方面. 导致软件不可靠的一个主要原因是程序源代码 中的缺陷. 程序设计是一项复杂的活动, 很难推导程 序中所有可能的执行路径, 以及预见可能影响程序 的环境因素. 即使程序看起来正确执行, 仍然可能在 极少情况下或特定条件满足时产生失效. 因此如何 检测并消除软件缺陷是目前亟需解决的一个问题. 软件测试和调试协同工作可以有效检测并消除 软件缺陷: 测试用于暴露软件缺陷, 调试用于消除这 些软件缺陷. 然而软件调试过程中消除软件缺陷的 速度往往跟不上软件测试过程中发现软件缺陷的速 度. 目前已有很多自动化软件测试工具, 然而, 软件 调试却大多采用设置断点等人工分析的方法, 这很 困难并且耗时, 因为当程序开发人员在程序执行过 程中发现软件失效时, 可能已经离错误点很远了, 需要花费大量的时间和精力来查找导致失效的程 序代码. 如果能实现软件自动化调试, 即由计算机自动 找到程序代码中的缺陷位置、 分析软件失效的产生 原因, 则可以更有效地确保软件可靠性, 提高软件质 量以及软件开发与维护效率. 因此近年来, 软件自动 化调试技术, 特别是软件错误自动定位方法得到了 广泛的关注. 文献[
1 ] 分析了软件失效机理和软件故障产生 原因, 讨论了软件故障模型. 文献[ 2] 分类介绍了各 种代表性错误定位技术的原理以及建模方法, 给出 了常用的评测基准集和评价标准, 并展望了进一步 研究方向. 不同于以上文献, 本文重点分析软件错误定位 领域的 关键科学问题, 提出了 失效错误定位理解 模型, 并从这一角度论述各种已有方法对关键科 学问题的解决程度, 详细分析了尚待进一步研究的 难点问题. 还针对顶级国际期刊和国际会议以及国 内一级学报, 统计分析了软件错误定位研究的发展 趋势.
2 失效 错误定位 理解 模型 为了清晰地分析软件错误定位领域中的关键科 学问题, 本课题在 Z e l l e r [
3 ] 提出的 缺陷 感染 失效 模型基础上定义了 失效 错误定位 理解 模型, 如图1所示. 图1失效 错误定位 理解模型 软件开发 人员 在源 代码 中引 入缺陷 ( d e f e c t ) , 在测试过程中:特定环境下, 当用给定测试用例的 输入执行程序时, 缺陷代码可能会导致感染( i n f e c t i o n ) , 生成错误的程序状态→感染被传播( i n f e c t i o n p r o p a g a t i o n ) →导致软件失效( f a i l u r e ) . 在开发人员发现软件失效后, 则需要调试程序: 对于给定的测试用例集合, 观察程序的执行状态, 理 解分析失效产生的上下文, 识别可疑程序代码以及 缺陷→感染→失效 链, 查找失效的根源, 并消除软 件缺陷, 使失效不再发生. 错误定位及理解过程还可以是一个迭代过程, 初步的定位的结果可以为理解程序 为什么会失效 提供参考, 而程序分析及理解的结果可以用于提高 错误定位的有效性. 然而, 由于程序状态空间规模巨大, 感染可能遍