硕士论文网第2022-04-06期,本期硕士论文写作指导老师为大家分享一篇
软件工程应用论文文章《深度学习和多维特征视角下的错误定位技术分析》,供大家在写论文时进行参考。
本文对部分错误定位技术及其组合进行了实证研究与评估。首先,实现了包括 SBFL、MBFL、DS 和 IRBFL 在内四类错误定位技术,并在真实错误数据集 D4J 上对这些技术进行了验证。然后,探讨不同技术之间的关联关系并尝试将错误定位技术进行组合。相比于对单个错误定位技术的评估,涉及多种技术的综合性评估更加全面;另外,相比于使用人工错误进行相关研究,建立在真实错误上的研究更具实际参考价值。实验结果表明这些错误定位技术在真实错误上的整体表现与之前的研究结论基本一致。SBFL 易于实现且足够有效;MBFL 的表现同样优异,但需要考虑额外的时间开销;DS 与 IRBFL 的定位精度还有待提高,但作为辅助技术时,可以和 SBFL 以及 MBFL 形成互补。此外,将不同的技术组合可以提高错误定位有效性,这类研究工作具有广阔的前景。
1 绪论
1 Introduction
本章首先论述软件错误定位的研究背景及意义,其次介绍国内外错误定位技术的研究现状,指出当前存在的问题并说明本文主要研究内容,最后给出本文的结构安排。
1.1 研究背景及意义(Research Background and Significance)
随着现代计算机技术的发展与普及,计算机软件不仅在各个专业领域取得了成功,极大地提高了生产和工作效率,也深入到社会的方方面面,成为我们日常生活中不可或缺的一部分。另一方面,伴随着这种增长的趋势,软件规模日益庞大、复杂程度急剧攀升,给软件质量维护工作也带来了巨大的挑战。因为复杂度高是软件产生缺陷的主要原因之一,而软件缺陷往往会引发软件错误甚至导致软件失效[1]。信息与软件质量联盟(CISQ)在 2020 年的报告[2]中指出当年低质量软件给美国造成的经济损失预估高达 2.08 万亿美元。毫无疑问,在全球范围内由软件质量问题带来的损失会更大且这一数字还将逐年攀升。除经济损失外,软件问题还可能导致灾难性的后果,2019 年造成上百人罹难的波音 737MAX8 坠机事件,原因之一就是其安全关键系统中的软件行为错误[3]。因此,尽早检测到并修复软件错误从而提高软件质量、保障软件可靠性显得愈发重要。调试是在编程或软件开发期间,发现并解决计算机程序、软件或系统中错误的过程。通常,软件调试工作包含两部分内容:错误定位与程序修复。尽管已有许多软件调试技术被应用到了生产实践当中,但软件调试仍然被认为是一项极具挑战性的任务,因为它是软件开发生命周期中最耗时、代价最高昂的环节。研究发现,开发人员要花费约 50%的开发时间进行软件调试,而错误定位又占据了其中绝大部分时间,因为一旦确定错误位置,纠正程序代码就相对简单[4]。从这个角度来说,错误定位对于维护软件质量至关重要,越早定位到具体位置,就能越早修复软件错误。在过去,错误定位主要依赖开发人员的经验与直觉,在充分了
解程序内部逻辑的前提下去识别可能有错的代码并确定需要检验的代码的优先级。当程序规模较小时,开发人员还可以借助日志打印、断言插入、断点执行或性能分析等传统方法快速定位到错误发生的位置,但鉴于现代大型软件系统的规模与复杂程度,这项工作就变得枯燥乏味且耗费时间[5]。因此,大量的软件调试研究工作都致力于实现自动或半自动化的错误定位,以减少开发人员的工作量。
1.2 国内外研究现状(Research Status at Home and Abroad)
错误定位是近年来软件工程领域较为活跃的研究方向之一,已有大量相关的理论和实践研究,囊括框架、技术方法、工具、评价比较和模型等。本节将讨论错误定位技术的分类及其国内外研究现状,并重点关注基于机器学习尤其是排序学习、深度学习这方面的错误定位技术。
1.2.1 错误定位技术的分类
2009 年,Wong 和 Debroy[9]回顾了传统的错误定位技术,并对全文概述的七类较为先进的错误定位技术进行了深入分析——基于切片的、基于频谱的、基于统计的、基于程序状态的、基于机器学习的、基于模型的和基于数据挖掘的。同时,依据“基于特定标准使用单个失败和通过的测试用例”和“使用多个失败和通过测试用例集合的组合数据”将技术分为两大类。2012 年,Alipour[10]根据错误定位技术所使用的具体方法将其划分为程序切片、基于频谱的错误定位、统计推断、增量调试(Delta Debugging)和模型检查,并着重关注后两种技术。2016 年,Wong 等人[11]在原有工作[9]的基础上,对 1977 至 2014 年间包括硕、博士毕业论文在内的错误定位相关文章进行了全面、系统性的调研,更详细地介绍了前文的七类技术,并对其它不易细分的技术也进行了总结,包括专注于特定编程语言或测试场景的错误定位技术。2019 年,Zakari 等人[6]对错误定位研究领域进行了系统性绘图研究
(Systematic Mapping Study),以 Wong 的分类[11]为基准,他们认为现有技术应当划分出更多的类别,新增了基于信息检索的、基于变异的和基于组合的错误定位技术。综上,错误定位技术的分类依据有很多,比如所用测试信息的多寡、定位时程序的运行状态、时间或空间开销的大小等,但大多数研究工作还是着重关注错误定位技术更细粒度的方法分类。本文对错误定位技术的分类也依据其使用的具体方法,并从中选取基于频谱的、基于变异的、基于切片的、基于信息检索的、基于组合的和基于机器学习的错误定位技术开展相关现状分析。
2 背景知识和技术基础
2 Background Knowledge and Technique Foundation
本章将从缺陷预测、错误定位与深度学习三方面介绍相关基础知识,旨在为后续的错误定位实证研究工作以及详述基于深度学习和多维特征的错误定位方法提供铺垫。
2.1 缺陷预测度量元(Defect Prediction Metrics)
软件缺陷预测是在软件开发过程中利用可描述软件特性的度量元(Metric)预测有错误倾向性的模块,进而通过合理分配测试资源保障软件质量。现有度量元主要分为产品度量元和过程度量元,前者依靠代码分析设计度量元,后者则考虑软件开发过程中的各种因素[57]。在产品度量元中,最常用的是对规模度量的代码行数和对复杂度度量的麦凯布(McCabe)度量[58]与霍尔斯特德(Halstead)度量[59]。McCabe 度量一般指圈复杂度(Cyclomatic Complexity),它表示方法代码中线性独立路径的数量,Halstead 度量则使用程序中操作符和操作数的数量进行分析。
2.2 错误定位技术(Fault Localization Techniques)
软件系统通过接口(Interface)为用户提供服务(Service),当实际服务偏离预期时,称服务失效或软件失效(Failure)。接口总状态中可被用户感知的部分属于外部状态,服务也是外部状态的序列,当发生失效时意味着系统中至少有一个或以上的外部状态偏离正确的服务状态,即发生差错(Error)。根据已知信息推断或者假设得出的导致差错发生的原因叫错误(Fault,Bug)[60]。软件错误定位中的“错误”一词一般指 Fault 或 Bug。定义 2.3 源程序 P 由 n 个程序元素 e 组成,记作
以上论文内容是由
硕士论文网为您提供的关于《深度学习和多维特征视角下的错误定位技术分析》的内容,如需查看更多硕士毕业论文范文,查找硕士论文、博士论文、研究生论文参考资料,欢迎访问硕士论文网软件工程应用论文栏目。