An Empirical Study of Usages, Updates and Risks of Third-Party Libraries in Java Projects

过时的库 安全漏洞

第三方库在软件开发中发挥着关键作用,因为它们可以减轻开发人员重新实现常见功能的沉重负担。 但是,第三方库和客户端项目是异步发展的。 因此,客户端项目中可能会使用过时的第三方库,而开发人员却没有意识到潜在的风险(例如,安全漏洞)。 过时的第三方库可能会延迟更新客户端项目,开发人员可能不太了解更新中的潜在风险(例如,API 不兼容)。 第三方库的开发者可能不知道他们的第三方库是如何在客户项目中使用或更新的。 因此,对开源项目中第三方库的使用、更新和风险进行定量和整体研究,可以为这些问题提供具体证据,并为改善生态系统提供实用见解。
本文对 Java 生态系统中806 个开源项目和 13,565 个第三方库进行了库使用分析(使用强度和过时度)和库更新分析(更新强度和更新延迟),对 806 个开源项目和 544 个安全漏洞进行了库风险分析(使用风险和更新风险)。 这些分析旨在从两个整体角度(即开源项目和第三方库)量化使用和更新实践以及使用和更新过时第三方库的安全漏洞的潜在风险。
An Empirical Study of Usages, Updates and Risks of Third-Party Libraries in Java Projects

A3IDENT: A Two-phased Approach to Identify the Leading Authors of Android Apps

作者身份识别 作者身份脱钩 安卓应用 封装关系图 主要作者

作者身份识别是通过给定的代码对作者进行识别和分类的过程。 作者身份识别可用于广泛的软件领域,例如代码作者争议、抄袭检测、攻击者身份暴露。本文设计了一种两阶段的方法,将 Android 应用的主要代码归属于特定的开发人员。 在第一阶段,作者提出了三种策略来识别应用程序中 Java 包之间的关系,包括上下文、语义和结构关系。 开发了一种包聚合算法来聚类所有由同一作者编写的高概率包。 在第二阶段,作者开发了三种类型的特征来捕捉作者的编码习惯和代码风格。 基于此,作者从其开发的 Android 应用程序中为作者生成特征指标,并采用多种机器学习算法进行作者身份分类。
A3IDENT: A Two-phased Approach to Identify the Leading Authors of Android Apps

Improving Testing by Mimicking User Behavior

软件测试 现场数据 测试输入生成

内部测试很难代表该领域真实用户执行的丰富多样的软件行为。 为了弥合内部测试(in-house tests)和现场执行(field execution)之间的差距,我们需要方法来 (1) 识别在现场而不是内部执行的行为,以及 (2) 生成执行此类(或至少类似)行为的新测试。
本文提出了 Replica,这是一种使用现场执行数据来指导测试生成的技术。 Replica 在部署软件之前对其进行检测,以便在用户执行未经测试的行为时触发现场数据收集。 然后,当它接收到收集的字段数据时,Replica 使用引导符号执行来生成执行这种先前未经测试的行为的执行。

Effects of Adopting Code Review Bots on Pull Requests to OSS Projects

软件机器人 GitHub 机器人 代码审查 开源软件 软件工程

开源软件 (OSS) 项目广泛采用的软件机器人支持开发人员开展多项活动,包括代码审查。 然而,与任何新技术的采用一样,机器人可能会影响群体动态。 由于了解和预测此类影响对于规划和管理很重要,因此作者研究了在采用代码审查机器人后几个活动指标如何变化。 实验设计为对来自 GitHub 的 1,194 个软件项目采用了回归不连续设计。 其结果表明,采用代码审查机器人增加了每月合并拉取请求(pull request)的数量,减少了每月非合并拉取请求,并减少了开发人员之间的沟通。 从业者和维护者可以利用我们的结果来理解甚至预测机器人对他们项目社交互动的影响。
Effects of Adopting Code Review Bots on Pull Requests to OSS Projects

Incremental Type Migration Using Type Algebra

类型推断 重构 软件维护

当将一组新类型引入大型软件系统时,改造该系统以利用这些类型的任务通常成本高昂。 现有的自动类型迁移系统假定旧类型和新类型之间是一对一的对应关系,这使得它们无法对更复杂的类型集进行部分迁移。 通过使用基于编译器的迁移工具和代数建模的类型集,在一个大型单片 C++ 代码库可以使用少量手动播种的类型信息,自动传播新类型。 作者通过在包含数百万行 C++ 的大型工业代码库中自动生成 20k 多个单独的更改来演示此技术。

Every Mutation Should Be Rewarded: Boosting Fault Localization with Mutated Predicates

故障定位 测试 调试

已经提出了许多故障定位 (FL) 技术来促进软件调试。 由于重量轻,基于频谱的故障定位 (SBFL) 是最受欢迎的 FL 系列之一,并广泛部署在程序修复工具中。 SBFL 通过记录测试套件下的程序覆盖率来对程序元素进行排名,并使用排名公式计算每个元素的可疑度分数。 但 SBFL 只能提供程序覆盖率这种单一的信息。 基于突变的故障定位 (MBFL) 迭代地突变一个故障程序,并通过推翻失败测试用例的突变体提出故障位置。 然而,由于其爆炸性的搜索空间,MBFL 仅被少数程序修复工具采用。 在本文中,作者旨在通过构建实用的 FL 工具来利用 MBFL 的优势并以低开销提升 SBFL。

A First Look at the Deprecation of RESTful APIs: An Empirical Study

API 弃用 RESTful API OpenAPI 规范 Web API Web API 的演变

RESTful 用于构建可以在互联网上集成软件系统的 Web API。 但是RESTful API 在引入重大更改时应遵循弃用-移除模型,还应列出与弃用相关的信息,例如替代方法。 现有的 API 弃用分析研究大多数集中在非 Web API,例如 Java 和 Android 提供的 API。 为了调查 RESTful API 弃用,作者提出了一个称为 RADA(RESTful API 弃用分析器)的框架。 RADA 能够自动识别已弃用的 API 元素并从 OpenAPI 规范分析受影响的操作。 基于 RADA 挖掘的数据,作者进行了一项实证研究,以调查在 RESTful API 中如何遵循 deprecated - removed 协议并描述 RESTful API 弃用的实践。
A First Look at the Deprecation of RESTful APIs: An Empirical Study

A Cost-Effective Approach for Hyper-Parameter Tuning in Search-based Test Case Generation

基于搜索的测试 超参数调优 测试用例生成 源代码度量

基于搜索的测试用例生成依赖元启发式搜索,由于理论上元启发式搜索方法的性能高度依赖于它们的超参数,因此有必要研究该领域的超参数调整。 本文中提出了一个新的度量标准(“Tuning Gain”),它估计了调整特定类的成本效益如何。 然后,作者使用源代码类的静态特征来预测“Tuning Gain”。 最后,作者根据估计的“调整收益”对调整的类进行优先级排序,并将调整预算仅用于排名靠前的类。
评估方面,作者针对 SF110 和 SBST2018 工具竞赛等基准测试中的 19 个项目的 250 个类别,详尽分析了著名的基于搜索的测试生成工具 (EvoSuite) 的 1,200 个超参数配置。 作者使用了一种称为 Meta-GA 的调优方法,并比较了使用和不使用建议的类优先级的调优结果。 结果表明,对于低调优预算,优先级类在额外覆盖的分支方面优于替代方案(是传统全局调优的 10 倍)。 然而,随着预算的增加,类选择不会那么有效,但到目前为止,类级别的调整仍然优于全局调整。

Efficient Bug Triage For Industrial Environments

自动错误分类 机器学习 文本分类

错误分类是软件维护的一项重要任务,尤其是在工业环境中,及时修复错误对客户体验至关重要。 此过程通常是手动完成的,并且通常需要大量时间。 在本文中,作者提出了一种基于机器学习的解决方案来有效地解决该问题。 作者认为,在工业环境中,将错误分配给软件组件(然后分配给负责任的开发人员)比直接分配给开发人员更合适。 实验证明将错误分配给组件而不是开发人员会导致更高的准确性。 作者的解决方案基于从错误描述中提取的文本投影特征,使用深度神经网络来训练分类模型。 所提出的解决方案基于使用多个数据集的广泛实验实现了最先进的性能。
Efficient Bug Triage For Industrial Environments

A Framework and DataSet for Bugs in Ethereum Smart Contracts

以太坊 Solidity 智能合约错误

以太坊是最大的支持智能合约的区块链平台,用户通过将智能合约的字节码发布到区块链来部署智能合约。 由于区块链中的数据无法修改,即使这些合约包含错误,也不可能通过代码更新来修补已部署的智能合约。 此外,目前以太坊智能合约漏洞没有一个全面的分类框架,也没有详细的智能合约漏洞检测标准,开发者很难全面了解漏洞的负面影响,设计新的漏洞检测方法。
在本文中,为了填补这一空白,作者首先从多个来源收集尽可能多的智能合约错误,并通过扩展 IEEE 软件异常标准分类将这些错误分为 9 类。 然后设计了检测各种错误的标准,并构建了一个涵盖各种错误的智能合约数据集。 通过作者的框架和数据集,开发人员可以学习智能合约错误并开发新工具来检测和定位智能合约中的错误。

Sentiment Analysis for Software Engineering: How Far Can Pre-trained Transformer Models Go?

情感分析 软件挖掘 自然语言处理 预训练模型

关于软件工程的情感分析,研究人员已投入大量精力开发定制工具(例如 SentiStrength-SE、SentiCR),以对软件工程特定内容(例如 Stack Overflow 中的讨论和代码审查评论)的情绪极性进行分类。 这些研究仍有很大的改进空间。 预训练的基于 Transformer 的模型(例如,BERT、XLNet)在自然语言处理(NLP)领域带来了相当大的突破。 在这项工作中,作者在六个 SE 数据集上对五个现有的 SA4SE 工具和四个最先进的基于 Transformer 的预训练模型的变体进行了系统评估。在所有六个数据集中,在经过微调的基于 Transformer 的预训练模型在宏观/微观平均 F1 分数方面优于现有 SA4SE 工具 6.5-35.6%。

Guided, Deep Testing of X.509 Certificate Validation via Coverage Transfer Graphs

传输覆盖图 模糊测试 X.509 证书验证

SSL 和 TLS 是用于在 Internet 上创建安全连接的两种安全协议, X.509 证书验证对安全性很重要,需要在建立 SSL/TLS 连接之前执行。但是证书验证需要更有效的技术来进行彻底的测试。为此,本文提出了 transcert,一种有效指导模糊测试对 X.509 证书验证进行深度测试的新方法。transcert 的目标是生成触发各种执行的证书;通过将覆盖转移图的概念引入高效、精确地抽象程序执行来实现这一目标。其记录了给定证书如何通过参考 SSL/TLS 实现进行验证的执行情况。 然后它构造一个覆盖转移图来模拟从测试证书(种子)到其变异证书(突变体)的覆盖转移,并通过迭代采样和变异证书来探索覆盖转移图。

De-Flake Your Tests - Automatically Locating Root Causes of Flaky Tests in Code At Google

软件维护 诊断 调试辅助 调试器 跟踪 测试管理 易碎测试

回归测试是软件开发和维护的关键部分,确保对现有软件的修改不会破坏现有的行为和功能。 回归测试的一个关键假设是它们的结果是确定性的。在实践中,存在不确定的测试,称为片状测试(Flaky Test)。 不稳定的测试会导致测试运行的结果不可靠,并且会破坏软件开发工作流程。
本文作者提出了一种新技术,可以在代码级别自动识别不稳定测试的根本原因的位置,以帮助开发人员调试和修复它们。 作者在 Google 的 428 个项目中研究了 Flaky 测试的技术。 根据我们的案例研究,该技术有助于以 82% 的准确率确定片状根本原因的位置。
De-Flake Your Tests - Automatically Locating Root Causes of Flaky Tests in Code At Google

Automated Recording and Semantics-Aware Replaying of High-Speed Eye Tracking and Interaction Data to Support Cognitive Studies of Software Engineering Tasks

眼动追踪 经验理解 高速眼动追踪

本文介绍了在集成开发环境中研究软件工程任务时收集高速眼动追踪数据的基本技术问题。眼动仪的使用正迅速成为研究软件开发人员以及他们如何理解源代码和定位错误的重要手段。本文作者提出了一种用于眼动追踪数据收集的新方法。 研究期间的所有遥测(击键、鼠标移动和眼动仪输出)数据都在发生时记录下来,而不是实时执行注视分析。 然后以慢得多的速度重播会话,从而有足够的时间将凝视点位置映射到适当的文件、行和列以执行额外的分析。