资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
书书书第 卷第 期 年 月计算机学报 收稿日期: ; 最终修改稿收到日期: 本课题得到国家自然科学基金( , ) 、 高等学校博士学科点专项科研基金 ( ) 、 哈 尔 滨 科 技 创 新 人 才 研 究 专 项 资 金 ( ) 、 黑 龙 江 省 普 通 高 校 青 年 学 术 骨 干 项 目( ) 、 黑龙江省教育科学“ 十二五” 规划青年专项课题( ) 资助王克朝, 男, 年生, 博士研究生, 讲师, 中国计算机学会( ) 会员, 主要研究方向为软件错误定位 : 王甜甜, 女, 年生, 博士, 副教授, 主要研究方向为软件自动化调试、 计算机辅助教学苏小红, 女, 年生, 博士, 教授, 主要研究领域为软件缺陷检测马培军, 男, 年生, 博士, 教授,主要研究领域为软件工程、 信息融合软件错误自动定位关键科学问题及研究进展王克朝) ,)王甜甜)苏小红)马培军)( 哈尔滨工业大学计算机科学与技术学院哈尔滨 )( 哈尔滨学院软件学院哈尔滨 )摘要程序源代码中的缺陷是导致软件不可靠的一个主要原因软件错误自动定位技术通过计算机分析程序源代码或执行过程中产生的运行状态, 检测程序中的异常并将其独立出来作为需要进一步调试的可疑代码, 从而缩小缺陷代码的搜索范围, 辅助开发人员更快地识别缺陷语句并分析软件失效的产生原因为了清晰地分析软件错误定位领域的关键科学问题, 文中首先定义了“ 失效错误定位理解” 模型, 然后形式化地描述了软件错误定位相关概念; 接下来, 调研国内外最新研究进展, 统计分析了发展趋势; 重点分析了各种错误定位方法的基本思想、 优缺点及其对关键问题的解决情况; 最后总结了尚待解决的难点问题, 指出了未来可能的研究方向关键词软件失效; 软件缺陷; 错误定位; 自动化调试; 程序分析中图法分类号 犇 犗 犐号 犓 犲 狔犛 犮 犻 犲 狀 狋 犻 犳 犻 犮 犐 狊 狊 狌 犲 狊犪 狀 犱犛 狋 犪 狋 犲 犃 狉 狋 狅 犳犃 狌 狋 狅 犿 犪 狋 犻 犮犛 狅 犳 狋 狑 犪 狉 犲犉 犪 狌 犾 狋犔 狅 犮 犪 犾 犻 狕 犪 狋 犻 狅 狀 ) ,) ) ) )(犛 犮 犺 狅 狅 犾 狅 犳犆 狅 犿 狆 狌 狋 犲 狉犛 犮 犻 犲 狀 犮 犲犪 狀 犱犜 犲 犮 犺 狀 狅 犾 狅 犵 狔,犎 犪 狉 犫 犻 狀 犐 狀 狊 狋 犻 狋 狌 狋 犲狅 犳犜 犲 犮 犺 狀 狅 犾 狅 犵 狔,犎 犪 狉 犫 犻 狀 )(犛 犮 犺 狅 狅 犾 狅 犳犛 狅 犳 狋 狑 犪 狉 犲,犎 犪 狉 犫 犻 狀犝 狀 犻 狏 犲 狉 狊 犻 狋 狔,犎 犪 狉 犫 犻 狀 )犃 犫 狊 狋 狉 犪 犮 狋 , , ,“ ” , , , , , , 犓 犲 狔 狑 狅 狉 犱 狊 ; ; ; ; 引言随着软件系统越来越复杂, 软件经常不像人们预期的那样运行, 换句话说, 软件不总是可靠地运行, 从而对计算机应用系统带来不利影响, 甚至造成巨大的经济损失和灾难性的后果因此, 保证软件的高可靠性已成为系统开发和维护工作的一个不可或缺的重要方面导致软件不可靠的一个主要原因是程序源代码中的缺陷程序设计是一项复杂的活动, 很难推导程序中所有可能的执行路径, 以及预见可能影响程序的环境因素即使程序看起来正确执行, 仍然可能在极少情况下或特定条件满足时产生失效因此如何检测并消除软件缺陷是目前亟需解决的一个问题软件测试和调试协同工作可以有效检测并消除软件缺陷: 测试用于暴露软件缺陷, 调试用于消除这些软件缺陷然而软件调试过程中消除软件缺陷的速度往往跟不上软件测试过程中发现软件缺陷的速度目前已有很多自动化软件测试工具, 然而, 软件调试却大多采用设置断点等人工分析的方法, 这很困难并且耗时, 因为当程序开发人员在程序执行过程中发现软件失效时, 可能已经离错误点很远了,需要花费大量的时间和精力来查找导致失效的程序代码如果能实现软件自动化调试, 即由计算机自动找到程序代码中的缺陷位置、 分析软件失效的产生原因, 则可以更有效地确保软件可靠性, 提高软件质量以及软件开发与维护效率因此近年来, 软件自动化调试技术, 特别是软件错误自动定位方法得到了广泛的关注文献 分析了软件失效机理和软件故障产生原因, 讨论了软件故障模型文献 分类介绍了各种代表性错误定位技术的原理以及建模方法, 给出了常用的评测基准集和评价标准, 并展望了进一步研究方向不同于以上文献, 本文重点分析软件错误定位领域的关键科学问题, 提出了“ 失效错误定位理解” 模型, 并从这一角度论述各种已有方法对关键科学问题的解决程度, 详细分析了尚待进一步研究的难点问题还针对顶级国际期刊和国际会议以及国内一级学报, 统计分析了软件错误定位研究的发展趋势“ 失效错误定位理解” 模型为了清晰地分析软件错误定位领域中的关键科学问题, 本课题在 提出的“ 缺陷感染失效”模型基础上定义了“ 失效错误定位理解” 模型, 如图所示图失效错误定位理解模型软件开发人员在源代码中引入缺陷( ) ,在测试过程中:特定环境下, 当用给定测试用例的输入执行程序时, 缺陷代码可能会导致感染( ) , 生成错误的程序状态感染被传播( )导致软件失效( )在开发人员发现软件失效后, 则需要调试程序:对于给定的测试用例集合, 观察程序的执行状态, 理解分析失效产生的上下文, 识别可疑程序代码以及“ 缺陷感染失效” 链, 查找失效的根源, 并消除软件缺陷, 使失效不再发生错误定位及理解过程还可以是一个迭代过程,初步的定位的结果可以为理解程序“ 为什么会失效”提供参考, 而程序分析及理解的结果可以用于提高错误定位的有效性然而, 由于程序状态空间规模巨大, 感染可能遍 期王克朝等:软件错误自动定位关键科学问题及研究进展布程序的执行, 但是在开发人员看来却不相关此外还有可能是多个缺陷共同作用引发失效, 并且多个缺陷间也可能相互干扰, 例如, 缺陷可能掩盖了缺陷, 导致即使执行了缺陷也不会产生失效这都使理解“ 什么导致了失效” 以及“ 为什么程序会失效”成为调试过程中最困难的任务, 所需花费的时间和资源也比其他步骤要多得多, 因此, 这两个问题是软件错误定位领域亟需解决的关键科学问题在解决上述问题的过程中, 以下两个关键因素决定了错误定位方法的可用性:() 有效性( )根据定位结果, 开发人员审查代码、 真正查找到缺陷所需的工作量( )错误定位结果越准确, 人工审查工作量越小, 则该方法越有效() 效率( )错误定位方法的计算复杂度及时间开销理想情况下, 软件错误定位方法应该快速、 准确地报告缺陷的位置, 并且为开发人员进一步理解和修正缺陷提供充分的信息由图还可以看出, 错误定位与测试紧密相关,测试阶段提供的测试用例及其执行信息的质量也是决定错误定位质量的一个关键因素因此“ 如何最大化地利用软件测试过程中提供的有效诊断信息, 提高错误定位的有效性和效率” 也是亟需解决的一个关键科学问题软件错误定位相关概念根据定位过程中是否需要运行程序, 可以将软件错误定位技术划分为两类: 基于静态程序分析的技术和基于测试的技术本文重点研究基于测试的软件错误定位技术, 相关概念定义如下定义 程序程序犘由犿个程序实体组成,记为犘狊,狊, ,狊犿 , 这里的程序实体指的是语句或者基本块( 分支、 函数、 类等)定义 测试用例集犜狋犽(犻犽,狅犽) 犽狀 , 其中狋犽(犻犽,狅犽) 表示测试用例, 它的输入为犻犽, 期望的输出为狅犽定义 成功测试用例称狋犽(犻犽,狅犽) 是一个成功测试用例, 当且仅当用输入犻犽执行程序犘时,狅 犽狅犽, 其中狅 犽为实际输出结果,狅犽为期望的输出结果成功测试用例集记为犜狆定义 失效测试用例称狋犽(犻犽,狅犽) 是一个失效测试用例, 当且仅当用输入犻犽执行程序犘时,狅 犽狅犽, 其中狅 犽为实际输出结果,狅犽为期望的输出结果失效测试用例集记为犜犳定义 运行时信息集(狋犽) 犽狀为用测试用例集犜执行程序犘的运行时信息集, 其中(狋犽) 表示程序犘执行测试用例狋犽的运行时信息,如语句覆盖、 分支覆盖、 数据流、 执行路径等定义 软件 错 误 自 动 定 位犉 犔(犘,犜,犛可疑) , 由计算机分析程序源代码犘或用测试用例集犜执行犘的运行时信息集, 检测程序中的异常情况, 并将其独立出来作为需要进一步调试的可疑代码犛可疑犘, 从而将与软件失效无关的代码自动过滤掉, 缩小缺陷代码的搜索范围理想情况下, 准确指出缺陷代码的所在位置研究趋势统计分析为了调研国际上软件错误定位方法的研究进展, 本文查阅了顶级国际期刊( 、 、 、 、 ) 和顶级国际会议 ( 、 、 、 ) 中软件错误定位的相关文献, 共 篇论文发表数目总体上呈上升趋势, 近年发表了较多的研究论文按研究方法将这些文献归类的情况如图所示本文将主要的软件错误定位方法划分为: 覆盖分析( ) 、 程 序 切 片 ( ) 、 依赖分析( ) 、状态变更( ) 、 模型检验( ) 、 程序不变量分析( ) 、变异分析( ) 其中, 覆盖分析方法自 年提出后, 因具有计算复杂度低、 实现简单等优点得到了广泛的研究, 论文数占了总数的近二分之一, 特别是在 年和 年发表了多篇文献, 之后也受到持续的关注程序切片作为一种最早提出的应用于软件调试的技术 也发表了为数众多的论文, 但 年前的研究比较多依赖分析作为覆盖分析的一种改进方法, 于 年提出, 近年来均有相关研究模型检验、 程序不变量分析和变异分析方法的研究起步比较晚, 论文较少为了调研国内软件错误定位方法的研究进展,本文查阅了计算机学报、 软件学报、 计算机研究与发展、 电子学报、 电子与信息学报中关于软件“ 错误定位” 、 “ 故障定位” 、 “ 缺陷定位” 等关键词的文章, 共计算机学报 年图顶级国际期刊和会议中研究的软件错误定位方法统计 篇 年以前没有相关论文发表, 大多数论文发表于 年之后研究方法也是覆盖分析 、程序切片 和依赖分析 为主, 其他方法还有变异分析 、 组合测试 、 机器学习 等综上所述, 软件错误定位技术近年来成为一个研究热点然而, 由于每种方法均有其适用范围, 存在一系列关键难题需要进一步解决, 目前的软件错误定位方法均处于理论与实验研究阶段, 尚没有成熟的自动化软件错误定位工具广泛应用于工业界本文接下来对这些问题进行重点分析软件错误自动定位方法本节论述了主流软件错误定位方法的基本思想, 重点分析了各种方法的优缺点及其对关键科学问题的解决程度 示例程序使用图中的示例程序 , 对比分析代表性的软件错误定位方法程序 的功能为: 输入个整数, 然后输出这个整数的中间值 ( 犪 狉 犵 犮, 犪 狉 犵 狏 ) 狓,狔,狕,犿;缺陷示例犘:狊修改为犿狔;狋狋狋狋狋狋, , , , , ,缺陷示例犘:狊修改为 (狔狕)狊修改为犿狔;狋狋狋狋狋狋, , , , , ,狊:狓 (犪 狉 犵 狏 ) ;狊:狔 (犪 狉 犵 狏 ) ;狊:狕 (犪 狉 犵 狏 ) ;狊:犿狕;狊: (狔狕) 狊: (狓狔)狊:犿狔;狊: (狓狕)狊:犿狓;狊 : 狊 : (狓狔)狊 :犿狔;狊 : (狓狕)狊 :犿狓; 狊 : ( “ ” ,犿) ; 成功失效状态图示例程序 期王克朝等:软件错误自动定位关键科学问题及研究进展本文在 的基础上给出了两个含有缺陷的示例程序其中, 示例程序犘包含一个赋值缺陷, 将语句狊“犿狓” 修改为“犿狔”示例程序犘包含两个缺陷, 在犘的基础上又增加了一个谓词缺陷, 将语句狊“ (狔狕) ” 修改为“ (狔狕) ”测试用例集犜狋,狋,狋,狋,狋,狋 , 测试用例的成功失效状态表示测试用例执行成功,表示执行失效对于犘而言, 成功测试用例集犜狆狋,狋,狋,狋,狋 , 失效测试用例集犜犳狋对于犘而言,犜狆狋,狋,狋 ,犜犳狋,狋,狋表格中的数字表示测试用例集犜执行程序犘和犘的运行时信息, 是语句覆盖信息, 即如果执行测试用例狋犽时, 语句狊犻被执行, 则狊犻和狋犽对应的单元格数值为; 否则为空白 覆盖分析方法覆盖分析方法通过对比失效执行和成功执行的程序元素( 如语句、 谓词、 分支、 基本块) 的覆盖信息,定位可疑代码主要思想是如果某个程序元素被较多的失效执行覆盖, 却很少被成功执行覆盖, 则该程序元素很可能含有缺陷这种方法通常包含如下步骤:() 执行测试用例, 收集测试用例执行过程中的覆盖信息( 即哪些程序元素被执行) , 以及测试用例的执行结果( 成功失效)() 统计分析失效执行和成功执行的程序元素覆盖信息, 采用预先定义的度量公式, 计算各个语句的可疑度, 并将语句按照可疑程度由高到低排序, 可疑度越高、 排序越靠前则越可能是缺陷语句各种覆盖分析方法一般都遵从上述步骤, 主要区别在于采用的度量公式不同 等人 用模型和实验评价了 种采用不同度量公式的覆盖分析方法结果表明 方法与其他方法相比, 可以获得较优的错误定位有效性证明尽管有些方法度量公式不同, 但是对于 型程序在可疑语句排序目的上是等价的表列出了影响广泛的基于覆盖分析的软件错误定位技术, 它们被 等人 证明对于 型程序和多个方法等价, 比如 方法和 方法等价, 方法 和其他种方法等价这些方法应用于示例程序获得的基于语句覆盖的错误定位结果如表所示表格中的数值为语句的可疑度对于示例程序犘,种方法均将缺陷语句狊赋以最高可疑度, 因此可以有效定位缺陷但是对 于示例程序犘中的缺陷, 各方法均没能较好地区表影响广泛的基于覆盖分析的软件错误定位技术错误定位技术语句可疑度度量公式等价方法 犪犲 犳犪犲 犳犪狀 犳犪犲 犳犪犲 犳犪狀 犳犪犲 狆犪犲 狆犪狀 狆 犪犲 犳犪犲 狆 , , , , , , , , ,犪狀 犳犪狀 狆,其他犪犲 犳语句被测试用例集合中失效测试用例执行的次数犪狀 犳语句没有被测试用例集合中失效测试用例执行的次数犪犲 狆语句被测试用例集合中成功测试用例执行的次数犪狀 狆语句没有被测试用例集合中成功测试用例执行的次数表基于覆盖分析的方法分析示例程序的结果语句示例程序犘 示例程序犘 狊 狊 狊 狊 狊 狊 狊 狊 狊 狊 狊 狊 狊 狊 狊 分缺陷语句和非缺陷语句, 需人工审查多条语句才能定位到缺陷语句覆盖分析方法的优点是提供语句的可疑程度描述, 并且由于不需要形式化建模, 计算复杂度低, 适于分析大规模程序存在的主要问题是:() 通 常只 能 揭 示 统 计 关 联 ( 变 量 的 联 合 分布) , 而不能充分分析程序元素间的相互影响当软件错误涉及多个程序元素间复杂交互的情况时, 可能定位不到错误语句例如, 对于犘中的缺陷语句狊, 由于只统计语句覆盖, 而语句狊、狊、狊、狊、狊被相同的测试用例覆盖, 因此, 这些语句具有相同的可疑度值, 导致无法准确区分缺陷语句和非缺陷语句() 通常只检测可疑程序语句或谓词, 缺少对错误行为状态的描述, 需要由开发人员进一步判定是否存在错误由于错误可能起源于失效点之前的任何位置, 因此仅通过孤立的可疑语句或谓词来理解软件错误的产生原因是很困难的() 对测试用例的质量要求较高如果测试用计算机学报 年例选择不当, 会导致冗余测试用例具有相同或类似的覆盖信息, 这些冗余的覆盖信息可能降低错误定位的精度和效率 此外, 覆盖分析方法试图查找与失效相关的语句, 因此无法识别频繁执行但是没有导致失效的错误语句, 因此巧合正确的测试用例 ( 即覆盖了错误语句但未引发失效运行结果的测试用例) 会导致错误语句具有较低的可疑度, 降低该方法的有效性例如,狋为巧合正确的测试用例,它执行了缺陷语句狊, 但没有产生失效, 如果在测试用例集犜中增加与狋具有相同语句覆盖的测试用例, 则会导致 和 等方法计算狊可疑度的犪犲 狆值的增加, 进而降低其可疑度针对覆盖分析方法对不同数据集的定位有效性不稳定的问题, 丁晖等人 提出一种基于事件信息量的错误定位方法, 根据测试信息中不同事件的类型及其发生的概率, 结合语句的执行信息, 动态计算和调整错误定位的结果, 使之能够适应不同类型的数据集, 尽可能地降低用例集对定位效果的影响 程序切片方法程序切片方法主要包括静态切片和动态切片静态切片方法通过静态分析源程序, 根据依赖信息识别可能影响程序中某个位置的变量值的语句集合动态切片方法仅对当前输入生成的程序执行路径进行分析, 识别实际影响给定程序执行点的变量值的语句集合动态切片方法还可以分为反向动态切片和前向动态切片在某个程序点的变量的反向动态切片包括影响该变量值的所有执行语句在某个程序点的变量的前向动态切片, 则包括被该变量值影响的所有执行语句例如, 当用狋测试示例程序犘, 发现在语句狊 处输出错误的犿值时, 对其执行动态反向切片的结果为 (狋,犿狊 )狊 ,狊,狊,狊,狊对其第个参数犪 狉 犵 狏 执行动态前向切片的结果为 (狋,犪 狉 犵 狏 )狊,狊,狊 当用狋测试示例程序犘, 发现在语句狊 处输出错误的犿值时, 对其狊 ,犿 执行动态反向切片的结果为 (狋,犿狊 )狊 ,狊 ,狊 ,狊 ,狊对其第个参数犪 狉 犵 狏 执行动态前向切片的结果为 (狋,犪 狉 犵 狏 )狊,狊,狊 ,狊 ,狊 ,狊 切片方法的优点是描述了失效产生的上下文,并且所需测试用例较少, 通常只需要提供失效测试用例例如 (狋,犿狊 ) 仅通过分析失效测试用例狋的执行信息, 输出了与语句狊 处错误的犿值存在控制依赖关系的语句(狊,狊) 和数据依赖关系的语句(狊,狊)通过分析该切片可以发现狊处的缺陷语句切片方法的缺点是不提供语句的可疑程度描述, 并且切片规模仍然可能很大, 导致在切片中观察程序行为的代价较大 与 等人研究发现动态切片通常可以包含导致失效产生的错误代码, 并且动态切片的规模与实际执行的代码数量相比要小的多,但是切片中实际的代码规模仍然可能很大, 仍可能包含大量的不会生成错误值的代码因此先后提出失效输入的前向动态切片、 砍片( ) 、 带有置信度的动态切片剪枝 进一步缩小切片规模, 但仍需要开发人员审查大量的代码文万志和李必信等人, 针对面向对象程序提出了一种基于层次切片谱的软件错误定位技术, 利用层次切片技术提取各层次错误相关元素, 减小程序谱的规模, 从而提高语句搜索的效率 又针对程序谱分析方法会随着程序中错误数目的增多而效率下降, 提出了一种基于条件执行切片谱的多错误定位技术, 根据输入变量的谓词条件构建错误相关条件执行切片的谱矩阵, 然后依次计算错误相关条件执行切片中的语句或语句块的可疑度, 以提高多错误定位的效率 这两种方法结合了程序切片和程序谱方法的优点 依赖分析方法针对覆盖分析方法缺少对程序执行状态及其转移的分析, 无法有效分析失效感染状态传播的问题,研究人员提出了依赖分析方法依赖分析方法的基本思想类似于覆盖分析方法, 不同之处在于在统计分析成功执行和失效执行的语句状态时考虑程序实体间的依赖关系, 例如控制依赖和数据依赖 等人 提出了 ( )方法认为错误的程序状态会沿着控制依赖向后传播, 因此通过抽象控制流来传播基本块的感染状态首先, 对程序进行控制依赖分析, 建立控制流图然后, 计算每条控制依赖边传播错误的可疑值最后,模仿拓扑排序的过程, 利用后续基本块的可疑值逆向推导前驱基本块的可疑值 等人 在程序依赖图的基础上使用概率图模型描述程序的状态, 定义了 ( ) , 并将其应用于错误定位和理解下面介绍该方法分析示例程序的过程及结果图是示例程序犘的程序依赖图, 其中节点表示程序语句, 实线边表示节点之间的控制依赖, 虚线 期王克朝等:软件错误自动定位关键科学问题及研究进展图示例程序犘的程序依赖图边表示数据依赖控制依赖边上的 和 表示谓词状态此外 还对传统的程序依赖图进行了改进, 例如对谓词节点增加了数据依赖节点( 表示为犇犻) 等 中的每个节点都对应一个与程序执行相关的状态集合, 并且每个节点状态都对应一个概率值示例程序犘的节点状态及概率分布见表符号表示节点被执行,表示节点未被执行谓词节点状态表示为逻辑关系, 数据流犱犻(狓) 表示节点犻定义了变量狓例如节点狊的状态集合为犱(狕) , ,表示狊或者使用了节点狊定义的变量狕, 或者未被执行示例程序犘和犘具有相同的程序依赖图表示形式和节点状态, 不同之处在于语句狊处的谓词表达式不同以及程序的动态执行信息不同表示例程序犘的节点状态及概率分布节点状态条件概率节点状态条件概率狊,狊,狊,犘(狊) ,犘(狊) ,犘(狊)狊 ,犘(狊 犇,狊)狊犱(狕) ,犘(狊狊)犇 (犱(狓) ,犱(狔) ) ,犘(犇 狊,狊)犇(犱(狔) ,犱(狕) ) ,犘(犇狊,狊)狊 ,犘(狊 犇 ,狊 )狊,犘(狊犇)狊 犱(狔) ,犘(狊 狊 ,狊)犇(犱(狓) ,犱(狔) ) ,犘(犇狊,狊)犇 (犱(狓) ,犱(狕) ) ,犘(犇 狊,狊)狊,犘(狊犇,狊)狊 ,犘(狊 犇 ,狊 )狊犱(狔) ,犘(狊狊,狊)狊 犱(狓) ,犘(狊 狊 ,狊)犇(犱(狓) ,犱(狕) ) ,犘(犇狊,狊)狊,犘(狊犇,狊)狊犱(狔) ,犘(狊狊,狊)狊 犱(犿) ,犱(犿) ,犱(犿) ,犱 (犿) ,犱 (犿)犘(狊 狊,狊,狊,狊 ,狊 )由于节点的状态受其控制依赖和数据依赖前驱节点的影响, 因此节点状态的概率定义为条件概率这些概率值是通过用多组成功测试用例执行程序代码, 捕获节点状态轨迹, 然后统计学习获得的如果节点没有前驱节点则其状态概率为该状态在成功执行中出现的次数与该节点执行次数的比值, 否则为其前驱节点在当前状态下的条件概率具有较高概率的状态是期望的程序状态在错误定位过程中, 对于失效执行的各个节点状态, 查找其在 中的概率, 并按照由低到高的顺序排列, 具有较低概率值的节点状态具有较大的可疑度例如, 失效测试用例狋执行示例程序犘的状态轨迹如表左侧部分所示( 对应于图中加粗部分)这些节点状态中, 当前驱节点状态狊时,狊犱(狔) 具有最低的概率值, 即语句狊和狊间对于变量狔存在数据依赖关系最可疑因此可以定位缺陷语句狊失效测试用例狋执行示例程序犘的状态轨迹如表右侧部分所示狋执行了缺陷语句狊, 但没有执行缺陷语句狊状态狊() 的概率值排序为由于没有被成功测试用例覆盖, 状态狊 和狊 的可疑度为计算机学报 年表基于犘 犘 犇 犌方法分析示例程序犘和犘的结果示例程序犘失效测试用例狋执行状态轨迹用成功测试用例集合犜狆狋,狋,狋,狋,狋 学习的条件概率示例程序犘失效测试用例狋执行状态轨迹用成功测试用例集合犜狆狋,狋,狋 学习的条件概率 (狊:) ,(狊:) ,(狊:) ,(狊:犱(狕) ) ,(犇: (犱(狔) ,犱(狕) ) ) ,(狊:) ,(犇: (犱(狓) ,犱(狔) ) ) ,(狊:) ,(犇: (犱(狓) ,犱(狕) ) ) ,(狊:) ,(狊:犱(狔) ) ,(狊 :犱(犿) ) 犘(狊)犘(狊)犘(狊)犘(狊犱(狕)狊)犘(犇(犱(狔) ,犱(狕) )狊)犘(犇(犱(狔) ,犱(狕) )狊)犘(狊犇(犱(狔) ,犱(狕) ) ) 犘(犇(犱(狓) ,犱(狔) )狊) 犘(犇(犱(狓) ,犱(狔) )狊) 犘(狊犇(犱(狓) ,犱(狔) ) ) 犘(狊狊) 犘(犇(犱(狓) ,犱(狕) )狊) 犘(犇(犱(狓) ,犱(狕) )狊) 犘(狊犇(犱(狓) ,犱(狕) ) ) 犘(狊狊)犘(狊犱(狔)狊)犘(狊犱(狔)狊) 犘(狊 犱(犿)狊犱(狕) ) (狊:) ,(狊:) ,(狊:) ,(狊:犱(狕) ) ,(犇: (犱(狔) ,犱(狕) ) ) ,(狊:) ,(狊 :) ,(犇 : (犱(狓) ,犱(狔) ) ) ,(狊 :) ,(犇 : (犱(狓) ,犱(狕) ) ) ,(狊 :) ,(狊 :犱(犿) ) 犘(狊()犇(犱(狔) ,犱(狕) ) ) 犘(狊 ()犇(犱(狔) ,犱(狕) ) ) 犘(狊 ()狊() ) )犘(犇 (犱(狓) ,犱(狔) )狊) 犘(狊 犇 (犱(狓) ,犱(狔) ) ) 犘(犇 (犱(狓) ,犱(狕) )狊) 犘(犇 (犱(狓) ,犱(狕) )狊) 犘(狊 犇 (犱(狓) ,犱(狕) ) ) 依赖分析方法的优点是不仅给出程序元素的可疑值, 描述其可疑程度, 还考虑了程序感染状态的传播, 并且控制依赖或者数据依赖信息有助于理解失效产生的上下文缺点是动态统计分析每个节点的状态及依赖关系( 特别是数据依赖) 具有较高的计算复杂度此外, 该方法本质上也是统计方法, 对测试用例的数量和质量要求较高何加浪等人 提出了一种基于传播感知的程序故障定位方法为了降低计算复杂度, 该方法首先利用节点在成功执行路径和失效执行路径中出现的频率不同确定可疑空间中的每个节点的初始可疑度, 接下来通过引入边传播趋势的概念确定初始可疑度最大的节点是否具有故障传播现象, 最后对感知的故障传播相关节点进行可疑度修正来确定节点的最终可疑度赵磊等人 针对覆盖分析方法中代码覆盖率的独立统计忽略了程序内存在的复杂控制依赖和数据依赖的问题, 提出程序失效规则及基于覆盖向量的覆盖信息分析模型, 并在此模型基础之上, 指出高可疑代码与错误代码在执行路径上的覆盖一致性,进而提出用于挖掘与高可疑代码相关联的错误代码的频繁集求解方法 状态变更方法状态变更方法在程序执行时获取或修改程序的状态, 找出对测试结果( 成功失效) 产生影响的关键程序元素, 进而定位可能导致失效的代码 等人 提出了一种基于程序状态变更的错误定位技术 , 开发了工具 , 自动缩小程序成功执行和失效执行过程之间的区别,辅助错误定位首先通过对源程序进行静态分析得到其定义的所有变量以及它们的值集, 以此建立程序状态图然后比较成功执行对应的程序状态图和失效执行对应的程序状态图, 求出它们的最小公共子图, 从而得到它们的差异最后, 利用这些差异变量, 跟踪它们的值, 直到找到错误语句 分析示例程序犘的结果如图所示由于 输出行号是自然行号( 如包括函数名、 变量声明语句等) , 因此输出结果 :对应于图中的可执行语句狊 通过对比失效测试 用 例狋(,) 和成功测试用例狋(,) 的执行状态值, 将狋在语句狊和狊处的狔值以及狊 处的犿值输出为与失效相关的状态该结果没有直接定位到缺陷语句, 需要进一步分析狊处的选择分支, 才能发现狊处的缺陷输入信息: 示例程序犘,失效测试用例狋(,) , 成功测试用例狋(,) 的输出结果: ( ?) ( )( ) ( ?) ( )( ) : ( :(狊) ) ,狔 ( : (狊) ) ,狔 ( : (狊 ) ) ,犿 图 工具分析示例程序犘的结果 分析示例程序犘的结果如图所示, 没有直接定位到缺陷语句用同一个失效测试用例狋(,) 但不同的成功测试用例执行犘时, 在语句狊处输出了不同的差异变量可见其输出结果 期王克朝等:软件错误自动定位关键科学问题及研究进展受所选择的测试用例的影响输入信息: 示例程序犘,失效测试用例狋(,) , 成功测试用例狋(,) 的输出结果: ( ?) ( )( ) ( ?) ( )( ) : ( :(狊) ) ,狕 ( : (狊 ) ) ,狔 ( : (狊 ) ) ,犿 输入信息: 示例程序犘,失效测试用例狋(,) , 成功测试用例狋(,) 的输出结果: ( ?) ( )( ) ( ?) ( )( ) : ( :(狊) ) ,狔 ( : (狊 ) ) ,狔 ( : (狊 ) ) ,犿 图 工具分析示例程序犘的结果由于程序状态空间巨大, 修改所有可能的状态是不现实的 等人 研究发现, 很多错误都会导致程序谓词状态的改变, 从而影响分支的选择基于此, 提出了 方法它通过强制修改谓词状态, 使得分支选择发生改变如果某个失效执行因为某个谓词状态的强制改变而变成成功执行的话, 称此谓词为关键谓词通过查找关键谓词定位软件缺陷状态变更方法的优点是通过识别对运行时的程序状态做哪些修改有助于使失效执行转变为成功执行, 可以为开发人员理解和修正软件错误提供有效参考缺点是须确保内存修改的语义一致性, 并且对于复杂系统而言由于程序状态数目庞大, 算法计算复杂度高, 时间开销大 模型检验方法模型检验方法推导期望的程序行为模型, 并通过检测失效执行对期望行为的违背情况识别错误行为 等人开发了 工具 , 将错误定位问题转换为“ 最大可满足” 问题 的输入是一个源程序, 需要人工为该程序插桩断言, 用以规格说明程序恒定满足的正确行为首先使用边界模型检验获得测试执行的边界, 并将程序的边界语义编码为布尔表达式然后对失效执行创建一个不可满足表达式最后使用“ 最大可满足” 规则, 查找可以同时满足该表达式的最大短语集合, 将其输出为可能的失效根源例如, 对示例程序犘和犘分别插入断言 (犿狔犿狕犿 狓犿狓犿狕犿狔犿 狕犿 狔犿狓犿狓犿狔犿狕犿狕犿狓犿狔犿狔犿狓犿狕) ; 然后使 用 分 析犘, 程 序 跟 踪 窗 口 中 语 句“犿狔; ” 被蓝色加亮, 表示该语句被识别为潜在的缺陷位置用 分析犘, 正确识别了缺陷语句“ (狔狕 ) ” , 但没有同时识别出缺陷语句“犿狔; ” ,需要在修正缺陷语句“ (狔狕) ” 之后再次检测模型检验方法的优点是结果准确, 并能提供期望的行为状态或失效执行的违背情况描述, 有助于理解和修正错误缺点是需要指定断言, 而确定程序中恒定满足的属性分析过程比较复杂, 且对于复杂系统而言, 模型检验方法形式化模型逻辑推理的复杂度较高, 开销很大 不变量分析方法不变量分析方法首先运行多个成功测试用例训练提取程序中的不变量( 恒定满足的属性) , 然后运行失效测试用例, 检测违背的不变量, 将其作为导致失效的原因 等人 开发了 ( ) , 通过执行 程序动态提取不变量, 然后分析程序的执行行为, 检测不变量违背, 进而检测异常, 并根据置信度值将异常排序如果表达式被执行多次, 并且所观测的值很少违背, 则具有较高的置信度 可分析的程序属性包括某个变量的值是否总是相同、 表达式的值是否总是正或者负、 值的奇偶性、 值的近似上界等 包含两种工作模式: 训练模式和检验模式在训练模式根据需要放宽不变量假设来学习不变量, 在检验模式当放宽不变量时发出消息报告产生每个不变量违背的旧的不变量的置信度值和新的不变量的置信度值较大的置信度下降值是一个值得注意的不变量违背, 对应的语句可能含有错误例如, 分析值的范围不变量, 对于示例程序犘用成功测试用例集犜狆狋,狋,狋,狋,狋 学习获得的各个赋值及输出变量的值的范围为狊:狓(,) ,狊:狔(,) ,狊:狕(,) ,狊:犿(,) ,狊:犿(,) ,狊:犿(,) ,狊 :犿(,) ,狊 :犿(,)失效测试用例狋(,) 的执行对该值范围不变量的违背情况如下:狊:狔() ,狊:犿() ,狊 :犿()通过分析该不变量违背可发现语句狊处变量犿赋值为存在错误对示例程序犘用成功测试用例集犜狆狋,狋,狋学习获 得 的 各个 赋 值及 输 出 变 量 的 值 的 范 围 为狊:狓(,) ,狊:狔(,) ,狊:狕(,) ,狊:犿(,) ,计算机学报 年狊:犿(, ) ,狊:犿(,) ,狊 :犿(,) ,狊 :犿(,)失效测试用例狋(,) 的执行对该值范围不变量的违背情况如下:狊:狓()仅根据该结果难于定位缺陷位置不变量分析方法的优点是利用成功测试用例学习得到的不变量有助于分析软件的期望行为和属性存在的问题是对测试用例的质量要求较高当使用大量的任意测试用例( 如软件测试中使用的所有测试用例) 进行训练, 提取不变量, 可能导致程序不变量的范围太宽, 产生大量误检, 无法准确定位到失效的产生根源; 而任意选择测试用例可能导致覆盖率低, 训练不充分, 很多语句没有被执行到, 使得真正的失效产生原因没有被包含到候选集合中, 导致漏检例如犘的值的范围不变量分析结果没能有效指出缺陷语句 变异方法基于变异的错误定位方法将变异技术应用于错误定位变异分析基于简单的语法规则转换程序语句, 把原始程序转换成若干个变异( ) 程序,从而向程序中植入缺陷变异测试通过用测试用例集执行变异程序, 然后检查变异程序和原始程序版本间的行为差异对于给定的测试用例集, 如果存在某个测试输入, 使得变异程序产生的输出与原始程序的输出不同, 则称该变异“ 被杀死” ( ) , 否则称该变异是“ 活的” ( )基于变异的错误定位方法利用变异测试技术的错误植入能力, 在特定程序语句上产生符合语法的程序错误, 并利用测试结果变化识别可疑的变异并利用它们的位置来定位错误语句基于的假设是位于同一位置的错误语句及其变异具有相似的行为,因此被失效测试用例杀死的变异, 很可能指出了错误位置 等人 提出了一种基于变异分析的错误定位方法 首先对程序中的每个可执行语句执行阶变异转换( 即执行一次语法修改) , 生成若干个变异程序, 并执行变异测试然后,将被杀死的变异看做被覆盖的元素, 活的变异看做未被覆 盖 的 元 素, 利 用 已 有 的 覆 盖 分 析 方 法( ) 通过度量成功测试和失效测试用例杀死变异的数目, 计算各个变异的可疑度值最后, 根据变异的可疑度, 给原始程序语句赋可疑度值对于同一语句的多个变异取其中的最大值作为该语句的可疑度值例如, 对示例程序犘采用关系变异操作算子生成 个变异程序这些变异体中, 语句狊的变异体, 即将 (狔狕) 修改为 (狔狕) ,被两个失效测试用例(狋和狋) 杀死, 而未被任何成功测试用例杀死, 由 公式计算得到可疑度值为 , 高于其他变异体的可疑度, 因此所对应的语句狊被定位为可疑语句采用关系变异运算符可以定位关系运算相关的软件缺陷, 但是无法定位狊那样的赋值语句缺陷如果对示例程序犘采用变量替换变异算子, 语句狊的变异体狔狓被个失效测试用例狋杀死, 未被任何成功测试用例杀死, 由 公式计算得到可疑度值为 , 因此狊被定位为可疑语句采用变量替换变异算子可以有效定位这类变量引用错误的缺陷对于示例程序犘, 可采用算数常量增和减算子生成 个变异程序, 其中缺陷语句狊“犿狔”的两个变异体狔狔和狔狔的可疑度为 排列在第一位, 因此狊被识别为最可疑语句文献 中给出了详细分析结果基于变异的错误定位方法的优点是将变异测试过程与错误定位过程统一, 并且由于其要求由变异引入的差异必须影响程序的输出, 因此可以有效处理巧合正确的测试用例缺点是变异测试的复杂度较高, 并且错误定位的有效性依赖于变异算子和测试用例的选择目前难点及未来可能的研究方向已有软件错误定位方法为软件自动化调试奠定了良好的研究基础, 然而从以上分析可以看出, 目前的软件错误定位方法的研究大多致力于回答“ 什么导致了失效” , 即指出可疑语句的位置, 但通常缺少对“ 为什么程序会失效” 的分析, 不能为理解软件失效产生的上下文提供充分的信息定位结果的有效性, 特别是分析多缺陷程序的有效性, 还需要进一步提升此外, 还缺少对“ 如何最大化地利用软件测试中提供的诊断信息, 使其提高错误定位的有效性” 的考虑因此, 软件错误定位领域目前仍存在以下难点问题需要进一步分析与解决这些问题能否良好解决直接决定着错误定位方法的有效性及其能否被真正应用于实际的软件自动化调试过程中() 如何优化软件测试过程中测试用例的执行信息, 提高错误定位的有效性?测试过程中提供了大量的测试用例及其执行信 期王克朝等:软件错误自动定位关键科学问题及研究进展息, 错误定位方法可以在这些信息的基础上进行分析, 提取可疑程序元素然而满足测试准则的测试用例集合, 未必能为错误定位提供有效的信息这是因为测试的目标是较高的代码覆盖程度, 尽可能地揭示失效, 而错误定位的目标是减小识别的覆盖代码集合, 尽可能地确定含有缺陷的程序元素 等人 通过实验验证测试的充分覆盖准则并不能充分确保错误定位的有效性 等人 研究表明测试用例的选择是提高调试效率的关键因此, 测试用例的选择会对错误定位的有效性和效率产生显著的影响然而, 已有关于测试用例选择的研究大多集中于如何提高测试和错误定位的效率, 而缺少关于如何提高错误定位有效性的研究 等人 研究了基于语句覆盖的测试用例约简策略, 将其应用于错误定位方法 上, 结论是减少冗余测试用例有利于提高错误定位的有效性 等人 实验分析了测试用例约简对覆盖分析方法有效性的影响, 得到的结论是与基于语句覆盖的测试用例约简方法相比, 基于语句向量的测试用例约简方法删除了较少的测试用例, 但约简后的测试用例更有利于错误定位, 错误定位技术的有效性取决于所使用的约简策略因此如何选择有利于提高错误定位方法有效性的测试用例值得进一步深入研究测试用例的巧合正确性也是影响错误定位( 特别是覆盖分析方法) 的有效性的一个重要因素 然而如何降低巧合正确性的影响却是个难点问题 等人 考虑了丢失语句情况下的巧合正确性问题, 提出利用控制流和数据流模式( 上下文模式)进一步精化代码覆盖信息, 排除巧合正确的测试用例引入的错误覆盖信息该方法的前提是开发人员预先知道错误类型, 但在实际软件开发过程中该假设不一定成立 等人 提出启发式方法来区分巧合正确的测试用例, 首先识别“ 出现在失效执行和少量( 不为) 成功执行中的程序元素” 作为可能与巧合正确性相关的程序元素, 然后分析测试用例对这些元素的覆盖情况, 判定其是否是巧合正确的测试用例该方法具有较高的误检率, 导致无法显著提高错误定位的有效性此外, 以上研究大多假设已有足够的测试用例信息, 但有些情况下已有信息不足以有效执行错误定位, 这就需要研究如何生成适用于错误定位的测试用例在回归测试中, 测试和错误定位过程通常交替执行: 开发人员测试程序, 检测之前对程序所做的修改是否引入新的缺陷, 如果产生失效, 则执行错误定位和修正, 并在修正了错误后再次执行回归测试这就引入了测试用例优先排序问题“ 在发现失效后, 按什么顺序选择执行剩余的测试用例才能有助于尽早、 有效地定位到软件错误” 等人 实验分析了应用于软件测试中的测试用例优先排序技术对覆盖分析错误定位技术的有效性的影响, 结果表明测试用例优先排序的策略和时间开销是影响错误定位有效性的关键因素 等人 针对软件错误定位, 提出使用贝叶斯理论计算错误定位的可疑度并对整个测试用例集进行排序, 基于前次执行的成功失效结果, 动态选择测试用例, 使每次测试具有较高的诊断性能 等人针对覆盖分析错误定位方法, 提出了基于信息熵理论排序测试用例 , 以提高错误定位的有效性该方法适用于 等覆盖分析方法, 而是否适合其他方法还需要进一步研究与分析综上所述, 面向有效错误定位的测试用例优选、自动生成、 优先排序技术是未来的重点研究方向() 如何使软件错误定位方法在回答“ 什么导致了软件失效” 时, 既具有较低的计算复杂度, 又能充分分析程序的执行状态传播及程序元素间的相互影响, 从而有效地定位缺陷?状态变更方法和模型检查方法提供了错误行为描述, 但是这两种方法复杂度过高, 难以应用于实际的软件调试过程中覆盖分析方法计算复杂度低, 但是通常只考虑单个程序元素的可疑程度, 而忽略了程序感染状态的传播, 当软件错误涉及多个程序元素间复杂交互的情况下, 可能定位不到错误语句针对上述问题, 提出基于信息流覆盖的错误定位方法, 使用信息流捕获语句和程序变量间的 交 互, 又 进 一 步 提 出 错 误 相 关 依 赖 链 的 概念 ; 等人 提出基于因果图的覆盖分析方法这种方法考虑了程序的控制和数据依赖, 为分析程序元素间的相互影响奠定了基础, 但仍存在以下不足之处:缺少对期望执行状态及其转移的描述;信息流、 依赖链、 因果图的数目众多, 动态跟踪大量测试用例执行时的动态数据依赖信息, 计算复杂度高, 有时会得到不准确的结果 轻量级的、 解析失效感染状态传播的错误定位方法, 将有助于自动化软件错误定位工具在工业界的实际应用与推广, 值得进一步研究与探讨计算机学报 年() 如何自动分析可疑程序点的执行状态上下文, 定位失效的产生根源, 为开发人员理解与修正软件缺陷提供充分的信息?大多已有错误定位方法着重于缺陷定位, 通常仅报告可疑代码行, 而忽略了一个事实: 理解一个失效的产生原因通常涉及复杂的活动 和 基于错误定位方法 进行实验, 分析开发人员调试程序时的行为, 得到的结论是很多情况下, 开发人员在看完错误定位工具列出的可疑语句后, 需要花费大量的时间来审查语句如果不理解为何失效, 开发人员很难修正缺陷因此仅给出可疑语句是不够的, 需要更多的关于失效产生的上下文信息来辅助开发人员理解软件错误程序不变量分析方法有助于检测失效的产生根源, 但是缺少对错误传播的分析, 并且存在大量的误检, 错误定位的有效性存在局限性 与 提出上下文提醒的统计分析调试方法, 通过创建错误控制流路径将缺陷指示器( 可能包含错误的谓词语句) 连 接 在 一 起, 辅 助 开 发 人 员 理 解 软 件 错 误 等人 通过图挖掘算法识别失效产生的上下文然而, 这两种方法只考虑了程序的控制结构,没有分析数据依赖信息, 因此只能识别控制流相关的错误, 无法有效识别数据流相关的错误; 此外, 只给出控制结构上下文, 仍然无法充分辅助开发人员理解与修正错误综上, 错误定位结果不但应给出可疑程序语句,还应为理解“ 可疑语句如何与软件错误相关, 它们为什么会导致软件失效, 以及如何修正这些错误” 提供充分的信息如果能构建一个多维全景视图, 自动分析推导失效相关的控制依赖及数据依赖、 失效执行路径上的值以及可疑程序点的期望状态和表达式等信息, 则可以有效辅助开发人员理解这些问题程序理解方法与软件错误定位方法的有机结合将有助于解决该难点问题() 在存在多个失效测试用例的情况下, 如何区分失效特征, 避免多个错误间的相互干扰, 并且深入考虑错误间的关联关系, 有效定位多缺陷程序中的错误? 等人 开发的工具 通过对基于语句覆盖的错误定位方法进行实验得出结论: 无论是对于成功测试用例集合还是失效测试用例集合,其中第犽个测试用例比第犽个测试用例对错误定位的贡献大; 成功测试用例集合的对错误定位的总贡献小于失效测试用例集合对错误定位的总贡献该研究给我们的启示是不同的测试用例对错误定位具有不同的贡献, 并且在错误定位过程中尤其要充分考虑失效测试用例对错误定位的影响 与 研究 基准测试程序组发现, 程序中多个错误可能以多种方式相互作用, 由一个错误导致失效的测试用例, 在加入另一个错误时可能不会失效, 因为它可能掩盖了第一个错误的失效因果此外, 某个失效的产生可能会伴随着其他失效, 这种错误间的相关性使得多缺陷程序的错误定位问题变的十分复杂然而 等人 研究错误数量对覆盖分析错误定位方法的影响的实验结果表明, 有些错误的定位结果与其他错误是否出现无关通常即使存在多个错误, 定位技术每次也能有效定位其中的一个错误然而如何自动区分多个错误间的关系到底属于以上哪种情况是一个难点问题, 该问题的解决直接决定着多缺陷程序错误定位方法的有效性将错误关联、 失效特征聚类、 机器学习等技术应用于错误定位中将有助于解决该问题, 值得深入开展相关研究结束语软件自动错误定位技术是实现软件自动化调试、 提高软件可靠性及开发和维护效率的关键, 具有广阔的应用前景和发展空间本文深入调研了国内外软件工程方向的顶级期刊和会议, 提出了“ 失效错误定位理解” 模型, 详细分析了软件错误自动定位领域的关键科学问题与发展趋势, 展望了未来的研究方向参考文献 , , , , () : ( )( 单锦辉,徐克俊,王戟一种软件故障诊断过程框架计算机学报, , () : ) , , , () : ( )( 虞凯,林梦香自动化软件错误定位技术研究进展计算机学报, , () : ) : , : , 期王克朝等:软件错误自动定位关键科学问题及研究进展 , , , , : , , , : , , , , , : , : , , , : , , : , , , , , : , , , : , , , : , , ( ) : , , , , : , , : , , : , , : , , , , , , , : , , , , : , , , , , ( ) : , , , , , : , , , : , , : , , , , , : , , : , , : , , , , : , , , : , , : , , , : , , : , , , , , : , , , , : , , , , () : , , , , , () : , , , , , : 计算机学报 年 , , , : , , : , , : , , , , () : , , , , , : , , , , , () : , , : , ?, , : , , ( ) : , , , , : , , , , , () : , , , : , , : , , () : , , , : , , : , , () : , ?, , , : , , , : , , , , , : , , , , : , , , () : , : , , ( ) : , , : , , () : , , , : , , : , , , , , : , , , : , , : , : , , : , , , , : , , , , () : , , , () : , , 期王克朝等:软件错误自动定位关键科学问题及研究进展 , , : , , , : , , () : , , , : , , , , , : , , , () : , , , : , , , , : , , , , : , , , : , , () : , : , , : , , , , , : , : , , : , : , , : , , : , , : , , , : , , , , , : , , , ( ) , , : , : , , , , () : , , , , , , , ( ) : ( )( 谭德贵,陈林,王子元,丁晖,周毓明,徐宝文通过增大边际权重 提 高 基 于 频 谱 的 错 误 定 位 效 率计 算 机 学 报, , ( ) : ) , , , , ( ) : ( )( 惠战伟,黄松,嵇孟雨基于程序特征谱整数溢出错误定位技术研究计算机学报, , ( ) : ) , , , , , , () : ( )( 丁晖,陈林,钱巨,许蕾,徐宝文一种基于信息量的缺陷定位方法软件学报, , () : ) , , , , , () : ( )( 叶钢,余丹,李重文等一种基于 检验的缺陷定位方法计算机研究与发展, , () : ) , , , , , , , ( ) : ( )( 李伟,郑征,郝鹏,高乙超,饶培峰,宫成基于谓词执行序列的软 件 缺陷 定 位 算 法计 算 机 学 报, , ( ) : ) , , , , , , ( ) : ( )( 涂径玄,陈林,许蕾,卢红敏,徐宝文考虑类特性的面向对象错误定位计算机学报, , ( ) : ) , , , , , () : ( )计算机学报 年( 文万志,李必信,孙小兵,刘翠翠一种基于层次切片谱的软件错误定位技术软件学报, , () : ) , , , , , () : ( )( 文万志,李必信,孙小兵,齐珊珊基于条件执行切片谱的多错误定位计算机研究与发展, , () : ) , , , , , , () : ( )( 肖庆,宫云战,杨朝红,金大海,王雅文一种路径敏感的静态缺陷检测方法软件学报, , () : ) , , , , , , , () : ( )( 柳永坡,吴际,金茂忠,杨海燕,贾晓霞,刘雪梅基于贝叶斯统计推理的故障定位实验研究计算机研究与发展, , () : ) , , , , , () : ( )( 何加浪,孟锦,张琨,张宏一种故障传播感知的程序故障定位方法电子与信息学报, , () : ) , , , , , , ( ) : ( )( 赵磊,王丽娜,高东明,张震宇,熊作婷基于关联挖掘的软件 错 误 定 位 方 法计 算 机 学 报, , ( ) : ) , , , , , , , ( ) : ( )( 贺韬,王欣明,周晓聪,李文军,张震宇,张成志一种基于程序变异的软件错误定位技术计算机学报, , ( ) : ) , , , , , () : ( )( 徐宝文,聂长海,史亮,陈火旺一种基于组合测试的软件故障调试方法计算机学报, , () : ) , , , , () : ( )( 周吴杰,张德平,徐宝文基于组合测试的软件故障定位的自适应算法计算机学报, , () : ) , , , () : ( )( 何加浪,张宏神经网络在软件多故障定位中的应用研究计算机研究与发展, , () : ) , , , , , , () : ( )( 张云乾,郑征,季晓慧,张文博,张震宇基于马尔可夫模型的软件错误定位方法计算机学报, , () : ) , , , , : , , , ( ) , , : , , , , , () : , , , , : , , , ? , , () : , , , , : , ? , , : , , , , , : , , , : , , , : 期王克朝等:软件错误自动定位关键科学问题及研究进展犠犃 犖 犌 犓 犲 犆 犺 犪 狅, , , 犠犃 犖 犌 犜 犻 犪 狀 犜 犻 犪 狀, , , 犛 犝犡 犻 犪 狅 犎 狅 狀 犵, , , 犕犃 犘 犲 犻 犑 狌 狀, , , 犅 犪 犮 犽 犵 狉 狅 狌 狀 犱 , : , , , , , , () “ ” () , ( , ) , ( ) , ( ) , ( ) ( )计算机学报 年
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号