软件工程顶会——ICSE '24 论文清单、摘要

35825c76d340d21a29253defa5d3276f.png

1、A Comprehensive Study of Learning-based Android Malware Detectors under Challenging Environments

近年来,学习型Android恶意软件检测器不断增多。这些检测器可以分为三种类型:基于字符串、基于图像和基于图形。它们大多在理想情况下取得了良好的检测性能。然而,在现实中,检测器常常面临不在分布范围之内的样本,原因可能是代码混淆、概念漂移(例如,软件开发技术的演变和新的恶意软件类别的出现)以及对抗样本。这一问题引起了越来越多的关注,但缺乏对现有各种类型的检测器在这些具有挑战性环境下进行比较研究。为了填补这一空白,我们从三种类型的检测器中选择了12个代表性的检测器,并分别在涉及代码混淆、概念漂移和对抗样本的具有挑战性的场景中对它们进行评估。实验结果显示,没有任何一个评估的检测器能够保持其理想情况下的检测性能,而不同类型的检测器在各种具有挑战性的环境下的性能差异显著。我们确定了几个导致检测器性能下降的因素,包括特征提取方法和学习模型的局限性。我们还分析了不同类型的检测器在面对代码混淆、概念漂移和对抗样本时为何表现出明显性能差异的原因。最后,我们分别从用户和研究者的角度提供了实用建议。我们希望我们的工作能够帮助理解不同类型的检测器,并为增强它们的性能和鲁棒性提供指导。

论文链接:https://doi.org/10.1145/3597503.3623320

cd66a1363cc740fbf7b893874814d85c.png

2、A Large-Scale Survey on the Usability of AI Programming Assistants: Successes and Challenges

最近,软件工程领域广泛部署了AI编程助手,如GitHub Copilot。然而,在实践中,开发人员并不高频地接受AI编程助手的初始建议。这引发了许多关于这些工具可用性的问题。为了了解开发人员在使用这些工具时的实践以及他们面临的重要可用性挑战,我们向大量开发人员进行了调查,并收到了来自410位不同背景的开发人员的回应。通过定性和定量分析的混合方法,我们发现开发人员最主要的动机是使用AI编程助手来帮助减少按键次数、快速完成编程任务和记忆语法,但对于帮助构思潜在解决方案的使用意愿较低。我们还发现开发人员不使用这些工具的最重要原因是因为这些工具没有输出符合特定功能或非功能要求的代码,以及开发人员在控制工具以生成所需输出时遇到困难。我们的研究结果对于AI编程助手的开发者和用户都有重要影响,比如设计与这些工具的最小认知努力交互,以减少用户在编程时的干扰。

论文链接:https://doi.org/10.1145/3597503.3608128

2cd90455e9dd0e385bd381fc6be386a3.png

3、Attention! Your Copied Data is Under Monitoring: A Systematic Study of Clipboard Usage in Android Apps

最近,剪贴板在移动应用程序中的使用变得普遍,使用户能够在同一应用程序内或跨不同应用程序之间复制和粘贴文本。然而,在移动操作系统中的剪贴板上缺乏足够的访问控制,将其包含的数据暴露给高风险,其中一个应用程序可以读取其他应用中复制的数据并将其存储在本地甚至发送到远程服务器。不幸的是,文献中只有零星的研究,在这方面缺乏对整个移动应用程序生态系统的全面和系统性研究。为了建立缺失的联系,本文提出了一种自动化工具 ClipboardScope,它利用基于原则的静态程序分析方法,通过定义使用方式的两个方面的组合,揭示了移动应用程序中的剪贴板数据使用。即,剪贴板数据如何被验证以及它去向何处。根据应用程序中的剪贴板使用,它定义了四种主要的剪贴板数据操作类别,分别是“点对点”、“全壁球”、“选择性”和“挑选”, ClipboardScope在截至2022年6月Google Play上共有220万款移动应用中,评估了26201款应用程序,这些应用程序访问和处理了剪贴板文本。它识别出23948、848、1075和330款应用程序分别被认定为四种指定类别。此外,我们还发现了一种流行的编程习惯,即使用SharedPreferences对象存储历史数据,这可能成为一种不易察觉的隐私泄漏渠道。

论文链接:https://doi.org/10.1145/3597503.3623317

e822c1baeb60c277c24eca93efcc0ada.png

4、BOMs Away! Inside the Minds of Stakeholders: A Comprehensive Study of Bills of Materials for Software Systems

软件物料清单(SBOMs)已成为促进软件依赖关系、漏洞、许可证和供应链管理的工具。虽然已经投入了大量精力提高SBOM意识并开发SBOM格式和工具,但最近的研究表明SBOM仍然是一种尚未被充分采用的早期技术。本文在之前的研究基础上报告了一项全面的研究,调查了利益相关者在创建和使用SBOMs时遇到的当前挑战。该研究对属于五个利益相关者群体(熟悉SBOMs的从业者、关键开源项目成员、AI/ML、网络物理系统和法律从业者)的138位从业者进行了调查,使用不同问卷,还对8位调查受访者进行了访谈,以进一步了解他们的经验。我们确定了面临创建和使用SBOMs的12个主要挑战,包括与SBOM内容相关的挑战、SBOM工具的不足、SBOM的维护和验证,以及特定领域的挑战。我们提出并讨论了针对所确定挑战的4个可行解决方案,并提出了未来研究和发展的主要途径。

论文链接:https://doi.org/10.1145/3597503.3623347

a875694396eeb0960bc618c8996c154d.png

5、BinAug: Enhancing Binary Similarity Analysis with Low-Cost Input Repairing

二进制代码相似性分析(BCSA)是各种软件安全、逆向工程和再工程应用的基本构建模块。现有研究已应用深度神经网络(DNNs)来衡量二进制代码之间的相似性,这是在DNNs在处理媒体数据如图像方面取得重大突破之后的产物。尽管基于DNN的BCSA取得了有益的结果,但由于DNN的不稳定性和黑匣子特性,它并没有被广泛应用于工业领域。

在本研究中,我们首先对最先进的BCSA工具进行了广泛研究,并从定量和定性的角度调查了它们的错误预测。然后,我们相应地设计了一个低成本且通用的框架,名为Binaug,通过修复它们的输入二进制代码来提高BCSA工具的准确性。与基于DNN的BCSA的典型工作流程相一致,Binaug获取了代码相似性的排序前K结果,然后使用一组精心设计的转换重新排列结果。Binaug支持黑盒和白盒设置,取决于DNN模型内部的可访问性。我们的实验结果表明,在黑盒和白盒设置下,Binaug可通过平均提高2.38pt和6.46pt来不断改善SoTA BCSA工具的性能。此外,通过Binaug,在黑盒和白盒设置下,我们将二进制软件组件分析的F1分数平均提高了5.43pt和7.45pt。

论文链接:https://doi.org/10.1145/3597503.3623328

30da08a818aedecff5995390c8503380.png

6、Block-based Programming for Two-Armed Robots: A Comparative Study

编程工业机器人是困难且昂贵的。虽然最近的工作在使更广泛的用户能够使用方面取得了重大进展,但通常仅限于简单的程序,并且其可用性在实践中尚未经过测试。在本文中,我们介绍了Duplo,一种基于块的编程环境,允许最终用户为双臂机器人编程并解决需要协调的任务。Duplo将每个手臂的程序并排放置,利用来自每个程序的块之间的空间关系来表示并行性,以便最终用户能够轻松理解。这个设计是由先前的工作提出的,但在实际编程环境中尚未实施或评估。我们进行了一项随机实验,共有52名参与者对Duplo进行了评估,他们需要完成包含多个子任务的复杂编程任务。我们将Duplo与商业解决方案RobotStudio Online YuMi进行了比较,发现Duplo允许参与者更快地完成相同的任务,并取得更大的成功。通过分析我们在用户研究中收集的信息,我们进一步确定了解释这种性能差异的因素,以及仍然存在的障碍,比如调试问题和与机器人交互的困难。这项工作是朝着让更广泛的非专业用户进行编程迈出的又一步,这可能促使机器人技术的更广泛部署。

论文链接:https://doi.org/10.1145/3597503.3623329

eaa1285152a86e095450d65ffbfbae74.png

7、Characterizing Software Maintenance Meetings: Information Shared, Discussion Outcomes, and Information Captured

迄今为止,在软件工程文献中很少研究的一种会议类型是我们所称的软件维护会议:定期召开的团队会议,在这些会议中通常讨论超出日常站立会议范围的新问题,但又不一定具有必要召开完全独立会议的挑战性。这些会议往往涉及各种各样的话题,在保持软件开发项目进行中起着关键作用,但关于这些会议以及它们的进程知之甚少。在本文中,我们报告了一项单一的探索性案例研究,我们分析了一家重要医疗软件提供商的连续十次维护会议。我们分析了这些会议中讨论的信息种类以及如何讨论,讨论产生的结果,以及为下游使用捕获的信息。我们的研究结果多种多样,提出了对于进行这类会议的人员实际考虑的问题,以及对于进一步理解和支持这种会议的新的研究方向。

论文链接:https://doi.org/10.1145/3597503.3623330

9e17b7f55364ec3cdb61102f3d2e861c.png

8、Co-Creation in Fully Remote Software Teams

本文利用协同创造的视角(这一概念最初在管理和设计领域中被创造和应用,表明一群人通过人、活动和工具的协同创造出有意义的东西),研究如何完全远程的软件团队共同创造可以被看作一种文档形式的数字化工件。我们报告了一项定性的、基于面试的研究结果,对象为25名在远程团队中工作的软件专业人员。我们的主要发现包括定义了四种协同创造模型,示例表明如何将这些模型顺序化为工作链以产生工件,影响开发人员如何将任务匹配到模型和链的因素,以及协同创造工具支持的一些见解。综合起来,我们的研究结果说明了协同创造是一项有意义的活动,在远程软件团队选择如何结构他们的协同活动中发挥着重要作用。

论文链接:https://doi.org/10.1145/3597503.3623297

fd921e6638226904e1c387f715f292d3.png

9、CoderEval: A Benchmark of Pragmatic Code Generation with Generative Pre-trained Models

基于预训练和微调范式的代码生成模型越来越受到学术界和工业界的尝试,导致了众所周知的工业模型,如Codex、CodeGen和PanGu-Coder。为了评估这些模型的有效性,提出了多个现有基准(例如HumanEval和AiXBench),其中仅包括生成独立函数的情况,即可能调用或访问仅内置函数和标准库的函数。然而,非独立函数,通常不包括在现有基准中,组成了流行开源项目中超过70%的函数,并且仅在独立函数上评估模型的有效性无法反映这些模型在实际代码生成场景(即生成用于开源或专有代码的实际代码)上的有效性。

为了帮助填补前面的差距,本文提出了一个名为CoderEval的基准,包括从流行实际开源项目中精心策划的230个Python和230个Java代码生成任务,以及一个独立执行平台,以自动评估生成代码的功能正确性。 CoderEval支持来自六个不同级别的上下文依赖的代码生成任务,其中上下文指的是函数生成过程中定义在外部的依赖第三方库、当前类、文件或项目中的类型、API、变量和常量等代码元素。 CoderEval可用于评估模型在生成代码时的有效性,而不仅仅是独立函数。通过在CoderEval和HumanEval上评估三种最先进的代码生成模型(CodeGen、PanGu-Coder和ChatGPT),我们发现这些模型在生成独立函数方面的有效性明显高于生成非独立函数的有效性。我们的分析突出了当前的进展,并指出了进一步利用上下文信息来提高模型有效性的未来方向。

论文链接:https://doi.org/10.1145/3597503.3623316

2a17321313721930afd5c26a832e6b4c.png

10、CrashTranslator: Automatically Reproducing Mobile Application Crashes Directly from Stack Trace

崩溃报告对于软件维护至关重要,因为它们可以让开发人员了解移动应用程序遇到的问题。在修复之前,开发人员需要复现崩溃,这是一项非常耗时且繁琐的任务。现有研究通过自然语言描述的复现步骤进行了自动崩溃复现。然而,我们发现有相当一部分崩溃报告只包含发生崩溃时的堆栈跟踪。这种仅包含堆栈跟踪的崩溃仅显示发生崩溃时的最后一个GUI页面,并且缺乏逐步指导。开发人员往往需要花费更多的精力来理解问题和复现崩溃,现有技术无法处理这种情况,因此迫切需要自动化支持。本文提出了一种名为CrashTranslator的方法,可以直接从堆栈跟踪自动复现移动应用程序崩溃。它通过利用预先训练的大型语言模型来预测触发崩溃的探索步骤,并设计基于强化学习的技术来减轻不准确的预测并全面引导搜索。我们在涉及58个热门Android应用的75份崩溃报告上评估了CrashTranslator,它成功复现了61.3%的崩溃,超过了现有技术基线109%至206%。此外,平均复现时间为68.7秒,超过了基线302%至1611%。我们还评估了CrashTranslator的实用性,结果令人鼓舞。

论文链接:https://doi.org/10.1145/3597503.3623298

6358a10a4f5636da0c950fc0fcb97692.png

11、DEMISTIFY: Identifying On-device Machine Learning Models Stealing and Reuse Vulnerabilities in Mobile Apps

移动应用程序通过设备上的机器学习技术提供人工智能(AI)服务变得越来越受欢迎。与传统上在远程服务器上完成这些AI服务不同,这些设备上的技术会在本地处理AI服务所需的敏感信息,可以减轻远程数据收集的严重担忧。然而,这些设备上的技术必须将机器学习专业知识的核心(例如模型)本地推送到智能手机上,这些仍然容易受到远程云和服务器上类似漏洞的影响,尤其是在面对模型窃取攻击时。为了防御这些攻击,开发人员采取了各种保护措施。不幸的是,我们发现这些保护措施仍然不够,移动应用中的设备上机器学习模型可以被无限制地提取和重复使用。为了更好地展示其不足的保护措施和这种攻击的可行性,本文提出了DeMistify,它会在应用程序中静态定位机器学习模型,切片相关的执行组件,并最终自动生成脚本来使移动应用程序成功地窃取和重复使用目标机器学习模型。为了评估DeMistify并展示其适用性,我们将其应用于从谷歌Play商店的安装数量基础上使用设备上机器学习专业知识为几种机器学习服务的1,511个热门移动应用程序,DeMistify可以成功执行1250个(占82.73%)。此外,还进行了深入研究,以了解移动应用程序中的设备上机器学习生态系统。

论文链接:https://doi.org/10.1145/3597503.3623325

d6ccc19a12905500fc08f4a53bc17623.png

12、Dataflow Analysis-Inspired Deep Learning for Efficient Vulnerability Detection

基于深度学习的漏洞检测显示出了很好的性能,在一些研究中甚至优于静态分析工具。然而,表现最好的方法使用基于标记的变压器模型,这些模型并不是捕获漏洞检测所需的代码语义最有效的方式。经典的程序分析技术,例如数据流分析,可以根据其根本原因检测许多类型的错误。在本文中,我们提出将这种基于因果关系的漏洞检测算法与深度学习相结合,旨在实现更高效和有效的漏洞检测。具体地,我们设计了DeepDFA,一个受数据流分析启发的图学习框架和一种嵌入技术,使图学习能够模拟数据流计算。我们展示了DeepDFA既性能卓越又高效。DeepDFA优于所有非变压器基准。它在9分钟内训练完成,比性能最好的基线模型快了75倍。当只使用50多个易受攻击和数百个总例子作为训练数据时,该模型保持了与100%数据集相同的性能。DeepDFA还推广到了DbgBench中的真实世界漏洞;它在所有fold中平均检测到了17个漏洞中的8.7个,并且能够区分修补和有缺陷的版本,而性能最好的基准模型未能检测到任何漏洞。通过将DeepDFA与大型语言模型结合,我们在Big-Vul数据集上实现了最新的漏洞检测性能,F1分数为96.46,精确度为97.82,召回率为95.14。我们的复制包位于https://doi.org/10.6084/m9.figshare.21225413。

论文链接:https://doi.org/10.1145/3597503.3623345

e111a30ab9ef107313e723529ad0d2a0.png

13、Deep Learning or Classical Machine Learning? An Empirical Study on Log-Based Anomaly Detection

虽然深度学习(DL)已经成为一种强大的技术,但其优势必须在与计算成本相关的情况下进行仔细考虑。具体而言,尽管DL方法在日志异常检测方面表现出色,但它们通常需要较长时间进行日志预处理、模型训练和模型推断,从而阻碍了它们在需要快速部署日志异常检测服务的在线分布式云系统中的采用。

本文研究了在日志异常检测中DL方法相对于更简单技术的优越性。我们在五个公共日志异常检测数据集(如HDFS)上评估基本算法(例如KNN、SLFN)和DL方法(例如CNN)。我们的研究结果表明,简单算法在时间效率和准确性方面优于DL方法。例如,在Thunderbird数据集上,K最近邻算法的训练速度比NeuralLog快1000倍,同时F1-Score高出0.0625。我们还确定了导致这种现象的三个因素,即:(1)冗余的日志预处理策略,(2)数据集的简单性,以及(3)日志异常检测中的二元分类的性质。为了评估DL的必要性,我们提出了LightAD,这是一种优化训练时间、推理时间和性能得分的体系结构。通过自动化超参数调整,LightAD允许在日志异常检测模型之间进行公平比较,从而使工程师能够评估复杂DL方法的适用性。

我们的研究结果为日志异常检测社区提供了一则警示,强调在采用DL方法之前需要对数据集和研究任务进行批判性分析。提出计算成本昂贵模型的研究人员应该将他们的工作与轻量级算法进行基准测试,以确保全面评估。

论文链接:https://doi.org/10.1145/3597503.3623308

a4aa37120005f9b822e5ed4f3942445b.png

14、Deeply Reinforcing Android GUI Testing with Deep Reinforcement Learning

随着 Android 应用程序的规模和复杂性继续增长,以满足市场和用户需求的增加,质量保证挑战变得更加重要。尽管先前的研究已经证明了强化学习(RL)在 Android GUI 测试中的优越性,但其有效性仍然受到限制,特别是在大型、复杂的应用程序中。这种限制源自于表格 RL 在学习被测试应用程序(AUT)的大状态-动作空间内的知识时的无效性,以及在使用更先进的 RL 技术时获得的知识的次优利用。为了解决这些限制,本文提出了 DQT,一种基于深度强化学习的新型自动化 Android GUI 测试方法。DQT 使用图嵌入技术保留了小部件的结构和语义信息,为识别相似状态或动作以及区分不同状态或动作构建了坚实的基础。此外,一个专门设计的深度 Q 网络(DQN)通过学习与 AUT 的运行时交互中的测试知识,有效地引导由好奇心驱动的探索,并在状态或动作之间共享这些知识。在 30 个不同的开源应用程序上进行的实验表明,DQT 在代码覆盖和故障检测方面均优于现有的最先进的测试方法,特别是对于大型、复杂的应用程序。DQT 检测到的故障已被重现并报告给开发人员;到目前为止,已明确确认了报告的问题中的 21 个,并已修复了 14 个。

论文链接:https://doi.org/10.1145/3597503.3623344

d12e9653f099ff2845f2c77119bb6aad.png

15、Demystifying Compiler Unstable Feature Usage and Impacts in the Rust Ecosystem

Rust编程语言由于其安全性保证和出色性能,在构建可靠和安全系统方面迅速地获得了人们的青睐。为了提供额外功能,Rust编译器引入了Rust不稳定特性(RUF)来扩展编译器功能、语法和标准库支持。然而,这些特征是不稳定的,有可能被移除,导致依赖包编译失败。更糟糕的是,它们的影响会通过传递依赖关系传播,引起整个生态系统的大规模失败。尽管RUF在Rust中被广泛使用,但以往的研究主要集中在Rust代码安全方面,对于Rust编译器中RUF的使用和影响却鲜有探讨。因此,我们的目标是通过系统地分析Rust生态系统中RUF的使用和影响来弥合这一鸿沟。我们提出了一种提取RUF的新技术,并通过准确解析包依赖关系来定量评估其在整个生态系统中的影响。我们已经分析了包含590,000个包版本和1.4亿个传递依赖关系的整个Rust生态系统。我们的研究显示,Rust生态系统使用了1000种不同的RUF,且最多44%的包版本受到RUF的影响,导致最多12%的包版本编译失败。为了减轻RUF的广泛影响,我们进一步设计和实现了一款RUF编译失败恢复工具,可以恢复高达90%的失败情况。我们相信我们的技术、发现和工具可以帮助稳定Rust编译器,最终提升Rust生态系统的安全性和可靠性。

论文链接:https://doi.org/10.1145/3597503.3623352

5a37215b1cab40775e540bcb5e2181ad.png

16、Detecting Logic Bugs in Graph Database Management Systems via Injective and Surjective Graph Query Transformation

图数据库管理系统(GDBMSs)将图形作为数据存储。它们自然地应用于社交网络、推荐系统和程序分析等应用中。然而,它们可能受到逻辑错误的影响,导致GDBMSs计算出错误的结果,进而影响依赖于它们的应用程序。在这项工作中,我们提出了注射和满射图查询转换(GQT)来检测GDBMSs中的逻辑错误。给定查询Q,我们推导出一个突变查询Q',使得它们的结果集要么是:(i)在语义上等效;或者(ii)根据突变而形成其中一个是另一个的子集或超集。当结果之间期望的关系不成立时,就会检测到GDBMSs中的逻辑错误。突变Q的关键见解在于图查询中的图模式允许从Q和Q'之间的有向边集的注射和满射映射导出系统化的查询转换。我们在一个名为GraphGenie的工具中实现了注射和满射图查询转换(GQT),并在6个流行且成熟的GDBMSs上对其进行了评估。GraphGenie发现了25个未知的错误,包括16个逻辑错误、3个内部错误和6个性能问题。我们的结果表明,GraphGenie在检测GDBMSs中的逻辑错误方面具有实用性和有效性,有助于提高依赖于这些GDBMSs的应用程序的可靠性。

论文链接:https://doi.org/10.1145/3597503.3623307

4c11b27ae27cc04ad7cc4c717e5bce5f.png

17、Do Automatic Test Generation Tools Generate Flaky Tests?

非确定性测试行为,或称为不稳定性,在开发人员中是普遍且令人担忧的现象。研究人员已经研究了这个问题,并提出了减轻其影响的方法。然而,先前的绝大多数工作只考虑了开发人员编写的测试。测试生成工具产生的不稳定测试的普遍性和特性仍然大多数未知。我们探讨这些工具是否也会产生不稳定测试,以及这些测试与开发人员编写的测试有何不同。此外,我们评估了抑制不稳定测试生成的机制。我们对使用Java或Python编写的6,356个项目进行抽样。对于每个项目,我们使用EvoSuite(Java)和Pynguin(Python)生成测试,并执行每个测试200次,以寻找不一致的结果。我们的结果显示,生成的测试中不稳定性至少与开发人员编写的测试一样普遍。然而,EvoSuite中已实施的现有不稳定性抑制机制在缓解这一问题方面是有效的(减少71.7%不稳定测试)。与开发人员编写的不稳定测试相比,生成的不稳定测试的原因分布不同。它们的非确定性行为更常由随机性引起,而不是由网络和并发引起。使用不稳定性抑制,剩余的不稳定测试与先前报告过的任何不稳定性均有显著差异,其中大多数可归因于运行时优化和EvoSuite内部资源阈值。这些见解连同伴随的数据集,可以帮助维护人员改进测试生成工具,为使用这些工具的开发人员提供建议,并为未来测试不稳定性或测试生成领域的研究奠定基础。

论文链接:https://doi.org/10.1145/3597503.3608138

462d5267e167755773a2e767c214e90a.png

18、DocFlow: Extracting Taint Specifications from Software Documentation

安全从业者通常使用静态分析来检测安卓应用中的安全问题和隐私违规行为。这些分析的准确性取决于平台的建模方式和敏感方法列表。由于可用方法的数量众多,安卓平台更新速度快,谷歌在每个新版本上发布专有库,因此收集这些方法通常变得不切实际。尽管安卓平台不断演化,但应用开发者通过每个新版本附带的文档应对这些新功能。在这项工作中,我们利用像安卓这样的平台提供的丰富文档,提出了DocFlow,一个从文档中直接生成平台污点规范的框架。DocFlow使用API方法的文档建模语义来检测敏感方法(源和汇)并为其分配语义标签。我们的方法不需要访问源代码,可以分析无法获取代码的专有库。我们使用安卓平台包和封闭源谷歌Play服务库对DocFlow进行评估。我们的结果显示,我们的框架以高精度检测敏感方法,适应新的API版本,并可以轻松扩展以检测其他方法类型。我们的方法证明了安卓文档编码了丰富的语义信息,可以对敏感方法进行分类,无需分析源代码或执行特征提取。

论文链接:https://doi.org/10.1145/3597503.3623312

9ee6925499089ffcf7096bfe127f973c.png

19、Domain Knowledge Matters: Improving Prompts with Fix Templates for Repairing Python Type Errors

作为一种动态编程语言,Python在近年来变得越来越流行。虽然Python的动态类型系统有助于开发人员编写Python程序,但也会在运行时引发类型错误,这些错误虽然普遍存在,但却不容易修复。目前存在基于规则的方法自动修复Python类型错误。这些方法可以为手动定义的模板覆盖的类型错误生成准确的修补程序,但需要领域专家设计修补方案规则,并且在真实世界类型错误的模板覆盖率较低。学习为基础的方法减轻了设计修补程序规则的手动工作,由于深度学习的最新进展,这些方法变得流行起来。在学习为基础的方法中,基于提示的方法利用通过预定义提示的代码预训练模型的知识库,在一般程序修复任务中获得了最先进的性能。然而,这些提示是手动定义的,没有涉及修复Python类型错误的任何特定线索,因此效果有限。如何自动利用领域知识来改进提示以进行类型错误修复是具有挑战性且未被充分探讨的问题。

本文提出了TypeFix,一种将修复模板结合到基于提示的方法中,用于修复Python类型错误。TypeFix首先通过一种新颖的层次聚类算法挖掘广义的修复模板。确定的修复模板指示了现有类型错误修复的常见编辑模式和上下文。然后,TypeFix通过采用广义修复模板作为领域知识,为代码预先训练的模型生成代码提示,在其中,对于每个类型错误,掩码是自适应位置而不是预先确定的。在包括BugsInPy和TypeBugs在内的两个基准上进行的实验表明,TypeFix成功修复了26和55个类型错误,分别优于最佳基线方法9和14个。此外,提出的修复模板挖掘方法可以覆盖75%的开发人员在两个基准中的修补程序,将最佳基于规则的方法PyTER提高超过30%。

论文链接:https://doi.org/10.1145/3597503.3608132

32675b22bbb661a3436a63666492e5f7.png

20、ECFuzz: Effective Configuration Fuzzing for Large-Scale Systems

一个大规模系统包含了大量的配置空间,这是因为它具有大量的配置参数。当探索配置空间时,这导致了配置参数之间的组合爆炸。现有的配置测试技术首先使用模糊测试来生成不同的配置参数,然后直接将它们注入到测试程序中,以发现由配置引起的错误。然而,它们没有充分考虑大规模系统的复杂性,导致测试效果较低。在本文中,我们提出了ECFuzz,一个针对大规模系统的有效配置模糊器。我们的核心方法包括:(i)多维配置生成策略。ECFuzz根据不同的依赖关系设计不同的变异策略,并从候选配置参数中选择多个配置参数,有效生成配置参数;(ii)面向单元测试的配置验证策略。ECFuzz将单元测试引入配置测试技术中,以在执行系统测试之前筛选出不太可能产生错误的配置参数,并有效验证生成的配置参数。我们在包括HCommon、HDFS、HBase、ZooKeeper和Alluxio在内的现实世界大规模系统中进行了大量实验。我们的评估结果显示,ECFuzz在发现由配置引起的崩溃错误方面是有效的。与包括ConfTest、ConfErr和ConfDiagDetector等最先进的配置测试工具相比,当相同的1000个测试用例被注入系统时,ECFuzz发现了60.3-67个更多的意外失败,增加了1.87x-2.63x。此外,ECFuzz还暴露了14个之前未知的错误,其中5个已经被确认。

论文链接:https://doi.org/10.1145/3597503.3623315

818c4e7eb237613d78a5f4b392576994.png

21、EDEFuzz: A Web API Fuzzer for Excessive Data Exposures

API通常会向客户端应用程序传输比它们实际需要的数据多得多,并且在Web应用程序环境下,这些数据通常会通过公共渠道传输。这个问题被称为过度数据泄露(EDE),是OWASP在2019年排名第三的最重要的API漏洞。然而,在研究或工业界中,很少有自动化工具能够有效地发现和修复此类问题。这并不奇怪,因为该问题缺乏明确的测试预言:这种漏洞不会通过显式的异常行为(例如程序崩溃或内存访问违规)来表现出来。

在这项工作中,我们开发了一种形态学关系来解决这一挑战,并构建了第一个模糊测试工具——我们称之为EDEFuzz——来系统地检测EDE。EDEFuzz可以显著减少手动检查和临时文本匹配技术中发生的误报,这是目前最常用的方法。

我们对来自Alexa Top-200的69个适用目标进行了EDEFuzz测试,并发现了33,365个潜在的泄露情况,说明了我们工具的广泛适用性和可扩展性。在澳大利亚八个热门网站的更为严格控制的实验中,EDEFuzz以最小配置实现了高达98.65%的真实阳性率,展示了我们工具的准确性和效率。

论文链接:https://doi.org/10.1145/3597503.3608133

52bd574757cff2b5eaac5562b5fa25a1.png

22、EGFE: End-to-end Grouping of Fragmented Elements in UI Designs with Multimodal Learning

在工业界将UI设计原型转化为代码时,从设计原型自动生成代码可以加快应用开发和GUI迭代的速度。然而,在没有严格设计规范的设计原型中,UI组件可能由碎片化元素组成。将这些碎片化元素进行分组可以极大提高生成代码的可读性和可维护性。当前的方法采用两阶段策略,引入手工制作的规则来对碎片化元素进行分组。然而,由于视觉重叠和微小的UI元素,这些方法的性能并不令人满意。在本研究中,我们提出了一种名为EGFE的新方法,通过UI序列预测自动进行端到端分组碎片化元素。为了便于UI理解,我们创新地构建了一个Transformer编码器来建模UI元素之间的关系,并采用多模态表示学习。对来自专业UI设计师的4606个UI原型数据集的评估表明,我们的方法在编辑距离阈值为4时,在精确度(提高了29.75%)、召回率(提高了31.07%)和F1分数(提高了30.39%)方面优于最先进的基线方法。此外,我们进行了一项实证研究来评估生成的前端代码的改进情况。结果表明我们的方法在实际软件工程应用中具有有效性。我们的端到端碎片化元素分组方法为改进与UI相关的软件工程任务创造了机会。

论文链接:https://doi.org/10.1145/3597503.3623313

8ed5275e657768bcd920378f189f8f7f.png

23、Enabling Runtime Verification of Causal Discovery Algorithms with Automated Conditional Independence Reasoning

因果发现是一种用于在数据中识别变量之间因果关系的强大技术。它已在软件工程的各种应用中得到广泛应用。因果发现广泛涉及条件独立性(CI)测试。因此,其输出质量高度依赖于CI测试的性能,而实际中这些测试往往不可靠。此外,当进行过多的CI测试时会引发隐私问题。

尽管不可靠和过多的CI测试之间的性质不同,本文确定了一种统一而基本的方法来解决这两个问题。一般来说,CI语句,即CI测试的输出,遵循Pearl的公理,这是有关条件独立性的一组既定完整性约束条件。因此,我们可以通过检测违反Pearl公理的CI语句来识别错误的CI语句,或者通过检测逻辑地包含在Pearl公理中的过多CI语句来修剪它们。综合地看,这两个问题都归结为在Pearl公理下推理CI语句的一致性问题(称为CIR问题)。

我们提出了一种名为CICheck的运行时验证工具,旨在从可靠性和隐私的角度加强因果发现算法。CICheck采用一种经过验证和可判定的编码方案,将CIR转化为SMT问题。为了高效解决CIR问题,CICheck引入了一个四阶段决策过程,并通过三种轻量级优化主动证明或反驳一致性,并只在必要时采用昂贵的基于SMT的推理。基于对CIR的决策过程,CICheck包括两个变体:ED-Check和P-Check,分别用于检测错误的CI测试(以增强可靠性)和修剪过多的CI测试(以增强隐私性)。我们在四个真实数据集和100个CIR实例上对CICheck进行了评估,结果表明它在检测错误的CI测试和减少过多的CI测试的有效性的同时保持了实用性能。

论文链接:https://doi.org/10.1145/3597503.3623348

e986f94535fc02a9a484a14b414629f4.png

24、Exploring the Potential of ChatGPT in Automated Code Refinement: An Empirical Study

代码审查是确保软件项目质量和可维护性的关键活动。然而,这是一项耗时且常常存在错误的任务,可能会对开发过程产生重大影响。最近,最先进的语言模型ChatGPT在各种自然语言处理任务中展现出令人印象深刻的性能,表明它有潜力自动化代码审查流程。然而,目前尚不清楚ChatGPT在代码审查任务中的表现如何。为了填补这一空白,本文开展了第一项实证研究,以了解ChatGPT在代码审查任务中的能力,重点关注基于给定代码审查的自动化代码修正。为了进行该研究,我们选择现有的基准数据集CodeReview,并构建了一个质量高的新代码审查数据集。我们将CodeReviewer作为比较基线,与ChatGPT进行对比。我们的研究结果显示,ChatGPT在代码修正任务中表现优于CodeReviewer。具体来说,我们的结果显示,ChatGPT分别实现了更高的EM和BLEU分数,分别为22.78和76.44,而最先进的方法在高质量代码审查数据集上仅实现了15.50和62.88。我们进一步确定了ChatGPT表现不佳的根本原因,并提出了几种缓解这些挑战的策略。我们的研究为ChatGPT在自动化代码审查过程中的潜力提供了见解,并强调了潜在的研究方向。

论文链接:https://doi.org/10.1145/3597503.3623306

a55424ec3090f6a708bd4442d5814963.png

25、FAIR: Flow Type-Aware Pre-Training of Compiler Intermediate Representations

尽管大多数现有的从代码学习源代码特征的预训练模型,如代码标记和抽象语法树,但也有一些工作集中在从编译器中间表示(IR)中学习。现有的基于IR的模型通常利用诸如指令、控制和数据流图(CDFGs)、调用图等IR特征。然而,这些方法混淆了CDFG中的变量节点和指令节点,并未区分不同类型的流,而它们使用的神经网络无法捕捉远距离依赖关系,并存在过度平滑和过度压缩的问题。为了解决这些弱点,我们提出了FAIR,一种针对IR的流类型感知预训练模型,涉及采用(1) IR程序的新型输入表示;(2) 图形变换器来解决过度平滑、过度压缩和长依赖问题;和(3) 我们专门提出的五项预训练任务,使FAIR能够学习IR标记的语义、流类型信息和整体IR表示。实验结果表明,FAIR在四个与代码相关的下游任务上均能达到最先进的结果。

论文链接:https://doi.org/10.1145/3597503.3608136

45e0609a1883e9dc3a218988ba9b540c.png

26、Fine-SE: Integrating Semantic Features and Expert Features for Software Effort Estimation

可靠的工作量估算对软件规划和管理至关重要,特别是在需要有效和准时交付的行业中。尽管已经提出了各种估算方法(例如规划扑克和类比),但它们可能是手动的和/或主观的,难以应用于其他项目。近年来,依赖于学习专家特征或语义特征的工作量估算深度学习方法得到了广泛研究,并被发现具有潜力。语义特征和专家特征分别从不同角度描述软件任务,然而在文献中,这两种特征的最佳组合尚未被探索以增强工作量估算。此外,有一些研究讨论了在工业中估算工作量时哪些专家特征是有用的。为了实现这一目标,我们通过对26名企业员工进行访谈,调查了可用于估算工作量的潜在13个专家特征。基于此,我们提出了一种新颖的模型,称为Fine-SE,利用语义特征和专家特征进行工作量估算。为了验证我们的模型,在全球信息和通信技术企业的17个工业项目和四个开源软件项目中,对超过30,000个软件任务进行了一系列评估。评估结果表明,Fine-SE在评估指标(即平均绝对误差、相对误差的平均幅度和性能指标)上提供比基线更高的性能,特别是在具有大量软件任务的工业项目中,这意味着工作量估算有了显著改善。与专家估算相比,Fine-SE在项目内估算中提高了32.0%-45.2%的评估指标。与最先进的模型Deep-SE和GPT2SP相比,它在工业项目中也实现了8.9%-91.4%的提高。实验结果揭示了在工作量估算中集成专家特征和语义特征的价值。

论文链接:https://doi.org/10.1145/3597503.3623349

c28642c10c51958f889355b07c007978.png

27、FuzzSlice: Pruning False Positives in Static Analysis Warnings through Function-Level Fuzzing

手动确认静态分析报告是一项艰巨的任务。这是由于警告数量庞大,其中虚警的密度也很高。已经提出了模糊测试技术来验证静态分析警告。然而,一个主要的限制是对整个项目进行模糊测试以达到所有静态分析警告是不可行的。这可能需要几天时间和指数级的机器时间才能线性增加代码覆盖率。

因此,我们提出了FuzzSlice,这是一个新颖的框架,可以自动剪枝静态分析警告中的可能虚警。与以前主要专注于确认静态分析警告中的真阳性的工作不同,这不可避免地需要端到端的模糊测试,FuzzSlice专注于排除潜在的虚警,这在静态分析报告中占大多数。我们工作的关键见解是,在给定的时间预算内,在函数级别进行模糊测试时,不会导致崩溃的警告可能是虚警。为了实现这一点,FuzzSlice首先旨在在函数级别生成可编译的代码片段。然后,FuzzSlice对这些代码片段进行模糊测试,而不是对整个二进制文件,以剪除可能的虚警。FuzzSlice也不太可能将真实漏洞错误地分类为虚警,因为在函数级别,模糊测试工具也可以重现导致崩溃的输入。我们在Juliet综合数据集和真实世界复杂的C项目上评估了FuzzSlice:openssl、tmux和openssh-portable。我们的评估显示,Juliet数据集中有864个虚警,这些虚警都被FuzzSlice检测到。对于开源软件库,我们能够让两个开源软件库的开发人员独立标记这些警告。FuzzSlice自动识别了这两个库中开发人员确认的53个虚警中的33个。这意味着FuzzSlice可以在开源软件库中将虚警数量减少62.26%,在Juliet数据集中减少100%。

论文链接:https://doi.org/10.1145/3597503.3623321

09e1bd9f32e987be529c4d316d8e088e.png

28、How do Developers Talk about GitHub Actions? Evidence from Online Software Development Community

持续集成、部署和交付(CI/CD)已经成为DevOps实践的基石。最近几年,GitHub Action(GHA)迅速取代了GitHub上的传统CI/CD工具,为开发人员提供了高效自动化的工作流程。随着GHA的广泛应用和影响力,了解GHA开发人员在实践中面临的现有问题以及这些问题的潜在解决方案至关重要。不幸的是,目前我们在这个领域的知识相对较少。为了填补这一空白,我们进行了一项规模庞大的实证研究,涵盖了6590个Stack Overflow(SO)问题和315个GitHub问题。我们的研究得出了与GHA相关问题的首个全面分类法,涵盖了4个类别和16个子类别。然后,我们分析了问题类别的受欢迎程度和困难程度以及它们之间的相关性。此外,我们总结了针对不同GHA问题的56种解决策略。我们还从不同受众的角度提炼了我们发现的实际启示。我们相信我们的研究对新兴的GHA实践的研究做出了贡献,并指导了未来工具和技术的支持。

论文链接:https://doi.org/10.1145/3597503.3623327

55ca50ede0e9e72e30f0f8b5bbba04b3.png

29、How to Support ML End-User Programmers through a Conversational Agent

机器学习(ML)在最终用户程序员(EUP)应用中正日益受到重视。然而,没有正确背景知识的机器学习最终用户程序员(ML-EUP)面临陡峭的学习曲线,以及在建模过程中出现错误和缺陷的风险增加。在这项工作中,我们设计了一个名为“牛顿”的对话代理,作为专家来支持ML-EUP。牛顿的设计是通过对现有文献的全面审查进行的,从中我们确定了ML-EUP面临的六个主要挑战以及五种辅助策略。为了评估牛顿设计的有效性,我们进行了一项带主观特征的“奥兹巫术”研究,参与者为12位ML-EUP。我们的研究结果表明,牛顿有效地帮助了ML-EUP,解决了文献中所强调的挑战。我们还提出了六项未来对话代理的设计指南,这可以帮助其他EUP应用程序和软件工程活动。

论文链接:https://doi.org/10.1145/3597503.3608130

dccd7c2bfd4c7d2ed573f61e92024beb.png

30、ITER: Iterative Neural Repair for Multi-Location Patches

自动程序修复(APR)在使用神经网络的情况下取得了令人期待的结果。然而,大多数由APR工具生成的补丁仅限于一个单一位置。观察使用神经修复生成的补丁时,大部分补丁无法编译,而少数无法编译的补丁则朝着正确的方向发展。在这两种情况下,基本问题是忽视了局部补丁的潜力。在本文中,我们提出了一种基于改进局部补丁直至它们变得合理和正确的迭代程序修复范例,称为ITER。首先,ITER通过修复编译错误和进一步细化先前生成的代码,通过迭代改善局部单一位置的补丁。其次,ITER通过故障定位重新执行,通过迭代改善局部补丁以构建多位置补丁。ITER基于经过验证的深度神经网络和代码表示为Java实现。ITER在Defects4J 2.0中的10个开源项目中的476个缺陷上进行评估。ITER成功修复了其中的15.5%,包括9个独特修复的多位置错误。

论文链接:https://doi.org/10.1145/3597503.3623337

b04bc8dcc2249b18856309c6c4741068.png

31、Improving Testing Behavior by Gamifying IntelliJ

测试是软件开发中重要的方面,但不幸的是,它经常被忽视。尽管测试质量分析(如代码覆盖率或变异分析)可以告知开发人员他们测试的质量,但这些报告只在持续集成或代码审查期间偶尔被查看,如果有的话,对开发人员的测试行为的影响往往微乎其微。为了实际影响开发人员的行为,可能需要直接在他们编程环境中激励开发人员。我们介绍了IntelliGame,这是一个为流行的IntelliJ Java集成开发环境提供的游戏化插件,通过多级成就系统奖励开发人员积极的测试行为:共有27个不同的成就,每个成就都有不同的级别,当开发人员展示出值得称赞的测试行为时提供肯定的反馈,并激励他们进一步继续和改进这种行为。一项对49名参与者进行的Java编程任务的控制实验显示了IntelliGame引发的测试行为的显著差异:受激励的开发人员编写更多的测试,获得更高的覆盖率和变异分数,更经常地运行他们的测试,并更早实现功能。

论文链接:https://doi.org/10.1145/3597503.3623339

a8ce3b5489cc915a3a84a6ad14fefdc9.png

32、Inferring Data Preconditions from Deep Learning Models for Trustworthy Prediction in Deployment

深度学习模型在开发阶段通过对数据的某些假设进行训练,然后在部署阶段用于预测。在部署期间,理解模型对未知数据的预测结果的可信度非常重要。现有的用于规定和验证传统软件的方法对于这项任务是不足够的,因为它们无法处理深度神经网络模型架构和预期结果的复杂性。在这项工作中,我们提出了一种新颖的技术,该技术利用从神经网络计算中得出的规则来推断深度神经网络模型的数据前提条件,以确定其预测结果的可信度。我们的方法DeepInfer引入了一种新颖的训练后DNN模型抽象,利用Dijkstra的谓词变换语义进行最弱前置条件推理。通过对神经网络抽象表示的归纳类型推导规则,我们可以克服由从输出层向输入层的反向非线性计算而引起的矩阵维度问题。我们利用每种激活函数的规则进行最弱前提条件计算,以从深度神经网络的最终输出的给定后置条件计算每层的前提条件。我们在来自五个不同来源的四个不同数据集上广泛评估了DeepInfer在29个现实世界DNN模型上的效果,并展示了其与密切相关工作相比的效用性、有效性和性能改进。DeepInfer有效地检测到高准确度模型的正确和错误预测,具有很高的召回率(0.98)和高的F-1得分(0.84),并且相对于先前的技术SelfChecker有了显著的改进。DeepInfer的平均运行时开销很低,对于所有未知数据集只有0.22秒。我们还使用相同的硬件设置比较了运行时开销,并发现DeepInfer比SelfChecker快3.27倍,是该领域的最新技术。

论文链接:https://doi.org/10.1145/3597503.3623333

53377f9b47261a4c3cfd57d3f03cef27.png

33、It's Not a Feature, It's a Bug: Fault-Tolerant Model Mining from Noisy Data

数据挖掘模型在工业中得到广泛应用。存在各种模型推断方法适用于完全确定的行为,然而,在实际应用中,由于诸如消息丢失或环境因素等故障导致的数据中往往包含噪声,许多推理算法在处理这些问题时存在困难。我们提出了一种新颖的模型挖掘方法,使用部分最大可满足性(Partial Max-SAT)求解来推断一组带有噪声的执行轨迹中最佳可能的自动机。这种方法使我们能够忽略最小数量的可能有误的观察结果,以便构建确定性自动机。不需要对数据进行预处理。评估了该方法的性能以及一些实际应用方面的考虑,包括三个工业用例,我们从中推断出正确的模型。

论文链接:https://doi.org/10.1145/3597503.3623346

9a961521132ac60bc09122d942c2e905.png

34、Kind Controllers and Fast Heuristics for Non-Well-Separated GR(1) Specifications

非良好分离(NWS)是反应合成规范中已知的质量问题。NWS的问题发生在合成系统可以通过阻止环境无法满足其假设来避免满足其保证的情况下。

在这项工作中,我们提出了两个方面的贡献,以更好地处理NWS。首先,我们展示了如何合成系统以避免利用NWS,即不阻止任何环境假设的满足,即使可能。其次,我们提出了一组用于快速检测NWS的启发式方法。从文献中的基准测试结果显示了我们工作的有效性和重要性。

论文链接:https://doi.org/10.1145/3597503.3608131

60760e092fc130d8c00bf656537301b3.png

35、KnowLog: Knowledge Enhanced Pre-trained Language Model for Log Understanding

作为半结构化文本,日志富含语义信息,对于自动化日志分析而言,全面理解日志至关重要。随着预训练语言模型在自然语言处理领域取得的成功,许多研究已利用这些模型来理解日志。尽管取得了成功,现有的预训练语言模型仍然存在三个弱点。首先,这些模型无法理解领域特定术语,尤其是缩写词。其次,这些模型难以充分捕捉完整的日志上下文信息。第三,这些模型难以获取不同风格日志的通用表示。为了解决这些挑战,我们引入 KnowLog,一个用于日志理解的知识增强预训练语言模型。具体而言,为解决前两个挑战,我们利用来自公共文档的日志缩写和自然语言描述作为本地和全局知识,并通过设计新颖的预训练任务来利用这些知识以增强模型。为解决最后一个挑战,我们设计了基于对比学习的预训练任务以获得通用表示。我们通过在六项不同的日志理解任务上微调 KnowLog 来评估其性能。大量实验证明,相较于没有知识增强的现有预训练语言模型,KnowLog 显著增强了日志理解,并取得了最新的成果。此外,在迁移学习和低资源场景下,我们还进行了额外实验,展示了 KnowLog 的重大优势。我们的源代码和详细实验数据可在 https://github.com/LeaperOvO/KnowLog 上获取。

论文链接:https://doi.org/10.1145/3597503.3623304

197a7cebdd9b0adcc599dae96e70c58d.png

36、Large Language Models are Edge-Case Generators: Crafting Unusual Programs for Fuzzing Deep Learning Libraries

深度学习(DL)库中的漏洞可能影响几乎所有下游DL应用程序的运行,因此确保这类系统的质量至关重要。为模糊DL库生成有效的输入程序具有挑战性,因为这些输入程序需要同时满足受支持语言(例如Python)的语法/语义要求以及构建有效计算图的张量/运算器约束。最近,TitanFuzz的工作表明,现代大型语言模型(LLMs)可以被直接利用来隐式学习所有语言和DL计算约束,以生成有效的程序用于模糊DL库(及其他用途)。然而,LLMs往往生成遵循与其庞大预训练语料库(如GitHub)中典型程序相似模式/标记的普通程序,而模糊更倾向于覆盖边缘情况或不太可能手动生成的异常输入。

为填补这一空白,本文提出了FuzzGPT,这是首个用于引导LLMs合成用于模糊的异常程序的方法。FuzzGPT主要建立在一个众所周知的假设之上,即历史上触发错误的程序可能包含对发现错误至关重要的稀有/有价值的代码元素。同时,传统技术利用此类历史信息需要大量人力投入,既要设计专用生成器,又要确保生成程序的语法/语义有效性。FuzzGPT证明了通过LLMs的内在能力(包括微调和上下文学习),这一过程可以完全自动化,同时具有通用性,适用于具有挑战性的领域。虽然FuzzGPT可以与不同的LLMs一起使用,但本文专注于功能强大的GPT风格模型:Codex和CodeGen。此外,FuzzGPT还展示了直接利用最近ChatGPT的指令遵循能力进行有效模糊的潜力。对PyTorch和TensorFlow这两个流行的DL库的实验研究表明,FuzzGPT可以显著优于TitanFuzz,检测到76个漏洞,其中49个已经被确认为先前未知的漏洞,包括11个高优先级的错误或安全漏洞。

论文链接:https://doi.org/10.1145/3597503.3623343

455f1074adacc4f8b5b8675395218182.png

37、Large Language Models are Few-Shot Summarizers: Multi-Intent Comment Generation via In-Context Learning

代码注释生成旨在为代码片段生成自然语言描述,以促进开发人员的程序理解活动。尽管经过长时间的研究,现有方法的一个瓶颈是,给定一个代码片段,它们只能生成一个注释,而开发人员通常需要了解来自不同角度的信息,例如这个代码段的功能是什么,如何使用它。为了解决这一局限性,本研究在实证上探讨了利用大型语言模型(LLM)生成可以满足开发人员多样意图的注释的可行性。我们的直觉基于以下事实:(1)代码及其成对的注释在LLM的预训练过程中被使用,以建立自然语言和编程语言之间的语义连接,以及(2)在真实项目中收集用于预训练的注释通常包含不同开发人员的意图。因此,我们假设LLM在预训练后已经能够从不同角度理解代码。实际上,在两个大型数据集上进行的实验证明了我们洞见的合理性:通过采用上下文学习范式并为LLM提供充分的提示(例如提供十个或更多的示例),LLM可以显著优于最先进的监督学习方法,在生成具有多重意图的注释上。结果还显示,为构建提示设计定制化策略和对结果重新排名的后处理策略均可以提高LLM的性能,这为利用LLM实现注释生成指明了未来研究方向。

论文链接:https://doi.org/10.1145/3597503.3608134

f12c5abbe397be1e7487c821fab95c42.png

38、Large Language Models for Test-Free Fault Localization

故障定位(FL)旨在自动定位有错误的代码行,这是许多手动和自动调试任务的关键第一步。先前的FL技术假定提供输入测试,并且通常需要进行广泛的程序分析、程序仪器化或数据预处理。先前有关用于APR的深度学习的工作难以从小数据集中学习,并且在实际程序上产生有限的结果。受到代码的大型语言模型(LLMs)能够根据极少的示例适应新任务的能力的启发,我们研究了将LLMs应用于行级别故障定位的可行性。具体来说,我们建议通过在LLMs学习的表示之上微调一小组双向适配器层来克服LLMs的从左到右的性质,以生成LLMAO,这是第一个基于语言模型的故障定位方法,可以在没有任何测试覆盖信息的情况下定位有错误的代码行。我们使用3.5亿、60亿和160亿参数微调LLMs,应用于手动筛选的小型buggy程序语料库,如Defects4J语料库。我们观察到,当基于较大模型构建时,我们的技术在故障定位方面获得了更高的信心,随着LLM大小的增加,bug定位性能持续提升。我们的实证评估显示,LLMAO相对于现有的基于机器学习的故障定位(MLFL)基线将Top-1结果提高了2.3%至54.4%,Top-5结果提高了14.4%至35.6%。LLMAO还是第一个使用语言模型架构训练的FL技术,可以检测到代码行级别的安全漏洞。

论文链接:https://doi.org/10.1145/3597503.3623342

eaddcfc7c1adf5c630efe37782062778.png

39、Learning and Repair of Deep Reinforcement Learning Policies from Fuzz-Testing Data

基于演示的强化学习(RLfD)是一种有前途的方法,通过从专家演示中学习,以及与环境的交互,来改善强化学习(RL)的探索效率。在本文中,我们提出了一个框架,将基于搜索的测试技术与RLfD相结合,旨在提高RL策略的可靠性水平,并减少人工工程工作量。在我们的框架内,我们提供了有效训练、评估和修复RL策略的方法。我们不依赖于从(人类)专家收集昂贵的演示,而是通过基于搜索的模糊化方法自动计算多样化的演示集,并将这些模糊演示用于RLfD。为了评估训练后的RL代理的安全性和稳健性,我们在黑盒环境中搜索安全关键场景。最后,当检测到不安全的行为时,我们通过模糊化测试计算代表安全行为的演示,并用它们来修复策略。我们的实验表明,我们的框架能够在不需要任何专家知识的情况下,有效地学习表现出色且安全的策略。

论文链接:https://doi.org/10.1145/3597503.3623311

cd87d9f3d24df0b27e0f7dd73248f3ad.png

40、Learning-based Widget Matching for Migrating GUI Test Cases

GUI测试用例迁移是将GUI测试用例从源应用迁移到目标应用的过程。测试用例迁移的关键是小部件匹配。近年来,研究人员通过将小部件匹配建模为一个匹配任务提出了各种方法。然而,由于这些匹配方法依赖于静态词嵌入,没有利用上下文信息来表示小部件,并且需要手动制定匹配函数,这在处理应用程序中复杂匹配关系时存在主要限制。为了解决这些限制,我们提出了第一个基于学习的小部件匹配方法,称为TEMdroid(测试迁移)。与现有方法不同,TEMdroid使用BERT来捕获上下文信息并学习一个匹配模型来匹配小部件。此外,为了平衡应用程序中正负样本之间的明显不平衡,我们设计了一个两阶段训练策略,首先训练一个硬负样本挖掘器来挖掘硬负样本,然后使用正样本和挖掘的硬负样本进一步训练匹配模型。我们对34个应用程序的评估显示,TEMdroid在事件匹配(即小部件匹配和目标事件综合)和测试用例迁移中效果显著。在事件匹配方面,TEMdroid的Top1准确率为76%,相比基线提高了17%。对于测试用例迁移,TEMdroid的F1得分为89%,与基线方法相比也提高了7%。

论文链接:https://doi.org/10.1145/3597503.3623322

e939c9ea769891a9da4fe308fcd43ac7.png

41、LibvDiff: Library Version Difference Guided OSS Version Identification in Binaries

开源软件(OSS)已被广泛应用于加快软件开发进程,但不可避免地使下游软件面临潜在漏洞的危险。准确识别OSS的版本不仅有助于检测与之相关的漏洞,还能够在1天漏洞发布时及时发出警报。然而,当前用于识别OSS版本的方法主要依赖于版本字符串或常量特征,这些特征在已编译的OSS二进制文件中可能不存在,或者当只有函数代码发生更改时可能不具代表性。因此,这些方法通常在识别正在使用的OSS二进制文件的版本时不够准确。

为此,我们提出了LibvDiff,一种用于识别开源软件版本的新方法。它通过精确的符号信息和函数级代码变化,利用二进制代码相似性检测来检测细微差异。LibvDiff引入了基于新颖版本坐标系统的候选版本过滤器,通过量化版本之间的差距并快速识别潜在版本来提高效率。为了加快代码相似性检测过程,LibvDiff提出了一个基于函数调用的锚定路径过滤器,以最小化目标二进制文件中要比较的函数数量。我们通过在各种编译设置和两个数据集(一个包含版本字符串,另一个不包含版本字符串)下进行全面实验来评估LibvDiff的性能,结果显示,我们的方法在两个数据集中分别达到94.5%和78.7%的精度,优于现有的学术方法和行业工具(包括学术方法和行业工具)平均分别提高了54.2%和160.3%。通过识别和分析真实世界固件图像中的OSS二进制文件,我们发现了一些有趣的发现,例如开发人员在更新不同的OSS时存在重大差异,不同的供应商也可能使用相同的OSS二进制文件。

论文链接:https://doi.org/10.1145/3597503.3623336

94fae8eac5fbfba4c5a9104200e37e1b.png

42、LogShrink: Effective Log Compression by Leveraging Commonality and Variability of Log Data

日志数据是记录系统事件和状态的关键资源,用于系统执行期间。然而,随着系统规模的增长,日志数据生成变得愈发爆炸,导致日志存储成本昂贵,例如生产环境中每天几百TB的存储开销。为了解决这一问题,日志压缩已成为减少磁盘存储并允许进一步日志分析的关键任务。然而,现有的通用和特定于日志的压缩方法在利用日志数据特性方面受到限制。为了克服这些限制,我们进行了一项实证研究,并得出了关于促进日志压缩任务的日志数据特性的三个主要观察结果。 基于这些观察结果,我们提出了LogShrink,一种通过利用日志数据的共性和变化性而出色的日志压缩方法。提出了一个基于最长公共子序列和熵技术的分析器,用于确定日志消息中的潜在共性和变化性。这背后的关键思想是,共性和变化性可以被利用来用更短的表示方式来压缩日志数据。此外,介绍了基于聚类的序列采样器,以加快共性和变化性分析器的速度。广泛的实验结果表明,LogShrink在压缩比率上可以超过基线,平均提高16%至356%,同时保持合理的压缩速度。

论文链接:https://doi.org/10.1145/3597503.3608129

19748da13b87dd58a07703c567495301.png

43、Marco: A Stochastic Asynchronous Concolic Explorer

混合符号执行是一种强大的程序分析技术,用于代码路径探索。尽管最近取得了极大进展,大大提高了混合符号执行引擎的效率,但路径约束求解仍然是混合符号测试的一个主要瓶颈。对于输入/分支的智能调度变得更加关键。我们的研究表明,先前未经研究的最新混合符号执行引擎所采用的分支翻转策略存在一些局限性。我们建议通过全局视角评估每个分支的潜力,考虑每个分支处的路径分歧概率来验证这一想法。为了验证这一想法,我们实现了一个原型Marco,并对来自Google的Fuzzbench、Binutils和UniBench的30个现实世界程序进行了评估。结果表明,Marco能够超越基线方法,并在基线方法终止后持续取得进展。

论文链接:https://doi.org/10.1145/3597503.3623301

ee68e2df09944894888dea4d61b8b326.png

44、Modularizing while Training: A New Paradigm for Modularizing DNN Models

深度神经网络(DNN)模型已经成为智能软件系统中越来越关键的组成部分。然而,训练一个DNN模型通常耗时且需要大量的计算资源。为了解决这个问题,最近的研究集中在重复使用现有的DNN模型上 - 借鉴软件工程中的软件重用概念。然而,重复使用整个模型可能会导致额外的开销或继承不需要功能的弱点。因此,现有的工作提出将已经训练好的模型分解成模块,并在此基础上实现模块的重复使用。由于训练模型并非为模块化而构建,因此在训练后进行模块化可能会导致巨大的开销和模型准确性下降。在本文中,我们提出了一种新颖的方法,将模块化纳入到模型训练过程中,即在训练过程中模块化(MwT)。我们通过两个损失函数训练一个具有结构化模块的模型,以优化模块内的内聚性和模块间的耦合性。我们已经实现了用于模块化卷积神经网络(CNN)模型的这种方法。对代表性模型的评估结果显示,MwT优于现有的最先进的训练后模块化方法。具体来说,MwT造成的准确性损失只有1.13个百分点,低于现有方法的准确性损失。MwT生成的模块的核保留率仅为14.58%,相比现有方法减少了74.31%。此外,训练和模块化所需的总时间成本仅为108分钟,仅为现有方法所需时间的一半。我们的工作表明,MwT是实现DNN模型模块化的一种新颖且更有效的范式,为实现模型重用提供了一种新的视角。

论文链接:https://doi.org/10.1145/3597503.3608135

8675f0ba210452a6192c9f768d824e98.png

45、Novelty Begets Popularity, But Curbs Participation - A Macroscopic View of the Python Open-Source Ecosystem

谁创造了最具创新性的开源软件项目?这些项目往往会有什么命运?在建立在长期研究商业和其他领域创新的基础上,以及最近在科学研究领域科学的创新建模方面的进展的基础上,本文采用创新的类比,将其视为从现有知识的新组合中产生。因此,我们认为那些以新颖方式重新组合现有软件库的软件项目是创新的,即那些基于从导入语句中提取的不寻常组合的软件包构建的项目。然后,我们报告了对Python开源软件生态系统中创新的大规模定量研究。我们的结果表明,更高水平的创新性在统计上与更高的GitHub星标数量相关,即新颖性带来了受欢迎程度。与此同时,我们发现,在控制项目规模的情况下,更具创新性的项目往往涉及较小的贡献者团队,并且有更高的风险在长期内被放弃。我们得出结论,创新和开源可持续性密切相关,并在某种程度上是对立的。

论文链接:https://doi.org/10.1145/3597503.3608142

09368a4e5519231022fcccbda1ed18d9.png

46、NuzzleBug: Debugging Block-Based Programs in Scratch

虽然专业的集成式编程环境为开发人员提供先进的调试功能,但面向年轻学习者的基于块的编程环境通常根本不提供调试支持,从而抑制了调试并阻止了调试教育的进行。本文介绍了NuzzleBug,这是流行的基于块的编程环境Scratch的一个扩展,它提供了缺失的调试支持。NuzzleBug可以通过经典调试功能(如单步执行和断点)来控制Scratch程序的执行,它是一款全知调试器,还可以进行反向执行。为了帮助学习者得出引导调试的假设,NuzzleBug是一款询问式调试器,它可以询问关于执行的问题,并提供解释所询问行为的答案。为了评估NuzzleBug,我们调查了教师的意见,并研究了对学习者在调试效果和效率方面的影响。我们发现教师认为NuzzleBug是有用的,并且孩子们可以有效地使用它来调试有问题的程序。然而,系统性调试需要专门的培训,即使NuzzleBug能提供正确答案,学习者可能仍需要进一步帮助理解故障和必要的修复措施,因此需要进一步研究改进调试技术及其提供的信息。

论文链接:https://doi.org/10.1145/3597503.3623331

5e98aabe7dc3d997bfc95c447ebb221f.png

47、Object Graph Programming

我们介绍了对象图编程(OGO),它可以通过声明性查询读取和修改对象图(即对象堆的整个状态)。OGO将堆中的对象及其关系建模为对象图,因此将堆视为图数据库:图中的每个节点都是一个对象(例如,一个类的实例或元数据类的实例),每个边都是对象之间的关系(例如,一个对象的字段引用另一个对象)。我们利用Cypher,即图数据库最流行的查询语言,作为OGO的查询语言。与使用集合(例如List)作为数据源的LINQ不同,OGO将整个对象图视为单个“集合”。OGO非常适合用于查询集合(就像LINQ一样),内省运行时系统状态(例如,查找给定类的所有实例或通过反射访问字段),以及编写访问整个程序状态的断言。我们分别在Java中使用两种方式为OGO制作了原型:(a)将对象图转换为Neo4j数据库,然后运行Cypher查询,和(b)通过实现我们自己的内存图查询引擎直接查询对象堆。我们使用OGO将大型开源项目中的数百个语句重写为OGO查询。我们报告了我们的原型的使用经验和性能。

论文链接:https://doi.org/10.1145/3597503.3623319

a26d16f6bb3e6fb7e0850128c00152c4.png

48、On Using GUI Interaction Data to Improve Text Retrieval-based Bug Localization

管理缺陷报告的最重要任务之一是定位故障,以便应用修复。因此,先前的研究旨在将这个缺陷定位任务自动化,将其构建为一个信息检索问题,根据与给定缺陷报告的文本相似性检索和排名潜在有缺陷的文件。然而,在缺陷报告中包含的信息与源代码文件中的标识符或自然语言之间通常存在显着的语义鸿沟。对于面向用户的软件,目前存在一个关键信息源,可以帮助定位缺陷,但尚未得到深入研究 - 来自图形用户界面(GUI)的信息。

本文研究了这样一个假设,即对于面向最终用户的应用程序,将缺陷报告中的信息与GUI中的信息相连接,并利用这一点来帮助检索潜在有缺陷的文件,可以改进基于文本检索的缺陷定位现有技术。为了研究这种现象,我们进行了一项全面的实证研究,通过从重现场景中提取GUI交互信息,以增强四种基线文本检索技术用于缺陷定位,以(i)筛选出可能无关紧要的文件,(ii) 强化可能相关的文件,以及(iii)重构文本检索查询。为了执行我们的研究,我们从包括80个来自39个流行开源应用程序的缺陷报告在内的安卓应用实际错误的当前最大数据集中获取了完全本地化和可重现的真实错误。我们的结果表明,利用GUI信息增强传统技术可显着提高多个指标的有效性,包括在Hits@10上相对增加了13-18%。此外,通过进一步分析,我们发现我们研究的增强技术主要是与现有技术互补的,将其他有缺陷的文件推入前10个结果,同时通常保留来自基线技术的排名靠前的文件。

论文链接:https://doi.org/10.1145/3597503.3608139

d8285cf7c8912dea1fd4b928d19cca2c.png

49、On the Helpfulness of Answering Developer Questions on Discord with Similar Conversations and Posts from the Past

软件开发人员大部分时间都花在寻找与编码任务相关的问题的答案上。为了回答他们的问题,开发人员通常进行网络搜索,在问答网站上提问,或者最近在聊天社区中提问。然而,许多这些问题在先前的聊天对话或其他在线社区中已经有了答案。自动识别并向提问者建议这些先前的答案,可以节省时间和精力。在经验分析中,我们首先探讨了Discord聊天平台上重复问题的频率,并评估了我们自动识别这些问题的方法。然后,通过一个领域实验,我们与真实世界的开发人员评估了这一方法,通过这一实验我们得到了142个关于我们提供的建议对于帮助回答四个Discord社区中开发人员发布的277个问题的实用性的评价。我们还通过53份调查和10次追加访谈收集了定性反馈。我们发现,在40%的情况下,这些建议被认为是有帮助的,建议Stack Overflow帖子更常被认为是有帮助的,而过去的Discord对话,开发人员难以将问题描述为搜索查询,因此更倾向于将问题描述为在线社区中的自然语言问题。

论文链接:https://doi.org/10.1145/3597503.3623341

39b7b9b493987c75eda982cffa25990a.png

50、PonziGuard: Detecting Ponzi Schemes on Ethereum with Contract Runtime Behavior Graph (CRBG)

在近年来发现以太坊智能合约中存在庞氏骗局,这种骗局形式导致了巨大的财务损失。基于规则的检测方法依赖于预定义规则,具有有限的功能和领域知识依赖性。此外,使用类似操作码和交易的静态信息用于机器学习模型无法有效描述庞氏合约,导致可靠性和可解释性较差。

在本文中,我们提出了PonziGuard,一种基于合约运行时行为的高效庞氏骗局检测方法。受到的启发观察表明,合约的运行时行为更有效地掩盖了庞氏合约和无辜合约之间的区别,PonziGuard建立了一种全面的图形表示,称为合约运行时行为图(CRBG),准确描绘了庞氏合约的行为。此外,它将检测过程形式化为图分类任务,增强了其整体效果。我们对一个地面真实数据集进行了比较实验,并将PonziGuard应用于以太坊主网。结果显示,PonziGuard胜过当前的最先进方法,并且在开放环境中也很有效。使用PonziGuard,我们已经在以太坊主网上识别出了805个庞氏合约,导致了约281,700以太或大约5亿美元的经济损失。

论文链接:https://doi.org/10.1145/3597503.3623318

985a5c3fbae6d750b408936f84420535.png

51、Practical Program Repair via Preference-based Ensemble Strategy

到目前为止,已经设计了超过40种自动程序修复(APR)工具,具有不同的错误修复策略,已经证明在有效修复不同类型错误方面具有互补性能。直觉上,通过组装现有工具应该可以提高APR的整体错误修复性能。不幸的是,仅仅调用所有可用的APR工具修复一个特定的错误可能会导致在APR执行以及补丁验证(通过昂贵的测试)方面产生无法接受的成本。因此,虽然组装现有工具具有吸引力,但需要一个有效的策略来协调修复更多错误的需求和实用性的要求。鉴于这个问题,我们提出了一种基于偏好的集成程序修复框架(P-EPR),旨在有效排名修复不同错误的APR工具。P-EPR是第一种非学习型的APR集成方法,其利用修复模式作为排名APR工具的主要知识来源,并依赖于动态更新策略,使其能够立即利用和从新获得的修复结果中获益。实验结果表明,P-EPR在灵活性和效果方面显著优于现有策略。

论文链接:https://doi.org/10.1145/3597503.3623310

396156a37ff7de87e182ebc1a047373e.png

52、Predicting Performance and Accuracy of Mixed-Precision Programs for Precision Tuning

混合精度程序是一个使用不同精度进行不同操作的浮点程序,这为平衡精度和性能之间的权衡提供了机会。精度调优旨在找到一个改善性能并保持给定精度的程序的混合精度版本。不幸的是,现有的精度调优方法要么局限于小规模程序,要么存在效率问题。在本文中,我们提出了一种新方法FPLearner,该方法解决了这些限制。我们的见解是利用基于机器学习的技术,图神经网络,来学习混合精度程序的表示以预测它们的性能和精度。这种预测模型可以用来加速动态精度调优的过程,减少程序运行的次数。我们从五个不同的高性能计算应用程序创建了一个混合精度程序的数据集,用于训练我们的模型,这些模型在性能预测方面达到了96.34%的F1分数,精度预测方面达到了97.03%的F1分数。FPLearner将两个动态精度调整器Precimonious和HiFPTuner的时间效率平均提高了25.54%,最高提高了61.07%,同时实现了可比较或更好质量的精度调优结果。

论文链接:https://doi.org/10.1145/3597503.3623338

d4340dd94c0b26085b9c6747b80bb69d.png

53、Predicting open source contributor turnover from value-related discussions: An analysis of GitHub issues

关于项目价值观的讨论对于开发满足不同人类需求并积极影响社会的工程软件至关重要。由于与价值相关的讨论涉及根深蒂固的信念,它们可能导致冲突或其他可能影响继续为开源项目做出贡献的动机的结果。然而,目前尚不清楚与人员流动的显著变化相关的价值相关讨论的类型。我们通过识别与重要项目价值相关的讨论,并调查这些讨论在接下来几个月内预测项目流动性的程度来填补这一空白。我们收集了来自52个项目的GitHub问题和提交日志,这些项目分享类似的伦理承诺,并被确定为分布式Web(Decentralized Web)社区的一部分。我们确定了与分布式Web的核心价值观(尊重、自由、开明、反对中心化社会权力、公正和平等、保护环境)相关的问题。然后我们使用Granger因果分析来检查与这些价值相关的讨论比例的变化如何可能预测收入和退出流动性的变化。我们发现了许多与价值相关的讨论和人员流动之间的显著关系,包括关于尊重的讨论预测贡献者的流失增加和新贡献者的减少,而关于社会权力的讨论则预测贡献者的保留更好。了解这些引起贡献者流动的原因对于管理涵盖以人为中心问题的开源项目至关重要。基于这些结果,我们讨论了对开源维护者和未来研究的影响。

论文链接:https://doi.org/10.1145/3597503.3623340

3be0046f09b48a5ec02fae9ef94b016a.png

54、Prompting Is All You Need: Automated Android Bug Replay with Large Language Models

Bug报告对于软件维护至关重要,允许用户在使用软件时通知开发人员遇到的问题。因此,研究人员已经投入了相当多的资源来自动化错误重现,以加快软件维护的过程。然而,当前自动化方法的成功很大程度上取决于错误报告的特征和质量,因为它们受制于手工制作的模式和预定义的词汇列表的限制。受到大型语言模型(LLM)在自然语言理解方面的成功启发,我们提出了AdbGPT,一种新的轻量级方法,通过提示工程自动从bug报告中重现错误,无需任何训练和硬编码的工作。AdbGPT利用少样本学习和思维链推理来从LLM中引出人类知识和逻辑推理,以类似于开发人员的方式完成bug重现。我们的评估证明了我们的AdbGPT在253.6秒内复现了81.3%的错误报告的有效性和效率,优于最先进的基准线和消融研究。我们还进行了一项小规模用户研究,以确认AdbGPT在提升开发人员的错误重现能力方面的实用性。

论文链接:https://doi.org/10.1145/3597503.3608137

fec33dcd7d98fa6e15268ba84a2c2f53.png

55、RUNNER: Responsible UNfair NEuron Repair for Enhancing Deep Neural Network Fairness

深度神经网络(DNNs)作为一种新兴的软件技术,在各个领域取得了令人瞩目的成果。然而,DNN模型对某些群体的歧视行为(即不公平性)越来越成为社会关注的焦点,特别是在贷款批准和犯罪风险评估等高风险应用中。尽管已经有一些工作致力于改善模型的公平性,但大多数方法都采用了对抗者来扩展模型架构或增加训练数据,这会引入过多的计算开销。最近的研究首先诊断出导致不公平的神经元,然后通过选择性重新训练来修复它们。然而,由于多步训练样本分析,现有的诊断过程耗时,而选择性重新训练可能会引起性能瓶颈,因为在偏倚样本上间接调整不公平神经元。在本文中,我们提出了负责不公平神经元修复(RUNNER),在三个关键方面改进了现有工作:(1)效率:我们设计了基于重要性的神经元诊断方法,通过使用新的神经元重要性准则,在一步内确定导致不公平的神经元;(2)有效性:我们设计了神经元稳定训练,通过添加一个损失项来衡量来自所有来源的不同子组的责任不公平神经元的激活距离;(3)泛化性:我们研究了在结构化表格数据和大规模非结构化图像数据上的有效性,这在以往的研究中经常被忽视。我们在5个数据集上进行了广泛的实验,结果表明RUUNER可以有效且高效地诊断和修复DNNs的不公平性。平均而言,我们的方法将计算开销从341.7秒降低到29.65秒,并将公平性提高了高达79.3%。此外,RUNNER还在非结构化数据集上保持了最先进的结果。

论文链接:https://doi.org/10.1145/3597503.3623334

dd440d70dff231ec0447beabcd1dc367.png

56、Reorder Pointer Flow in Sound Concurrency Bug Prediction

由于线程交错的非确定性,预测并发bug长期以来一直是一项极其困难的任务。最近,提出了几种可靠的bug检测方法。这些方法都基于本地搜索,即改变观察到的跟踪序列的顺序,并预测改变后的顺序是否会触发bug。令人惊讶的是,在这个过程中,它们从未考虑重新排序指针的数据流,而这可能是检测许多复杂bug的关键点。为了弥补这个弱点,我们提出了一种新的流敏感的指向分析技术ConPTA,可以帮助在顺序变异过程中积极重新排序指针流。基于ConPTA,我们进一步提出了一种新的可靠的bug预测方法Eagle,用于预测四种类型的并发bug。它们是空指针解引用(NPD),未初始化的指针使用(UPU),释放后使用(UAF)和重复释放(DF)。通过积极重新排序指针流,Eagle可以在变异过程中探索更大的线程交错搜索空间,从而检测到更多的并发bug。我们对Eagle在10个真实的多线程程序上的评估显示,Eagle在效果和效率方面明显优于四种最先进的bug检测方法UFO、ConVul、ConVulPOE和Period。

论文链接:https://doi.org/10.1145/3597503.3623300

25ab0937e3ace8285772ab96c997d94c.png

57、Resource Usage and Optimization Opportunities in Workflows of GitHub Actions

持续集成和持续交付(CI/CD)在软件开发中已成为一种普遍实践。GitHub Actions正逐渐成为一个流行的平台,用于实现CI/CD流水线,称为工作流,特别是因为该平台每个月为公共存储库免费提供2,000分钟的计算。为了了解这些资源的用途以及CI/CD是否可以更加高效,本文介绍了GitHub Actions工作流的资源使用和优化机会的首个全面实证研究。我们的研究结果显示,CI/CD需要巨大的成本,例如对于一个平均付费等级存储库每年需要$504。绝大部分资源被测试和构建消耗(91.2%),这是由拉取请求(50.7%)、推送(30.9%)和定期计划工作流(15.5%)触发的。虽然现有的优化措施,如缓存(在付费等级的存储库中采用率为32.9%)产生了积极影响,但整体上仍未充分利用。这一结果强调了增强文档和工具的必要性,引导开发人员使用更加资源高效的工作流。此外,我们展示了平台中相对简单的更改,例如在存储库处于非活动状态时停用定期计划工作流,可以使受影响的工作流执行时间缩短1.1%至31.6%。总的来说,我们希望我们的研究结果有助于改善CI/CD流水线的资源效率。

论文链接:https://doi.org/10.1145/3597503.3623303

385c8adfb51ffdd2123c1c8aebcbeb1b.png

58、Revealing Hidden Threats: An Empirical Study of Library Misuse in Smart Contracts

智能合约是在区块链上执行的图灵完备程序。开发人员可以使用Solidity编程语言在以太坊上实现复杂的合约,如拍卖和借贷。作为一种面向对象的语言,Solidity在其语法中提供了库,以促进代码的可重用性并减少开发复杂性。库误用指的是库的不正确编写或使用,导致意外结果,比如在库开发过程中引入漏洞或在合同开发过程中引入不安全的库。库误用可能导致合同缺陷,造成财务损失。目前,关于库误用的研究还很少。为了填补这一空白,我们从五家审计公司的官方网站收集了500多份审计报告,以及来自Etherscan的223,336个实际世界的智能合约,用来衡量库的流行程度和库的误用情况。接着,我们定义了八种库误用的一般模式;其中三种发生在库开发过程中,五种发生在库的利用过程中,涵盖了整个库的生命周期。为了验证这些模式的实用性,我们手动分析了1,018个实际世界的智能合约,并公开了我们的数据集。我们发现在456个合约中存在905个误用案例,表明库误用是一个普遍存在的问题。其中三种误用模式在50个以上的合约中被发现,主要是因为开发人员缺乏安全意识或低估了负面影响。此外,我们的研究还揭示了在以太坊上的易受攻击的库在被弃用或修补后仍然被使用。我们的发现可以帮助合同开发人员预防库的误用,确保库的安全使用。

论文链接:https://doi.org/10.1145/3597503.3623335

e48412008db23fa40159c0f2211a1ddc.png

59、SCTrans: Constructing a Large Public Scenario Dataset for Simulation Testing of Autonomous Driving Systems

对自动驾驶系统(ADS)的安全评估而言,仿真测试已成为物理道路测试的重要补充技术。本质上,仿真测试是一种基于场景的方法,其有效性高度依赖于给定仿真场景的质量。此外,仿真场景应编码为格式良好的文件,否则ADS仿真平台无法将其用作输入。缺乏大规模的仿真场景文件公共数据集,阻碍了ADS仿真测试在工业和学术领域的应用。

为填补这一空白,我们提出了一种基于转换的方法SCTrans来构建仿真场景文件,利用现有交通场景数据集(即在公共道路上记录的道路用户自然的移动)作为数据源。具体而言,我们尝试将现有的交通场景记录文件转换为与最先进的ADS仿真平台兼容的仿真场景文件,并将此任务形式化为模型转换问题。遵循这一思路,我们构建了一个包含超过1,900个多样化仿真场景的数据集,每个场景都可以直接用于通过高保真度模拟器(如Carla和LGSVL)测试最先进的ADS(即Apollo和Autoware)。为了进一步展示我们数据集的实用性,我们展示了它可以增强现有基于仿真的ADS模糊器的碰撞查找能力,有助于在相同时间段内识别约七倍更多与ADS相关的碰撞。通过在代码级别分析这些碰撞,我们确定了Apollo和Autoware的九个安全关键性漏洞,每个漏洞都可以稳定地被利用以引发车辆事故。到目前为止,已确认其中四个漏洞。

论文链接:https://doi.org/10.1145/3597503.3623350

c9330a4d5fde1e6df117654fb3a42f7a.png

60、Semantic Analysis of Macro Usage for Portability

C语言是一种不安全的语言。研究人员一直在开发工具,将C语言转换为更安全的语言,如Rust、Checked C或Go。然而,现有的工具通常通过预处理源文件,然后转换生成的代码,导致代码几乎无法识别,丧失了宏抽象。为了保留宏的使用方式,转换工具需要具备理解宏行为并将其转换为等效结构的分析能力。然而,宏语义与典型函数不同,因此无法通过简单的语法转换进行转换。我们介绍了第一个全面的框架,用于分析宏使用的可移植性。我们将宏行为分解为26个细粒度属性,并实现了一个名为Maki的程序分析工具,能够以94%的准确率在实际代码中识别这些属性。我们将Maki应用于包含86,199个宏定义的21个程序中。我们发现实际宏比之前所知的更加易于移植。超过三分之一(37%)的宏易于移植,Maki为移植更复杂的宏提供了提示。我们发现,相较于先前的工作,平均有2倍更多易于移植的宏,在最好的情况下多达7倍。在Maki的输出指导下,我们在三个实际程序中找到并手动移植了宏。我们向Linux维护者提交了转换了十一个宏的补丁,其中有九个已被接受。

论文链接:https://doi.org/10.1145/3597503.3623323

ab5d3f15f248760c0b331b864d8cae8a.png

61、Smart Contract and DeFi Security Tools: Do They Meet the Needs of Practitioners?

建立在区块链技术和智能合约之上的去中心化金融(DeFi)生态系统的增长导致对安全和可靠的智能合约开发的需求增加。然而,针对智能合约的攻击正在增加,造成估计达64.5亿美元的财务损失。研究人员已经提出了各种自动化安全工具来检测漏洞,但它们在现实世界中的影响仍然不确定。

在本文中,我们旨在揭示自动化安全工具在识别可能导致重大攻击的漏洞方面的有效性,以及它们在行业内的整体使用情况。我们的全面研究包括对五种SoTA自动化安全工具的评估,对导致23亿美元损失的127起高影响力实际攻击的分析,以及对49名在领先的DeFi协议中工作的开发人员和审计人员的调查。我们的研究结果揭示了一个严峻的现实:这些工具只能预防数据集中仅有的8%的攻击,金额为2.3亿美元损失中的1.49亿美元。值得注意的是,所有可预防的攻击都与递归漏洞有关。此外,从业者将逻辑相关错误和协议层漏洞视为重要威胁,这些威胁目前并未得到现有安全工具的充分解决。我们的研究结果强调了开发针对开发人员和审计人员独特需求和期望的专门工具的必要性。此外,我们的研究突显了安全工具持续进步的必要性,以有效应对DeFi生态系统面临的不断演变的挑战。

论文链接:https://doi.org/10.1145/3597503.3623302

5b435f990a872de0c39e5d989ffc3461.png

62、TRACED: Execution-aware Pre-training for Source Code

目前大多数针对源代码的预训练语言模型主要侧重于学习静态代码文本,通常会与静态代码结构(抽象语法树、依赖图等)相结合。然而,在真正执行之前程序的语义将无法完全显露。缺乏对程序执行的理解,静态预训练模型无法全面捕捉动态代码特性,如分支覆盖和运行时变量值,因此在代码理解任务(如检索语义克隆和检测软件漏洞)方面效果较差。

为了弥合语言模型的静态特质与程序动态特性之间的差距,我们引入了TRACED,一种针对源代码的执行感知预训练策略。具体来说,我们通过源代码、可执行输入以及相应的执行追踪的组合对代码语言模型进行预训练。我们的目标是在预训练期间教会代码模型复杂的执行逻辑,使模型能够在专门任务的微调过程中静态估计动态代码特性,而无需重复执行代码。

为了说明我们提出的方法的有效性,我们在三个下游任务上对TRACED进行了微调和评估:静态执行估计、克隆检索和漏洞检测。实证结果显示,TRACED相对于静态预训练代码模型提高了12.4%的完整执行路径预测精度,以及25.2%的运行时变量值预测精度。TRACED在四个公共基准测试中在克隆检索和漏洞检测方面也显著优于静态预训练模型。

论文链接:https://doi.org/10.1145/3597503.3608140

be737c21f47ade1c8e5e6aa131797907.png

63、Toward Automatically Completing GitHub Workflows

持续集成和交付(CI/CD)如今已经成为软件开发的核心。它们的好处是建立和维护CI/CD管道的成本,这需要知识和技能,通常与其他与软件相关的任务不同。虽然已经提出了几种推荐系统来支持开发人员完成各种任务,但在建立和维护CI/CD管道方面几乎没有自动化支持。我们提出了GH-WCOM(GitHub工作流完整性),这是一种基于Transformer的方法,支持开发人员编写特定类型的CI/CD管道,即GitHub工作流。为了处理这样的任务,我们设计了一个抽象过程,以帮助变压器的学习,同时让GH-WCOM能够推荐非常特殊的工作流元素,如工具选项和脚本元素。我们的实证研究表明,GH-WCOM提供了高达34.23%的正确预测,而模型的置信度是推荐的正确性可能性的可靠代理。

论文链接:https://doi.org/10.1145/3597503.3623351

294b2a80109c8e9d9bf276c1811b5a34.png

64、Toward Improved Deep Learning-based Vulnerability Detection

深度学习(DL)已经成为近期几种漏洞检测技术的共同线索。大量公开可获得的漏洞数据集的涌现推动了支撑这些技术的学习过程。尽管这些数据集有助于基于DL的漏洞检测器,但也限制了这些检测器的预测能力。这些数据集中的漏洞必须以某种方式表示,例如代码行、函数或存在漏洞的程序片段。我们将这种表示称为基本单元。检测器学习基本单元如何容易受到攻击,然后预测其他基本单元是否容易受到攻击。我们假设这种对个别基本单元的关注会影响检测器正确检测跨越多个基本单元的漏洞(或MBU漏洞)的能力。对于这类漏洞,只有在检测到所有包含的基本单元都被判定为易受攻击时才是正确的。验证现有技术在检测漏洞所有部分方面的表现对于确定它们对其他下游任务的有效性至关重要。为了评估我们的假设,我们进行了一项研究,重点关注三种知名的基于DL的检测器:ReVeal、DeepWukong和LineVul。我们的研究显示,这三款检测器在各自的数据集中都包含MBU漏洞。此外,我们观察到在检测到这些类型的漏洞时,准确率显著下降。我们提出了我们的研究以及一个框架,可用于帮助基于DL的检测器正确包含MBU漏洞。

论文链接:https://doi.org/10.1145/3597503.3608141

c5505e7e839c636827ab223f5cd7f672.png

65、Towards Reliable AI: Adequacy Metrics for Ensuring the Quality of System-level Testing of Autonomous Vehicles

基于人工智能的系统在各个领域,包括自动驾驶汽车(AVs)中已经广泛流行。然而,由于其复杂性,确保其可靠性和安全性是具有挑战性的。传统的用于评估传统软件测试效果的测试充分性指标通常不足或在这些系统中不实用。专为这些系统设计的白盒度量指标利用神经元覆盖信息。这些覆盖度量需要访问底层人工智能模型和训练数据,这些数据可能并不总是可用。此外,现有的充分性度量指标与检测生成的测试套件中的故障的能力之间存在较弱的相关性,我们旨在在本研究中弥合这一差距。

在本文中,我们引入一组名为“测试套件实例空间充分性”(TISA)度量的黑盒测试充分性指标,可用于评估测试套件的有效性。TISA度量提供了一种评估测试套件的多样性和覆盖范围以及测试期间检测到的错误范围的方法。此外,我们引入了一个框架,允许测试人员在二维空间中可视化测试套件的多样性和覆盖范围,有助于识别需要改进的领域。

我们通过检查TISA指标与AVs系统级模拟测试中检测到故障数量之间的相关性来评估TISA指标的有效性。强相关性以及短计算时间表明其在估计测试AVs的充分性方面的有效性和效率。

论文链接:https://doi.org/10.1145/3597503.3623314

a63abdfcff4da272a84b2a061521fb02.png

66、UniLog: Automatic Logging via LLM and In-Context Learning

日志记录旨在确定日志记录语句的位置、详细程度级别和日志消息,是软件可靠性增强的关键过程。近年来,已设计了许多自动日志记录工具,旨在帮助开发人员完成日志记录任务之一(例如,在try-catch块中提供建议是否记录日志)。这些工具在特定情况下很有用,但通常不能提供全面的日志记录解决方案。此外,尽管最近的研究已开始探索端到端的日志记录,但仍然受到微调成本高昂的限制,阻碍了在软件开发中的实际实用性。为解决这些问题,本文提出了UniLog,这是一个基于大型语言模型(LLM)中上下文学习(ICL)范式的自动日志记录框架。具体而言,UniLog可以仅通过包含五个示例演示的提示生成一个适当的日志记录语句,而无需进行任何模型调整。此外,UniLog在仅用几百个随机样本热身后可以进一步增强其日志记录能力。我们在一个包含来自1,465个GitHub仓库中提取的12,012个代码片段的大型数据集上评估了UniLog。结果显示,UniLog在自动日志记录方面实现了最先进的性能:(1)在选择日志记录位置方面的准确率为76.9%,(2)在预测详细程度级别方面的准确率为72.3%,(3)在生成日志消息方面的BLEU-4分数为27.1。与此同时,UniLog所需的参数调整时间不到对同一LLM进行微调所需时间的4%。

论文链接:https://doi.org/10.1145/3597503.3623326

b42275d1aee8fda2d34515ea35facad4.png

67、Unveiling the Life Cycle of User Feedback: Best Practices from Software Practitioners

用户反馈对于组织改进软件产品变得越来越重要。先前的研究主要关注于反馈收集,并报告了对这一过程的高层概述,往往忽视了从业者如何通过一系列结构化活动对这些反馈进行推理和行动。在这项工作中,我们与来自各种规模和领域(如电子商务、分析和游戏)的32个组织中的40名从业者进行了一项探索性访谈研究。我们的调查结果表明,组织利用许多不同的用户反馈来源。社交媒体已成为一个关键类别的反馈来源,对许多组织变得越来越关键。我们发现,组织积极参与许多非平凡的活动来策划和采取行动,具体取决于反馈来源。我们将这些活动综合成一个管理用户反馈的生命周期。我们还报告了从认为他们的组织有效理解和解决用户反馈的从业者的回应中提炼出的管理用户反馈的最佳实践。我们呈现了可操作的实证结果,组织可以利用这些结果来增进对用户感知和行为的理解,以开发出更好的产品,从而减少用户的流失。

论文链接:https://doi.org/10.1145/3597503.3623309

001016a2b3505241cba67b248b2581d4.png

68、VeRe: Verification Guided Synthesis for Repairing Deep Neural Networks

神经网络修复旨在通过修改模型的架构或参数来修复神经网络的“错误”。然而,由于神经网络的数据驱动特性,很难解释内部神经元和错误行为之间的关系,使进一步修复变得具有挑战性。虽然已经有一些工作存在,利用梯度或因果分析来识别负责神经元,但它们的有效性严重依赖于可用的“错误”数据的质量以及层或神经元选择中的多种启发式方法。在这项工作中,我们利用形式验证的力量(特别是对神经网络)来解决这个问题。具体地,我们提出了VeRe,一个基于验证的神经网络修复框架,它利用线性松弛来符号计算神经元修复的重要性,并进一步优化有问题神经元的参数以修复错误行为。我们在各种修复任务上评估了VeRe,实验结果显示VeRe可以有效地修复所有神经网络而不降低模型的性能。对于消除后门的任务,VeRe成功将攻击成功率平均降至0.38%,同时平均导致性能下降0.9%。对于修复安全属性的任务,VeRe成功修复了所有36个任务,平均达到99.87%的泛化能力。

论文链接:https://doi.org/10.1145/3597503.3623332

707064860b17accc58204f3b1a8edaa3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为啥要用C艹不用C?

在很多时候,有人会有这样的疑问 ——为什么要用C?C相对于C优势是什么? 最近两年一直在做Linux应用,能明显的感受到C带来到帮助以及快感 之前,我在文章里面提到环形队列 C语言,环形队列 环形队列到底是怎么回…

NLP_文本数据分析_3(代码示例)

目标 了解文本数据分析的作用.掌握常用的几种文本数据分析方法. 1 文件数据分析介绍 文本数据分析的作用: 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择. 常用的几种文本数据分析方法: 标签数量分布句…

场景问题: VisualVM工具Profiler JDBC不是真实执行的SQL

1. 问题 诡异的问题表象: 前端反馈分页接口的Total字段一直为0 使用Visualvm中的 Profiler 注入到应用后,查看JDBC监控得到了分页接口执行的SQL,复制出来执行是55. 此时还没有注意到 IN 的范围中有一个特别的值 NULL 🤨 2. 排查…

视觉Transformers中的位置嵌入 - 研究与应用指南

视觉 Transformer 中位置嵌入背后的数学和代码简介。 自从 2017 年推出《Attention is All You Need》以来,Transformer 已成为自然语言处理 (NLP) 领域最先进的技术。 2021 年,An Image is Worth 16x16 Words 成功地将 Transformer 应用于计算机视觉任务…

idea中引入新JDK环境

在不同的项目中往往会需要不同的运行环境,那么如何下载一个新的环境并运用到idea中呢? 下面给出的就是oracle官网,以JDK17为例教大家如何下载 Java Archive Downloads - GraalVM for JDK 17https://www.oracle.com/java/technologies/javase…

Python数据可视化库之bashplotlib使用详解

概要 在数据可视化领域,Python拥有许多优秀的库,如Matplotlib、Seaborn等,它们可以创建漂亮而复杂的图形。但是,有时候我们可能需要在终端中绘制简单的图形,这时候Bashplotlib就派上了用场。Bashplotlib是一个Python库,可以在终端中绘制基本的图形,如条形图、散点图等。…

YOLOV9训练集制作+Train+Val记录

一、YOLO数据集格式分布 在YOLO中,数据集的分布如图,在dataset文件夹下有imags(图片)和labels(标签)。在images和labels文件夹下又分别存放三个文件夹,分别对应测试集、训练集、验证集&#xff…

使用postman测试若依其他业务接口API—3

请求方式 如上,使用Get请求来获取练习题库中的所有习题数据。 请求地址 在请求路径栏输入请求地址,以下图为例: 参数体与鉴权 在Parms键入所需参数,其中key为键,value为键的值:如下图所示: 认证成功与失…

持续集成(CICD)- gogs仓库的部署和使用

文章目录 一、gogs的介绍二、部署gog仓库三、首次启动gogs四、登录五、创建一个非空仓库六、从仓库拉取代码到本地七、把本地编辑的代码上传到仓库 一、gogs的介绍 Gogs作为一个轻量级、易于部署和使用的自托管Git服务,为小型团队和个人开发者提供了一个简单而强大…

【AIGC】如何提高Prompt准确度

前言 随着人工智能的迅猛进展,AIGC(通用人工智能聊天工具)已成为多个行业中不可或缺的自然语言处理技术。Prompt作为AIGC系统的一项关键功能,在工具的有效运作中发挥了举足轻重的作用。本篇文章将深入探讨Prompt与AIGC之间的紧密…

python笔记_程序流程控制2

C&#xff0c;循环控制 1&#xff0c;for循环 功能&#xff1a;让代码循环运行 语法&#xff1a; for <变量> in <范围、序列>&#xff1a; <循环操作语句> 例 nums &#xff08;1,2,3,4&#xff09; <class list> for i in nums&#xff1a; print&…

Java中文件的相关知识及文件IO操作

在我们日常生活中&#xff0c;会把许多东西都称之为文件。比如&#xff0c;一份纸质报告&#xff0c;或u盘中的一些文档&#xff0c;都会把它们称为文件。那么&#xff0c;这里说的文件是以操作系统的角度出发的。在操作系统中&#xff0c;会把许多硬件设备和软件资源都抽象成“…

机器学习:主成分分析笔记

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种无监督的机器学习算法&#xff0c;通常用于高维数据的降维、提取主要特征、数据降噪和可视化。PCA的基本思想是将原始数据的多个变量转换为少数几个相互独立的变量&#xff08;即主成分&a…

shadertoy 游戏《来自星尘》摇杆复刻

正确的做法应该是上 noise 而不是叠加 sin 波&#xff0c;不过如果不想麻烦的话叠波还是一个不错的选择&#xff1a;整体效果如下&#xff0c;已经非常形似 直接上链接&#xff1a;Shader - Shadertoy BETA float radiusScale 0.9; float variation(vec2 v1, vec2 v2, float …

传感器---触摸传感器

一、模块选型概述 芯片型号&#xff1a;TTP223B 供电电压&#xff1a;3-5V 控制接口&#xff1a;共三个引脚&#xff08;GND、VCC、SIG&#xff09;&#xff0c;GND为地&#xff0c;VCC为供电电源&#xff0c;SIG为数字信号输出脚&#xff1b; PCB尺寸&#xff1a;24 x 24 mm 触…

Linux中服务端开发

1 创建socket,返回一个文件描述符lfd---socket(); 2 将lfd和IP&#xff0c;PROT进行绑定---bind(); 3 将lfd由主动变成被动监听---listen(); 4 接收一个新的连接&#xff0c;得到一个的文件描述符cfd--accept() --该文件描述符用于与客户端通信 5 while(1) { 接受数据&a…

网络安全: Kali Linux 使用 docker-compose 部署 openvas

目录 一、实验 1.环境 2.Kali Linux 安装docker与docker-compose 3.Kali Linux 使用docker-compose方式部署 openvas 4. KaliLinux 使用openvas 二、问题 1. 信息安全漏洞库 2.信息安全漏洞共享平台 3.Windows 更新指南与查询 4.CVE 查询 5.docker-compose 如何修改o…

前后端分离项目Docker部署指南(上)

目录 前言 一.搭建局域网 1.搭建net-ry局域网&#xff0c;用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 ​编辑 测试是否安装成功 ​编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…

LLVM clang_tokenize 的示例

1&#xff0c; 环境搭建 如同上篇 git clong llvm-project git checkout llmvorg-3.4.0 # or llvmorg-18.1.rc /bin/bash ./confiure --prefix....... # or cmake Debug make -j32 make -j install 2&#xff0c; 示例代码 Makefile&#xff1a;如同上篇 LLVM_CON…

NOIP 2010普及组初赛试题及解析

NOIP 2010普及组初赛试题及解析 一. 单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。二. 问题求解&#xff08;共2题&#xff0c;每题5分&#xff0c;共计10分&#xff09;三. 阅读程序写结果&#xff08;共…