HECS 是一种高级工具,旨在通过利用超图学习来对大类中的复杂依赖关系进行建模,从而实现提取类重构。不同于依赖于一对一依赖图的传统工具,HECS 使用类内依赖超图来捕捉一对多关系。这使得 HECS 能够提供更准确和相关的重构建议。该工具为每个目标类构建超图,使用预训练代码模型进行节点属性标注,并训练增强型超图神经网络。结合大型语言模型,HECS 提供了实用的重构建议。在对大规模和真实世界数据集的评估中,与 JDeodorant、SSECS 和 LLMRefactor 相比,HECS 的精度提高了 38.5%,召回率提高了 9.7%,f1 值提升了 44.4%。这些改进使 HECS 成为开发者的宝贵工具,提供实用见解并增强现有的重构技术。
论文链接:https://doi.org/10.1145/3650212.3685307
模糊测试驱动程序对于库的API模糊测试至关重要。然而,自动生成模糊测试驱动程序是一项复杂的任务,因为它需要创建高质量、正确且健壮的API使用代码。基于大型语言模型(LLM)的方法来生成模糊测试驱动程序是一个很有前途的研究领域。与传统的基于程序分析的生成器不同,这种基于文本的方法更具普适性,并且能够利用多种API使用信息,从而生成对人类读者友好的代码。然而,对于这种方法的一些基本问题,如其有效性和潜在挑战,仍缺乏深入的理解。为了弥补这一差距,我们进行了首个针对使用LLMs生成有效模糊测试驱动程序的重要问题的深度研究。我们的研究包括了一个精心策划的数据集,包含来自30个广泛使用的C项目的86个模糊测试驱动程序生成问题。我们设计并测试了六种提示策略,使用五种最先进的LLM模型,并在五种不同的温度设置下进行了实验。总体而言,我们的研究评估了736,430个生成的模糊测试驱动程序,消耗了大约8.5亿个token(费用超过$8,000)。此外,我们还将LLM生成的驱动程序与行业中使用的驱动程序进行了比较,进行了广泛的模糊测试实验(3.75个CPU年)。我们的研究发现:1)尽管基于LLM的模糊测试驱动程序生成是一个有前途的方向,但在实际应用中仍面临多个障碍;2)LLMs在为具有复杂细节的API生成有效的模糊测试驱动程序方面存在困难。三种提示策略的设计选择是有益的:重复查询,带示例查询,以及采用迭代查询过程;3)虽然LLM生成的驱动程序可以产生与行业中使用的驱动程序相当的模糊测试结果,但仍有大量提升机会,例如扩展包含的API使用,或集成语义检测工具以促进逻辑错误检测。我们的见解已被应用于改善OSS-Fuzz-Gen项目,促进了模糊测试驱动程序在工业中的实际生成。
论文链接:https://doi.org/10.1145/3650212.3680355
智能合约开发人员经常在像Stack Overflow (SO)这样的问答平台上寻找开发中的解决方案。虽然社区的回复通常能提供可行的解决方案,但嵌入的代码片段也可能包含隐藏的漏洞。将此类代码直接集成到智能合约中,可能会使其容易受到恶意攻击。我们进行了一次在线调查,收到了来自智能合约开发人员的74份回复。调查结果显示,大多数受访者(86.4%)在重用SO代码片段时没有充分考虑安全性。尽管存在多种旨在检测智能合约漏洞的工具,但这些工具通常是为分析完整的智能合约而开发的,因此无法有效分析SO上的典型代码片段。我们介绍了一款新工具SOChecker,这是首个设计用于识别不完整SO智能合约代码片段中潜在漏洞的工具。SOChecker首先利用经过微调的Llama2模型进行代码补全,然后应用符号执行方法进行漏洞检测。我们的实验结果基于从与智能合约相关的SO帖子中收集的897个代码片段,表明SOChecker达到了68.2%的F1分数,远超GPT-3.5和GPT-4(分别为20.9%和33.2%的F1分数)。我们的研究结果强调了提高来自问答网站代码片段安全性的必要性。
论文链接:https://doi.org/10.1145/3650212.3680353
TeX 是一种广泛使用的排版系统,被大多数出版商和专业学会采用。尽管 TeX 生成了大量文档,但 TeX 生态系统中的不规则性可能会导致文档不一致。这些不一致可能在不同的 TeX 引擎或不同版本的 TeX 发行版之间发生,导致无法遵守排版规范,或者同一文档对不同作者呈现出不同的结果。在这项工作中,我们通过对 432 份文档的大规模研究,调查并量化了 TeX 生态系统的鲁棒性。我们开发了一条自动化流程来评估 TeX 生态系统的跨引擎和跨版本兼容性。我们发现,不同 TeX 引擎的输出存在显著的不一致性:由于在学术会议中使用的流行 LaTeX 包和类缺乏跨引擎支持,只有 0.2% 的文档可以通过 XeTeX 和 PDFTeX 编译出相同的输出。跨不同 TeX Live 发行版也存在一定程度的不一致性,尽管数量较小,但仍然显著:从 2020 年到 2023 年,只有 42.1% 的文档生成了一致的输出。此外,我们的自动化流程减少了人工查找错误的努力:在 10 个独特的不一致根本原因的样本中,我们发现了两个 LaTeX 包的新错误和五个独立于本研究修复的已知错误。我们还观察到不同 TeX Live 发行版间可能存在潜在的不一致,这些不一致超出了变更日志中列出的更新范围。我们期望这项研究能帮助 TeX 文档的作者通过了解 TeX 生态系统中常常未记录的细微差异,避免意外结果,同时通过展示不同实现方式如何导致未预期的不一致来使开发者受益。
论文链接:https://doi.org/10.1145/3650212.3680370
大多数软件开发过程依赖于测试来保证在软件演化过程中软件源代码与其规范保持同步。在测试中,源代码与规范之间的一致程度通过测试成功率来衡量。然而,这一指标的实际价值取决于测试套件的质量,即其与规范和源代码的完整性。变异测试已被证明在评估测试套件的完整性方面是有效的;然而,以往相关的研究要么考虑变异源代码,要么考虑变异规范。我们的研究将探讨如何将基于变异代码和规范的方法结合起来,以在软件演化过程中保持两者的同步。我们的目标是贡献:(1) 一种简明的方法,在每次修改时衡量规范与代码之间的一致程度;(2) 一种技术,用于识别并可视化两者之间的细粒度追踪链接;(3) 一种基于检测到的偏差建议更新规范和代码的方法。
论文链接:https://doi.org/10.1145/3650212.3685556
软件工程师使用多种开发框架和运行时环境来开发、优化和部署深度学习(DL)模型。DL模型转换器能够在不同框架之间以及将模型移至运行时环境。转换错误会损害模型质量并扰乱部署。然而,DL模型转换器的故障特性尚不清楚,这增加了使用DL互操作性技术的风险。本文分析了DL模型转换器的故障。我们调查了软件工程师关于DL互操作性工具、用例和痛点的情况(样本数=92)。然后,我们对与主要互操作性工具ONNX相关的模型转换器故障进行了特征分析(在PyTorch和TensorFlow中的问题样本数=200)。最后,我们提出并测试了两个关于我们研究的故障结构原因的假设。我们发现,模型转换器的节点转换阶段占据了大约75%的缺陷报告,而33%的故障报告与语义不正确的模型有关。语义不正确模型的原因难以捉摸,但具有行为不一致性的模型共享操作符序列。我们的结果鼓励未来的研究,使DL互操作性软件更易于维护、扩展和验证。对行为容差和架构覆盖率指标的研究将是富有成果的。
论文链接:https://doi.org/10.1145/3650212.3680374
随着深度神经网络(DNN)的广泛使用,人们开始关注来自DNN的安全威胁,例如网络中的后门。虽然神经网络修复方法已被证明对修复DNN缺陷有效,但这些方法也被发现会产生偏置模型,导致不同类别之间的准确性失衡或削弱对抗性鲁棒性,使得恶意攻击者可以通过添加微小扰动来欺骗模型。为了解决这些挑战,我们提出了INNER,一种基于可解释性的神经修复方法。INNER利用神经元路由的概念来识别故障神经元,其中的可解释性技术模型探针用于评估每个神经元对神经网络不良行为的贡献。然后,INNER通过优化识别出的神经元来修复神经网络。我们在三种典型的应用场景下测试了INNER,包括后门攻击、对抗性攻击和错误预测。实验结果表明,INNER能够通过保证准确性、公平性和鲁棒性来有效地修复神经网络。此外,其他修复方法的性能也可以通过重新使用INNER识别的故障神经元得到提升,从而证明了所提出方法的普适性。
论文链接:https://doi.org/10.1145/3650212.3680330
软件测试技术,如符号执行,在路径爆炸方面面临重大挑战。渐近路径复杂度(APC)量化了这种路径爆炸的复杂性,但现有的APC方法一般不适用于跨过程函数。我们的新算法APC-IP能有效计算更广泛函数的APC,包括跨过程函数,不仅在速度上还在范围上都优于以前的方法。我们在现有软件Metrinome上实现了APC-IP,并针对C函数的基准进行了测试,将其与现有方法和基准方法进行比较,同时与符号执行引擎Klee的路径爆炸进行比较。结果表明,APC-IP不仅与先前的APC值一致,还在性能、可扩展性和处理复杂源码方面表现出色。它还提供了Klee探索路径数量的复杂度预测,扩展了APC指标的适用性,超越了以前的实现方法。
论文链接:https://doi.org/10.1145/3650212.3652118
神经网络(NN)已知存在多种缺陷,如对抗样本、后门和歧视问题,这些缺陷引起了对其可靠性的极大关注。尽管神经网络测试可以在很大程度上有效地揭示这些缺陷,但要理解它们在网络中的根本原因还需要进一步研究。在这项工作中,受传统软件调试中故障隔离思想的启发,我们提出了一种新颖的基于神经元隔离的统一框架来调试神经网络,简称IDNN。对于显示某些不良特性(如歧视)的有缺陷神经网络,IDNN的目标是识别出最关键和最小的神经元集,这些神经元是产生这些不良特性的原因。值得注意的是,这种隔离的目的是通过简单地“冻结”这些神经元,可以消除模型的不良特性,从而相比现有文献中计算昂贵的重新训练或权重优化,实现更加高效的模型修复。我们进行了广泛的实验,评估了IDNN在五个基准数据集上的多种神经网络结构的表现,以解决包括后门、不公平和弱类的三种调试任务。作为一个轻量级框架,IDNN通过成功识别和隔离一小部分负责的神经元,表现出卓越的泛化性能,在所有任务中均优于最先进的基线模型。
论文链接:https://doi.org/10.1145/3650212.3652132
见证验证是一种独立验证软件验证工具结果的形式化验证方法,主要分为两类:违例见证验证器和正确性见证验证器。用于 Java 的违例见证验证器包括 Wit4Java 和 GWIT,但目前没有专门的正确性见证验证器。为了解决这一空白,本论文提出了 Java Correctness-Witness Validator(JCWIT),这是第一个用于验证 Java 程序中正确性见证的工具。JCWIT 接受原始程序、规范和正确性见证作为输入。然后,它使用每个见证执行状态的不变量作为条件,将其以断言的形式合并到原始程序中,从而对其进行工具化。接下来,JCWIT 使用一个已建立的工具,即 Java 界限模型检查器(JBMC),来验证转换后的程序,从而检查正确见证结果的可复现性。我们在 SV-COMP ReachSafety 基准测试中评估了 JCWIT,结果表明 JCWIT 能够正确验证 Java 验证器生成的正确性见证。
论文链接:https://doi.org/10.1145/3650212.3685303
符号执行在智能合约的代码分析中已被证明是有效的。然而,对于智能合约,现有的符号工具使用多事务符号执行,这与传统符号工具不同,并且加剧了路径爆炸问题。在本文中,我们首先定量分析了多事务(TXs)符号执行的瓶颈,发现了TXs路径的冗余性。基于这一发现,我们提出了LENT-SSE作为智能合约推测符号执行的新推测启发式,它利用已执行和附近的TXs来跳过和重调用路径的SMT求解。LENT-SSE使用基于已执行事务的跳过算法,通过利用已执行路径和正在执行路径之间的冗余来减少SMT求解所需的时间。此外,LENT-SSE使用基于近事务的重调用算法来减少路径求解的错误跳过。对SmartBugs数据集的实验结果表明,LENT-SSE在不减少报告的错误的情况下,平均可以减少37.4%的总时间和65.2%的路径求解时间。在另一个包含1000个实际合约的数据集中,总时间和求解时间分别减少了38.1%和54.7%。
论文链接:https://doi.org/10.1145/3650212.3680303
金融科技软件在安全性和及时市场部署方面至关重要,这就使得根据监管业务规则进行自动验收测试显得尤为重要。然而,要理解这些规则的非结构化自然语言描述并编写全面的测试用例,本身需要人的智能。大语言模型(LLMs)的出现为自动生成测试用例带来了希望,因为它们具备自然语言处理能力。然而,依赖人为干预进行有效提示仍然限制了其效率。对此,我们提出了一种创新的全自动方法,从自然语言业务规则生成高覆盖率的测试用例。我们的方法将LLMs的多功能性与算法方法的可预测性无缝融合在一起。我们对预训练的LLMs进行微调,以提高信息提取的准确性,并通过算法生成全面的可测试场景。我们的原型系统LLM4Fin专为测试真实世界的股票交易软件设计。实验结果显示,LLM4Fin在业务场景覆盖率方面的表现优于最先进的大语言模型(如ChatGPT)和技能熟练的测试工程师,提升幅度高达98.18%,平均提升范围为20%到110%,代码覆盖率最大达到93.72%,同时将时间成本从20分钟减少到仅需7秒。这些结果为该框架的实际应用性和效率提供了有力的证据,标志着金融科技软件测试领域的重大进展。
论文链接:https://doi.org/10.1145/3650212.3680388
程序缩减是一项广泛使用的技术,通过自动最小化触发编译器错误的程序来提高调试编译器的效率。现有的程序缩减技术要么适用于多种语言(如 Perses 和 Vulcan),要么通过利用特定语言的知识专门针对某一特定语言进行优化(例如 C-Reduce)。然而,同时兼顾跨语言的通用性和针对特定语言的最优性尚未被深入探索。本文提出了 LPR,这是首个借助大型语言模型(LLMs)来对多种语言进行特定语言程序缩减的技术。其关键洞察在于利用诸如 Perses 这类语言通用的程序缩减器和 LLMs 学习到的特定语言语义。具体来说,语言通用的程序缩减器可以高效地将程序减少到适合 LLMs 处理的小尺寸;LLMs 可以通过学到的语义有效地转换程序,创造新的缩减机会,让语言通用的程序缩减器进一步缩减程序。我们在跨三种编程语言(即 C、Rust 和 JavaScript)的 50 个基准测试上的全面评估展示了 LPR 的实用性和优越性,相较于最先进的语言通用程序缩减器 Vulcan,LPR 更具优势。就有效性而言,LPR 分别在 C、Rust 和 JavaScript 的基准测试中生成的程序比 Vulcan 小 24.93%、4.47% 和 11.71%。此外,LPR 和 Vulcan 具有互补的潜力。对于 C 语言,应用 Vulcan 到 LPR 生成的输出可以达到与 C-Reduce 相当的程序大小。就用户感知的效率而言,LPR 在缩减大而复杂的程序时更高效,在完成 C、Rust 和 JavaScript 中所有基准测试时,分别比 Vulcan 少用了 10.77%、34.88% 和 36.96% 的时间。
论文链接:https://doi.org/10.1145/3650212.3652126
模型优化,如剪枝和量化,已成为在资源受限平台上部署深度学习(DL)模型时的实际标准化部署前阶段。然而,DL模型的复杂性往往导致模型优化器中出现不易察觉的错误,称为模型优化错误(MOBs)。这些MOBs的特点是涉及复杂的数据类型和DL模型固有的层结构,使得通过传统的静态分析和动态测试技术检测它们变得非常困难。在这项工作中,我们利用大型语言模型(LLMs)和提示技术来生成用于MOB检测的测试用例。我们探讨了LLMs如何通过散落的错误实例理解MOB领域知识,并推广以检测新的错误,这种范式我们称之为集中与扩散。我们从已知的MOB工件中提取领域知识,如它们的问题报告和修复情况,并设计知识感知的提示,引导LLMs生成有效的测试用例。代码结构和错误描述的领域知识提供了问题领域的精确深入的描绘,即集中,并提供了生成创新测试用例的启发方向,即扩散。我们的方法被实现为一个名为YanHui的工具,并与现有的基于少量示例的LLM模糊测试技术进行了对比。YanHui生成的测试用例显示出更强的能力,能够找到暴露MOBs所需的相关API和数据组合,生成语法正确代码的比例增加了11.4%,生成针对模型优化的特定代码比例增加了22.3%。YanHui检测到了17个MOBs,其中有五个是利用我们提示技术难以揭示的深层MOBs。
论文链接:https://doi.org/10.1145/3650212.3680383
变异测试对于确保软件质量至关重要。然而,等价变体的存在已知会引入冗余的成本和偏差问题,从而阻碍变异测试在实际使用中的有效性。尽管已经提出了众多等价变体检测(EMD)技术,但由于训练数据的稀缺以及在未见过的变体上推广时的挑战,它们表现出一定的局限性。近年来,大型语言模型(LLMs)被广泛应用于各种代码相关任务,并通过更准确地捕捉程序语义表现出优越的性能。然而,LLMs在等价变体检测中的表现仍然不清楚。在本文中,我们对3,302对方法级Java变体进行实证研究,以全面调查LLMs在等价变体检测中的有效性和效率。具体而言,我们评估了LLMs与现有EMD技术的性能比较,考察了LLMs的各种策略,评估了EMD技术之间的正交性,以及测量了训练和推理过程中的时间开销。我们的研究结果表明,基于LLM的技术显著优于现有技术(即,F1得分平均提升了35.69%),其中微调后的代码嵌入策略最为有效。此外,基于LLM的技术在成本(相对较低的训练和推理时间)和有效性之间提供了良好的平衡。基于我们的研究结果,我们进一步讨论了模型规模和嵌入质量的影响,并提供了几个有前景的未来研究方向。这项工作首次在等价变体检测中考察了LLMs,肯定了其有效性和效率。
论文链接:https://doi.org/10.1145/3650212.3680395
软件开发需要经过多个阶段的代码迭代,每一个阶段都需要进行调试、测试、本地化和修复漏洞。尽管已经开发了许多工具来自动化单独的任务,但集成和组合这些结果仍然需要软件开发人员投入大量的手动工作。此外,许多方法,例如自动化程序修复,基于特定设计的修复模板,这些模板无法推广到大多数复杂的软件项目中。为了应对这些挑战,我提出了一项新的研究计划,旨在学习软件变更的影响,以便在不局限于特定项目或特定编程语言的情况下定位和修复漏洞。此外,我的方法还可以用来预测软件变更的影响。我的初步结果表明,有可能成功地训练一个模型来分析Python软件变更及其影响,该模型能够生成80%正确的补丁,并以81%的准确率预测变更的效果。我的研究结果强调了学习软件变更影响对更好的软件开发的潜力。
论文链接:https://doi.org/10.1145/3650212.3685550
线性时态逻辑(LTL)可满足性检查具有很高的复杂性,即PSPACE-完全。最近,神经网络已被证明在多项式时间内近似检查LTL可满足性方面展现了潜力。然而,目前仍缺乏基于神经网络的方法来解决LTL可满足性检查并生成证据轨迹的问题,这种方法简单称为SAT-and-GET,即当检测到给定的LTL公式是可满足时,生成一条作为证据的可满足轨迹。在本文中,我们通过将LTL轨迹检查与神经网络推理相结合来解决SAT-and-GET问题。我们的主要理论贡献在于展示了一种经过精心设计的神经推理过程,称之为神经轨迹检查,该过程能够模拟LTL轨迹检查。我们提出了一种基于神经网络的方法VSCNet。依赖于可微分的神经轨迹检查,VSCNet能够通过梯度下降学习检查可满足性并生成轨迹。实验结果证实了VSCNet的有效性,显示出在轨迹生成方面,它显著优于现有最先进(SOTA)的基于神经网络的方法,平均在语义准确性上提升达41.68%。此外,与最先进的基于逻辑的方法nuXmv和Aalta相比,VSCNet在大规模数据集上的速度分别提升了平均186倍和3541倍。
论文链接:https://doi.org/10.1145/3650212.3680337
API在现代网络应用中越来越重要,使全球数百万用户能够访问数据。降低API缺陷(从而减少故障)的风险是关键,特别是出于安全性、可用性和可维护性的考虑。文档化API至关重要,因为这能让用户更好地理解它。此外,API测试技术通常需要正式的文档作为输入。然而,文档编写是一项耗时且易出错的任务,开发人员通常会忽视。自然语言处理(NLP)可以协助API的开发,因为最近的大型语言模型(LLMs)展示了基于其庞大训练数据自动化任务的卓越能力。数据挖掘也可以被利用,将分散在网络上的API信息综合起来。因此,我提出了我的博士研究项目,旨在探索使用与NLP相关的技术和数据挖掘来增强和验证API。此博士研究项目的研究问题包括:(1)哪些类型的API可以从NLP和数据挖掘的帮助中受益?(2)可以用这些方法解决哪些API问题?(3)这些方法(即LLMs)在辅助API方面的效果如何?(4)这些方法在辅助API方面的效率如何(即时间和成本)?
论文链接:https://doi.org/10.1145/3650212.3685554
网络协议广泛应用于各种网络设备中,使得其实现的安全性至关重要。协议模糊测试在发现这些实现中的漏洞方面展现了潜力。然而,传统的方法通常需要对目标实现进行插桩,以提供指导,这种方法具有侵入性,增加了开销,并且可能妨碍黑盒测试。本文介绍了Logos,这是一种利用非侵入性运行时日志信息进行模糊测试指导的协议模糊测试工具。Logos首先对非结构化日志进行标准化,并将其嵌入到高维向量空间中进行语义表示。然后,Logos过滤语义表示并动态维护语义覆盖率,以绘制已探索的空间,为定制化指导提供依据。我们在八种广泛使用的知名协议实现上评估了Logos。结果表明,与现有的侵入性或专家知识驱动的协议模糊测试工具相比,Logos在24小时内实现了26.75%-106.19%的更高分支覆盖率。此外,Logos在这些重要的协议实现中暴露了12个安全关键漏洞,其中9个已分配了CVE编号。
论文链接:https://doi.org/10.1145/3650212.3680394
尽管有许多自动化的无障碍测试解决方案可用,许多网站上仍然存在无障碍问题。此外,对于现有无障碍测试工具的有效性缺乏系统性的评估。为了解决这一问题,我们提出了第一个变异分析框架,称为Ma11y,旨在评估网页无障碍测试工具。Ma11y包含25个故意违反各种无障碍原则的变异操作符,并且具有一个自动化的预言机,用于确定测试工具是否检测到变异。对真实网站的评估展示了这些变异操作符的实际适用性以及框架评估工具性能的能力。我们的结果表明,当前的工具无法识别近50%的框架注入的无障碍缺陷,这凸显了开发更有效的无障碍测试工具的必要性。最后,这个框架的准确性和性能证明了其在实际环境中无缝和自动应用的潜力。
论文链接:https://doi.org/10.1145/3650212.3652113
作为最大的包注册表,Node Package Manager (NPM) 最近成为了各种供应链攻击的主要目标,并且充斥着大量恶意包,对最终用户构成了重大安全风险。基于学习的方法在适应各种类型的攻击方面表现出令人鼓舞的性能。然而,这些方法存在两个主要限制。首先,它们通常利用元数据特征或在包级别提取的粗粒度代码特征,而忽略了复杂的代码语义。其次,用于训练模型的数据集通常在数量和多样性上缺乏变化,因此无法检测到重要类型的攻击。为了解决这些问题,我们引入了 Maltracker,这是一种基于学习的 NPM 恶意软件追踪器,基于由大型语言模型(LLM)增强的数据集提取细粒度特征。首先,Maltracker 构建精确的调用图,以提取可到达预定义的敏感 API 的可疑函数,然后利用社区检测算法基于程序依赖图识别可疑代码片段,从中提取细粒度特征。为了解决第二个限制,我们使用先进的大型语言模型(LLM)扩展数据集,将其他语言(例如 C/C++、Python 和 Go)中的恶意函数翻译为 JavaScript。评估结果显示,与最先进的基于学习的方法相比,Maltracker 在包级别的 F1-score 提高了约 12.6%,在函数级别提高了 31.0%。此外,Maltracker 的关键组件都对其性能的有效性做出了贡献。最后,Maltracker 还检测到了 NPM 中的 230 个新恶意包,并收到了 61 封感谢信,其中一些信件包含现有工具无法检测到的新恶意行为。
论文链接:https://doi.org/10.1145/3650212.3680397
微服务韧性,即微服务从故障中恢复并继续提供可靠且响应迅速的服务的能力,对于云供应商来说非常重要。然而,目前的做法依赖于针对特定微服务系统手动配置的规则,鉴于微服务的大规模和高度动态性,这导致了劳动密集型和灵活性问题。我们需要一种更省力和多功能的解决方案。我们的洞察是,韧性部署可以有效防止从系统性能指标到用户感知指标的退化传播,而后者直接影响服务质量。换句话说,非韧性部署中的故障会影响这两种类型的指标,从而导致用户不满意。基于此思路,我们提出了MicroRes,这是第一个通过退化传播索引实现的多功能微服务韧性分析框架。MicroRes首先向微服务注入故障并收集可用的监控指标,然后根据这些指标对整体服务退化的贡献进行排序。它通过退化从系统性能指标传播到用户感知指标的程度来生成韧性指数。较高的退化传播表明较低的韧性。我们在两个开源和一个工业微服务系统上评估了MicroRes。实验结果表明,MicroRes能够高效且有效地分析微服务的韧性。我们还展示了MicroRes在生产环境中的实际使用情况。
论文链接:https://doi.org/10.1145/3650212.3652131
在提升智能合约应用的背景下,优先考虑其安全性变得至关重要。智能合约被利用通常会导致显著的财务损失,确保其安全性绝非易事。与导致程序崩溃不同,大多数针对链上智能合约的攻击旨在引起财务损失,这被称为“获利性利用”。这些攻击通过构造看似无害的输入,试图额外获取利润或损害他人的利益。然而,由于链上智能合约的调用链复杂性以及需要有效的预言机来实现获利性利用,因此智能合约模糊测试在发现获利性利用方面效率低下、效果不佳。在本文中,我们提出了Midas,一个新颖的反馈驱动模糊测试框架,有效地挖掘链上智能合约中的获利性利用。Midas 由两个模块组成:多样性有效性模糊测试和获利性交易识别。多样性有效性模糊测试模块通过应用两个航点来高效生成有效交易,从而解决链上智能合约调用链的复杂性问题。获利性交易识别模块通过应用差异分析有效识别获利性利用,从而克服了特设预言机的局限性。对链上智能合约的评估显示,Midas 有效识别了40个真实的利用实例,准确率为80%,在效率和效果方面都优于业界先进工具(如 ItyFuzz 和 Slither)。特别是,Midas 有效挖掘了五个未知的高价值智能合约利用,其中两个已被其去中心化应用(DApp)开发者确认。
论文链接:https://doi.org/10.1145/3650212.3680321
最近的研究表明,部署在设备上的深度学习(DL)模型(如TensorFlow Lite (TFLite))可以轻易地从实际应用和设备中被攻击者提取,从而产生各种对抗性攻击和其他攻击。尽管保护部署在设备上的DL模型已引起越来越多的关注,但现有的方法尚无法完全防止这些攻击。传统的软件保护技术已被广泛探索。如果设备上的模型可以使用纯代码(如C++)实现,那么就有可能重用现有的稳健软件保护技术。然而,由于DL模型的复杂性,目前没有自动方法可以将DL模型转换为纯代码。为了解决这一问题,我们提出了一种新方法,CustomDLCoder,用于自动提取设备上的DL模型信息,并为各种DL模型合成定制的可执行程序。CustomDLCoder首先解析DL模型,提取其后端计算代码,配置提取的代码,然后生成一个定制的程序来实现和部署DL模型,而无需明确的模型表示。合成的程序隐藏了DL部署环境中的模型信息,因为它不需要保留明确的模型表示,从而防止了对DL模型的许多攻击。另外,它通过删除模型解析和预处理步骤,仅保留数据计算过程,从而提高了机器学习性能。我们的实验结果表明,CustomDLCoder通过禁用设备上的模型嗅探,提高了模型的安全性。与原始设备平台(即TFLite)相比,我们的方法在x86-64和ARM64平台上的模型推理速度分别加快了21.0%和24.3%。最重要的是,它在x86-64和ARM64平台上的内存消耗分别显著减少了68.8%和36.0%。
论文链接:https://doi.org/10.1145/3650212.3652119
随着WebAssembly(Wasm)在性能关键和安全敏感任务中的逐渐普及,对WebAssembly程序理解和逆向工程的需求也在不断增加。最近的研究引入了基于机器学习(ML)的WebAssembly逆向工程工具。然而,任务特定机器学习解决方案的泛化仍然具有挑战性,因为其有效性依赖于大量高质量任务特定标注数据的可用性。此外,以往的研究仅使用从WebAssembly中提取的特征来训练模型,忽略了对应源代码及其文档中存在的高级语义。考虑到现有的丰富带有文档的源代码可以编译成WebAssembly,我们提出同时学习这些代码及其文档的表示,并利用它们之间的相互关系来实现更有效的WebAssembly逆向工程。
在本文中,我们介绍了WasmRev,这是首个用于WebAssembly逆向工程的多模态预训练语言模型。WasmRev通过自监督学习在包含源代码、代码文档和编译后的WebAssembly的大规模多模态语料库上进行预训练,不需要标注数据。WasmRev结合了三个定制的多模态预训练任务,以捕捉WebAssembly的各种特性和跨模态关系。WasmRev只需训练一次即可生成通用表示,通过少量标注数据的微调可以广泛支持WebAssembly逆向工程任务,提高数据效率。我们将WasmRev微调至三个重要的逆向工程任务:类型恢复、函数目的识别和WebAssembly摘要生成。我们的结果表明,WasmRev在多模态样本语料库上预训练,为这些任务建立了坚实的基础,实现了高任务准确度,并且在WebAssembly逆向工程方面性能优于现有的最先进的机器学习方法。
论文链接:https://doi.org/10.1145/3650212.3652141
随着过去十年中安卓应用研究的繁荣,许多静态分析技术被提出来。这些技术一般旨在处理安卓应用中的DEX字节码。除了DEX字节码,原生代码(通常用C/C++编写)在现代安卓应用中也很普遍,但大多数现有的分析框架通常忽略对其的分析。尽管最近有一些工作尝试处理原生代码,但它们在可扩展性和准确性方面存在问题。在本文中,我们提出了NativeSummary,一种新颖的安卓应用跨语言静态分析框架,具有高准确性、可扩展性和兼容性。我们的核心思想是提取原生二进制代码的语义摘要,然后将JNI接口函数的常见使用模式转换为Java字节码操作,并将原生库函数调用转换为字节码调用。通过这些努力,我们可以在不改变现有Java静态框架的固有逻辑的情况下,赋予它们跨语言数据流分析的能力。广泛的评估表明,NativeSummary在准确性、可扩展性和兼容性方面优于现有最先进技术。NativeSummary为跨语言分析的前景提供了新思路,数千项现有的应用分析工作可以在几乎不费力的情况下在NativeSummary的基础上得到提升。
论文链接:https://doi.org/10.1145/3650212.3680335
本文研究了神经元丢弃作为深度神经网络(DNN)的后处理偏差缓解方法。神经驱动的软件解决方案越来越多地应用于社会关键领域,这些领域存在显著的公平性影响。虽然DNN在从数据中学习统计模式方面表现出色,但它们可能会编码和放大历史偏见。现有的偏差缓解算法通常需要修改输入数据集或学习算法。我们认为流行的丢弃方法可能是一种有效且较少侵入的方法,可以在推断过程中提高预训练DNN的公平性。然而,找到理想的神经元丢弃集合是一个组合问题。我们提出了NeuFair,一种通过推断过程中的丢弃来缓解预训练DNN不公平性的后处理随机算法家族。我们的随机搜索是以最小化歧视并保持模型效用为目标指导的。我们展示了NeuFair在提高公平性(高达69%)方面的效率和有效性,并且对模型性能的损害极小或没有。我们提供了这些现象的直观解释,并仔细研究了NeuFair各种超参数对结果的影响。最后,我们在实证和概念上将NeuFair与不同的最先进偏差缓解器进行了比较。
论文链接:https://doi.org/10.1145/3650212.3680380
测试不稳定性是指与代码变化无关的构建行为的不确定性,是交付可靠软件的主要且持续的障碍。为自动修复测试不稳定性的技术很少,且这些技术专门用于修复顺序依赖(OD)或实现依赖(ID)的不稳定性。此外,这些技术都是符号方法,即,它们利用程序分析来检测和修复已知的测试不稳定性模式和根本原因,无法泛化。为了弥合这一差距,我们提出了FlakyDoctor,这是一种神经符号技术,结合了大型语言模型(LLM)的泛化能力和程序分析的严谨性,来修复不同类型的测试不稳定性。我们使用873个已确认的不稳定测试(332个OD和541个ID)来自243个真实项目进行了广泛评估,证明了FlakyDoctor修复不稳定性的能力,分别达到了57%(OD)和59%(ID)的成功率。与三种不同的测试不稳定性修复方法相比,FlakyDoctor能修复比DexFix多8%的ID测试,比ODRepair多12%的OD不稳定测试,比iFixFlakies多17%的OD不稳定测试。不论底层LLM如何,FlakyDoctor的非LLM组件对整体性能贡献为12%-31%,即,虽然FlakyDoctor的部分力量来自于使用LLM,但仅靠LLM无法在真实项目中单独修复不稳定测试。使得该技术优于关于测试不稳定性缓解和程序修复的相关研究的一个重要原因是,它在真实项目中修复了79个此前未修复的不稳定测试。我们为所有的案例提交了带有对应补丁的拉取请求;在提交时,已有19个被接受并合并。
论文链接:https://doi.org/10.1145/3650212.3680369
自动化程序修复旨在自动化漏洞修正,从而减轻手动调试的负担,这在软件开发和维护中起着至关重要的作用。最近的研究表明,基于学习的方法在性能上超越了传统的APR技术(例如,基于搜索的APR)。现有的基于学习的APR技术主要集中在将程序修复视为翻译任务或填空任务。据我们观察,前者主要强调语句级修复,而后者则侧重于符号级修复。然而,在实际情况下,补丁可能会以多种修复粒度出现,包括语句、表达式或符号级别。因此,仅从单一粒度生成补丁不足以应对现实世界的缺陷。基于这一观察,我们提出了Mulpor,一种多粒度补丁生成方法,旨在解决现实世界漏洞的多样性问题。Mulpor由三个组件组成:语句级、表达式级和符号级生成器,每个生成器都经过预训练,以在其各自的粒度生成正确的补丁。该方法包括从不同粒度生成候选补丁,然后基于启发式方法重新排序以优先考虑补丁。在Defects4J数据集上的实验结果表明,Mulpor在Defects4J-v1.2上正确修复了92个漏洞,比之前最先进的NMT风格的Rap-Gen和Cloze风格的GAMMA分别提高了27.0%(20个漏洞)和12.2%(10个漏洞)。我们还研究了Mulpor在修复漏洞上的泛化能力,结果显示相比最先进的漏洞修复方法,正确修复的补丁数量显著增加了51%。本文强调了在程序修复技术中考虑多种粒度的重要性,以制定全面的策略来应对现实世界中软件缺陷的多样性。本文提出的Mulpor在各种程序修复场景中实现了有效且多样化的漏洞修复,展示了令人鼓舞的结果。
论文链接:https://doi.org/10.1145/3650212.3680381
过大的类包含多个职责,难以理解和维护。为了解决这个问题,已经提出了几种提取类(Extract Class)重构工具,它们采用一个两阶段过程:首先识别适合提取的字段或方法,然后实现重构的机制。这些工具传统上会生成一个类内依赖图,以分析类结构,并基于此图应用硬编码规则来发现重构机会。然而,基于图的方法主要揭示成对实体之间的直接的“一对一”关系。这种视角是有限的,因为它忽视了实际类中普遍存在的复杂的“一对多”依赖关系。这种狭窄的关注点可能导致的重构建议与开发人员的实际需求有所偏离。为弥补这一差距,我们的论文利用类内依赖超图的概念来建模“一对多”的依赖关系,并提出了一种基于超图学习的方法,命名为HECS,以建议提取类重构机会。对于每个目标类,我们首先构建其类内依赖超图,并使用预训练的代码模型为节点分配属性。所有这些赋值超图都被输入到一个增强的超图神经网络中进行训练。利用这个训练好的神经网络及一个大型语言模型(LLM),我们构建了一个重构建议系统。我们在一个大规模数据集上训练了HECS,并在两个实际数据集上进行了评估。结果显示,与包括JDeodorant、SSECS和LLMRefactor在内的三种最先进的重构工具相比,HECS在精度上提高了38.5%,召回率提高了9.7%,F1度量上提高了44.4%,对64%的参与者更有用。结果还揭示了一些实用的建议和新的见解,这对现有的提取相关重构技术有益。
论文链接:https://doi.org/10.1145/3650212.3680379
尽管大型语言模型(LLMs)在代码生成方面取得了显著进展,其生成错误代码的倾向却对采用LLM生成的程序构成了重大挑战。这个问题主要源于在代码生成过程中依赖自然语言描述作为非正式的判定标准。当前的解决策略包括从多个LLM生成的备选程序中选择最佳的一个,判断标准是它们在LLM生成的测试套件上的执行结果的一致性。然而,这种方法存在重要的局限性:(1) LLM往往生成冗余的测试或那些无法区分正确与错误解决方案的测试,(2) 所用的一致性标准,如多数投票,因缺乏透明的选择理由而无法赢得开发者的信任。在这项工作中,我们提出了一种通过使用LLM作为测试判定标准来提升LLM生成代码质量的新视角。我们的方法基于实验确认的观察结果,即LLM在从多种选择中选出正确输出时作为判定标准更为有效。利用这一见解,我们首先生成区分输入,这些输入捕获了从LLM抽取的程序的语义差异,并记录这些程序在这些输入上的输出。然后,一个LLM根据自然语言问题描述,从这些输出中选择最可能正确的输出。我们在一个工具LLMCodeChoice中实现了这一想法,并评估了其在生成和选择独立程序方面的准确性。我们的实验表明,相对于最新的CodeT,LLMCodeChoice在HumanEval和MBPP基准测试中将pass@1指标提升了3.6-7%。更有趣的是,所选择的输入输出规范帮助我们发现了任务描述中的不完整和模糊之处,并识别出基准测试中的错误的基准实现。
论文链接:https://doi.org/10.1145/3650212.3680308
广泛使用的基于编译器的工具(CBT),如静态分析器,使用编译器内部的数据结构处理输入源代码。通过注入编译过程,CBT可以和编译器一起调用。然而,由于运行各种CBT的不便、因干扰编译器导致的意外失败及编译依赖关系下的效率下降,这种方法很少是最佳实践。为填补这一空白,我们提出了Panda,一个高效的C/C++ CBT调度器。Panda以与编译过程无关的方式执行各种CBT,以避免与构建系统的相互干扰,并基于估算的最长执行时间并行处理以提高执行效率。评估表明,与编译耦合执行相比,Panda可以减少19%-47%的总执行时间,并在64个并行工作者的情况下实现平均39.03×-52.15×的加速。
论文链接:https://doi.org/10.1145/3650212.3685311
开源软件(OSS)的漏洞日益普遍,强调了安全补丁的重要性。然而,在广泛使用的安全平台如NVD中,大量CVE记录仍然缺乏与补丁的追踪链接。虽然已经提出了基于排名的方法来进行安全补丁追踪,但它们严重依赖于在单步框架中手工设计的特征,这限制了其有效性。在本文中,我们提出了PatchFinder,一个具有端到端相关性学习的两阶段框架,用于更好地追踪安全补丁。在初始检索阶段,我们使用了混合补丁检索器,基于代码更改和CVE描述考虑了词汇和语义匹配,通过提取那些与CVE描述相似的提交来缩小搜索范围。随后,在重排序阶段,我们设计了一个在监督微调范式下的端到端架构,以学习CVE描述和提交之间的语义相关性。通过这种方式,我们可以根据它们的相关性得分自动对候选项进行排名,同时保持较低的计算开销。我们在532个开源项目的4,789个CVE上评估了我们的系统,结果非常有前途:PatchFinder实现了80.63%的Recall@10和0.7951的平均互惠排名(MRR)。此外,所需的Manual Effort@10减少到2.77,比现有领先方法提高了1.94倍。在实际应用PatchFinder时,我们最初识别了533个补丁提交,并将其提交给官方,其中482个已被CVE编号管理机构确认。
论文链接:https://doi.org/10.1145/3650212.3680305
近年来,随着强化学习取得巨大成就,对于顺序决策的机器学习模型的兴趣大幅增加。伴随着这些科学突破,研究人员致力于开发自动化功能测试方法,以在黑箱马尔可夫决策过程中发现故障。Pang等人在ISSTA 2022会议上提出了一种名为MDPFuzz的黑箱模糊测试框架。该方法包含一个模糊测试器,其主要特点是使用高斯混合模型(GMM)来计算测试输入的覆盖率,即已经观察到其结果的可能性。这种通过覆盖率评估进行的指导旨在在测试和故障发现过程中促进新颖性。Pang等人通过四个使用案例评估了他们的工作,比较了在有和没有GMM指导的情况下进行十二小时测试活动后发现的故障数量(消融研究)。
在本文中,我们验证了原始论文的一些关键发现,并通过再现和复制探讨了MDPFuzz的局限性。我们重新实现了提出的方法,并在一个大型研究中评估了我们的复制工作,该研究扩展了原来的四个使用案例,并增加了三个新的使用案例。此外,我们将MDPFuzz及其消融版本与随机测试基线进行了比较。我们还评估了覆盖指导对于不同参数的有效性,这是原始评估中未曾进行的。尽管进行了参数分析,但与Pang等人的原始结论不同,我们发现上述消融模糊测试器在大多数情况下优于MDPFuzz,并且得出结论认为所提出的覆盖模型并未导致发现更多的故障。
论文链接:https://doi.org/10.1145/3650212.3680382
我们介绍了PolyTracker,一个针对整个程序和整个输入的动态信息流追踪(DIFT)框架。给定一个兼容LLVM的代码库或一个已转换为LLVM中间表示(IR)的二进制文件,PolyTracker会进行编译,并添加静态插装。插装后的程序运行时会有适度的性能开销,但会额外输出一个共设计的TDAG(污染方向无环图)格式的运行时追踪工件。TDAG可以进行各种分析后处理,包括在程序执行过程中追踪每个输入字节。TDAG可以通过对输入语料库运行程序生成,或通过使用随机输入生成器(如模糊测试器)生成。PolyTracker的追踪记录(TDAG)不仅对较小规模的DIFT提供非常局部、针对性的动态程序分析有用;TDAG主要用于整个程序的运行时探索和错误发现、程序运行之间的精细信息流对比以及相同输入规范的不同实现的比较,而无需模拟和插装整个运行环境。为了提高用户友好性和再现性,软件库提供了一些PolyTracker插装的流行开源软件项目构建示例。我们还提供了一个Python编写的分析库和REPL,用于帮助用户操作TDAG。
论文链接:https://doi.org/10.1145/3650212.3685313
自动化测试生成可以帮助开发人员编写高质量的软件测试,同时减少编写测试代码所需的手工工作量。尽管近50年来在自动化测试生成方面进行了大量的研究,但对于实践者对自动化测试生成工具的期望以及现有研究是否满足其需求仍然缺乏清晰的认识。为了解决这一问题,我们采用混合方法来深入了解实践者对自动化测试生成的期望。我们首先通过对13位专业人士的半结构化访谈进行定性分析,然后对来自五大洲46个国家的339位实践者进行定量调查。接着,我们对2022年至2024年(过去三年)的顶级会议论文进行文献回顾,并将当前的研究发现与实践者的期望进行比较。通过这次比较,我们提出未来的研究方向,以帮助研究人员缩小自动化测试生成研究与实践者期望之间的差距。
论文链接:https://doi.org/10.1145/3650212.3680386
静态分析技术在检测缓冲区溢出方面仍然难以应对数百万行代码的可扩展性,同时还要保持足够的准确性以达到可接受的误报率。缓冲区溢出的检查需要对堆的可达性和数值关系进行推理,而这两者是相互依存的。现有技术为了解决这种依赖循环问题,要么牺牲了精度,要么牺牲了效率,因为它们在推理符号堆位置(即可能具有符号数值偏移的堆位置)方面存在局限性。一个符号堆位置可能与大量其他堆位置别名关联,导致堆状态的离析,这尤其难以精确推理。鉴于堆和数值推理的固有困难,我们在分析中引入了不相交假设,通过缩小程序状态空间,使涉及内存访问的所有符号位置彼此不相交。不相交的属性允许在符号堆位置进行强更新,通过在堆推理中结合数值信息显著提高精度。此外,它有助于设计一种组合分析以提高可扩展性,其中可以有效生成和重用紧凑且精确的函数摘要。我们在静态缓冲区溢出检测器Cod中实现了这一理念。将其应用于大型的、真实世界的软件如PHP和QEMU时,我们发现了29个缓冲区溢出漏洞,误报率为37%,而分析数百万行代码的项目可以在四小时内成功完成。
论文链接:https://doi.org/10.1145/3650212.3652110
反应式编程在数据项出现时做出反应,而不是等待它们完成。这个编程范式在异步和事件驱动的场景中被广泛使用,比如 Web 应用程序、微服务、实时数据处理、物联网、互动用户界面以及大数据。正确使用反应式编程,可以在不增加资源使用的情况下提供更高的响应性。然而,这也需要对异步和非阻塞编码有深入的理解,对新手开发者来说,这是一种学习曲线。在本文中,我们分析了反应式应用程序中报告的问题并探索了相应的解决方案。我们的研究结果揭示了:(1) 与其他类型的错误相比,开发者往往不修复或忽略反应性错误,(2) 这种倾向在阻塞调用错误上最为显著——这些错误会阻塞程序的执行,等待操作(通常是 I/O 操作)完成,从而浪费 CPU 和内存资源。为了改善此类阻塞错误的调试实践,我们开发了一种基于模式的主动程序修复技术,并获得了 30 个补丁,我们将这些补丁提交给开发者。此外,我们假设反应性错误的低补丁接受率是由于评估这些补丁的难度所致。这与功能性错误形成对比,功能性错误的补丁通过运行测试用例可以评估其正确性。为了验证我们的假设,我们将补丁分为两个组:一个有性能改进证据,另一个没有。结果表明,提交时附有性能改进证据的补丁更有可能被接受。
论文链接:https://doi.org/10.1145/3650212.3680319
定向灰盒模糊测试(DGF)是一种高级安全测试技术,专门设计用于引导模糊测试工具朝向软件程序内的预定义目标点。为了提高其在多个目标上的可扩展性,最近的DGF方法优先选择那些基于更精确距离度量接近目标的种子,并动态丢弃已经充分探索的目标,从而同时朝向所有目标前进。然而,并非所有目标都具有同等的重要性,特别是在面对大型目标集时。因此,目前那些盲目追踪所有目标的方法会把计算资源从关键目标上分散开来,从而降低触发目标的整体效率。在本文中,我们提出了Prospector,这是一种能够处理大规模目标集的新型DGF方法。Prospector采用迭代过程来集中关注一组“重点目标”。为了动态维护这些目标,Prospector提出了一种更细粒度的策略,考虑了目标的漏洞模式和测试充分性。随后,Prospector通过在探索-利用调度、种子选择和字节调度方面优化策略,进一步加强了对“重点目标”的模糊测试方法。我们在24个程序上评估了Prospector,将所有消毒器标签设为目标。实验结果显示,Prospector比AFL++、WindRanger、ParmeSan和FishFuzz分别快125、141、84和100次触发漏洞。在目标集最大的程序组中38个独特的漏洞中,Prospector比其他模糊测试工具更快复现了18个(47.37%)已存在漏洞。Prospector还在4个实际程序中发现了6个新漏洞,并获得了5个CVE编号。
论文链接:https://doi.org/10.1145/3650212.3680365
某些软件系统可以在无人干预的情况下运行。这类系统根据预设的规则、算法或数据工作。在本博士研究中,我们旨在探讨与此类系统相关的测试挑战,以GCC插件作为我们的使用案例。GCC编译器家族尤其作为C和C++的编译器而广为人知。GCC允许通过GCC插件API添加扩展。GCC插件在编译器级别执行,并在不同的编译阶段影响编译器。插件依赖于GCC的内部数据结构,比如AST、GIMPLE、Basic Blocks和RTL。因此,测试GCC插件的正确性是很困难的。确保插件的质量和正确性,测试是至关重要的。过去的尝试是不足的,它们依赖于从黑盒角度进行插件的测试。当仅从黑盒角度进行测试时,内部问题可能会被隐藏。为了保证质量,从白盒和黑盒两个角度对插件进行测试是必要的。我们打算揭示GCC插件测试的复杂性和挑战。我们提出了一个四层次的GCC插件测试方法。该方法包括静态和动态测试技术。主要的挑战是白盒测试。本研究旨在解决这个挑战,并通过利用日志集中于提高测试覆盖率来提供解决方案。我们打算将研究的发现应用于其他类似系统。
论文链接:https://doi.org/10.1145/3650212.3685557
不稳定测试通过在回归测试中表现出不确定行为,阻碍了开发过程。不稳定测试在某些运行中可能通过,而在其他运行中可能失败,即使运行相同的代码版本。这种非确定性的结果常常误导开发人员去调试代码中并不存在的错误。为了有效调试不稳定测试,开发人员需要重现它们。行业惯例是多次重新运行不稳定测试。然而,重新运行不稳定测试多次既耗时又耗费资源。本研究提出了一种快速且可靠的方法来重现依赖时间的GUI不稳定测试,这类测试被认为是Android应用中最常见的不稳定测试类型。我们的见解是,这类测试的不稳定性通常源于GUI数据上的事件竞争。根据故障的堆栈跟踪信息,我们的方法利用动态分析推断出可能导致故障的事件竞争,然后通过有选择地延迟这些竞争事件来重现故障。因此,我们的方法可以在最少的测试运行次数内有效地重现故障。对从22个广泛使用的Android应用中收集的80个依赖时间的不稳定测试进行的实验显示,我们的方法在重现不稳定测试故障方面效率很高。在这80个不稳定测试中,我们的方法平均在1.71次测试运行中成功重现了73个。此外,该方法表现出了极高的可靠性,能够连续20次运行中一致性地重现故障。
论文链接:https://doi.org/10.1145/3650212.3680377
持续集成(CI)运行时间过长,影响了软件开发人员获取及时反馈。测试用例优先级排序(TCP)旨在通过重新排序测试来更早地暴露故障,使更可能失败的测试更早运行。因此,TCP 对于长时间运行的测试套件尤为重要。尽管很多研究已经探讨了 TCP,但它们基于的是十多年前的过时 CI 构建,这些测试套件通常仅运行几分钟,或是基于无法访问的专有项目。在本文中,我们介绍了 LRTS,这是第一个包含长时间运行测试套件的数据集,包括来自 10 个大型开源项目的 21,255 个 CI 构建和 57,437 次测试套件运行,这些项目使用 Jenkins CI。LRTS 跨越了 2020 年到 2023 年,平均每次测试套件运行时间为 6.5 小时。在 LRTS 上,我们研究了 59 种领先的 TCP 技术的有效性,混杂测试失败对 TCP 的影响,以及没有先前失败记录的测试的 TCP。我们重新审视了之前的重要发现(确认了 9 项,推翻了 2 项),并确立了 3 项新发现。我们的结果显示,优先排序最近失败的快速测试表现最佳,优于复杂的技术。
论文链接:https://doi.org/10.1145/3650212.3680307
并发性非常有用,但推理并发程序的正确性比以往任何时候都更加困难。顺序一致性 (SC) 语义提供了推理正确性的能力,但这需要高昂的同步成本。C11 引入了一种内存模型,旨在解决这些问题,试图在性能和推理之间取得平衡。然而,这个模型比预期要复杂得多,事实证明即使是领域专家也难以应对。我们提出了一种方法,使程序员能够在不影响性能的情况下使用 SC 语义来推理正确性。通过证明程序的鲁棒性,它只能表现出 SC 行为,因此可以用 SC 语义来推理其正确性。
论文链接:https://doi.org/10.1145/3650212.3685549
最近,自动软件漏洞检测引起了越来越多的关注。基于预训练模型的方法在检测漏洞方面表现出比其他深度学习(DL)方法更优越的性能。然而,现有的基于预训练模型的方法通常在预测过程中采用代码序列作为输入,并可能忽视与漏洞相关的结构信息,这反映在以下两个方面。首先,它们往往无法推断出具有复杂逻辑的代码语句的语义,例如那些包含多个操作符和指针的语句。其次,它们难以理解各种代码执行序列,而这是精确漏洞检测所必需的。为了缓解这些挑战,我们提出了一种基于结构化自然语言注释树的漏洞检测框架,该框架基于预训练模型,命名为SCT。所提出的结构化自然语言注释树(SCT)基于抽象语法树(ASTs)整合了代码语句的语义和代码执行序列。具体而言,SCT包括三个主要模块:(1) 注释树构建,旨在通过首先结合大型语言模型(LLMs)生成注释,然后将注释节点添加到ASTs中,以增强模型推断代码语句语义的能力。(2) 结构化自然语言注释树构建,旨在通过将代码语法模板与注释树相结合,将代码执行序列明确地包含在内。(3) SCT增强表示,最终将构建的SCTs结合起来,以更好地捕捉漏洞模式。实验结果表明,SCT在FFMPeg+Qemu、Reveal和SVulD数据集上的F1得分分别提高了2.96%、13.47%和3.75%,优于最佳基线模型,包括预训练模型和LLMs。此外,SCT可以应用于不同的预训练模型,如CodeBERT和UniXcoder,其F1得分性能提高范围从1.37%到10.87%。
论文链接:https://doi.org/10.1145/3650212.3652124
有状态网络协议的实现必须跟踪交换消息的存在、顺序和类型。任何错误,即所谓的状态机错误,都会危及安全。SMBugFinder 提供了一个自动化框架,使用黑盒测试来检测网络协议实现中的这些错误。它将被测试的协议实现的状态机模型和方便指定为有限自动机的协议漏洞模式目录作为输入。然后,它生成在被测试实现中暴露目录中漏洞的序列。连接到挂载装置(harness)允许 SMBugFinder 验证这些序列。SMBugFinder 背后的技术在先前的工作中已经成功地在 DTLS 和 SSH 上进行了评估。在本文中,我们使用 EDHOC 协议作为示例,提供了对该工具的用户级视角。
论文链接:https://doi.org/10.1145/3650212.3685310
数据库管理系统(DBMSs)是许多企业应用的基础。由于DBMS的重要性,已经提出了各种测试技术来检测DBMS的错误。然而,为了触发深层错误,大多数现有技术都专注于生成冗长而复杂的查询,这给开发人员带来了调试的困难。因此,能够在不影响错误检测能力的情况下简化冗长SQL查询的SQL查询简化技术需求很高。为填补这一空白,我们引入了SQLess,这是一种创新方法,采用与方言无关的方式为各种DBMS高效且语义正确地简化SQL查询。与之前需依赖DBMS特定语法的工作不同,SQLess利用自适应解析器,利用错误恢复和语法扩展来支持多种DBMS方言。此外,SQLess还执行语义敏感的SQL查询修剪,利用别名和依赖分析,在保留触发错误能力的同时简化SQL查询。我们使用来自最先进数据库错误检测研究的两个数据集评估了SQLess,包括六种广泛使用的DBMS和超过32,000个复杂的SQL查询。结果表明,SQLess的性能显著优越,其平均简化率达到72.45%,比最先进的方法高出84.91%。
论文链接:https://doi.org/10.1145/3650212.3680317
跳转表是二进制代码中间接跳转的常见来源。解析这些间接跳转对于构建完整的控制流图至关重要,而控制流图是涉及二进制代码的大多数应用程序的首要步骤,包括二进制加固和插桩、二进制分析和漏洞发现的模糊测试、恶意软件分析以及逆向工程。现有的跳转表分析技术通常优先考虑性能而非健全性。虽然对于反编译等应用,缺乏健全性可能是可以接受的,但在二进制插桩应用中,它可能导致不可预见的运行时故障。因此,我们在本文中提出了SJA,这是一种新的跳转表分析技术,具有健全性和可扩展性。我们的分析使用了一种新颖的抽象域,以系统地跟踪计算出的代码指针的“结构”,而不是依赖以往工作中常见的语法模式匹配。此外,我们提出了一种边界分析方法,可以高效且无损地推理跳转表上下文中出现的等式和不等式关系。因此,我们的系统将未命中率比下一最佳技术减少了35倍。在基于F1-score的错误率评估中,我们的技术比最好的现有技术表现提升了3倍。
论文链接:https://doi.org/10.1145/3650212.3680301
张量操作对于各种任务至关重要,包括图像处理、深度学习和科学计算。硬件和软件社区都在努力提高张量处理的效率。这包括创建新硬件和开发领域特定语言 (DSL)。在这些社区之间的一个关键环节是编译器。在这项工作中,我们提出开发高效的编译器,将用通用语言编写的程序翻译成张量操作,使其能够从这些优化中受益。与传统的模式匹配方法不同,我们的方法使用程序合成和验证来找到语义等价的翻译。
论文链接:https://doi.org/10.1145/3650212.3685558
最近在深度神经网络(DNN)测试领域的努力通常使用触发错误的输入(ETIs)来量化DNN错误,并通过微调被测试的DNN来进行修复。本文揭示了ETIs在DNN测试中的陷阱。具体来说,单纯追求更多的ETIs会使测试活动陷入局部平缓区,在这些区域中使用少数固定的输入变换连续生成相似的ETIs。同样,虽然使用ETIs微调DNN可以修复暴露出的DNN误预测,但会削弱DNN对于某些输入变换的恢复能力。然而,由于以往研究中输入变换不够充分(通常少于10种),这些由ETIs引发的陷阱被忽略了。我们展示了在用更多且多样化的现实生活输入变换测试DNN时,这种欺骗现象的严重性会扩大。本文对ETIs在DNN测试中的陷阱进行了全面研究。我们首先在传统的DNN测试流程中增加了大量输入变换;这些新变换的正确性和有效性通过大规模人类研究得到验证。在此基础上,我们表明,无尽地追求ETIs不能缓解“测试陷阱”问题,并且削弱的恢复能力普遍出现在许多输入变换中。因此,我们提出了一种关于DNN错误的新颖且整体的视角:与其计算哪个输入触发了DNN误预测,我们记录哪种输入变换可以生成ETIs。这种变换的目标输入特性被称为错误属性(EP),记录一个DNN错误并指导DNN测试(即我们新的范式旨在寻找更多的EP而非ETIs)。评估显示,这种以EP为导向的测试范式显著扩展了DNN错误空间的探索范围。此外,用EPs微调DNN有效地提高了它们对不同输入变换的恢复能力。
论文链接:https://doi.org/10.1145/3650212.3680385
WebAssembly(Wasm)作为一种紧凑、快速且保证隔离的二进制格式,可以从40多种高级编程语言中编译。然而,Wasm二进制文件中的漏洞可能导致敏感数据泄露,甚至威胁其托管环境。为了识别这些漏洞,符号执行被广泛采用,因为它的健全性以及自动生成漏洞利用的能力。然而,现有的Wasm二进制文件的符号执行器通常是平台特定的,这意味着它们不能支持所有的Wasm特性。它们还可能需要大量的人工干预才能完成分析,并且在效率方面也存在问题。在本文中,我们提出了一种高效且功能全面的符号执行引擎,名为SeeWasm。与现有工具相比,我们证明SeeWasm支持全功能的Wasm二进制文件,无需进一步的人工干预,同时将分析速度提高了2到6倍。SeeWasm已被现有工作采用,用于在将一些知名的C、Go和SGX应用编译成Wasm二进制文件后,识别出30多个0-day漏洞和安全问题。
论文链接:https://doi.org/10.1145/3650212.3685300
对软件进行回归测试是一项重要但耗时的任务,特别是在用户界面(UI)测试的背景下,需要同时验证多个微服务。测试用例优先级排序(TCP)是一种成本高效的解决方案,通过安排测试用例的执行顺序来最大化某个目标函数,通常是为了提高故障检测率。虽然已经提出了多种TCP技术,但大多数都依赖于源代码信息,而源代码信息通常在UI测试中不可用。在本文中,我们引入了一种多目标优化方法来优先化UI测试用例,使用进化搜索算法和四种覆盖准则,以网页元素为优化问题的目标。我们的方法不需要源代码信息,通过AGE-MOEA和NSGA-II这两种进化算法进行评估,并与其他TCP方法在自收集的11个测试套件的数据集上进行比较。结果表明,我们的方法在检测平均故障百分比(APFD)和带成本的APFD(APFDc)方面显著优于其他方法,分别达到87.8%和79.2%的最高分。我们还引入了一个新数据集,并通过实证实验展示了我们的方法在现有方法上的显著改进。本文的贡献包括在TCP中应用网页分割、构建新的UI TCP数据集以及通过实证比较展示我们方法的改进。
论文链接:https://doi.org/10.1145/3650212.3680349
代码可执行性在软件调试和测试中起着至关重要的作用(例如,检测运行时异常或断言违规)。然而,代码执行,尤其是部分或任意代码执行,是一项非平凡的任务,因为存在缺失的定义和复杂的第三方依赖性。为了使部分代码(比如在网络上发布的代码片段或复杂软件项目中的代码片段)可执行,现有研究提出了一种机器学习模型来预测未定义的元素类型,并在执行中注入预定义的虚拟值。然而,由于其简单设计的虚拟值和无法持续学习的能力,这种工具的性能有限。在本文中,我们设计并实现了一种新颖的框架,名为SelfPiCo(自引导部分代码执行器),通过在交互循环中结合开源LLM(如Code Llama)来动态引导部分代码执行。具体来说,SelfPiCo利用少量示例的上下文学习和链式推理来基于对Code Llama模型的微调引发人类知识和逻辑推理。SelfPiCo从代码执行结果中不断学习,并逐步优化其预测。我们的评估结果显示,SelfPiCo能够执行开源代码和Stack Overflow片段中72.7%和83.3%的所有行,分别比最近的最先进工具Lexecutor高出37.9%和33.5%。此外,SelfPiCo通过执行来自八个GitHub软件项目和43个Stack Overflow帖子中的部分代码成功检测到了18个和33个运行时类型错误问题,展示了我们框架在实际应用中的实用性和潜在应用。
论文链接:https://doi.org/10.1145/3650212.3680368
自动化生成网页表单测试一直以来都是一个长期存在的挑战,这一挑战因为表单的固有以人为中心的设计及其复杂的、设备无关的结构而变得更加严峻。我们引入了一种创新方法,称为FormNexus,用于自动生成网页表单测试。该方法强调从个别表单元素及其关系中获取语义见解,利用文本内容、DOM树结构及视觉接近度。这些收集到的见解被转换为一种新的概念图,即表单实体关系图(FERG),它提供了对机器友好的语义信息提取。通过利用大型语言模型(LLMs),FormNexus采用了一种反馈驱动机制,根据实时表单提交响应生成和改进输入约束。此方法的最终结果是一组强大的测试用例,通过系统地使约束无效,确保对网页表单的全面测试场景。该研究通过将LLMs的能力与先进的语义推断方法相结合,弥合了现有自动化网页表单测试中的差距。我们的评估表明,结合GPT-4的FormNexus在表单提交状态覆盖率方面达到了89%,这一结果比性能最好的基线模型高出25%。
论文链接:https://doi.org/10.1145/3650212.3680332
模糊测试是一种发现漏洞的重要方法。传统的模糊测试在广泛的输入空间中进行,但它无法处理需要复杂和专门输入模式的系统。基于语法的模糊测试使用形式语法来塑造模糊器生成的输入。这种方法对于引导模糊器生成符合语法要求的复杂输入非常关键。然而,现有的方法对某些输入特征存在偏向,导致解决方案空间的很大部分得不到充分探索或被忽略。在本文中,我们回顾了最先进的方法,强调了基于语法的模糊测试的局限性,并首次提出将分布采样融入模糊测试的方法,并伴随着鼓舞人心的初步结果。这项工作可能代表在基于语法的模糊测试中实现全面输入空间探索的重要一步,对增强模糊测试目标的健壮性和可靠性具有重要意义。
论文链接:https://doi.org/10.1145/3650212.3685553
协调漏洞披露模型广泛应用于开源软件(OSS)组织,建议在公开披露漏洞信息之前静默解决漏洞。然而,OSS开发的本质公开性导致安全修复通常在漏洞正式披露前几周就已在代码库中公开。这段时间差对OSS用户构成重大安全风险,因为攻击者可能会在漏洞披露前发现修复并利用这些漏洞。因此,OSS用户迫切需要尽早察觉修复,以便在漏洞被利用之前解决它们。
为应对这一挑战,我们引入了EarlyVulnFix,这是一种旨在识别污染风格漏洞静默修复的新方法。污染风格漏洞是一类顽固的安全弱点,其中攻击者控制的输入未经适当清理就到达敏感操作(sink)。利用数据流和依赖分析,我们的工具区分了新引入代码和敏感操作(sink)之间的两种类型的连接,针对两种常见的修复场景进行了定制化。
我们的评估表明,EarlyVulnFix在F1得分方面大幅度超越了当前最先进的基准方法。此外,当应用于七个项目的最新700次提交时,EarlyVulnFix在相应的安全公告之前检测到了三个安全修复,这突显了其在识别未报告的漏洞修复方面的有效性。
论文链接:https://doi.org/10.1145/3650212.3652139
概念验证(PoC)对于确定软件中的漏洞至关重要。然而,仅依赖其进行漏洞的及时和完整修复是不够的,因为往往低估了漏洞的影响。漏洞影响反映出一个漏洞可能在根本原因导致的多个位置被触发,导致不同类型的漏洞(例如,use-after-free,heap-buffer-overflow)。目前的技术使用一种特定的覆盖引导策略通过模糊测试来发现漏洞影响:分配更多的资源给覆盖了漏洞代码区域的种子。这种方法可以利用单个PoC在短时间内生成包含不同漏洞影响的多个PoC。不幸的是,我们观察到现有技术仍然不可靠,主要是因为它们在深度和广度探索之间的时间平衡上失败了:(i)对崩溃区域后面的漏洞影响进行深入探索,以及(ii)在未到达区域一侧对漏洞影响进行广度探索。现有技术只关注一种探索或在不同阶段进行两种探索,导致精确性和效率低下。考虑到上述问题,我们提出了Sleuth,这是一种根据已知的单个PoC自动调查漏洞影响以增强漏洞修复的方法。我们在两个新概念上设计了Sleuth:(i)建立在一个模糊测试器上的双模式探索机制,旨在有效进行深度和广度探索。(ii)一个与双模式探索连接的动态可切换策略,促进漏洞影响调查的可靠性。我们使用50个已知的CVE对Sleuth进行了评估,实验结果表明Sleuth能够在86%的CVE中有效发现新漏洞影响,并比最先进的工具多发现1.5倍的漏洞影响。更进一步,Sleuth成功使用生成的新PoC确定了13个不完整的修复。
论文链接:https://doi.org/10.1145/3650212.3680316
契约设计是一种软件工程实践,程序员通过在程序元素上添加契约规范,明确表达对程序元素的使用者和提供者的期望。这种实践已经在高阶编程语言等各种上下文中得到了应用。然而,分布式演员程序中对契约的支持却有限。不幸的是,契约规范需要在程序执行时进行检查,这会引入大量的开销。为了应对此问题,软验证技术被提出来用于验证(部分)契约规范,但这些技术仅在顺序程序的上下文中得到了应用。因此,我们研究的目标有两个方面:设计用于分布式演员程序的契约语言,和开发用于其软验证的技术。在此背景下,我们提出一个工作计划和方法,并展示我们的初步结果。
论文链接:https://doi.org/10.1145/3650212.3685551
存储是一种持久性内存,其内容在不同程序执行之间保持不变。在区块链技术中,存储内容会被复制,并且在程序执行中会产生最大的成本(即“燃气费”)。存储成本是通过一个相当复杂的模型动态计算的,该模型为在执行过程中对存储键的第一次访问赋予更大的成本,并且根据访问是更改了相对于初始和先前内容的值与否,分别分配不同的写入成本。现有的燃气分析器往往假设所有情况下的最大成本,这是一种过于悲观的方法,因为成本高估可能会导致结果无用。挑战在于如何在保持准确性的同时,可靠地生成考虑到成本模型动态性的存储边界。我们的解决方案是使用现成的静态资源分析,但不过于假设最坏情况的成本,从而生成不完全准确的边界;然后,在后续阶段,通过一种基于Max-SMT的方法计算修正值以恢复边界的准确性。我们已经实现了该方法,并用它来提高两个以太坊燃气分析器gastap和asparagus的精度。在超过40万个函数上的实验结果显示,我们在存储边界的准确性上达到了显著提升,精度改进最高可达75%,最常见的改进在10-20%之间。
论文链接:https://doi.org/10.1145/3650212.3680352
GUI测试用例迁移是将GUI测试用例从源应用程序迁移到目标应用程序以测试特定功能的过程。然而,通过现有迁移方法获得的测试用例通常难以直接用于测试目标功能,通常需要额外的人工修改。这个问题可能会显著影响测试目标功能的有效性以及迁移方法的实际适用性。在本文中,我们提出了MigratePro,这是一种通过综合来自不同源应用程序的多个相同功能的测试用例来增强GUI测试用例迁移的首创方法。MigratePro的目标是生成需要较少人工干预的功能性测试用例。具体来说,对于目标应用程序中相同功能中的多个迁移测试用例,MigratePro首先将这些迁移测试用例相关的所有GUI状态合并为一个整体状态序列。然后,MigratePro根据整体状态序列组织迁移测试用例中的事件和断言,并努力移除应被移除的事件和断言,同时引入一些连接事件以使应被包含的事件和断言可执行。我们对30个应用程序、34个功能和127个测试用例的评估显示,MigratePro提高了三种代表性迁移方法(即Craftdroid、AppFlow和ATM)的能力,成功地将测试目标功能的效果分别提高了86%、333%和300%。这些结果强调了MigratePro在有效增强迁移方法方面的普适性。
论文链接:https://doi.org/10.1145/3650212.3680327
深度神经网络(DNN)作为安全关键系统中的关键组件被越来越多地部署。然而,由于缺少正式的数据前提条件规范,DNN组件的可信度仍不确定,这些数据前提条件对于确保可信的后置条件至关重要。在本文中,我们提出了一个基于猜测和验证的框架PreBoxes,用于自动综合生成足够的前提条件盒,以便DNN满足丰富的安全性和鲁棒性后置条件。该框架分为两个阶段:猜测阶段通过启发式方法生成潜在复杂的候选前提条件,而验证阶段则通过形式化保证来验证这些候选条件。整个框架支持自动且自适应的迭代运行,以获得更弱的前提条件。这些生成的前提条件可以用于保护DNN的安全性并增强DNN在应用中的可解释性。PreBoxes已经在超过20个模型上进行了评估,这些模型涉及4个基准的23个可信属性,并与现有的3种典型方案进行了比较。结果表明,PreBoxes不仅通常比其他方法推断出更弱的非平凡充分前提条件,而且还扩展了其处理复杂属性和非ReLU复杂结构网络的能力。
论文链接:https://doi.org/10.1145/3650212.3680393
浏览器负责管理和解释来自网络的各种数据。然而,尽管开发人员付出了大量努力,要完全消除如此复杂的软件中的潜在漏洞几乎是不可能的。虽然已经提出了一系列模糊测试技术来检测网络浏览器中的缺陷,但它们仍面临生成语义正确性低且多样性差的测试输入这一固有挑战。在本文中,我们提出了Tacoma,一种专为网络浏览器设计的新型模糊测试框架。Tacoma由三个主要模块组成:语义解析器、语义对齐器和输入生成器。通过利用细粒度语义对齐技术,Tacoma能够生成语义正确的测试输入,从而显著提高模糊测试工具触发深层浏览器状态的概率。特别是,通过在输入生成中整合范围感知策略,Tacoma能够处理异步代码生成,从而大幅增加生成测试输入的多样性。我们进行了广泛的实验,在三个生产级别的浏览器上评估Tacoma,即Chromium、Safari和Firefox。实证结果表明,Tacoma在代码覆盖和检测独特崩溃方面均优于最先进的浏览器模糊测试工具。目前,Tacoma已识别出32个此前未知的漏洞,其中10个已被分配了CVE编号。值得注意的是,Tacoma发现了Chromium中两个已存在十年未被检测到的漏洞。
论文链接:https://doi.org/10.1145/3650212.3680351
在深度学习(DL)模型开发生命周期中,审计潜在的未授权数据使用是出了名的具有挑战性的,即判断某些私人用户数据是否在未经授权的情况下被用于训练或微调DL模型。然而,这种数据使用审计对于响应可信人工智能的紧迫要求(如数据透明度)至关重要,这些要求在最近的AI规章或法律如《通用数据保护条例》(GDPR)和《欧盟人工智能法案》中被提倡和执行。在这项工作中,我们提出了TeDA,一个用于在DL模型开发过程中审计数据使用的简单且灵活的测试框架。给定一组要保护的用户私人数据(Dp),TeDA的直觉是应用成员推断(出于良好意图)来判断审计模型(Ma)是否可能使用了Dp进行训练。值得注意的是,为了显著暴露成员推断下的使用情况,TeDA通过边界搜索引导的不可察觉扰动基于Dp生成一个精心设计的测试套件Dt(我们称之为‘同位素’)。通过这个测试套件,TeDA然后结合假设检验采用成员推断来决定用户的私人数据是否被用于训练Ma,并提供统计保证。我们通过在数据敏感的面部识别和医疗诊断任务上针对各种模型架构和不同数据量进行了广泛的实验,评估了TeDA。TeDA在各种自适应策略(如剪枝和蒸馏)下表现出高可行性、有效性和鲁棒性。
论文链接:https://doi.org/10.1145/3650212.3680375
随着深度学习(DL)在安全关键领域的应用,系统地测试这些系统已经成为了关乎人类生命的重要问题。由于深度神经网络(DNNs)的数据驱动特性,测试的有效性与测试数据集的充分性密切相关。测试数据需要被标注,而这通常需要人工努力,有时还需要专业知识。DL系统测试人员的目标是通过高效利用资源,选择最有助于识别DNN模型弱点的测试数据。为了帮助实现这一目标,我们提出了一种基于元模型的测试数据优先级排序方法,该模型使用从其他基础模型输出的结果中获取的不确定性指标作为输入。整合不同的不确定性指标有助于克服这些指标各自的局限性,并在更广泛的场景中有效。我们训练元模型以预测某个测试输入是否会导致被测模型做出错误预测。我们使用流行的图像分类数据集和DNN模型进行了实验评估,以验证所提出的方法。实验结果表明,我们的方法有效地为测试数据集进行了优先级排序,并且在比较中优于现有的最先进的测试优先级排序方法。在实验中,我们通过生成包含和不包含分布外数据的测试数据集,从分布感知的角度评估了测试优先级排序方法。
论文链接:https://doi.org/10.1145/3650212.3680312
本文介绍了一个用于 Lincheck 的 IntelliJ IDEA 插件。Lincheck 是一个流行的用于测试 JVM 上并发数据结构的框架。Lincheck 框架自动生成并发场景,并使用模型检查器进行检查,提供一个详细的执行跟踪来重现检测到的错误。这个跟踪包含所有共享内存访问和同步事件。IntelliJ IDEA 插件提供记录和重放调试功能来研究执行跟踪,提供本地IDE调试体验。Lincheck 插件在失败的执行开始时暂停,并提供额外的面板来可视化失败的场景、执行跟踪以及数据结构的当前状态。使用者可以逐步浏览跟踪并重现错误,前进和后退,观察数据结构的变化。这些新颖的功能显著改善了调试过程,使得识别和修复复杂的并发性错误更加容易。
论文链接:https://doi.org/10.1145/3650212.3685301
图数据库管理系统(GDBMS)以图的格式存储数据,便于快速查询节点和关系。这种结构对社交网络和推荐系统等应用特别有利,因为这些应用通常涉及频繁的写操作,比如添加新节点、创建关系或修改现有数据,这些操作可能引入漏洞。然而,现有的GDBMS测试方法往往忽略了这些写操作的功能,未能检测出由此引发的漏洞。在本文中,我们介绍了GraspDB,这是首个专门为识别图数据库系统中与写操作相关漏洞而设计的变形测试方法。GraspDB采用了基于标记属性图同构(LPG同构)和标记属性子图同构(LPSG同构)关系的图状态持久性判定法。此外,我们还开发了三类变异规则,旨在涉及更多种类的写操作相关代码逻辑。GraspDB成功地在四个流行的开源图数据库引擎中检测出了77个独特的、此前未知的漏洞,其中58个漏洞已被开发者确认,43个漏洞已被修复,31个与写操作有关。
论文链接:https://doi.org/10.1145/3650212.3680311
图数据库系统(GDBs)支持高效地存储和检索图数据,已成为许多重要应用中的关键组件。许多广泛使用的GDBs利用Gremlin查询语言来创建、修改和检索图数据库中的数据,开发人员可以通过组合一系列Gremlin API来执行复杂查询。然而,GDBs的不正确实现和优化可能会引入逻辑错误,这可能导致Gremlin查询返回不正确的查询结果,例如遗漏图数据库中的顶点。本文中,我们提出了一种名为Query Disassembling (QuDi)的有效测试技术,能自动检测基于Gremlin的GDBs中的逻辑错误。给定一个Gremlin查询Q,QuDi将Q拆解成一系列原子图遍历TList,其执行语义与Q等效。如果Q和TList的执行结果不同,则揭示了目标GDB中的逻辑错误。我们在六个流行的GDBs上评估了QuDi,并在这些GDBs中发现了25个逻辑错误,其中10个已经被GDB开发人员确认是此前未知的错误。
论文链接:https://doi.org/10.1145/3650212.3680392
自动驾驶汽车(AV)利用人工智能来减少事故并提高燃油效率,同时与人类驾驶者共享道路。当前的自动驾驶汽车原型尚未达到这些目标,这凸显了改进开发和测试方法的必要性。自动驾驶汽车的测试实践在很大程度上依赖于模拟,但现有的自动驾驶工具主要集中在测试单一自动驾驶汽车实例或未考虑人类驾驶者。因此,它们可能会生成许多不相关的混合交通测试场景。Flexcrash平台解决了这些问题,通过允许生成和模拟混合交通场景,使测试人员能够识别现实的关键场景,交通专家创建新的数据集,监管者扩展消费者测试基准。
论文链接:https://doi.org/10.1145/3650212.3685299
尽管已经提出了许多自动化程序修复(APR)的方法,并且确实取得了显著的性能提升,但在修复需要分析和推理程序逻辑的错误方面,它们仍然存在局限性。最近,通过提示工程指导的大型语言模型(LLMs)因其强大的解决多种任务(包括修复错误)的能力,受到了广泛关注。然而,提示的质量将极大地影响LLMs的能力,手动构建高质量的提示是一项代价高昂的工作。为了解决这一限制,我们提出了一种基于自导LLM的自动化程序修复方法,ThinkRepair,分为两个主要阶段:收集阶段和修复阶段。前一个阶段通过链式思维(CoT)提示指导LLMs自动收集构成预先修复知识的各种思维链。后一个阶段则通过首先选择少样本学习的示例,然后自动与LLMs交互,必要时附加测试信息反馈,针对错误进行修复。在两个广泛研究的数据集(Defects4J和QuixBugs)上通过与12种最先进的APR进行比较评估,结果表明ThinkRepair在修复错误方面具有优先性。值得注意的是,ThinkRepair在Defects4J V1.2上修复了98个错误,并相对于基线方法提高了27%至344.4%。在Defects4J V2.0上,ThinkRepair比SOTA APRs多修复了12至65个错误。此外,ThinkRepair在QuixBugs上的改进也相当明显(最多对Java修复31个错误,对Python修复21个错误)。
论文链接:https://doi.org/10.1145/3650212.3680359
静态调用图是程序分析的基础构件。然而,在构建调用图和使用特定语言特性时的差异可能导致不准确性和不精确性。调用图分析通常使用精确度和查全率来评估,但在现实世界的程序中,由于无法获得可靠的参考数据,评估变得非常困难。在本项工作中,我们提出使用基于固定入口点和输入语料的精心构造的动态基线。将这种动态基线的创建视作对真实情况的一种近似——这实际上是一个优化问题。我们使用手动扩展和覆盖引导模糊测试来创建合适的输入语料。有了这些动态基线,我们研究了多种算法和实现的调用图质量,选择了四个现实世界中的Java程序进行测试。我们发现我们的方法为理解调用图的质量以及如何评估提供了宝贵的见解。通过这项工作,我们提供了一种新颖的方法,以推动静态程序分析领域的发展,因为我们评估了其核心数据结构之一——调用图的计算。
论文链接:https://doi.org/10.1145/3650212.3652114
Bug报告管理是一项代价高昂的软件维护过程,包含了几个具有挑战性的任务。鉴于移动应用程序是以用户界面(UI)驱动的,Bug通常通过UI呈现出来,因此识别有问题的UI屏幕和UI组件(Buggy UI定位)对于定位有问题的行为并最终修复它是非常重要的。然而,这项任务具有挑战性,因为开发人员必须推理关于Bug描述(这些描述往往质量较低)以及UI屏幕的视觉或基于代码的表示。本论文首次通过一项全面研究来探讨自动化Buggy UI定位任务的可行性,评估了一种文本和两种多模态深度学习(DL)技术以及一种文本无监督技术的能力。我们在两个粒度级别上评估了这些技术,即Buggy UI屏幕和UI组件定位。我们的结果表明,不同表示形式的模型各有其优势,其中,融合视觉信息的模型在UI屏幕定位方面表现更好,基于文本屏幕信息的模型在UI组件定位方面表现更好——这突显了需要一种结合两种技术优势的定位方法。此外,我们研究了Buggy UI定位是否可以改进传统的有问题代码定位,发现融合定位后的Buggy UI可以使Hits@10提高9%-12%。
论文链接:https://doi.org/10.1145/3650212.3680357
增强现实(AR)技术在多个领域中开辟了激动人心的可能性,如教育、工作指导、购物、通讯和游戏。然而,用户在当前的AR应用程序中经常遇到可用性和用户体验问题,通常是由于虚拟对象放置不精确所导致的。检测这些不准确性对于AR应用程序测试至关重要,但由于依赖于人类的感知和验证,自动化这一过程具有挑战性。本文介绍了VOPA(虚拟对象放置评估),一种新颖的方法,能够自动识别现实世界AR应用程序中虚拟对象放置的不精确之处。VOPA通过对现实世界的AR应用程序进行工具化,来收集表示各种对象放置场景及其在真实场景下相应元数据的截图。然后,通过众包的方式对收集到的数据进行标注,并用来训练一种混合神经网络,以识别对象放置错误。VOPA旨在通过自动评估虚拟对象放置质量和检测不精确实例来增强AR应用程序的测试。在对304张测试集截图的评估中,VOPA达到了99.34%的准确率、96.92%的精确率和100%的召回率。此外,VOPA成功识别了38个现实世界中的对象放置错误,包括对象悬浮在两个表面之间或嵌入墙中的情况。
论文链接:https://doi.org/10.1145/3650212.3680315
深度学习库在人工智能系统中非常重要。最近,许多工作被提出以确保其可靠性。这些工作通常将张量操作的输入建模为约束条件,以指导测试用例的生成。然而,这些约束可能会缩小搜索空间,导致测试不完全。本文引入了一种互补集引导的优化方法,可增强约束的完整性。基本思路是看互补集生成的测试用例是否有效。如果有效,则原始约束是不完整的,需要进行优化。基于这一想法,我们设计了一种自动约束优化工具,DeepConstr,该工具采用遗传算法优化约束以提高完整性。我们在两个深度学习库,PyTorch 和 TensorFlow 上进行了评估。DeepConstr 发现了 84 个未知的错误,其中 72 个得到确认,并有 51 个被修复。与最先进的模糊测试工具相比,DeepConstr 提高了 NNSmith 支持的 43.44% 操作符的覆盖率,和 NeuRI 支持的 59.16% 操作符的覆盖率。
论文链接:https://doi.org/10.1145/3650212.3680364
Solidity编译器通过管理一种称为Solidity的领域特定语言的语法,并执行Solidity代码的编译和优化,在以太坊上支持智能合约应用程序的开发方面起着关键作用。Solidity编译器的正确性对于依赖智能合约的行业中促进透明度、效率和信任至关重要。然而,与其他软件系统一样,Solidity编译器也容易出现错误,可能会在区块链平台上生成不正确的字节码,从而引发严重的安全问题。作为智能合约的领域特定编译器,Solidity编译器在许多方面与其他编译器有所不同,这为检测其错误带来了独特的挑战。为了了解Solidity编译器中的错误并为未来的研究带来益处,本文对533个Solidity编译器错误进行了首次系统研究。我们仔细检查了它们的特征(包括症状、根本原因和分布)及其触发的测试案例。我们的研究得出了七个关于Solidity编译器错误的结论。此外,为了研究Solidity编译器模糊测试器的局限性并将我们的发现应用到实际场景中,我们在构建的基准上评估了三种Solidity编译器模糊测试器。结果显示,这些模糊测试器在检测Solidity编译器错误方面效率低下。这种低效率归因于它们未能考虑到有趣的错误诱发特性、与错误相关的编译标志以及测试预言。
论文链接:https://doi.org/10.1145/3650212.3680362
故障定位对于软件维护任务(如测试和自动化程序修复)至关重要。许多故障定位技术已经被开发出来,其中最常见的是基于谱(spectrum)的技术。大多数技术是为传统编程范式设计的,这些范式将通过和失败的测试用例映射到代码的行或分支上,因此,对于使用不同代码抽象的专门编程范式来说,这些技术可能定位效果不佳。在本文中,我们研究了一类特殊程序——分子程序中的故障定位。最近的研究已经为这些程序设计了自动化测试和修复框架,但忽略了故障定位的重要性。如我们所示,使用现有的基于谱的方法可能无法提供足够的信息。相反,我们提出了一种新方法,名为Traceback,它利用时间轨迹数据。在对89个有缺陷程序变体的实证研究中,我们证明了Traceback相比于反应映射(反应映射是基于谱的定位直接翻译)在定位上提供了32-90%的改进。我们发现,当使用所有测试或仅使用基于代码的不变量测试时,Traceback的参数调整差异很小,然而最佳的深度和权重参数在使用规范测试时会有所不同,规范测试可以是功能性的或是变形的。总体而言,基于不变量的测试提供了最好的定位结果(无论是单独使用还是与其他测试结合使用),其次是变形测试,然后是功能性测试。
论文链接:https://doi.org/10.1145/3650212.3652138
高级编程模型如Q#极大地简化了量子计算编程的复杂性。这些模型由一组基础库支持代码开发。然而,在库的实现中可能会发生错误,其中一个常见的根本原因是在传递给面向用户的子程序的输入的属性(如值、长度和量子状态)上缺乏或不完全检查。本文介绍了Upbeat,一种用于生成与输入检查相关的Q#库中的错误的随机测试用例的模糊测试工具。Upbeat开发了一种自动化过程,从API文档和开发者实现的输入检查语句中提取约束。它利用开源的Q#代码示例来综合生成测试程序。它将测试用例生成框架设定为经典计算的约束满足问题和量子计算的量子状态模型,以生成精心设计的子程序输入,以测试输入检查机制是否被恰当地实现。在不到100小时的自动化测试运行中,Upbeat成功识别出了16个API实现中的错误和4个文档错误。这些错误中,14个已经被确认,其中12个已被库开发者修复。
论文链接:https://doi.org/10.1145/3650212.3652120
随着基于机器学习的安卓恶意软件检测方法的广泛应用,构建高质量的数据集变得愈发重要。现有的大规模数据集大多通过汇总多个杀毒引擎的决策,并利用VirusTotal进行标注,但大多数情况下,这些数据集不加区分地接受所有引擎的决策。然而,实际上,这些引擎在检测恶意软件方面存在不同的能力,特别是在处理已被混淆的恶意软件时。此前的研究已揭示,代码混淆在不同程度上削弱了这些引擎的检测性能。这使我们认为,不加区分地使用所有引擎进行数据集标注是不合理的。因此,在本文中,我们首先进行了一项数据驱动的评估,以确认代码混淆对基于引擎的数据集标注的负面影响。为了更深入地理解这一现象背后的原因,我们评估了每个引擎在各种代码混淆技术下的可用性、有效性和鲁棒性。随后,我们对这些引擎进行分类,并选择了一组对混淆代码具有鲁棒性的引擎。最后,我们进行了全面的实验,以验证所选引擎在数据集标注中的有效性。实验结果表明,当在训练集中混入50%的混淆样本时,相较于使用所有引擎,在经典的恶意软件检测器Drebin和Malscan上,使用我们所选的引擎能够有效地分别提升15.21%和19.23%的检测性能。
论文链接:https://doi.org/10.1145/3650212.3680302
机器人操作系统(ROS)是一个流行的框架和生态系统,它允许开发人员使用可复用的、现成的组件构建机器人软件系统。系统通常通过配置文件对组件进行定制和连接。尽管可复用组件从理论上可以实现快速原型设计,但确保正确配置和连接是具有挑战性的,这在开发者论坛上的众多问题中得到了证明。开发人员必须遵守各个组件的未经核实和未声明的假设。不这样做可能会导致配置错误,只有在现场部署期间才能发现此类错误,此时错误可能会引起不可预测和危险的行为。尽管配置错误在广泛的软件工程背景中已有研究,但机器人软件(尤其是ROS)呈现出特定领域的挑战,并可能带来灾难性的后果。为了理解和提高ROS项目的可靠性,识别开发人员面临的配置错误类型至关重要。为此,我们对ROS Answers,一个问答平台,进行研究,以识别和分类在ROS开发过程中出现的配置错误。随后,我们进行文献综述,以评估现有检测技术对这些配置错误的覆盖情况。总体而言,我们发现了12个高层次类别和50个子类别的配置错误。其中,有27个类别没有被现有技术覆盖。最后,我们讨论了在未来工作中如何应对这些配置错误。
论文链接:https://doi.org/10.1145/3650212.3680350
大语言模型(LLMs)在生成高质量代码方面的显著能力引起了软件测试社区的广泛关注。然而,现有的代码大语言模型在生成准确、完整的测试方面表现往往不尽如人意,因为它们是在未区分测试代码和其他用途代码的代码片段上进行训练的。在本文中,我们介绍了一个大规模数据集,UniTSyn,它可以增强LLMs的单元测试生成能力。关联测试与被测试的函数对于LLMs推断预期行为和需要验证的逻辑路径至关重要。通过利用语言服务器协议,UniTSyn实现了在没有项目特定的执行设置或语言特定的启发式策略的情况下收集焦点-测试对的艰巨目标,而这些启发式策略往往脆弱且难以扩展。这个数据集包含了跨五种主流编程语言的270万个焦点-测试对,可以增强LLMs的测试生成能力。我们的实验表明,通过基于UniTSyn构建一个自回归LLM,我们可以在学习和理解单元测试表示方面获得显著的好处,进而在所有评估的编程语言中提高生成准确性和代码覆盖率。
论文链接:https://doi.org/10.1145/3650212.3680342
传统的调用图构造算法将可能的运行时类型的计算与(虚拟)调用的实际解析混为一谈。这种纠缠的设计阻碍了对复杂语言特性和API的支持,以及在精确度、完备性和可扩展性之间进行系统性权衡。此外,这也妨碍了依赖类型信息的精确下游分析的实现。为了解决这个问题,我们提出了Unimocg,一种用于调用图构造的模块化架构,它将类型信息的计算与调用解析分离开来。由于其模块化设计,Unimocg可以结合各种不同的调用图算法与与算法无关的模块来支持各个语言特性。此外,这些模块以与所选调用图算法相同的精度运行而无需进一步的努力。除此之外,Unimocg还允许其他分析以完全精度轻松重用调用图构造中的类型信息。我们展示了Unimocg如何通过可重用模块实现不同精度、完备性和可扩展性权衡的调用图算法框架。Unimocg目前支持来自不同类别的十种调用图算法,如CHA、RTA、XTA和k-l-CFA等。这些算法在不牺牲精度或性能的情况下显示出一致的完备性。我们还展示了如何使用Unimocg改进一个不可变性分析。
论文链接:https://doi.org/10.1145/3650212.3652109
企业通常需要查询视觉上丰富的文档(VRDs),例如采购收据、医疗记录和保险表格等来自多个供应商的各种表格,以做出明智的决策。因此,已经提出了几种技术来自动提取这些VRDs中的独立感兴趣实体,例如从采购收据中提取价格标签等。然而,对于提取语义关联的实体(例如为每个项目找到相应的价格标签),这些技术要么在处理新布局方面能力有限(如基于模板的方法),要么需要大量的预训练数据且表现不佳(如深度学习方法)。在这项工作中,我们介绍了一种程序综合方法,名为VRDSynth,用于自动生成程序,以从多语言VRDs中提取实体关系。两项关键创新使得VRDSynth能够在无需预训练数据的情况下应对灵活的布局,以提取实体关系,包括:(1)一种新的领域特定语言(DSL),能够有效捕捉文档实体之间的空间和文本关系;(2)一种新的综合算法,该算法利用实体之间的频繁空间关系来构建初始程序,通过等效化简来修剪搜索空间,并结合正、负和相互排斥的程序以提高程序的覆盖范围。我们在两个流行的VRD理解基准上评估了我们的方法,即FUNSD和XFUND,在语义实体链接任务上,这些基准包含了8种不同语言的1600个表格。实验表明,尽管没有事先的预训练数据,VRDSynth在8种语言中的5种上优于当前最先进的预训练深度学习方法LayoutXLM。值得注意的是,在FUNSD基准上,VRDSynth在F1评分上比LayoutXLM提高了42%,并在7/8种语言上与LayoutXLM互为补充。关于效率,VRDSynth在存储和推理所需的内存占用方面显著优于LayoutXLM(分别为1M和380MB对比LayoutXLM所需的1.48GB和3GB),同时在时间效率上也保持了类似的表现,尽管实现所用的语言不同(Python与C++)。
论文链接:https://doi.org/10.1145/3650212.3680314
如权威标准(例如,ISO21448)所强调的那样,遵守交通法规是自动驾驶系统(ADS)商业化的基本先决条件。因此,制造商急需检测可能导致目标ADS违反交通法规的严峻驾驶情况的技术。为实现这一目标,现有工作通常采取基于搜索的模拟测试,通过不断调整初始模拟场景的配置(例如,增加新车辆)来寻找关键场景。具体来说,他们在每个变异场景上应用预定义的启发式方法,以近似触发ADS交通违规的可能性,并相应地进行搜索调度。然而,即便手头有了这些较为关键的场景,他们仍无法提供关于应进一步如何变异场景配置以可靠地触发目标ADS的异常行为的确定性指导。因此,不可避免地需要进行大量无意义的工作来遍历庞大的场景搜索空间。
在这项工作中,我们提出了VioHawk,这是一种新颖的基于模拟的模糊测试工具,用于狩猎可能导致ADS交通违规的场景。我们的核心思想是,可以在ADS模拟测试的每个时间戳上,将交通法规形式化地建模为地图上的危险/非危险驾驶区域(例如,当交通灯为红灯时,交叉路口被标记为危险区域)。基于这一思想,VioHawk通过确定性变异操作诱导自动驾驶车辆进入法律规定的危险区域。我们评估了VioHawk在测试工业级ADS(即,Apollo)时的效果。我们构建了一个基准数据集,包含42个违反真实交通法规的ADS场景。与现有工具相比,VioHawk在相同时间预算内可以多重现3.1倍到13.3倍的违规行为,并节省1.6倍到8.9倍的重现时间。最终,在VioHawk的帮助下,我们在Apollo 7.0/8.0上发现了9+8个之前未知的真实交通法规违规行为。
论文链接:https://doi.org/10.1145/3650212.3680325
Wasm 生态系统的一个基本组成部分是 Wasm 运行时,因为它直接影响着 Wasm 应用程序是否能按预期执行。Wasm 运行时中经常报告出现漏洞,因此研究界已经进行了一些尝试,设计自动化测试框架来检测 Wasm 运行时中的漏洞。然而,现有的测试框架受制于测试用例的质量,即它们在生成既具备语义丰富又符合语法正确的 Wasm 二进制文件方面面临挑战。因此,复杂的漏洞无法被有效地触发。在这项工作中,我们提出了 WASMaker,这是一种新颖的差分测试框架,它可以通过反汇编和重新汇编真实世界的 Wasm 二进制文件来生成复杂的 Wasm 测试用例,从而触发 Wasm 运行时之间隐藏的不一致性。为了进一步找出意外行为的根本原因,我们设计了一种与运行时无关的根本原因定位方法来准确地定位漏洞。广泛的评估表明,WASMaker 在效率和有效性方面都优于现有的最先进技术。我们在流行的 Wasm 运行时中发现了 33 个独特的漏洞,其中 25 个已经得到确认。
论文链接:https://doi.org/10.1145/3650212.3680358
可靠性是运行时的首要关注点。本文通过介绍Wapplique(第一个基于Wasm字节码变异的模糊测试工具)来研究如何测试Wasm运行时。Wapplique通过一种专门定制的代码片段替换方法,解决了生成测试用例时多样性和效率之间的困境。具体来说,Wapplique从现实世界程序中提取代码片段并应用于种子程序,以增强种子的多样性。通过我们设计的复杂代码分析算法,Wapplique还保证了生成程序的有效性。这使得Wapplique能够生成大量有效且多样的Wasm程序作为测试用例,充分测试目标运行时。我们在测试四个流行的真实世界运行时中应用Wapplique的经验表明,它可以高效生成测试用例,达到高覆盖率,并发现了20个之前未知的漏洞。
论文链接:https://doi.org/10.1145/3650212.3680340
代码生成旨在根据给定的自然语言需求自动生成代码片段,并在软件开发中扮演着重要角色。尽管代码语言模型(Code LLMs)在这一领域表现出了出色的性能,但其较长的生成时间在实际使用中构成了显著的限制。在本文中,我们首先对不同代码语言模型在代码生成任务上进行深入的初步研究,发现了一个显著的效率问题,即持续生成多余的标记。这不仅影响了开发者的生产力,还导致了大量的计算资源浪费。为了解决这一问题,我们引入了CodeFast,一种针对代码语言模型在代码生成上的推理加速方法。CodeFast的关键思想是在检测到不必要的多余标记时及时终止推理过程。首先,我们提出了一个自动数据构建框架来获取训练数据。然后,我们训练了一个适用于多种编程语言的统一轻量模型GenGuard,以预测是否在当前步骤终止推理。最后,我们结合GenGuard优化代码语言模型,以加速其在代码生成任务中的推理速度。我们在四个广泛使用的代码生成数据集上的五个代表性代码语言模型上进行了广泛的实验。实验结果显示:(1) CodeFast能够显著提升多种代码语言模型在代码生成中的推理速度,提升幅度在34%到452%之间,而不影响生成代码的质量。(2) CodeFast在不同参数设置下表现稳定,并且能够泛化到未经训练的数据集。我们的代码和数据可以在https://github.com/DeepSoftwareAnalytics/CodeFast上获取。
论文链接:https://doi.org/10.1145/3650212.3680343
开源软件给软件社区带来了好处,但也引入了由许可证违规导致的法律风险,这些风险可能会导致严重的后果,如诉讼和经济损失。为了减轻法律风险,一些方法被提出用于识别许可证、检测许可证不兼容性和不一致性、以及推荐许可证。然而,据我们所知,之前没有研究专注于理解开源许可证中的修改条款或检测和解决修改条款的违规问题。为了解决这个空白,我们首先对48份开源许可证中的修改条款进行了经验性描述。这些许可证都要求某种形式的“声明”来描述对原始作品所作的修改。受我们研究的启发,我们设计了LiVo,以在代码派生过程中自动检测和修复开源许可证中修改条款的违规行为。我们的评估显示了LiVo的有效性和效率。为修复修改条款违规行为提出的18个拉取请求(pull request)收到了积极的回应,其中8个已被合并。
论文链接:https://doi.org/10.1145/3650212.3680339