人工智能(AI)算法,特别是机器学习(ML)和深度学习(DL)技术的进步,极大地推动了软件工程(SE)的智能化。然而,由于其黑盒特性,将这些性能优异的AI4SE模型部署在真实环境中仍有较大阻力。鉴于此,由扬州大学RISS-软件与安全实验室领衔与来自新加坡管理大学和华盛顿大学-圣路易斯以及南昆士兰大学TAGIR Group的研究者联合参与对旨在提高AI4SE模型的可解释人工智能(XAI)技术进行了系统梳理。该综述调研了过去12年(2012-2023)发表在26个顶级SE和AI会议与期刊上63篇论文,并从(1)适用的SE任务;(2)采用的XAI技术;和(3)方法评估,三个角度对现有XAI4SE研究进行了总结归纳,确定了现有研究中仍待解决的一系列挑战,为未来XAI4SE领域的研究和发展提供洞见。此外,开发了一个交互式的在线网站,在提供对所搜集论文的各项信息及可视化的同时,邀请研究人员提交最新的相关论文,共同促进这一领域的快速发展。
论文链接:https://arxiv.org/abs/2401.14617
项目地址:https://riss-vul.github.io/xai4se-paper/
软件工程(Software Engineering,SE)是一门涉及软件系统的设计、开发、测试和维护的学科。随着软件在各行各业中广泛应用,各种复杂的SE数据,如源代码、错误报告和测试用例不断积累,变得前所未有的庞大和复杂。鉴于人工智能(Artificial Intelligence, AI)算法在各个研究领域取得显著成功,SE社区对探索和应用先进的机器学习(Machine Learning, ML)/深度学习(Deep Learning, DL)模型以自动化或增强通常由开发人员手动执行的SE任务,如自动程序修复,代码生成以及漏洞检测,表现出了极大的热情,并由此开辟了一个新的研究领域:AI4SE,特指使用人工智能算法解决SE任务的研究。然而,尽管ML/DL模型实现了前所未有的性能,但由于可解释性的缺乏,它们离在SE行业中实际部署却仍有很长的一段距离。众所周知,AI系统因其复杂的配置和庞大的参数量而难以被人类理解。从用户的角度来看,当使用不完美的模型时,需要可解释性来建立信任。例如,开发人员可能会试图理解基于DL的漏洞检测模型决策背后的原理,即为什么预测特定的代码片段是存在漏洞的,以便于分析和修复漏洞。对于模型设计者来说,需要可解释性来调查故障案例,并将性能不佳的AI模型引导到预期的正确路径中。换言之,仅靠简单的决策结果(例如,二元分类标签)而没有任何解释往往难以被用户采纳。
本文首先从软件工程的视角,对收集的63篇文章所针对的SE任务进行了分类,主要涉及软件开发、测试、维护和管理四个阶段,进一步细分为如下21个主要的SE任务:
可以发现,软件维护方面的研究数量最多,占总量的41.3%。31.7%的研究致力于软件测试,20.6%的研究专注于解决软件开发中的SE任务。这种分布强调了对开发和维护任务的重要关注。
此外,早期探索可解释性的SE任务是缺陷预测、程序修复、代码坏味检测和Bug报告相关的自动化。直到2021年,目标SE任务的多样性才显著增加,包括代码理解、Debugging和恶意软件检测等。值得注意的是,缺陷预测、漏洞检测和代码理解多年来一直保持着较高的活动水平。三者中最受欢迎的是缺陷预测,占比达到了19%。可解释研究在缺陷预测中流行的主要原因是,基于专家知识的特征工程比复杂的高维特征更容易理解。缺陷预测模型通常建立在一组手工制作的软件度量之上,因此,开发人员可以通过利用本质上可解释的模型(如决策树)或现成的事后解释器(如LIME、SHAP等)轻松获得可解释的结果。
本文接着从可解释人工智能的视角,对收集的63篇文章所采用的XAI技术进行了分类,主要分为以下五种:可解释模型、特征归因、注意力机制、领域知识和实例子集。
可解释模型(Interpretable Model):实现可解释性的最简单方法是构建内在可解释的模型,如决策树(DT)、逻辑回归(LR)、基于规则的模型(RM)和朴素贝叶斯(NB)。此外,可解释模型可以作为事后代理来解释黑匣子模型的个体预测。这一见解背后的目标是利用一个相对简单和透明的模型,尽可能近似复杂模型的预测,同时提供可解释性。代理模型在解释基于更复杂的ML/DL模型(例如,深度神经网络、SVM或集成模型)的AI4SE方法方面显示出了有效性。示例包括漏洞检测、缺陷预测和程序修复。
特征归因(Feature Attribution):基于特征归因的解释旨在通过对解释得分进行排名来衡量每个输入特征与模型预测的相关性(即归因得分)。分数的范围可以从显示其对模型预测的贡献的正值到表示该特征没有贡献的零值,再到表示删除该特征将增加预测类的概率的负值。其中,特征扰动是最流行的特征归因方法,代表性技术LIME已成功应用于各种SE任务,如缺陷预测,OSS可持续性预测和测试用例生成。
注意力机制(Attention Mechanism):注意力机制通常被视为关注投入中最相关部分的一种方式。直观地说,注意力可以捕捉输入的中间状态之间的有意义的相关性,这些相关性可以解释模型的预测。注意力机制最显著的优点在于它可以很容易地集成到任何深度神经网络中,并提高原始任务的性能以及提供可解释性。
领域知识(Domain Knowledge):一些研究通过纳入专家知识来提供解释,主要包含以下两种方式:(1)设计与主要任务相关的一个或多个辅助任务,以提供有关输入数据的额外见解,以及(2)使用由专家策划的外部知识数据库。例如,为了解释为什么程序/提交被预测包含潜在漏洞,最近的工作提出了预测漏洞类型,识别漏洞关键方面,生成漏洞描述,搜索类似问题等。对于后者,为了帮助开发人员理解神经代码搜索工具的返回结果,一些研究将知识图谱视为外部知识库,以提供概念关联路径、相关描述和其他建议作为解释。
实例子集(Example Subset):一些研究从样本子集的角度解释模型行为,旨在从模型预测变化的个别实例或场景中深入了解影响模型决策的因素。一些方法借鉴了软件测试领域的某些经典技术,如程序变异和增量调试,以搜索对模型预测有积极贡献的重要代码片段。
此外,本文还从可解释方法的输出格式进行了进一步分类,主要分为以下五种:数值解释、文本解释、可视化解释、代码解释和规则解释。
数值解释:能够以紧凑的格式传递信息的数值侧重于量化输入变量对模型预测的积极或消极贡献。这样的重要性得分可以直接用作解释,也可以用作指导关键特征选择的指标。
文本解释:与数字解释相比,文本自然语言描述更容易被非专家理解,从而清晰地理解智能SE模型的行为。这种文本解释可以通过使用生成式AI模型从头开始生成,也可以从Stack Overflow等外部知识库中检索得到。
可视化解释:用户还可以通过视觉形式理解底层模型的行为,这使得注意力的使用成为一个特别有吸引力的选择。可视化系统通过以各种形式表示不同模型的注意力,在多个尺度上显示关系的能力各不相同。此外,一些方法开发了交互式用户界面(UI)来提供可视化解释,以将控制权交还给用户。
代码解释:由于源代码是AI4SE模型试图学习的主要数据类型之一,因此它是一种自然的解释格式。一些研究采用架构特定(例如图神经网络GNN)的解释框架,将目标代码实例简化为保留原始预测标签的关键语句集。
规则解释:规则是一种逻辑化的解释格式,有助于表达输入特征及其激活值的组合。一般来说,这些规则近似于黑盒模型,但具有更高的可解释性。
就基线方法的使用而言,相当一部分文献自主开发了独特的基线。这些基线的种类繁多,体积庞大。大约一半的审查论文没有与任何基线进行比较,而少数论文将其发现与四种以上不同的方法进行比较。一个令人担忧的趋势是,许多XAI4SE方法缺乏可公开访问的实现。
就评估数据集而言,有一些数据集被作为评估基准频繁使用,也有相当一部分研究没有采用基线数据集,而是构建他们自己的基准。
就评估指标而言,近一半的主要研究采用了定性评估而不是定量指标来评估其提出的方法。由于缺乏基本事实,SE社区也尚未就标准化评估指标达成一致。此外,由于SE任务中与可解释性相关的目标范围很广,仅依靠单一的评估指标可能无法充分反映XAI工具的全方位性能。
过去几年中,针对AI4SE研究的可解释性探索已经有了很多成功的实践。然而,这类研究仍处于早期发展阶段,还有许多挑战和未解决问题需要探索。
挑战1:关于SE领域的可解释性仍未达成共识
在试图阐明特定SE任务的可解释性时,提出了许多观点。例如,为了帮助软件开发人员理解缺陷提交,一些方法只是突出模型认为有缺陷的代码行,而另一些方法则从缺陷代码中提取人类可理解的规则,甚至自然语言描述,这些规则可以作为可操作和可重用的模式或知识。尽管这种多样性可以满足具有不同专业水平的受众的不同要求,但它大大增加了建立一个统一框架的难度。
挑战2:性能-可解释性权衡
对于一些现实世界中的任务,具有较高精度的模型通常提供较少的可解释性(反之亦然)。这种权衡经常导致用户在黑盒模型和固有透明模型之间进行选择时犹豫不决。这一挑战突出了根据不同SE任务的特性(例如,输入/输出格式、模型架构)灵活选择XAI技术的必要性。例如,当透明模型的性能能够满足用户的要求时,优先考虑透明模型,并在需要时过渡到更复杂的模型。
挑战3:高度定制化的基线和基准数据集
在基准数据集上对新提出的方法进行基线技术评估,正在发展成为SE研究的标准实践。尽管如此,Ground Truths稀缺仍然是一个主要问题,因为对于大规模数据集来说,数据注释过程是专业知识密集型且耗时的。这在XAI领域更为关键,因为XAI领域需要额外的(通常是多模态的)注释(例如,文本描述、结构化决策规则)。一个潜在的解决方案涉及促进工业界和学术界之间的合作与协作。此外,只有一小部分初级研究试图与基线技术进行比较。这可能是由于缺乏公开可用和可复制的基线,以及每种方法的解释格式之间的差异。为了排除人工努力和主观偏见,我们强调了XAI4SE研究的可复制性和再现性的重要性。研究人员应共享复制包,并在描述数据准备、方法实施和性能评估的过程时提供足够的细节。
挑战4:有限的性能评估
目前最常用的评估方法是求助于从业者的专业知识,即依靠研究人员对什么是好的解释的直觉。然而,考虑到专家意见的可变性,这种策略特别有偏见和主观。鉴于这种人为反馈在理解XAI技术的优势和劣势方面非常有价值,一个明确的改进途径是标准化SE从业者对这些系统进行人为评估的协议。此外,目前的定量评估指标大多围绕解释的正确性,XAI领域的一些特殊问题,例如效率、安全性、隐私性等,尚未得到充分考虑。
机遇1:探索其他SE任务的可解释性
XAI技术已被广泛用于某些SE任务,以支持用户决策或提高人工智能模型的透明度。然而,目前XAI技术在软件开发和管理中的应用仍然相对较少。
机遇2:开发适用于SE任务的XAI技术
大多数用于为人工智能驱动的SE模型提供解释的方法都是直接使用现成的XAI技术。不幸的是,现有的XAI技术最初不是为SE任务设计的,可能会产生次优甚至误导性的解释。鉴于这些原因,可以定制更适合SE任务的解释方法。
机遇3:人机交互
大多数工作都忽略了与XAI工具作为人工智能助手与SE从业者互动有关的重要方面。为了有效地支持人类决策,人们越来越需要交互式XAI工具,使用户能够积极参与和探索黑匣子SE模型,从而促进对模型机制及其可解释性的深刻理解。
机遇4:实际SE环境部署
在SE实践中部署XAI技术,特别是像漏洞检测这样的安全相关的任务,需要严格的验证,不仅要满足有效性,还要满足健壮性、可控性和其他特殊问题。考虑到SDLC的复杂性和动态性,这证明是具有挑战性的。此外,由于受众的意图和专业知识不同,单一的解释格式可能不适用于所有人。因此,一个潜在的机会是与相关SE从业者密切合作,根据他们的反馈不断迭代XAI工具。
文案 | YZU RiSS
排版设计 | TAGIR Group