公平性一直是影响深度学习模型在实际应用中采用的关键问题。为了提高模型的公平性,许多现有方法已经被提出并在各自的背景下被证明是有效的。然而,在相同背景下还没有对这些方法进行系统的评估和全面的比较,这使得理解它们之间性能差异变得困难,进而阻碍了研究进展和实际应用。为了填补这一空白,本文努力进行首次大规模实证研究,以全面比较现有最先进的公平性改进技术的性能。具体而言,我们针对广泛使用的图像分类应用场景,利用了三个不同的数据集和五个常用的性能指标,总共评估了来自不同类别的13种方法。我们的研究结果显示,不同方法在不同数据集和敏感属性上的性能存在显著差异,表明许多现有方法在特定数据集上存在过拟合现象。此外,由于不同的公平性评估指标关注的重点不同,它们产生的评估结果也有显著差异。总体上,我们观察到预处理方法和处理中方法优于后处理方法,而预处理方法表现最佳。我们的实证研究为改进深度学习模型的公平性提供了全面的建议。我们从多个维度来处理这一问题,旨在提供一个统一的评估平台,并通过一系列的启示激励研究人员探索更有效的公平解决方案。
论文链接:https://doi.org/10.1145/3650212.3652122
日志数据促进了软件开发和维护的各项任务,例如测试、调试和诊断。由于日志的非结构化属性,通常需要进行日志解析将日志消息转化为结构化数据,以便进行自动化日志分析。鉴于大量使用各种技术的日志解析器的存在,评估这些工具以理解其特性和性能变得至关重要。Loghub 是用于基准测试日志解析器的常用数据集,但它存在规模和代表性有限的问题,这对全面评估现有的日志解析器或开发新方法的研究提出了重大挑战。这一局限性在评估这些日志解析器用于生产环境时尤为明显。为了解决这些问题,我们提供了一组新的注释日志数据集,称为 Loghub-2.0,该数据集能够更好地反映现实世界软件系统中的日志数据特征。Loghub-2.0 包含14个数据集,每个数据集平均有360万行日志数据。基于 Loghub-2.0,我们在更加严格和实际的环境中对15个最先进的日志解析器进行了全面的重新评估。特别是,我们引入了一种新的评估指标,以减轻现有指标对不平衡数据分布的敏感性。我们也是首个研究日志解析器在代表罕见系统事件的日志上的细粒度性能的团队,提供了有关软件诊断的深入细节。这类日志的准确解析至关重要,但仍是一个挑战。我们相信这项工作可以为日志解析器在实际环境中的评估和设计提供启示,从而促进它们在生产系统中的部署。
论文链接:https://doi.org/10.1145/3650212.3652123
随着我们进入大语言模型(LLM)的时代,人工智能(AI)模型已经和人类及机器一起成为编程语言的另一个重要受众。LLM现在可以在编程比赛中表现优秀,甚至像开发人员一样编写程序来解决各种任务,包括数学问题。然而,目前程序的语法和布局是为了满足人类开发者的需求而设计的——使用了许多语法标记和格式标记,使代码更易于人类阅读。尽管这对人类有帮助,但这种设计增加了LLM的不必要计算工作,因为它们使用或生成的每个标记都会消耗计算资源。为了提高推理效率并降低计算成本,我们提出了AI导向语法的概念。此概念旨在以更符合AI模型工作机制的方式表示代码。使用AI导向语法编写的代码舍弃了格式,并使用最少数量的标记来有效传达代码语义。为了证明这一概念的可行性,我们探索并实现了第一个针对Python的AI导向语法,命名为简易Python(SimPy)。SimPy通过一系列启发式规则对原始Python语法进行修订而创建。用SimPy编写的程序与标准Python保持相同的抽象语法树(AST)结构。这不仅允许通过修改后的AST解析器执行,还可以在Python和SimPy之间实现程序的无缝转换,使人类开发者和LLM在需要协同工作时分别使用Python和SimPy。我们还探讨了帮助现有LLM理解和有效使用SimPy的方法。在实验中,与Python相比,当完成相同的代码相关任务时,使用SimPy使CodeLlama和GPT-4的标记使用量分别减少了13.5%和10.4%。此外,这些模型在使用SimPy而非Python执行这些任务时,能保持甚至提高其表现。基于这些令人鼓舞的结果,我们呼吁社区进一步为AI导向编程语法的发展做出贡献。
论文链接:https://doi.org/10.1145/3650212.3680347
API误用可能在软件开发中引起一系列问题,包括程序崩溃、漏洞和缺陷。为了自动检测API误用,不同的方法被开发出来,通过对比程序和从大量代码库或API文档中提取的使用规则。然而,这些挖掘出的规则可能不够精确或完整,导致较高的误报率或漏报率。在本文中,我们提出一种新颖的解决方案,通过将挖掘出的API使用规则表示为概率图模型,其中每个规则的概率值代表它的可信度。我们的方法通过挖掘代码库和文档来自动构建概率使用规则,并聚合来自不同来源的知识。在这里,从代码库中获得的使用规则初始化概率模型,而文档中的知识则作为补充,用于相应地调整和完善概率。我们在MuBench基准上评估了我们的方法。实验结果表明,我们的方法达到了42.0%的精确度和54.5%的召回率,显著优于最新的现有方法。
论文链接:https://doi.org/10.1145/3650212.3652112
在过去的十年里,数百种模糊测试工具(fuzzers)在顶级安全和软件工程会议上发布。模糊测试工具被用来自动测试程序,理想情况下能够创建高覆盖率的输入样本并发现漏洞。现代的“灰盒”模糊测试工具通过对输入进行变异并执行这些新的输入来收集覆盖率,从而演化出一组输入样本。那些“有趣的”新输入(例如揭示新覆盖率的输入)会被保存到样本集中。由于模糊测试工具的非确定性特征,每个设计决策对模糊测试工具性能的影响可能很难预测。一些设计决定(例如,“模糊测试工具是否应该执行对输入的确定性变异?”)通过配置标志向终端用户公开,但其他设计决定(例如,“应用哪些种类的随机变异于输入?”)通常被固化在模糊测试工具代码中。本文描述了我们对流行的AFL++模糊测试工具中一组变异操作符(包括混乱阶段、拼接等)的超过12.5-CPU-年的评估,探索调整某些未公开配置的影响。在这篇经验论文中,我们提出了一种使用严格统计方法确定不同模糊测试工具在分支覆盖率和漏洞检测方面的行为多样性的方法。我们的主要发现是,在一系列目标中,禁用某些变异操作符(其中一些之前是“固化”在模糊测试工具中的)会导致输入覆盖不同的代码行并揭示不同的漏洞。一个令人惊讶的结果是,禁用某些变异器会带来更多样化的覆盖率,并使模糊测试工具能够更快地发现更多漏洞。我们呼吁研究人员更彻底地研究模糊测试工具中的看似简单的设计决策,并鼓励模糊测试工具的开发者向终端用户公开更多与这些设计决策相关的配置参数。
论文链接:https://doi.org/10.1145/3650212.3680387
在软件开发中,早期识别安全问题对于最大限度地减少其意外影响至关重要。代码审查是一种广泛使用的手动分析方法,旨在发现安全问题以及软件项目中的其他编码问题。尽管一些研究表明,自动化静态应用安全测试工具(SAST)可以提高安全问题识别的能力,但对于SAST在支持安全代码审查方面的实际有效性了解有限。此外,大多数有关SAST的研究依赖于合成或完全脆弱版本的主题程序,这可能无法准确代表代码审查过程中实际代码更改的情况。为了弥补这一差距,我们使用一个包含实际代码更改的数据集来研究C/C++ SAST,这些代码更改导致了可利用的漏洞。除了研究SAST的有效性外,我们还量化了当通过SAST警告优先处理更改的函数时的潜在收益。我们的数据集包含来自92个C和C++项目的319个真实世界漏洞,涵盖815个漏洞贡献提交(VCCs)。结果显示,单个SAST能够在52%的VCCs中的脆弱函数产生警告。优先处理带有SAST警告的更改函数可以提高准确性(即,精准度提高12%,召回率提高5.6%),并且减少初始误报(在检查到第一个脆弱函数之前非脆弱函数中的代码行数)13%。尽管如此,至少76%的在脆弱函数中的警告与VCCs不相关,且22%的VCCs由于SAST规则的限制未被检测到。我们的研究结果强调了SAST支持的安全代码审查的好处以及仍存在的差距,并指出了未来工作中应解决的挑战。
论文链接:https://doi.org/10.1145/3650212.3680313
Kubernetes是领先的集群管理平台,在Kubernetes中,运算符(Operator)是一个特定于应用程序的程序,它利用Kubernetes API来自动化管理部署在Kubernetes集群上的应用程序的操作任务。用户可以为受管理的集群声明一个期望的状态,指定他们的配置偏好。运算符程序的职责是调节集群的实际状态以与期望状态保持一致。然而,整个系统的复杂性、动态性和分布式特性可能会引入运算符的错误,并导致严重后果,例如中断和不期望的集群状态。在本文中,我们对来自36个Kubernetes运算符的210个运算符错误进行了首次全面研究。对于所有研究的错误,我们调查了其根本原因、表现形式、影响和修复方法。我们的研究揭示了许多有趣的发现,这些发现可以指导运算符错误的检测和测试,以及开发更可靠的运算符。
论文链接:https://doi.org/10.1145/3650212.3680396
运行时验证(RV)通过形式规格(specs)监控程序的执行。研究人员表明,在软件测试期间使用RV可以增强测试的漏洞发现能力,并通过在开源项目中使用RV监控通过的测试发现了数百个新漏洞。然而,RV的运行时开销普遍被认为是其广泛采用的障碍,尤其是在持续集成期间。然而,目前缺乏对这些开销在测试期间的普遍性、漏洞发现的有用性和组件进行深入研究,以便研究人员能更好地了解如何加速RV。
我们研究了测试期间RV的开销,监控1,544个开源项目中开发人员编写的单元测试,针对160个正确JDK API使用的规格。我们得出了四个主要发现:(1)在40.9%的项目中,RV开销低于12.48秒,被其他人认为是可以接受的,但在其他项目中最高可达5,002.9倍(或28.7小时)。(2)RV生成的用于动态检查程序轨迹的监视器中,有99.87%是浪费的;它们只能找到其他0.13%能够发现的漏洞。(3)与传统观点相反,大多数项目中RV的开销主要来自于仪器化而不是监控。(4)监控时间的36.74%花费在测试代码或库中。
为了证明我们的研究为未来研究提供了新的基础,我们进行了两项额外实验。首先,我们表明离线仪器化(在可能的情况下)极大地减少了许多项目单版本的RV运行时开销。其次,我们表明简单地在多个程序版本上摊销高仪器化成本可以比最近使用复杂程序分析的演化感知RV技术提高最多4.53倍的性能。
论文链接:https://doi.org/10.1145/3650212.3680400
我们介绍了一种浮点(FP)错误优化方法,称为Arfa。该方法将FP表达式fe的定义域D划分为多个区域,并在每个fe误差较大的区域对fe进行重写。首先,Arfa在整个D范围内寻找误差较低的替换表达式fo,并绘制其误差分布图,以便进行有效的区域推断。接下来,Arfa在每个感兴趣的区域内生成一个不完整的有序重写候选集,以便高效地搜索最佳重写替换。最后,Arfa通过检查排名靠前的重写候选的误差,选择最佳的重写替换,同时也考虑了提高精度的因素。对56个FPbench示例和四个实际程序的实验表明,Arfa不仅将fe的最大和平均误差分别平均减少了4.73和2.08位(最多可减少33和16位),而且在某些情况下比Herbie和NumOpt显示出更低的误差,有时误差显著降低。
论文链接:https://doi.org/10.1145/3650212.3680378
汇编器是编译器工具链中的关键组件,但其测试力度不如其他组件。目前的基于语法的模糊测试技术在测试汇编器时遇到了诸多挑战。首先,不同的汇编器接受不同的语法规则和语法形式,并且不存在标准的汇编语法规范。其次,并不是每个汇编器都是开源的,这使得从源代码中提取语法规则变得困难。虽然现有的黑盒语法推断方法可以应用于这些闭源的汇编器,但它们存在可扩展性问题,使得在实际测试中不切实际。为了解决这些挑战,我们提出了一种通过利用汇编器错误消息,以仅少量查询目标汇编器的方式自动推断其语法规则的新方法来测试汇编器。关键洞察在于汇编错误消息通常提供有用信息来推断底层的语法规则。我们已经在一个名为AsFuzzer的工具中实现了这一技术,并在包括Clang集成汇编器(Clang)、GNU汇编器(GAS)、Intel汇编器(ICC)和微软宏汇编器(MASM)在内的4个实际汇编器上进行了评估。使用AsFuzzer,我们成功地为六种流行的架构找到了497个有问题的指令操作码,并已向开发人员报告。
论文链接:https://doi.org/10.1145/3650212.3680345
模糊测试是一种有效检测软件安全漏洞的方法,已有不少针对Android的模糊测试研究工作。研究人员开发了在实际Android设备上测试开源本地API和Java接口的方法。然而,自动化模糊测试Android的闭源本地库,尤其是在模拟器上,仍然未被充分探索。这其中有两个关键挑战:一是Android内在的多语言编程模型;二是在模拟器中缺乏Java运行环境。为了解决这些挑战,我们提出了Atlas,一个实用的自动化模糊测试框架,专用于Android闭源本地库。Atlas包含一个自动化的测试桩生成器和一个包含所需运行环境的模糊测试工具。生成器利用静态分析技术,根据“本地世界”和“Java世界”中的信息推导出正确的调用序列和本地API的参数。为了最大化生成测试桩的实用性,Atlas启发式地优化生成的测试桩。模糊测试工具在模拟器中提供了必要的Java运行环境,使得在多核服务器上模糊测试Android闭源本地库成为可能。我们在四个Android厂商的17个预装应用程序上测试了Atlas。Atlas生成了包含767个本地API的820个测试桩,其中78%的测试桩是实用的。同时,Atlas发现了74个新的安全漏洞,并已分配了16个CVE编号。实验结果表明,Atlas可以高效生成高质量的测试桩并发现安全漏洞。
论文链接:https://doi.org/10.1145/3650212.3652133
在过去的几十年中,研究人员在自动化软件开发流程方面取得了显著进展。自动化的问题概要、错误重现、故障定位和程序修复等技术已经被开发出来,以减轻开发人员的工作负担。近期,大型语言模型(LLM)的进展显著影响了开发过程,开发人员能够使用基于LLM的编程助手实现自动编码。然而,软件工程不仅仅涉及编码的过程,还包括程序改进,以便进行软件维护(如修复错误的程序修复)和软件演进(如添加新功能)。在本文中,我们提出了一种自动解决Github问题的方法,以自主实现程序改进。在我们称为AutoCodeRover的方法中,LLM与复杂的代码搜索能力结合,最终导致程序修改或补丁。与AI研究人员和从业人员最近提出的LLM代理方法相比,我们的方法更加偏向软件工程。我们处理的是程序表示(抽象语法树),而不是将软件项目仅仅视为文件的集合。我们的代码搜索利用类/方法形式的程序结构,增强LLM对问题根本原因的理解,并通过迭代搜索有效地检索上下文。使用基于测试的频谱故障定位,进一步增强了上下文的精确性,只要测试套件可用。对最近提出的SWE-bench-lite(300个真实生活中的Github问题)的实验显示,解决Github问题的效率提高了19%,高于最近报告的Swe-agent的有效性。有趣的是,我们的方法在大约4分钟内解决了57个GitHub问题(pass@1),而开发人员平均花费了超过2.68天。此外,AutoCodeRover在成本方面也显著降低,平均仅为0.43美元,与其他基准相比更为经济。我们认为,我们的工作流可实现自主软件工程,将来,LLM自动生成的代码能够自主得到改进。
论文链接:https://doi.org/10.1145/3650212.3680384
数据绑定因其能够方便地自动将网络请求参数绑定到网络程序的属性而被广泛应用于流行的网络框架中。然而,其在网络框架中的不当实现会暴露敏感属性,从而导致数据绑定漏洞,这些漏洞可以被利用来发起严重攻击,例如Spring4Shell远程代码执行。尽管这些问题十分严重,但往往被忽视,目前尚没有系统性的研究来解决这些问题。本文首次提出了对Java网络框架中数据绑定漏洞的自动化分析。我们开发了一种自动化的数据绑定漏洞检测工具,命名为DIVER,用于分析数据绑定漏洞。DIVER采用了三项新技术:基于嵌套属性图的提取技术用于提取嵌套属性,基于绑定点插桩的识别技术用于识别可绑定的嵌套属性,和基于属性感知的模糊测试用于触发和检测数据绑定漏洞。我们在广泛使用的两个Java网络框架Spring和Grails上对DIVER进行了评估,发现了81个数据绑定漏洞。这些漏洞可以被利用来发起远程代码执行、任意文件读取和拒绝服务攻击。我们已将这些漏洞负责任地报告给相关团队,并协助修复这些漏洞。我们被分配了包含臭名昭著的Spring4Shell的三个新的CVEs,这些CVEs的评级为严重和高危。
论文链接:https://doi.org/10.1145/3650212.3680367
随着深度学习模型变得越来越大和复杂,提高模型训练和推理效率变得至关重要。尽管已经开发出了多种高度优化的库和包(称为DL内核),但找出使用哪个内核、在哪里使用以及如何正确使用这些内核是一项繁琐而耗时的工作。为了解决这一挑战,我们提出了一种自动化深度学习优化方法,称为Adopter。我们设计了一种领域特定语言(DSL)来表示深度学习模型架构,并利用这种DSL来指定将DL内核集成到模型中所需的模型转换规则。
给定一个深度学习模型的源代码和一组内核的转换规则,Adopter首先进行跨过程分析,以在我们的DSL中识别和表达模型架构。然后,Adopter执行范围分析和子序列匹配,以识别模型架构中可以应用转换规则的位置。最后,Adopter提出了一种基于综合的代码转换方法来应用转换规则。
我们从Hugging Face收集了199个模型,并使用了多样化的DL内核集进行了基准测试。我们发现,与最先进的自动代码转换技术相比,Adopter帮助将精度和召回率分别提高了3%和56%。对9个模型进行的深入分析显示,Adopter平均提高了训练速度22.7%,同时减少了10.5%的GPU内存使用量。
论文链接:https://doi.org/10.1145/3650212.3652143
自动化程序修复(APR)的目标是自动生成有缺陷程序的修补程序。传统的APR技术由于过度依赖手工制作或挖掘的漏洞修复模式,无法轻松推广到其他类型的漏洞或修复,因此修补程序的多样性不足。为了解决这一局限性,最近的APR研究集中在利用现代大型语言模型(LLMs)来直接生成修补程序。这些基于LLM的APR工具首先通过使用原始的有缺陷代码构建输入提示,然后查询LLM以在漏洞位置填写正确的代码(填空式APR)或者生成一个全新的代码片段作为修补程序。虽然基于LLM的APR工具能够实现最先进的结果,但它们仍然遵循经典的“生成和验证”(GV)修复范式,即首先通过从相同的初始提示中采样生成大量修补程序,然后再进行验证。这不仅导致许多重复且不正确的修补程序,还忽略了测试失败和可能修补程序中的关键信息。
为了解决上述局限性,我们提出了ChatRepair,第一个完全自动化的对话驱动型APR方法,该方法在生成修补程序的过程中通过即时反馈进行对话式的修复。ChatRepair首先向LLM提供相关的测试失败信息,然后从同一漏洞的早期修补尝试的失败和成功中学习,以进行更强大的APR。对于未能通过所有测试的早期修补程序,我们将不正确的修补程序与相应的相关测试失败信息结合起来,构建新的提示,供LLM生成下一个修补程序。这样,我们可以避免犯相同的错误。对于通过所有测试(即,可能的修补程序)的早期修补程序,我们进一步要求LLM生成原始可能修补程序的替代变体。通过这种方式,我们可以进一步在早期成功的基础上生成更多可能的修补程序,从而增加获得正确修补程序的机会。尽管我们的方法具有通用性,我们使用最先进的基于对话的LLM – ChatGPT实现了ChatRepair。我们在广泛研究的Defects4j数据集上的评估显示,ChatRepair在修复性能上达到新的最先进水平,分别在Defects4j 1.2和2.0上获得114和48个正确修复。通过计算访问ChatGPT的成本,我们可以以每个$0.42的成本修复337个漏洞中的162个!
论文链接:https://doi.org/10.1145/3650212.3680323
网络的可靠性对于物联网、客户端-服务器或基于云的解决方案等系统来说是一个至关重要的要求。不幸的是,真实的网络不能被认为是无故障的,尤其是当考虑到各种硬件问题、性能问题或恶意攻击时。因此,测试网络系统应包括在各种网络条件下评估其容错能力。本文介绍了一项关于使用推导出的网络通信模型进行故障攻击注入的网络系统自动验证的博士研究项目。
论文链接:https://doi.org/10.1145/3650212.3685559
分叉是一种常见的代码重用方式,它通过复制和修改现有代码库为开发人员提供了一种创建变体软件(称为硬分叉)的简单方法。尽管有诸多好处,但分叉也导致了软件维护中的重复努力。开发人员需要在不同的硬分叉之间移植补丁,以解决类似的错误或实现类似的功能。鉴于源项目和硬分叉之间的差异,补丁移植变得复杂,这需要针对同一功能的不同实现进行适应。在这项工作中,我们迈出了自动化硬分叉补丁移植的第一步,采用了一种零样本设置。我们首先对过去十年中从Vim移植到Neovim的补丁进行了一项实证研究,以调查补丁移植的必要性和当前实践中的潜在缺陷。然后,我们提出了一种基于大型语言模型(LLM)的方法(即PPatHF)来在函数层面上自动移植硬分叉的补丁。具体来说,PPatHF由一个归约模块和一个移植模块组成。给定参考项目中一个函数的补丁前后版本以及目标项目中对应的函数,归约模块首先通过移除与补丁无关的代码段来简化输入函数。然后,移植模块利用LLM将补丁应用于目标项目中的函数。为了更好地发挥LLM在补丁移植上的能力,我们设计了一个提示模板,以实现高效的上下文学习。我们进一步提出了一种基于指令微调的训练任务,以更好地引导LLM移植补丁并注入任务特定的知识。我们在310个从Vim移植到Neovim的补丁上评估了PPatHF。实验结果表明,PPatHF显著优于基准方法。具体来说,PPatHF可以正确移植131个(42.3%)补丁,并自动化了开发人员移植补丁所需的57%的手动编辑。
论文链接:https://doi.org/10.1145/3650212.3652134
随着对编程教育需求的增加,自动反馈生成问题在初级编程作业(IPAs)中引起了广泛关注。现有的方法,如使用“逐块修复”策略的Refactory,虽然取得了一些令人鼓舞的成果,但存在两个局限性。首先,Refactory随机应用重构和变异操作分别对正确和错误的程序进行修正,以对齐它们的控制流结构(CFS),然而这种方法的成功率较低,且常常使原本的修补任务变得更加复杂。其次,当错误程序的基本块语义与正确程序的对等部分不同时,Refactory在每个基本块上生成修复,这忽略了基本块在程序中所扮演的不同角色,往往产生不必要的修复。
为克服这些局限性,我们提出了用于IPAs反馈生成的Brafar方法。Brafar的核心创新在于其新颖的双向重构算法和由粗至细的故障定位。前者通过有指导地对两个程序应用语义保持的重构操作来对齐错误和正确程序的CFS,而后者则基于包含语句和自身的语义识别真正需要修复的基本块。
在我们对公开数据集中1783个真实学生错误提交的实验评估中,Brafar显著优于Refactory和Clara,能够在更短的时间内为更多的错误程序生成正确修复,同时补丁规模更小。
论文链接:https://doi.org/10.1145/3650212.3680326
由于在现实世界的程序中,错误是不可避免且普遍存在的,许多自动程序修复(APR)技术已经被提出,用来生成修补这些错误的补丁。然而,由于缺乏用于评估APR技术的标准,之前的工作往往使用不同的设置和基准进行评估,这威胁到了评估结果的可信度。此外,这些工作通常仅采用可行性和真实性作为评估指标,这可能会掩盖APR技术中的一些潜在问题。为了解决这些问题,我们在本文中对九种基于学习的和三种传统的最先进APR技术在相同的环境和设置下进行了广泛且多维的评估。我们采用了广泛研究的Defects4J V2.0.0基准,并构建了一个新的大规模基于变异的名为MuBench的基准,该基准由Defects4J派生并包含由各种变异器生成的1700个人工错误,以揭示这些APR技术的潜在局限性。我们还应用了多维度的指标,包括可编译性/可行性/真实性指标,以及SYE(语法等效性)和TCE(琐碎编译器等效性)指标,来全面分析1,814,652个生成的补丁。本文从广泛的评估中提出了一些显著的发现:首先,基于大语言模型(LLM)的APR在Defects4J V1.2.0数据集上表现出较低的过拟合倾向,并修复了最多的错误。其次,该研究表明,将传统APR技术与基于学习的APR技术相结合具有广阔的前景,因为它们在修复不同类型的错误方面表现出互补的优势。此外,本工作强调了进一步提高基于学习的APR技术的补丁可编译性的重要性,尽管已有各种现有策略试图改善这一点。该研究还揭示了改进APR技术的其他指南,包括需要处理无法解决的符号可编译性问题以及减少重复/无效补丁的生成。最后,我们的研究发现了所研究技术中的七个实现问题,其中五个问题已由相应的作者确认并修复。
论文链接:https://doi.org/10.1145/3650212.3652140
上下文无关语言可达性(CFL可达性)是程序分析的一个基础公式,有许多应用。CFL可达性分析在计算上非常昂贵,关于输入图中节点数量的时间复杂度稍微低于三次方。本文提出了分阶段求解:一种解决CFL可达性的新视角。我们关键的观察是,基于CFL的程序分析的上下文无关文法(CFG)可以分解为:(1)一个较小的CFG,L,用于匹配括号,如过程调用/返回、字段存储/加载,以及(2)一个正则文法,R,用于捕捉控制/数据流。与其整体解决这两部分(如标准算法中那样),不如分阶段求解分别在两个不同的阶段解决L可达性和R可达性。在实践中,L可达性虽然仍是上下文无关的,但只涉及一小部分边,而R可达性可以高效地计算,其时间复杂度相对于输入图的节点大小接近二次方水平。我们实现了我们的分阶段CFL可达性求解器STG,并使用两个客户进行评估:上下文敏感的值流分析和字段敏感的别名分析。实验结果表明,STG在值流分析和别名分析上相对于标准的次立方算法分别平均实现了861.59倍和4.1倍的加速。此外,我们还展示了分阶段求解可以显著提高两种最先进求解器POCR和PEARL的性能,在值流(别名)分析中分别提高了74.82倍(1.78倍)和37.66倍(1.7倍)。
论文链接:https://doi.org/10.1145/3650212.3680346
为了满足对软件定制化日益增长的需求,高度可配置的软件系统在实践中发挥了关键作用。组合交互测试(CIT)被认为是测试此类系统的一种有效方法。对于CIT,最重要的问题是约束覆盖数组生成(CCAG),其目标是构建一个最小尺寸的t维覆盖数组(CA),其中t表示测试强度。相比于广泛使用的2维CIT技术(如配对测试),3维CIT能够发现更多的故障,并在实际应用中带来更多好处。然而,目前最先进的CCAG算法在3维CIT上存在严重的可扩展性挑战,使其在为高度可配置系统构建3维CA方面效果不佳。在这项工作中,我们对各种实际的高度可配置系统进行了实证研究,展示了通过扩展2维CA来构建3维CA的可行性。受此启发,我们提出了ScalableCA,一种新颖且具有可扩展性的算法,可以有效缓解3维CIT的可扩展性挑战。此外,ScalableCA引入了三种新的有效技术,包括快速无效性检测、未覆盖引导采样和剩余感知局部搜索,以提升其性能。我们在大量真实世界的高度可配置系统上的实验表明,与目前最先进的算法相比,ScalableCA在构建大规模实例的3维CA时所需运行时间减少了1到2个数量级,平均大小减少了38.9%。我们的结果表明,ScalableCA在3维CIT方面大大推进了现有技术的前沿。
论文链接:https://doi.org/10.1145/3650212.3680309
在代码智能领域,有效地建模长程代码是一项重要的挑战。现有的预训练语言模型(PLMs)如UniXcoder尽管已经取得了显著的成功,但在处理长代码输入时仍然面临困难。这主要是因为这些模型在长程代码中保持上下文连续性和记忆关键信息的能力有限。为了解决这些困难,我们提出了EXPO,一个用于扩展预训练语言模型以处理长程代码的框架。EXPO结合了本文提出的两种创新记忆机制:桥接记忆(Bridge Memory)和提示记忆(Hint Memory)。桥接记忆通过标签机制连接分散的长程代码片段,帮助模型保持上下文一致性。提示记忆则通过集成𝑘NN注意力层,自适应地选择相关代码元素,如包导入,专注于整个全局上下文中的关键代码元素。这种双重记忆方法弥合了理解局部代码片段与保持全局代码一致性之间的差距,从而增强了模型对长代码序列的整体理解能力。我们在包括UniXcoder在内的五个流行预训练语言模型和两个代码智能任务(API推荐和漏洞检测)上验证了EXPO的有效性。实验结果表明,EXPO显著提升了预训练语言模型的性能。
论文链接:https://doi.org/10.1145/3650212.3652127
容器运行时系统(CRS)构成了容器云的基础基础设施,由于其对容器云实现质量的影响,它们至关重要。然而,目前对CRS实现中存在的质量问题缺乏全面的了解。为填补这一空白,我们进行了首次全面的CRS漏洞实证研究。具体来说,我们从包括runc、gvisor、containerd和cri-o在内的主要CRS项目中的8,271次提交中收集了429个漏洞。通过手动分析,我们开发了CRS漏洞症状和根本原因的分类法,分别包含16类和13类。此外,我们评估了流行测试方法(包括单元测试、集成测试和模糊测试)在检测这些漏洞方面的能力。结果显示,由于缺乏测试驱动程序、预言机和有效的测试用例,78.79%的漏洞无法被检测到。基于我们的研究发现,我们为CRS领域的各利益相关者提出了影响和未来研究方向。我们希望我们的工作能够为未来CRS漏洞检测的研究奠定基础。
论文链接:https://doi.org/10.1145/3650212.3680366
数据驱动技术在自动定位和修复错误方面具有很大的前景,可以为开发人员节省大量的时间和精力。然而,这些技术的有效性在很大程度上依赖于错误数据集的质量和规模。尽管新兴的自动错误数据集构建方法在扩展性方面提供了部分解决方案,但数据质量仍然是一个问题。具体来说,人工隔离最小的引入错误或修复错误的变更集(即关键变更)依然是一个障碍。尽管delta调试(DD)技术能够在学术界的基准数据集中提取关键变更,但在处理现实世界中的错误时,其效率和准确性仍然有限,因为代码变更依赖关系可能过于复杂。在本文中,我们提出了C2D2,一种用于关键变更提取的新型delta调试方法,它估计代码变更元素之间依赖关系的概率。C2D2考虑了这些依赖关系的概率,并引入了一种基于矩阵的搜索机制来解决因缺失依赖关系而导致的编译错误(CE)。它还提供了灵活选择代码变更元素的混合机制,以便在DD过程中使用。在Defect4J和一个实际的回归错误数据集上的实验表明,C2D2在效率方面显著优于传统的DD算法ddmin,并且在有效性上具有竞争力,且在效率和效果上显著优于最先进的DD算法ProbDD。此外,与人工隔离的关键变更相比,C2D2在Defects4J中的56%案例和回归数据集中的86%案例中产生了相同或更好的关键变更结果,展示了其在自动提取关键变更方面的实用性,并能在构建包含现实世界错误的大规模错误数据集时节省人工工作量。
论文链接:https://doi.org/10.1145/3650212.3652129
二进制代码相似性检测(BCSD)是多种应用中的基础技术。近年来提出了许多BCSD解决方案,这些解决方案大多基于嵌入方法,但在目标二进制代码搜索量较大时显示出有限的准确性和效率。为了解决这个问题,我们提出了一个具有成本效益的BCSD框架——CEBin,它融合了嵌入式和比较方法,从而显著提高了准确性,同时最大限度地降低了开销。具体来说,CEBin利用了一种改进的嵌入方法来提取目标代码特征,从而有效缩小候选相似代码的范围并提高性能。然后,它使用了一种基于比较的方法,对候选代码进行成对比较,以捕捉更细微和复杂的关系,这大大提高了相似性检测的准确性。通过弥合嵌入方法和比较方法之间的差距,CEBin能够为大规模软件生态系统中的相似代码(包括易受攻击代码)检测提供一个有效且高效的解决方案。在三个知名数据集上的实验结果表明,CEBin优于现有最先进(SOTA)的基准方法。为了进一步评估BCSD在现实世界中的有用性,我们构建了一个大规模漏洞基准,提供了首个精确评估方案,用于评估BCSD方法在1-day漏洞检测任务中的表现。CEBin能够在几秒钟内从数百万候选函数中识别出相似函数,并在这一更具挑战性的实际任务中实现了85.46%的令人印象深刻的召回率,这比最好的SOTA基准快了几个数量级,且效果提高了4.07倍。
论文链接:https://doi.org/10.1145/3650212.3652117
二进制代码表示学习在二进制分析任务中表现出显著的性能。但现有的解决方案在迁移能力上往往表现较差,特别是在少样本和零样本的情况下,即任务中几乎没有或没有训练样本的场景。为了解决这个问题,我们提出了CLAP(对比语言-汇编预训练),该方法利用自然语言监督来学习更好的二进制代码(即汇编代码)表示,从而获得更好的迁移能力。我们的核心方法通过有效地将二进制代码与其语义解释(以自然语言形式)对齐,提升了优秀的迁移学习能力,使模型能够生成更好的二进制代码嵌入表示。为了实现这种对齐训练,我们提出了一种高效的数据集引擎,可以自动生成包含二进制代码及其相应自然语言解释的大规模多样化数据集。我们已经生成了1.95亿对二进制代码和解释对,并训练了一个CLAP的原型。CLAP在各种二进制分析的下游任务中的评估结果均表现出卓越的性能。值得注意的是,CLAP在没有任何特定任务训练的情况下,经常与完全监督的基线模型相媲美,展示了出色的迁移能力。
论文链接:https://doi.org/10.1145/3650212.3652145
鉴于大型语言模型(LLMs)在代码相关任务中的有效性已得到验证,研究人员探讨了它们在程序修复方面的潜力。然而,现有的修复基准可能影响了LLM的训练数据,可能导致数据泄漏。为了评估LLM在实际修复能力方面的表现,(i)我们引入了一个广泛且未经抓取的基准数据集TutorCode,其中包含1239个C++缺陷代码及相关信息,如导师指导、解决方案描述、失败的测试用例和修正后的代码。我们的研究评估了LLM在TutorCode上的修复性能,衡量了修复正确性(TOP-5和AVG-5)和补丁精度(RPSR)。(ii)然后,我们对各种类型的额外信息能否帮助LLM提高修复表现进行了全面调查。其中,导师指导是最有效的信息类型。为了充分利用LLM的对话能力和增强信息的优势,(iii)我们引入了一种新的对话式半自动修复框架CREF,辅助人类编程导师。与基线相比,它展示了显著的AVG-5提升,达到了17.2%-24.6%,并在使用GPT-4时取得了令人印象深刻的76.6%的AVG-5。这些结果突显了通过导师互动和历史对话增强LLM修复能力的潜力。CREF在真实教育环境中的成功应用展示了其在减轻导师工作负担和改善学生学习体验方面的有效性,并表现出在代码审查和其他软件工程任务中的应用前景。
论文链接:https://doi.org/10.1145/3650212.3680328
近年来,大型语言模型(LLMs)的进展在解决各种任务(如缺陷检测和程序修复)方面展现了令人期待的能力。尽管如此,LLMs在有效处理这些任务时仍然面临局限性。常见的策略是根据用户数据对模型进行微调或通过提供期望输入输出示例的上下文学习来提高其在特定任务中的表现。然而,这些策略在实际应用中面临诸多挑战,比如需要大量计算资源、高质量数据和持续维护。此外,这两种策略都无法解释或推理LLMs在某些任务中的不足之处。我们提出了Calico,旨在解决微调的高成本问题,消除对特定任务示例的需求,并提供对LLM不足的解释。
Calico的核心是一种进化方法,它交替进行知识校准和AI不足诊断。Calico的关键要点如下:首先,它关注于识别LLMs在程序理解中的知识差距。其次,它自动进行代码重构,将被忽视的知识整合到源代码中,以弥补这些差距。第三,它利用假设分析和反事实推理来确定最小必要的被忽视知识集,以提高LLMs在代码任务中的表现。
我们在8,938个程序上对Calico进行了广泛评估,涵盖了最常见的三种代码任务。实验结果表明,原始的ChatGPT不能完全理解代码结构。通过知识校准,Calico将其性能提高了20%,并展现出与微调LLMs相当的熟练程度。不足诊断帮助程序大小减少了8%,同时确保了性能。这些显著的结果展示了利用原始LLM进行自动化软件工程(SE)任务的可行性,从而避免了与微调模型相关的高计算成本。
论文链接:https://doi.org/10.1145/3650212.3680399
静态分析在理论上是可靠的,但其具体实现可能会错误地未能分析程序中的所有代码。任何此类遗漏都是对工具输出有效性的严重威胁。我们的工作是首次衡量这些遗漏的普遍性。之前,研究人员和分析师并不知道静态分析遗漏了什么、遗漏了哪种代码及背后的原因。为了解决这一差距,我们对1000个安卓应用运行了13种静态分析工具和动态分析。任何在动态分析中出现但未在静态分析中出现的方法都被视为不可靠的。我们的发现包括以下几点:(1) 以外部框架构建的应用程序对静态分析工具提出了挑战。平均来看,这13种静态分析工具未能捕捉到61%的动态执行方法。(2) 高精度的调用图构建意味着高水平的不可靠性。(3) 目前没有任何现有方法显著改善静态分析的可靠性。这包括那些针对特定机制,如DroidRA,解决反射问题的方法。也包括系统性方法,如EdgeMiner,系统性捕捉安卓框架中的所有回调。(4) 对入口点方法的建模对调用图构建提出了挑战,进而危及其可靠性。
论文链接:https://doi.org/10.1145/3650212.3680333
一方面,近年来在神经网络验证方面取得了相当大的进展,使得对神经网络进行认证成为可能。另一方面,实际中的神经网络经常需要随着时间的推移重新训练,以应对新的数据分布或解决不同的任务(即持续学习)。一旦重新训练,已验证的神经网络的正确性可能会被破坏,尤其是在出现所谓的灾难性遗忘现象时。在这项工作中,我们提出了一种称为认证持续学习的方法,该方法通过尽可能保持已验证网络的既定正确性属性来改进现有的持续学习方法。我们在多个神经网络和两种不同的持续学习方法上评估了我们的方法。结果显示,我们的方法是高效的,训练后的模型不仅保持了其认证的正确性,而且通常还能维持较高的实用性。
论文链接:https://doi.org/10.1145/3650212.3680322
静态分析框架(SAFs),如 Soot 和 WALA,在当今的软件分析中起着基础性支持作用。它们通常采用各种分析技术将程序转化为不同的表示方式,这些表示方式暗示了特定的属性。例如,调用图可以展示程序中方法之间的调用关系,用户依赖这些程序表示进行进一步的分析,如漏洞检测和隐私泄漏识别。因此,提供合适的程序表示对于静态分析框架至关重要。我们对静态分析框架的程序表示错误进行了一项系统的实证研究。在研究中,我们首先从四个流行的静态分析框架中收集了141个问题,总结了它们的根本原因、症状和修复策略,并揭示了九个发现和一些避免和检测程序表示错误的启示。此外,我们基于研究发现和启示,实施了一个名为SAScope的自动化测试框架,该框架采用了变形测试和差分测试的方法。总体而言,SAScope可以检测到19个程序表示错误,其中6个已被确认或修复,展示了其有效性。
论文链接:https://doi.org/10.1145/3650212.3680398
近年来,基于大型语言模型(LLM)的代码生成得到了发展。相比于在软件项目中生成代码,增量式代码编辑被经验性地观察到更为频繁。新兴的代码编辑方法通常将问题归结为基于已知的相关前编辑和上下文生成编辑。然而,实际的代码编辑可能更加复杂。首先,一个编辑会话可能包含多个(不)相关的代码编辑。其次,后续编辑的推理并不简单,因为其连锁效应的范围可能涉及整个项目。在这项工作中,我们提出了CoEdPilot,这是一种由LLM驱动的解决方案,通过区分相关编辑、探索其交互性质并估计其在项目中的连锁效应来推荐代码编辑。具体来说,CoEdPilot协调多个神经转换模型,以确定在项目中编辑的内容和方式,包括编辑位置和编辑内容。当用户完成一次编辑并附带一个可选的编辑描述时,后续编辑分析首先报告项目中最相关的文件,并指出各代码行可能发生的编辑类型(例如,保留、插入和替换)。接下来,编辑内容生成器根据编辑依赖分析器报告的相关前更改,为代码行生成具体的编辑选项。最后,后续编辑分析和编辑内容生成器将捕捉相关的前编辑作为反馈,以重新调整其推荐。我们通过收集来自5种编程语言的471个开源项目中的超过18万个提交来训练我们的模型。广泛的实验表明:(1)CoEdPilot能够很好地预测编辑位置(准确率为70.8%-85.3%)和编辑内容(精确匹配率为41.8%,BLEU4评分为60.7);(2)CoEdPilot能够显著提升现有编辑生成器(如GRACE和CCT5)在精确匹配率上8.57个百分点和BLEU4评分上18.08分。最后,我们在18名参与者中进行了包含3个编辑任务的用户研究,(1)表明与Copilot相比,CoEdPilot在帮助用户编辑代码方面有效;(2)为工具设计的未来改进提供了启示。我们工具的视频演示可在https://sites.google.com/view/coedpilot/home查看。
论文链接:https://doi.org/10.1145/3650212.3652142
大型语言模型(LLMs)在代码相关任务上表现出色,尤其是在代码生成方面。然而,由于其预训练数据源自大量未经严格筛选的数据,先前研究表明,代码 LLMs 容易生成存在潜在漏洞的代码。现有的方法旨在通过构建无漏洞数据并对模型进行重新训练或微调来降低这一风险。然而,当模型参数达到数十亿规模时,上述方法的计算和数据需求将非常庞大。此外,越来越多的代码 LLMs 以服务形式分发,内在表示不可访问,API 成为唯一可用接口,使得以往的缓解策略无法适用。
为了应对这一问题,我们提出了 CoSec,一种基于安全模型引导协同解码的实时安全强化方法,旨在降低代码 LLMs 生成包含漏洞代码的可能性。我们的关键思路是训练一个独立且小得多的安全模型,与目标代码 LLM 协同解码。由于训练后的安全模型对安全的代码片段更加自信,它会引导目标基础模型生成更安全的代码。通过在解码过程中调整每一步的代码片段概率分布,这一方法能够在不访问目标代码 LLM 内部参数的情况下,有效影响代码生成的倾向。
我们在多种代码 LLMs(即 CodeGen,StarCoder 和 DeepSeek-Coder)上进行了广泛的实验,结果表明我们的方法在安全加固方面有效。具体来说,该方法提高了六种基础模型的平均安全比例5.02%-37.14%,同时保持了目标模型的功能正确性。
论文链接:https://doi.org/10.1145/3650212.3680371
在软件工程领域不断发展的大型语言模型(LLMs)的背景下,迫切需要能够准确反映真实开发场景的基准。目前的基准要么过于简单,要么未能捕捉软件开发的多任务特性。为了解决这个问题,我们推出了CoderUJB,这是一个旨在评估LLMs在各种Java编程任务中的性能的新基准,这些任务是可执行的,且反映了实际开发场景,承认Java在现实软件生产中的普遍性。CoderUJB包含来自17个真实开源Java项目的2,239个编程问题,涵盖了五个实用编程任务。我们在这一基准上的实证研究调查了各种开源和闭源LLMs的编码能力,考察了特定编程语言代码的持续预训练和指令微调对其性能的影响。研究结果表明,尽管LLMs表现出强大的潜力,但仍面临挑战,特别是在非功能性代码生成(例如测试生成和缺陷检测)方面。重要的是,我们的结果建议在特定编程语言的持续预训练和指令微调中要小心,因为这些技术可能会在某些任务上阻碍模型性能,建议需要更细致入微的策略。因此,CoderUJB标志着朝向更现实评估LLMs编程能力的重要一步,我们的研究为这些模型在软件工程中的未来发展提供了宝贵的见解。
论文链接:https://doi.org/10.1145/3650212.3652115
大型语言模型(LLM)为基础的方法在许多软件工程领域中已被证明是有效的,且在软件漏洞检测方面具有显著的生产力提升潜力。然而,由于LLM输入上下文长度的限制,现有的LLM方法主要集中在检测函数级别并利用文件内的上下文信息进行漏洞检测(即,程序内漏洞),忽略了实际中更复杂的跨程序漏洞检测场景。例如,在现实世界的场景中,开发人员经常参与程序分析以检测跨多个文件的信息的漏洞。由于复杂的过程往往在仓库级别上跨多个文件并调用多个静态分析工具,存在冗余依赖关系,漏洞检测的理想目标是从仓库中提取与漏洞相关的信息,并提供潜在的漏洞触发解释。然而,这样的目标难以实现,因此在这项工作中,我们通过多代理协作设计了三项工作,旨在接近仓库级别的漏洞检测目标。
论文链接:https://doi.org/10.1145/3650212.3685562
在持续集成(CI)中,准确的构建预测对于降低开发成本和提高效率至关重要。然而,现有的构建预测方法,通常基于预定义规则或采用特征工程的机器学习分类器,其全面捕捉提交工件(如代码变更和提交消息)详细信息的能力有限。这些工件对于理解构建中的提交至关重要,但在现有方法中并未得到充分利用。为了解决这个问题,我们提出了GitSense,这是一种基于Transformer的模型,首次专门设计用于整合提交工件中包含的丰富和复杂的信息。GitSense采用了带有内置滑动窗口文本采样器的高级文本编码器来处理文本特征,并使用统计特征编码器处理提取的统计特征。这种创新的方法允许对冗长复杂的提交工件进行全面分析,超越了传统方法的能力。我们进行了全面的实验,将GitSense与五种最先进的构建预测模型、Longformer和ChatGPT进行了比较。实验结果表明,在预测失败的构建方面,GitSense优于这些模型,其F1分数提高了32.7%-872.1.0%,精确度提高了23.9%-437.5%,召回率提高了40.2%-1396.0%。
论文链接:https://doi.org/10.1145/3650212.3680356
准确感知复杂的驾驶环境对自动驾驶车辆的安全运行至关重要。随着深度学习和通信技术的巨大进步,车联网(V2X)协作有可能解决单一感知系统在探测远距离物体和遮挡方面的局限性。然而,尽管取得了显著进展,几项通信挑战仍会削弱多车辆协同感知的有效性。深度神经网络(DNN)的低可解释性以及通信机制的高复杂性使得传统测试技术不适用于自动驾驶系统(ADS)的协同感知。此外,现有的测试技术依赖于手动数据收集和标注,耗时且费用高昂。在本文中,我们设计并实现了CooTest,这是第一个面向V2X的协同感知模块的自动化测试工具。CooTest设计了V2X特定的变形关系,并配备了能够反映各种协同驾驶因素影响的通信和天气变换操作符,从而生成变换后的场景。此外,我们采用了面向V2X的引导策略来生成变换场景的过程,并提高了测试效率。我们用不同融合方案的多个协同感知模型来实验CooTest,以评估其在不同任务上的性能。实验结果表明,CooTest能有效检测在各种V2X导向的驾驶条件下的错误行为。此外,结果证实,通过使用生成的场景重新训练,CooTest可以提高检测的平均精度并减少误导性的协作错误。
论文链接:https://doi.org/10.1145/3650212.3680373
Web3 描述了下一代互联网演进的一个概念,即通过区块链技术实现价值互联网。作为 Web3 软件,去中心化应用(DApps)近年来已开始涌现。DApps 和加密货币之间存在一种天然联系,DApps 中的故障可能直接导致与加密货币相关的资金损失。因此,针对紧急 DApp 救援行动和减少财务损失,高效的故障定位技术是至关重要的。然而,由于传统应用中的故障定位方法无法识别 DApp 特定的故障特征,例如大量加密货币从 DApps 转移到黑客账户,因此这些方法并不适用于这一特定领域。为了探究 DApp 故障的根本原因,一些研究人员尝试通过变异测试来识别可疑的代码片段。然而,将变异测试应用于 DApp 故障定位既耗时又在实践中受到限制。本文首次对 DApp 故障定位进行了全面研究。我们介绍了一种基于学习的 DApp 故障定位工具 DAppFL,通过逆向工程收集已执行的源代码,然后追踪加密货币流动以辅助定位故障函数。我们还发布了首个 DApp 故障定位数据集,为该领域提供了新的基准。我们的实验结果表明,DAppFL 能在前五名中定位到 63% 的故障,比最先进的方法高出 23%。为了促进进一步的研究,我们的代码和数据集可以在网上免费获取:https://github.com/xplanet-sysu/awesome-works#dappfl。
论文链接:https://doi.org/10.1145/3650212.3652116
隔离级别(Isolation Level,IL)作为应用程序和数据库管理系统(DBMS)之间的正确性契约。问题性的IL实现可能导致不正确的事务执行结果和错误的数据库状态。然而,现有研究无法高效地生成各种有效的用于IL测试的工作负载。核心挑战来自于以下需求:(a)黑盒测试(触发闭源DBMS的IL代码),(b)有效测试(避免冗余和无效的测试),以及(c)异常敏感测试(以可区分的方式测试各种IL)。针对黑盒测试,我们调查了15个流行的DBMS的IL实现,发现它们遵循一个通用框架,利用冲突图管理工作负载的所有冲突,并执行验证策略以防止非可串行化异常。为了有效测试,我们提出了一种轻量级的数据状态镜像方法,这有助于生成精确访问预期记录并参与特定冲突图形成的SQL操作。我们还提出了一种高效的历史无关方法来生成不同的冲突图,确保图生成的开销与历史图的规模无关。针对异常敏感测试,我们提出基于移植的方法来协调冲突记录访问,并根据异常定义将其注入不同的事务中。我们的方法在测试效果、效率和覆盖范围方面优于现有方法。在实际应用中,我们成功找到了流行DBMS中的33个漏洞。
论文链接:https://doi.org/10.1145/3650212.3680318
覆盖引导模糊测试(Coverage-Guided Fuzzing, CGF)已经成为漏洞检测中最流行且最有效的方法。它通常被设计为一种自动化的“黑箱”工具。安全审计员启动它后,只需等待结果。然而,经过一段时间的测试后,CGF在发现新覆盖率方面逐渐变得困难,从而导致效率低下。用户很难解释阻碍模糊测试进一步进展的原因,也难以确定现有覆盖率是否足够。此外,用户无法与模糊测试过程进行交互和指导。在本文中,我们设计了动态定向灰盒模糊测试(Dynamic Directed Greybox Fuzzing, DDGF),以促进用户与模糊测试工具之间的协作。通过利用Ball-Larus路径分析算法,我们提出了两种新技术:动态内省和动态定向。动态内省通过编码和解码揭示了路径频率分布的显著不平衡。基于内省得出的见解,用户可以实时动态引导模糊测试工具集中测试选定的路径。我们基于AFL++实现了DDGF。对Magma的实验表明,DDGF在帮助模糊测试工具更快复现漏洞方面效果显著,速度提升高达100倍,性能开销仅为13%。DDGF展示了人机交互在模糊测试中的巨大潜力。
论文链接:https://doi.org/10.1145/3650212.3680324
Android基于事件驱动模型,这种模型隐藏了主方法,由生命周期方法和用户交互的监听器驱动。FlowDroid静态构造一个模拟生命周期方法的虚拟主方法。虚拟主方法已被FlowDroid和其他Android分析器广泛用作入口点。然而,现有的虚拟主方法并非为路径敏感分析设计,其路径可能是不可满足的。因此,当使用原始的虚拟主方法时,路径敏感分析(例如符号执行)可能会因不可行路径而受影响。在本文中,我们提出了DMMPP,这是第一个为Android应用生成路径敏感谓词的虚拟主方法生成器,并且其相应的路径条件是可满足的。DMMPP为应用中的四种类型的组件构建虚拟主方法,并对生命周期方法进行更现实的模拟。实验表明,我们的工具对路径敏感分析器有益,探索的路径增加了28.5倍,同时时间开销较低。
论文链接:https://doi.org/10.1145/3650212.3685302
随着自动驾驶系统(ADS)向更高的自动化水平发展,其安全验证的协调变得越来越复杂。本文介绍了ScenarioFuzz,这是一种开创性的基于场景的模糊测试方法。其设计类似于理解过去表演的编舞者,不依赖预定义的场景来发现ADS中的漏洞。我们利用地图路网(如OPENDRIVE)提取必要的数据,形成基础的场景种子语料库。这个语料库,经过相关信息的丰富,提供了在没有起始场景的情况下进行模糊测试所需的边界条件。我们的方法集成了专业的变异器和变异技术,并结合图神经网络模型,预测并筛选出高风险的场景种子,通过利用历史测试数据优化模糊测试过程。与其他方法相比,我们的方法平均降低了60.3%的时间成本,而单位时间内发现的错误场景数量增加了103%。此外,我们提出了一种自监督碰撞轨迹聚类方法,有助于识别和总结54类容易引发ADS故障的高风险场景类别。通过实验,我们在六个测试系统中成功发现了58个漏洞,强调了ADS的关键安全问题。
论文链接:https://doi.org/10.1145/3650212.3680344
目标检测(OD)模型无缝集成到许多智能软件系统中,并在各种任务中发挥着关键作用。这些模型通常建立在人工标注的数据集之上,其质量对模型的性能和可靠性有着重大影响。错误和不充分的标注数据集可能在实际部署时引发分类/定位的不准确性,从而导致安全漏洞或交通事故,造成财产损失甚至生命损失。因此,确保和提高数据质量是保障目标检测系统可靠性的关键问题。本文介绍了一种用于目标检测系统的数据故障定位技术——Datactive。Datactive旨在定位包括位置错误和缺失目标在内的各种数据故障,而无需利用在有问题的数据集上训练的目标检测模型的预测结果。为此,我们首先通过数据拆解策略构建仅含前景和包含背景的数据集,然后采用稳健的学习方法使用拆解后的数据集训练分类器。基于分类器的预测结果,Datactive为前景标注和图像背景生成统一的可疑性评分。它使测试人员能够轻松地识别和纠正错误或缺失的标注,付出最少的努力。为了验证其有效性,我们在三个数据集上进行了实验,采用了6个基线,并从多个方面展示了Datactive的优越性。我们还探索了Datactive发现自然数据故障的能力及其在训练和评估场景中的应用。
论文链接:https://doi.org/10.1145/3650212.3680329
尽管去中心化金融(DeFi)应用程序能够在多个匿名用户之间促进防篡改交易,但由于攻击者可以直接访问智能合约的字节码,交易机制、合约代码或第三方组件中的漏洞容易被利用来操纵代币价格,从而导致财务损失。由于价格操纵通常依赖于特定状态和复杂的交易序列,现有的检测工具在解决这一问题上存在局限性。此外,为了迅速找出攻击的根本原因并实施有针对性的防御和补救措施,审计员通常优先理解攻击背后的方法,更加注重“如何”发生,而不仅仅是确认其存在。为了解决这些问题,本文提出了一种新型的自动价格操纵检测和分析框架,名为DeFort。DeFort包含一个价格操纵行为模型,用于指导链上检测,多种价格监控策略以检测代币价格异常的池,以及各种利润计算机制以确认攻击。基于行为模型,DeFort能够自动定位导致价格异常波动的交易和函数,并识别攻击者和受害者。实验结果表明,DeFort能够优于最先进的价格操纵检测方法。此外,在对441个现实世界项目监测两个月后,DeFort成功检测到五起价格操纵攻击。
论文链接:https://doi.org/10.1145/3650212.3652137
程序理解可以帮助分析人员了解二进制文件的主要行为,提高逆向工程分析的效率。现有的工作主要集中在指令翻译和函数名预测上。然而,它们在理解整个程序方面存在局限性。恢复的源文件信息可以提供对二进制文件主要行为的洞察,作为高级程序摘要。然而,基于函数聚类的方法恢复的文件包含分布不连续的二进制函数,导致准确性较低。此外,目前没有关于预测这些恢复文件名称的研究。为此,我们提出了一个用于二进制文件中源文件信息恢复的框架,称为DeLink。该框架首先利用基于边界定位的文件结构恢复方法来识别二进制文件中的文件。然后,使用编码器-解码器模型预测这些文件的名称。实验结果表明,我们的文件结构恢复方法在六项评价指标上平均提高了14%,且平均只需16.74秒,在恢复质量和效率上都优于最先进的工作。此外,我们的文件名预测模型达到了70.09%的精确度和63.91%的召回率。此外,我们展示了DeLink在恶意软件同源性分析中的有效应用。
论文链接:https://doi.org/10.1145/3650212.3680338
本论文通过冲突自由复制数据类型(CRDTs)研究编程环境中的近同步协作。尽管屏幕共享和视频会议提供了协作编程的基本功能,集成开发环境(IDE)嵌入的协作工具则可以精确跟踪源代码变化并让开发者掌控。CRDTs使去中心化协作成为可能,消除了对中央服务器的依赖。然而,现有的CRDTs无法保留用户意图和处理复杂格式,导致低效问题。通过设计科学研究方法,本论文解决了四个关键研究领域:(1) 确定现有CRDT算法在保留编程文件用户意图方面的局限性,(2) 优化CRDT实现以满足编程协作需求,(3) 确定编程环境中复制数据类型的适当粒度,(4) 探索监督模仿学习以增强系统在合并冲突中的能力。本研究旨在改进协作编程工具,确保更高的一致性、效率和用户满意度。
论文链接:https://doi.org/10.1145/3650212.3685555
最近,一些方法被提出用于将深度神经网络(DNN)分类器分解成二元分类模块,以便于模块化开发和修复这些模型。这些方法仅涉及分解分类器模型的问题,其中一些依赖于神经元的激活模式,从而限制了其适用性。在本文中,我们提出了一种DNN分解技术,名为Incite,它通过神经元变异来量化神经元对模型给定输出的贡献。然后,对于每个模型输出,由对该输出贡献最高的节点所引导的子图被选择并提取为一个模块。Incite不依赖于模型类型和其构建中使用的激活函数,并且不仅适用于分类器,还适用于回归模型。此外,通过对神经元的启发式聚类,Incite将变异分析的成本降低,从而能够应用于具有数百万参数的模型。最后,Incite会修剪掉对模块输出没有贡献的神经元,从而生成压缩且高效的模块。我们使用16个DNN模型针对著名的分类和回归问题评估了Incite,并报告了其在模块综合准确度(和MAE)、模块间模型元素的重叠率以及压缩比方面的效果。我们观察到,对于分类模型,Incite平均会带来3.44%的准确度损失,模块间的平均重叠率为71.76%,而平均压缩比为1.89倍。与此同时,对于回归模型,Incite平均会导致18.56%的MAE增加,模块间的重叠率为80.14%,而平均压缩比为1.83倍。
论文链接:https://doi.org/10.1145/3650212.3680390
近期恶意软件的发展,尤其是日益增加的隐匿技术的使用,给恶意软件行为分析带来了重大挑战。研究人员提出了强制执行以突破恶意软件的自我保护机制,通过强制设置某些分支结果来暴露隐藏的行为。现有研究集中在改进强制执行器,以提供轻量级的无崩溃执行模型。然而,对路径探索策略的关注不足,这一方面对于效果同样关键。现有最先进的强制执行工具中采用的线性搜索存在固有的局限性,导致不必要的路径探索和行为暴露不完全。在本文中,我们提出了一种新颖且实用的路径探索策略,重点关注目标二进制文件中的定义-使用关系覆盖。我们开发了一种模糊测试方法,以渐进和自监督的方式探索这些定义-使用关系。实验结果表明,所提出的解决方案在内存依赖覆盖和恶意行为暴露方面均优于现有的强制执行工具。
论文链接:https://doi.org/10.1145/3650212.3652128
增量和并行构建是由诸如 Make 等构建工具执行的,它们是现代 C/C++ 软件项目的核心。其正确和高效的执行依赖于构建脚本。然而,构建脚本容易出现错误。最常见的错误是缺失依赖(MDs)和冗余依赖(RDs)。目前检测这些错误的最先进方法依赖于干净构建(即在干净的环境中对一部分软件配置进行完全构建),这种方法成本高昂,对于大规模项目可能需要数小时才能完成。为了解决这些挑战,我们提出了一种名为 EChecker 的新方法,用于在增量构建的上下文中检测构建依赖错误。EChecker 的核心思想是通过推断 C/C++ 预处理指令和来自新提交的 Makefile 更改来自动更新实际构建依赖,从而尽可能避免干净构建。EChecker 在保持有效性的同时,比依赖干净构建的方法具有更高的效率。
我们选择了 12 个具有代表性的项目,这些项目从小型到大型不等,对每个项目的 20 个提交(总共 240 个提交)进行了评估,以检测 EChecker 的有效性和效率。我们将评估结果与一种当前最先进的构建依赖错误检测工具进行了比较。评估结果显示,EChecker 的 F-1 分数比目前最先进的方法提高了 0.18。EChecker 使构建依赖错误检测效率平均提高了 85.14 倍(中位数为 16.30 倍)。结果表明,EChecker 可以有效地支持实践者检测构建依赖错误。
论文链接:https://doi.org/10.1145/3650212.3652105
模拟测试已被领先公司广泛采用以确保自动驾驶系统(ADSs)的安全性。已经开发了许多基于情景的测试方法来生成用于模拟测试的多样化驾驶情景,并证明这些方法能够发现安全违规。然而,目前并没有自动化的方法来诊断这些违规是否由被测试的ADS引起,以及这些违规属于哪种类别。因此,需要花费大量精力来手动诊断违规情况。为了解决这个问题,我们提出了DiaVio,用于利用大型语言模型(LLMs)在模拟测试中自动诊断安全违规。它基于一种新的碰撞领域特定语言(DSL)来对齐自然语言描述的真实事故报告和模拟测试中的违规情景。DiaVio通过使用真实事故报告对基础LLM进行微调以学习诊断能力,并使用微调后的LLM来诊断模拟测试中的违规情景。我们的评估显示了DiaVio在违规诊断方面的有效性和效率。
论文链接:https://doi.org/10.1145/3650212.3652135
深度神经网络(DNN)测试是保证DNN质量的常见做法之一。然而,DNN测试通常需要大量带有oracle信息(标签)的测试输入,这在获取上可能是充满挑战且资源密集的。为了解决这个问题,我们提出了DATIS,一种面向距离的DNN测试输入选择方法。具体来说,DATIS采用了一个两步方法来选择测试输入。
在第一步,它基于从测试输入与其最近邻训练样本之间的距离派生的改进不确定性得分来选择测试输入。在第二步,它通过检查已选择测试输入之间的距离,进一步消除可能覆盖相同故障的测试输入。
为了评估DATIS,我们在八个不同的主题上进行了大量实验,考虑了不同领域的测试输入、不同行结构以及多种类型的测试输入。评估结果显示,DATIS在选择具有高故障揭示能力的测试输入以及指导用于DNN增强的数据选择方面,明显优于15种基准方法。
论文链接:https://doi.org/10.1145/3650212.3652125
大型语言模型(LLMs)在多个领域展示了其非凡的能力,包括自然语言理解、翻译,甚至代码生成。然而,LLMs生成有害内容的潜力是一个重大问题。这种风险要求对LLMs进行严格测试和全面评估,以确保其安全和负责任地使用。然而,对LLMs进行广泛测试需要大量的计算资源,使得这一工作成本高昂。因此,探索测试阶段的成本节约策略至关重要,以平衡彻底评估的需求和资源可用性的限制。为此,我们的方法首先是将审核知识从一个LLM转移到一个小模型。随后,我们采用两种不同的策略生成恶意查询:一种基于语法树的方法,另一种利用基于LLM的方法。最后,我们的方法结合了一个顺序的过滤-测试过程,旨在识别容易引发有害响应的测试案例。通过这样做,我们显著减少了与LLMs不必要或无效的互动,从而优化了测试过程。我们的研究评估了DistillSeq在四种LLMs上的效能:GPT-3.5、GPT-4.0、Vicuna-13B和Llama-13B。在没有使用DistillSeq的情况下,这些LLMs的观察到的攻击成功率为:GPT-3.5为31.5%,GPT-4.0为21.4%,Vicuna-13B为28.3%,Llama-13B为30.9%。然而,在应用DistillSeq后,这些成功率显著上升,分别为58.5%、50.7%、52.5%和54.4%。这相当于在不使用DistillSeq的情况下,平均攻击成功率提高了93.0%。这些发现突显了DistillSeq在减少有效测试LLMs所需时间和资源投入方面的显著提升。
论文链接:https://doi.org/10.1145/3650212.3680304
最近,基于深度学习的测试用例生成方法被提出用于自动生成单元测试用例。在本研究中,我们利用基于Transformer的代码模型,结合项目级别的领域适应(Domain Adaptation, DA)生成单元测试。具体来说,我们使用CodeT5,一种相对较小的训练于源代码数据的语言模型,并针对测试生成任务进行微调。然后,我们对每个目标项目数据应用领域适应以学习项目特定的知识(项目级别领域适应)。我们使用Methods2test数据集微调CodeT5以用于测试生成任务,并使用Defects4j数据集进行项目级领域适应和评估。我们将我们的方法与下列几种方法进行比较:(a)未进行领域适应的CodeT5,(b)A3Test工具, 以及(c)在Defects4j数据集的五个项目上运行的GPT-4。结果显示,使用领域适应生成的测试在行覆盖率上分别比以上(a)、(b)和(c)基线提高了18.62%、19.88%和18.02%,在变异得分上分别提高了16.45%、16.01%和12.99%。总体结果显示,在解析率、编译率、BLEU和CodeBLEU等指标上具有一致的提升。此外,我们展示了我们的方法可以作为现有基于搜索的测试生成工具(如EvoSuite)的补充解决方案,以分别平均增加34.42%和6.8%的行覆盖率和变异得分。
论文链接:https://doi.org/10.1145/3650212.3680354
本文介绍了一种用于验证Python程序的工具,该工具通过使用类型注释和前端处理,能够利用有界模型检查(BMC)流水线的功能。它将输入程序转换为抽象语法树,以推断并添加类型信息。然后,将Python表达式和语句翻译成中间表示。最后,将这种描述转换为用可满足性模理论(SMT)求解器评估的公式。所提出的方法通过高效的基于SMT的有界模型检查器(ESBMC)得以实现,这使得ESBMC-Python工具成为首个基于BMC的Python代码验证器。使用专门为此目的开发的测试套件进行的实验结果显示了其有效性,其中成功和失败的测试都得到了正确评估。此外,它在以太坊共识规范中发现了一个真实问题。
论文链接:https://doi.org/10.1145/3650212.3685304
随着软件3.0时代的到来,将大型模型压缩并集成到软件系统中的趋势日益增长,这对社会产生了重大影响。遗憾的是,在许多情况下,模型压缩技术会影响这些模型的公平性表现,从而影响由深度神经网络(DNN)驱动的软件的伦理行为。一个最显著的例子是彩票票假设(LTH),这是一种流行的模型剪枝方法。本文表明,基于LTH的剪枝方法的公平性问题来源于其子网络选择和训练程序,凸显了现有补救措施的不足。为了解决这个问题,我们提出了一种新颖的剪枝框架——Ballot,该框架采用基于冲突检测的新颖子网络选择方法来找到准确和公平的子网络,并结合精细化的训练过程,以获得高性能模型,从而提高由DNN驱动的软件的公平性。通过这种方法,与最先进的基线方法——Magnitude Pruning、标准LTH、SafeCompress和FairScratch相比,Ballot在我们对五个流行数据集和三个广泛使用的模型的评估中,分别提高了38.00%、33.91%、17.96%和35.82%的剪枝公平性改进。我们的代码可在https://anonymous.4open.science/r/Ballot-506E 获得。
论文链接:https://doi.org/10.1145/3650212.3680336
Move 是一种用于智能合约的编程语言,其安全性尤为突出。然而,Move 合约的实际安全效果仍然是一个悬而未决的问题。本研究首次对 Move 合约的安全性进行了全面的实证研究。我们的初步步骤包括与一家安全公司合作,手动审核来自 92 个 Move 项目的 652 份合约。此过程揭示了八种类型的缺陷,其中一半此前未被报道过。这些缺陷可能带来潜在的安全风险,导致功能缺陷,误导用户或浪费计算资源。
为了进一步评估这些缺陷在现实世界 Move 合约中的普遍性,我们提出了 MoveScan,这是一种自动化分析框架,可以将字节码翻译成中间表示(IR),提取基本的元信息,并检测所有八种缺陷类型。通过利用 MoveScan,我们在 Aptos 和 Sui 区块链上的 37,302 份已部署合约中发现了 97,028 处缺陷,表明缺陷具有很高的普遍性。实验结果表明,MoveScan 的精度达到 98.85%,每个项目的平均分析时间仅为 5.45 毫秒。这超越了之前最先进的工具 MoveLint,其准确率为 87.50%,每个项目的平均分析时间为 71.72 毫秒。而 Move Prover 的召回率为 6.02%,并且需要人工干预。
我们的研究还带来了新的观察和见解,有助于开发更安全的 Move 合约。
论文链接:https://doi.org/10.1145/3650212.3680391
多智能体系统(MASs)在多机器人控制、智能交通和多人游戏等领域取得了显著的成功。为了确保其在不断变化和意外场景中具有鲁棒性,迫切需要对MAS进行全面测试。现有方法主要集中在单智能体系统的测试上,由于MAS的复杂性,无法直接应用于MAS的测试。据我们所知,目前关于MAS测试的研究较少。虽然已有一些研究着重于对MAS的对抗攻击,但这些研究主要从攻击的角度进行故障检测,即发现故障场景,而忽略了场景的多样性。在本文中,为了强调在探索(多样化行为)和利用(检测故障)之间的典型平衡,我们提出了一种称为通过多样性引导的探索和自适应关键状态利用的高级MAS测试框架。该框架结合了个体多样性和团队多样性,并设计了自适应扰动机制,通过在关键状态下扰动动作,从而触发系统越来越多样化的故障场景。我们在两个流行的MAS模拟环境:Coop Navi和星际争霸II上评估了MASTest。结果表明,与基线相比,两个环境中所得故障场景的平均距离增加了29.55%-103.57%和74.07%-370.00%。另外,与基线相比,MASTest发现的故障模式在两个实验环境中分别提高了71.44%-300.00%和50%-500.00%。
论文链接:https://doi.org/10.1145/3650212.3680376
机器人操作系统2(ROS)是机器人软件开发的实际标准,在各种安全关键领域具有广泛应用。为了提供更安全的ROS代码库,已经进行了许多测试工作。然而,现有的测试方法通常不足以捕捉ROS部署中固有的复杂和状态性的行为,从而导致测试效果有限。在本文中,我们提出了R2D2,这是一种ROS系统模糊测试器,它利用ROS的运行时状态作为指导,以提高模糊测试的效果和效率。与传统的模糊测试器不同,R2D2采用了一种系统的插装策略,捕捉系统的运行时行为,并实时分析当前的系统状态。这种方法提供了对系统行为的更深入理解,从而更有见地地探索ROS的广泛状态空间。为了评估,我们将其应用于四个著名的ROS应用程序。我们的评估表明,R2D2在代码覆盖率方面相比最先进的ROS模糊测试器(包括Ros2Fuzz和RoboFuzz)分别提高了3.91倍和2.56倍,同时发现了39个此前未知的漏洞,其中6个在ROS运行时和ROS应用中被修复。就运行时开销而言,R2D2的平均执行和内存使用开销分别为10.4%和1.0%,使得R2D2在ROS测试中非常有效。
论文链接:https://doi.org/10.1145/3650212.3652111
代码作者归属一直是一个有趣的研究课题,已有数十年的研究历史。最近的研究表明,现有的代码作者归属方法在鲁棒性方面存在较大缺陷。在攻击者添加微小扰动的情况下,这些方法的准确性会大幅降低。截至目前,还没有一种代码作者归属方法能够有效应对这种攻击。在本文中,我们将代码作者归属方法的弱鲁棒性归因于数据集偏差,并认为可以通过调整特征学习策略来缓解这种偏差。我们首先提出了一个鲁棒的代码作者归属特征组合框架,该框架仅由简单的浅层神经网络结构组成,并在特征提取中结合专家知识,引入了框架的可控性。实验结果表明,相比于主流代码作者归属方法,该框架在鲁棒性方面显著提升,针对性攻击的成功率平均下降了23.4%(从37.8%降至14.3%),非针对性攻击的成功率平均下降了25.9%(从46.7%降至20.8%)。同时,在准确性方面,它也能够达到与主流代码作者归属方法相当的表现。
论文链接:https://doi.org/10.1145/3650212.3652121
等效变异体的存在长期以来被认为是广泛采用变异分析和变异测试的主要障碍。本文介绍了一项针对实际Java程序中等效变异体类型和普遍性的研究。我们对从7个开源Java项目中抽取的1992个变异体进行了基准分析。我们的分析确定了215个等效变异体,并根据描述变异体为何等效及其检测难度的两个标准对其进行了分组。根据这项分析,我们观察到:(1) 7个项目的中位等效变异体率为2.97%;(2) 许多等效变异体是由常见编程模式引起的,其检测的复杂度不超过在抽象语法树上进行的结构模式匹配。基于我们的基准分析结果,我们开发了等效变异体抑制 (EMS),这是一种包含10种高效且有针对性分析的技术。我们在19个开源Java项目上评估了EMS,将其效果和效率与等效变异体检测领域的现有技术——两种变体的简单编译器等效性(TCE)进行了比较。除此之外,我们分析了所有由任何工具报告的9047个等效变异体,以更好地理解等效变异体的类型和频率。总体而言,EMS在325秒内检测到8776个等效变异体;而TCE在2938小时内检测到2124个等效变异体。
论文链接:https://doi.org/10.1145/3650212.3680310
随着深度神经网络(DNNs)在安全关键应用中的日益使用,人们对其可靠性的关注也在增加。即使是高度训练且性能优越的网络也不能达到100%的准确性。然而,在没有真实数据的情况下,很难预测它们在部署期间的行为。在本文中,我们对最近提出的用于评估DNNs在部署期间可靠性的方法进行了对比和可重复性研究。我们发现,用这些方法的重现包运行和重现结果相当困难,在其他文物上运行这些方法则更加困难。此外,由于缺乏明确的评估指标,很难比较这些方法的有效性。我们的结果表明,我们的研究社区需要在这方面投入更多的努力,以获得评估神经网络在安全关键领域中可靠性的可靠技术。为此,我们贡献了一个评估框架,该框架整合了所考虑的方法,并使用通用指标在常见基准上进行评估。
论文链接:https://doi.org/10.1145/3650212.3680401
在软件安全任务中,如恶意软件分析和漏洞挖掘,逆向工程起到了关键作用,其中C反编译器在理解程序语义方面扮演着重要角色。然而,逆向工程师在分析复杂的二进制文件时,仍主要依赖汇编代码而不是反编译后的代码。这一现象突显了当前反编译代码的局限性,阻碍了其在逆向工程中的有效性。识别并分析现有反编译器的问题,并进行有针对性的改进,可以有效提升软件分析的效率。在这项研究中,我们系统地评估了当前主流反编译器的语义一致性和可读性。语义评估结果显示,最先进的反编译器Hex-Rays在几乎所有优化方面的准确率约为55%,这与许多逆向工程师通常认为反编译器准确的普遍看法相矛盾。可读性评估表明,尽管多年来在提升反编译代码可读性方面做了许多努力,但反编译器的模板化方法依然主要生成类似于二进制结构而非人类编程模式的代码。此外,我们的人工研究表明,为了提高反编译器的准确性和可读性,引入人类或编译器感知策略,如推测-验证-校正的方法,以获得可重新编译的反编译代码并迭代修正,使其更接近原始二进制文件,可能比依赖静态分析和规则扩展更有效的优化方法。
论文链接:https://doi.org/10.1145/3650212.3652144
关键软件系统需要严格的测试来识别可能的故障情况,这些故障情况通过人工测试很难发现。在这项研究中,我们介绍了使用启发式测试方法测试一个真实研发的飞行控制系统的工业经验。我们的方法利用进化策略,结合内在动机,生成多种不同的测试用例,每个用例揭示系统内不同的潜在故障场景。这种多样性使得能够更全面地识别和理解系统的脆弱性。我们通过分析进化生成的测试用例以识别系统的弱点。研究结果表明,我们的方法可以通过提供高质量的测试用例,以高效和成本效益的方式提高航空电子系统的可靠性和稳健性。
论文链接:https://doi.org/10.1145/3650212.3680331
神经代码生成系统最近引起了越来越多的关注,以提高开发人员的生产力并加速软件开发。通常,这些系统会维护一个预训练的神经模型,并将其作为服务(例如,通过远程 API)提供给普通用户,同时集成了一个反馈机制,用于广泛收集和利用用户对生成代码的反应,即用户反馈。然而,这种反馈的安全影响尚未被探索。通过对当前反馈机制的系统性研究,我们发现反馈使这些系统容易受到反馈数据注入(FDI)攻击的影响。我们讨论了FDI攻击的方法,并提出了一种预攻击分析策略,以在黑箱设置中推断目标系统的攻击约束条件。我们通过两个概念验证的实例,展示了如何利用FDI攻击面实现提示注入攻击和后门攻击,以针对实际的神经代码生成系统。攻击者可能会偷偷操纵神经代码生成系统,生成带有漏洞、攻击载荷、恶意和垃圾信息的代码。我们的研究结果揭示了神经代码生成系统中反馈机制的安全影响,为提高其安全性提供了方向。
论文链接:https://doi.org/10.1145/3650212.3680300
变异测试已经超越了学术研究,现已在工业和开源环境中应用,并且越来越多地成为大学软件工程课程的一部分。尽管有许多变异测试工具存在,每种工具都有不同的优缺点,但将它们集成到教育活动和练习中仍然具有挑战性,因为这些工具的复杂性以及将它们整合到开发环境中的需求。此外,可能希望使用不同的工具,这样学生可以探索不同之处,例如在生成的变异体类型或数量上的差异。要求学生安装和学习多种工具只会增加技术复杂性,并可能导致学生学习内容和方式上的不一致。本文介绍了FRAFOL,一个用于学习变异测试的框架。FRAFOL提供了一个在教育环境中使用不同变异测试工具的通用环境。
论文链接:https://doi.org/10.1145/3650212.3685306
过去几十年里,Rust 由于其内存安全机制和逐渐成熟的生态系统,在软件开发中得到了广泛应用。提升 Rust 库的质量对 Rust 生态系统至关重要,因为这些库通常是软件系统的核心组件。然而,我们发现现有的方法在测试 Rust API 交互方面存在不足——它们要么缺乏符合 Rust 所有权规则的 API 测试方法,要么无法处理函数依赖的大搜索空间,或者被预选代码库所限制,导致在发现错误方面效率低下。为了解决这些问题,我们提出了一种模糊测试技术,即 FRIES,它能够有效地综合和测试复杂的 API 交互,以识别 Rust 库中的缺陷,从而有望显著提高 Rust 库的质量。
在我们的方法背后,一个关键技术是遍历加权的 API 依赖图,这种图不仅编码了函数之间的语法依赖关系,还包括从 Rust 生态系统中挖掘出的反映程序员思维的常用使用模式。结合我们的高效生成算法,这种图结构显著减少了搜索空间,使我们能够集中精力在常见应用场景中发现隐藏的漏洞。同时,专门设计的所有权保证算法确保生成的 Rust 程序的有效性,显著提高了模糊测试目标编译的成功率。
实验结果表明,这项技术确实可以用最少的计算资源生成高质量的模糊测试目标,同时更有效地发现对实际开发影响较大的错误,从而减轻了对 Rust 生态系统中程序稳健性的影响。到目前为止,FRIES 在 20 个知名的最新版本的 Rust 库中识别出了 130 个漏洞,其中包括 84 个以前未知的漏洞,其中 54 个已被确认。
论文链接:https://doi.org/10.1145/3650212.3680348
代码预训练模型的兴起极大地提升了各种编码任务的效果,如代码补全以及类似GitHub Copilot的工具。然而,这些模型,尤其是大型模型的巨大规模,在针对特定下游任务进行微调时带来了显著挑战。作为一种替代方法,基于检索的方法逐渐崭露头角,通过补充模型预测结果而无需进行微调。尽管这些方法展示了潜力,但其设计通常依赖于启发式方法,导致关于应该存储或检索哪些信息以及如何插值这些信息以增强预测结果等关键问题仍未解决。
为应对这一挑战,我们首先对微调过程进行了理论分析,强调了差分逻辑(delta logits)在提升模型预测准确性方面的关键作用。基于这种理解,我们开发了一种新的基于检索的方法,命名为FT2Ra,其目标是模拟真正的微调过程。尽管FT2Ra采用了基于检索的机制,但其独特之处在于采用了类似于微调的学习率和多轮检索的模式。
我们对FT2Ra在令牌级和行级代码补全两方面进行了全面评估。研究结果表明,FT2Ra在与当前最先进的方法相比时表现出显著的有效性,并具有真正微调的潜力。在相对容易的令牌级补全任务中,FT2Ra在UniXcoder上相比最佳基线方法提高了4.29%的准确率。在更具挑战性的行级补全任务中,我们观察到精确匹配(Exact Match,EM)性能提高了两倍以上,这表明我们的理论分析具有显著优势。值得注意的是,即使在没有实际微调的情况下,FT2Ra的表现也与真实微调的模型具有竞争力。
论文链接:https://doi.org/10.1145/3650212.3652130
可配置的软件系统容易出现配置错误,导致公司蒙受重大损失。然而,由于配置空间的庞大和复杂,诊断这些错误具有挑战性。这些错误对经验丰富的维护人员和新的终端用户都构成了重大挑战,尤其是那些无法访问软件系统源码的用户。鉴于日志对大多数终端用户来说易于访问,我们进行了一项初步研究,以概述利用日志定位配置错误的挑战和机遇。基于初步研究获得的见解,我们提出了一种基于大语言模型(LLM)的两阶段策略,帮助终端用户通过日志定位根本原因的配置属性。我们进一步实现了一个工具,名为LogConfigLocalizer,与上述策略的设计保持一致,希望通过日志分析帮助终端用户应对配置错误。据我们所知,这是首个基于大型语言模型(LLMs)和日志为终端用户定位根本原因配置属性的工作。我们通过Hadoop上的LogConfigLocalizer评估了所提出的策略,证明其具有高达99.91%的平均准确率。此外,我们还通过与两个变体和一个基准工具的比较,演示了该方法不同阶段的有效性和必要性。此外,我们通过一个实际案例研究验证了所提方法的有效性和可行性。
论文链接:https://doi.org/10.1145/3650212.3652106
日志在现代软件系统中发挥着至关重要的作用,开发人员使用它们来记录未来软件维护所需的关键信息。由于基于日志的维护任务的性能很大程度上依赖于日志语句的质量,因此已经有各种研究工作提出,以帮助开发人员编写适当的日志语句。然而,这些工作要么只支持整个活动中的部分子任务,要么执行时耗时较高,并可能引入不必要的修改。为了解决这些限制,我们提出了FastLog,它能够非常快速地支持完整的日志语句生成和插入活动。具体而言,给定一个程序方法,FastLog首先在最精细的标记级别预测插入位置,然后生成一个完整的日志语句进行插入。我们进一步使用文本拆分来处理较长的输入文本,从而提高预测日志语句插入位置的准确性。一项综合的实证分析表明,我们的方法在效率和输出质量上均优于最新的方法,这显示了其在当前实时智能开发环境中的巨大潜力和实用性。
论文链接:https://doi.org/10.1145/3650212.3652107
代码部分执行是指执行包含缺失定义的代码的问题。这个问题最近受到了关注,因为解决这个问题的方案可以促进各种后续的分析。我们提出了一种反馈驱动的部分执行技术,这种方法由一个名为Incompleter的工具支持,该工具利用执行过程中的错误反馈来实现部分代码执行。Incompleter基于这样的观察:在执行不完整的代码片段时,通常会出现相似的错误模式。Incompleter将一个不完整的代码片段作为输入,并应用一些规则(比如添加类、添加字段、添加文件等)来解决执行过程中遇到的连续动态错误。Incompleter会在片段成功执行或达到某些边界时停止。我们的研究结果表明,Incompleter在部分代码执行方面优于当前最先进的工具LExecutor。例如,在一个包含4.7K不完整StackOverflow片段的数据集中,Incompleter相比LExecutor可以多执行10%的代码片段,并覆盖23%的更多语句。我们还展示了Incompleter的类型推断显著优于LExecutor的类型推断,其F1得分高出37%。
论文链接:https://doi.org/10.1145/3650212.3680320
在软件开发中,重现漏洞报告是一项具有挑战性的任务。本文介绍了ReBL,一种新颖的反馈驱动方法,利用大规模语言模型GPT-4来自动重现Android漏洞报告。与传统方法不同,ReBL跳过了“重现步骤(S2R)”实体的使用。相反,它利用整个文本漏洞报告,并采用创新的提示来增强GPT的上下文推理能力。这种方法比传统的逐步实体匹配方法更加灵活和具上下文意识,从而提高了准确性和有效性。除了处理崩溃报告外,ReBL还能处理非崩溃功能性漏洞报告。我们对96个Android漏洞报告(包括73个崩溃报告和23个非崩溃报告)的评估表明,ReBL成功重现了90.63%的报告,每个漏洞报告的平均处理时间仅为74.98秒。此外,ReBL在成功率和速度方面均优于现有的三种工具。
论文链接:https://doi.org/10.1145/3650212.3680341
随着软件项目变得越来越复杂,去膨胀(debloating)逐渐受到关注。尽管静态分析会产生一个可达代码的粗粒度过近似,但基于动态执行痕迹的方法可能会影响程序的正确性。通过让开发者只需重新考虑少量方法并仍能够显著减少代码规模,基于切割的去膨胀(cut-based debloating)可以最小化风险。在本文中,我们提出了在静态分析生成的规则图中找到小切割的理念。在介绍了具有合适语义的分析之后,我们讨论了如何将其规则编码到一个有向超图中。随后,我们提出了一种算法,用于高效地在图中找到最有效的单一切割。所提出操作的执行时间允许其在交互式工具中部署。最后,我们展示了我们的图模型能够揭示值得重新考虑的方法。
论文链接:https://doi.org/10.1145/3650212.3680306
补丁正确性评估旨在有效检测过度拟合的补丁,即那些导致所有测试通过但实际上并未修复漏洞的补丁。虽然已经提出了若干自动化技术来评估补丁的正确性,但这些技术通常只提供一个二元结果(正确/不正确),而不提供任何解释为何将某个补丁分类为正确或不正确的附加信息。本工具演示论文介绍了FixCheck,这是一种基于静态分析、随机测试和大语言模型(LLMs)的工具,旨在通过为潜在不正确的补丁提供揭示错误的测试来改进补丁正确性分析过程。为此,FixCheck首先使用静态分析和随机测试生成一组类似于原始失败测试案例的全面测试集合。然后,FixCheck依靠LLMs为每个新测试案例推导出有意义的断言。最后,FixCheck执行生成的测试,并选择和优先考虑那些失败的测试,因为它们更可能揭示补丁中的缺陷。
论文链接:https://doi.org/10.1145/3650212.3685308
现代程序具有复杂功能、高度集成和快速迭代周期,这使它们容易出错。这种复杂性在程序分析和软件测试中带来了挑战,使得在开发阶段很难实现全面的错误覆盖。因此,许多错误只能在软件的生产阶段被发现。追踪和理解这些现场错误至关重要但具有挑战性:上传的现场错误报告数量庞大,琐碎但高频的错误可能会掩盖重要的低频错误。此外,应用程序代码库快速演变,导致单个错误在不同代码版本中产生不同的异常和堆栈跟踪。在本文中,我们介绍了Foliage,一个用于跟踪和聚类JavaScript应用程序现场错误的工具链,帮助开发人员定位和修复这些错误。为了解决高效追踪和分析软件错误的动态性和复杂性这一挑战,Foliage提出了一种错误信息增强技术。Foliage还引入了基于语言特征的聚类技术,并提出了三种用于错误聚类的评估指标:V-measure(V度量),cardinality bias(基数偏差),和hit rate(命中率)。结果表明,Foliage的基于语言特征的错误聚类在这三项指标上的平均表现比以往的错误聚类方法提高了31.1%。我们展示了Foliage在一个复杂的真实应用程序中两年的生产期上应用的实证研究,捕获了超过250,000份错误报告,并将它们聚类成132个独特的错误。最后,我们开源了一个包含真实和已标记的错误报告的错误数据集,可用于基准测试错误聚类技术。
论文链接:https://doi.org/10.1145/3650212.3680363
区块链客户端是区块链网络的基本元素,每个客户端都保留着区块链账本的副本。它们在确保网络去中心化、完整性和稳定性方面起着关键作用。作为复杂的软件系统,区块链客户端也不能免于瓶颈问题。一些瓶颈会创建新的攻击面,攻击者通过故意超负荷这些薄弱点来阻塞客户端的执行,进而引发拒绝服务(DoS)攻击。我们称这些为可操控的瓶颈。现有研究主要集中在少数几个这样的瓶颈上,并且高度依赖手动分析。据我们所知,还没有任何研究提出系统的方法来识别区块链客户端中的可操控瓶颈。为了弥补这一差距,本文深入研究了软件瓶颈的主要原因,并开发了一款名为ThreadNeck的新工具,以监控在客户端运行期间表明这些问题的症状。ThreadNeck将客户端模型化为多个线程,描述它们之间的相互关系,以准确表征客户端的行为。在此基础上,我们可以识别出可疑的瓶颈,并确定它们是否会被外部攻击者利用。在将ThreadNeck应用于用不同编程语言开发的四个主流客户端后,我们总共发现了13个可操控的瓶颈,其中六个是之前未知的。
论文链接:https://doi.org/10.1145/3650212.3680372
基于Linux的云服务器虚拟机管理程序在Linux内核中面临越来越多的漏洞问题。为了及时解决这些漏洞,同时避免因计划外停机造成的经济损失,已经开发了实时补丁方案。不幸的是,现有的实时补丁解决方案未能保护补丁免受部署后的攻击。此外,涉及全局变量更改的补丁导致现有解决方案面临实际问题。为了解决这些问题,我们提出了FortifyPatch,这是一种针对云环境中基于Linux的虚拟机管理程序的防篡改实时补丁解决方案。具体而言,FortifyPatch采用了Arm机密计算架构中的多重粒度保护表(Granule Protection Tables)来保护已部署补丁的完整性。信任区地址空间控制器(TrustZone Address Space Controller)和性能监控单元(Performance Monitor Unit)则用于通过内核代码保护和及时的页表验证来防止补丁被绕过。同时,FortifyPatch还通过精心设计的数据访问陷阱来补丁全局变量。我们对FortifyPatch进行了原型实现,并使用真实世界的CVE补丁进行评估。结果显示,FortifyPatch能够部署81.5%的CVE补丁。性能评估表明,FortifyPatch在指示性基准测试和实际应用中分别平均带来0.98%和3.1%的开销。
论文链接:https://doi.org/10.1145/3650212.3652108
网络物理系统(Cyber-Physical Systems, CPSs)的复杂性日益增加,特别是在安全关键领域。确保这些系统的正确性对于维持其全面运作能力至关重要,因为未被发现的故障可能既昂贵又威胁生命。因此,先进的故障诊断程序对于全面测试CPS是必不可少的,这使得准确的故障检测、解释和修复成为可能。本博士研究通过开发新工具和技术来增强基于故障测试和诊断的CPS研究,做出了贡献。我们的研究重点是测试在Simulink中创建的CPS数据流模型,并根据严格的形式化规范进行验证。我们的贡献包括:(i)一个用于系统故障注入的自动化工具,(ii)一种生物启发的全局优化算法,(iii)一种稳健的故障定位方法,(iv)一种用于评估测试套件与形式属性的一致性的全新变异测试方法,以及(v)一个专为CPS数据流模型量身定制的新覆盖准则。这种全面的方法相比现有方法提供了显著的改进,确保了在各种场景下的全面测试。我们使用来自各个领域的公开可用基准验证了我们方案的有效性。我们的研究成果为CPS测试开启了新的视角,为更稳健的CPS奠定了基础。
论文链接:https://doi.org/10.1145/3650212.3685552
FunRedisp 是一个函数分发重构工具,用于减少 Solidity 智能合约的整体调用 gas 消耗。它首先在源代码级别提取合约中的所有外部函数。然后,通过一个预训练的 TextCNN 模型,识别出这些函数中极有可能被调用的函数,并将它们在字节码级别移动到函数分发的前面。在从以太坊随机选择的 50 个真实世界智能合约中,FunRedisp 每个合约交易节省约 125.17 单位的 gas。每个合约的重构时间开销平均仅为 0.37 秒,显示了其有效性和高效性。
论文链接:https://doi.org/10.1145/3650212.3685312
智能合约主要用Solidity语言编写,是在以太坊等区块链平台上执行的图灵完备程序。为了防止资源滥用,当用户部署或调用智能合约时需要支付燃料费。尽管节省燃料消耗已经受到大量关注,但目前没有研究探讨函数调度对调用燃料消耗的影响。在本文中,在揭示函数调度如何影响调用燃料消耗之后,我们提出了FunRedisp,这是一种字节码重构方法和开源工具,用于减少智能合约整体调用燃料消耗。在源代码层面,FunRedisp首先识别出智能合约中有很大可能被调用的热点函数,然后将它们移到字节码层面的函数调度前面。我们实现了FunRedisp,并在从以太坊随机选择的50个真实世界智能合约上对其进行了评估。实验结果表明,FunRedisp可以在每笔交易中节省大约125.17单位的燃料费,而编译开销仅增加了0.37秒。
论文链接:https://doi.org/10.1145/3650212.3652146
JavaScript 解释器对现代网页浏览器至关重要,需要一种有效的模糊测试方法来识别与安全相关的漏洞。然而,输入的严格语法要求带来了显著挑战。最近在模糊测试中集成语言模型进行上下文感知变异的努力颇有前景,但缺乏必要的覆盖引导,无法完全发挥效力。本文提出了一种名为 CovRL(基于覆盖反馈的强化学习)的新技术,该技术将大型语言模型(LLM)与基于覆盖反馈的强化学习(RL)相结合。我们的模糊测试工具 CovRL-Fuzz 通过利用词频-逆文档频率(TF-IDF)方法构建加权覆盖图,将覆盖反馈直接集成到 LLM 中。这个覆盖图在计算模糊测试奖励时至关重要,这些奖励通过强化学习应用于基于 LLM 的变异器。通过这种方法,CovRL-Fuzz 能够生成更有可能发现新覆盖区域的测试用例,从而提高错误检测能力,同时最大限度地减少语法和语义错误,并且无需额外后处理。评估结果显示,CovRL-Fuzz 在提升代码覆盖率和识别 JavaScript 解释器中的漏洞方面优于最先进的模糊测试工具:CovRL-Fuzz 在最新的 JavaScript 解释器中识别出了 58 个真实的安全相关漏洞,其中包括 50 个以前未知的漏洞和 15 个 CVEs。
论文链接:https://doi.org/10.1145/3650212.3680389
MLIR(多级中间表示)编译器基础设施近年来获得了广泛的关注。它引入了方言以适应表示中的各种抽象层次。由于其在编译器构建中的基础性作用,确保其正确性至关重要。最近,一种基于语法的模糊测试技术(即 MLIRSmith)被提出并取得了显著成效。然而,MLIRSmith以随机方式生成测试程序,这限制了输入空间的探索,从而限制了整体模糊测试的效果。在这项工作中,我们提出了一种名为 MLIR 的新颖模糊测试技术。由于复杂或不常见的操作之间的数据/控制依赖关系往往有助于触发 MLIR 错误,该技术为 MLIR 程序构建了操作依赖关系图,并定义了相关的操作依赖覆盖率以引导模糊测试过程。为了推动模糊测试过程增加操作依赖覆盖率,MLIR 设计了一套依赖目标变异规则。通过将 MLIR 应用于最新版本的 MLIR 编译器基础设施,它检测到了 63 个先前未知的错误,其中 38/48 个错误已被开发人员修复/确认。
论文链接:https://doi.org/10.1145/3650212.3680360
受控并发测试 (CCT) 是测试分布式系统实现的一种有效方法。然而,现有的CCT工具存在语言依赖性和源代码插桩成本高的缺点,这使得它们难以应用于实际的生产系统中。我们提出了DSTest,这是一个用于测试分布式系统实现的通用CCT工具。DSTest拦截应用层的消息,因此消除了插桩成本,实现了语言独立,只需最少的输入。我们提供了一个干净且模块化的接口,以扩展DSTest以适应各种CCT事件调度器。我们使用三个知名的事件调度器打包DSTest,并通过将其应用于流行的生产系统来验证该工具。
论文链接:https://doi.org/10.1145/3650212.3685309
提取类重构对于分解大型复杂类以提高代码的可维护性和可读性至关重要。传统的重构工具严重依赖内聚性和耦合度等指标,这些指标通常需要专家判断,并且并非普遍适用。本研究提出了一种新颖的方法,利用深度类属性图和先进的图神经网络来自动识别重构机会。通过整合深层语义属性和细粒度结构依赖关系,该方法旨在减少对专家知识的依赖并提高重构建议的精确性和适应性。未来的工作将探讨超图学习,以捕捉更复杂的代码关系,从而进一步增强所提出方法的有效性。
论文链接:https://doi.org/10.1145/3650212.3685561
漏洞检测对确保软件系统的安全性和可靠性至关重要。近年来,图神经网络(Graph Neural Networks, GNNs)作为漏洞检测中的一种重要代码嵌入方法崭露头角,这是因为它们能够捕捉源代码中的底层语义结构。然而,由于GNNs本质上是黑箱模型,它们在可解释性方面面临显著挑战。为此,已经提出了几种基于事实推理的解释器。这些解释器通过分析对结果有贡献的关键特征,为GNNs的预测提供解释。
我们认为,这些基于事实推理的解释无法回答关键的假设性问题:“如果我们将代码图更改为其他结构,GNN的决策会发生什么变化?”受到人工智能中反事实推理进展的启发,我们提出了CFExplainer,一种新的基于GNN的漏洞检测的反事实解释器。与基于事实推理的解释器不同,CFExplainer寻求导致预测变化的输入代码图的最小扰动,从而解决漏洞检测中的假设性问题。我们将这种扰动称为反事实解释,它可以定位检测到的漏洞的根本原因,并为开发人员提供宝贵的见解,以采取适当的措施修复漏洞。
在四种基于GNN的漏洞检测模型上进行的大量实验表明,CFExplainer在现有的最先进的基于事实推理的解释器之上展示了其有效性。
论文链接:https://doi.org/10.1145/3650212.3652136
基于特征的用户界面测试对于确保移动应用程序(简称App)的质量起到了不可或缺的作用。创建此类测试的高人工成本引发了对自动化基于特征的用户界面测试的强烈兴趣,这种方法会自动探索被测应用(AUT),以找到达到目标测试目标的正确UI事件序列,只需提供一个高级测试目标描述。由于自动化基于特征的用户界面测试任务类似于传统的AI规划问题,所以以其在AI规划中有效性著称的大型语言模型(LLM)可能非常适合这一任务。然而,我们的研究表明,LLM在跟随具体的UI测试指令和基于新信息重新规划方面存在困难。尽管使用了先进的提示技术,这一限制导致了基于LLM的自动化特征UI测试解决方案的有效性降低。为了解决上述问题,我们提出了Guardian,一个运行时系统框架,通过两大策略将计算任务从LLM转移出来,以提高自动化特征UI测试的有效性。首先,Guardian优化了LLM可以规划的UI动作空间,通过构建来强制执行LLM的指令遵循策略。其次,Guardian故意检查逐步丰富的信息是否使LLM先前的规划无效。Guardian会从LLM可以规划的UI动作空间中移除无效的UI动作,将AUT的状态恢复到执行无效UI动作之前的状态,并提示LLM在新的UI动作空间中重新规划。我们用ChatGPT实例化了Guardian,并构建了一个名为FestiVal的基准测试集,包含了23个非常受欢迎的应用中的58个任务。在FestiVal上的评估结果显示Guardian达到了48.3的性能。
论文链接:https://doi.org/10.1145/3650212.3680334