Understanding Flaky Tests: The Developer's Perspective
Flaky测试是在对相同的代码运行时显示出看似随机的结果(通过或失败)的软件测试。以前的工作已经检查了修复的重复测试,并提出了自动化的解决方案,以定位和修复重复测试-我们通过检查软件开发人员对这种现象的性质,相关性和挑战的看法来补充它。我们要求21名专业开发人员对他们之前修复的200个测试进行分类,根据片状的性质,片状的起源和修复工作。我们用有关固定策略的信息来补充这一分析。随后,我们对121名开发人员进行了在线调查,这些开发人员的工业编程经验中位数为5年。我们的研究表明:这种不稳定性是由于几种不同的原因造成的,其中四种以前从未被报道过,尽管这是修复成本最高的;不稳定性被绝大多数开发人员认为是重要的,不管他们的团队的规模和项目的领域如何,它会对资源分配、调度和测试套件的感知可靠性产生影响;开发人员报告面临的挑战主要是复制剥落行为和识别剥落的原因。数据和材料[https://doi.org/10.5281/zenodo.3265785]。
2019-07-02 cs.SE
An Empirical Study of Flaky Tests in Python
在没有任何代码更改的情况下导致虚假故障的测试,即,干扰测试,妨碍回归测试,增加维护成本,可能会隐藏真正的bug,并降低对测试的信任。虽然片状的普遍性和重要性已经得到了很好的证实,但之前的研究主要集中在Java项目上,因此提出了如何推广研究结果的问题。为了提供一个更好的理解,在软件开发中的作用,超越Java的,我们实证研究的流行,原因,和在Python,目前最流行的程序设计语言编写的软件中的flakiness程度。为此,我们从流行的PyPI包索引中抽取了22352个开源项目,并分析了它们的876186个测试用例。我们的调查表明,flakiness在Python中和在Java中一样普遍。然而,原因是不同的:顺序依赖是Python中一个更主要的问题,在我们的数据集中,7571个重复测试中有59%是由顺序依赖引起的。另外28%是由测试基础设施问题引起的,这是以前没有记录的片状原因。剩下的13%主要归因于项目对网络和随机性API的使用,这表明了通常用Python编写的软件类型。我们的数据还表明,找到可重复测试需要比文献中经常做的更多的运行:一个通过测试的案例平均不重复的95%的置信度将需要170次重新运行。
2021-01-22 cs.SE
What Made This Test Flake? Pinpointing Classes Responsible for Test Flakiness
Flaky测试被定义为通过对同一版本的代码间歇性地通过和失败来表现非确定性行为的测试。这些测试通过错误的警报削弱了持续集成,浪费了开发人员的时间,破坏了他们对回归测试的信任。为了减轻片状的影响,研究人员和工业专家都提出了检测和隔离片状测试的策略和工具。然而,由于开发人员难以本地化和理解其原因,因此很少修复故障测试。此外,使用大型代码库的开发人员通常需要知道非确定性的来源以保持代码质量,即,避免引入与不确定性行为有关的技术债务,并避免引入新的风险测试。为了帮助完成这些任务,我们提出了将故障定位技术重新定位到故障组件定位问题,即,精确定位导致测试不确定性行为的程序类。特别是,我们采用基于频谱的故障定位(SBFL),一种基于覆盖的故障定位技术,通常采用其简单性和有效性。我们还利用其他数据源,如更改历史和静态代码指标,以进一步改善本地化。我们的研究结果表明,增加SBFL的变化和代码指标排名前1和前5名的建议,在26%和47%的情况下,类。总的来说,我们成功地减少了平均数量的类检查,以找到第一个类的19%的类覆盖的类测试。我们的研究结果还表明,本地化的方法是有效的主要片状类别,如并发和异步等待,表明他们的一般能力,以确定分布式组件。
2022-07-20 cs.SE
Flaky Tests in a Large Industrial Database Management System: An Empirical Study of Fixed Issue Reports for SAP HANA
Heidelberg University(海德堡大学);SAP
本研究通过分析SAP HANA的问题报告,发现并发问题是最常见的测试不稳定性原因,并提出利用LLMs进行标记的方法以提高测试稳定性分析的效率。
2026-02-03 cs.SE
A Large Language Model Approach to Identify Flakiness in C++ Projects
本文提出一种基于大语言模型的方法,通过微调 Mistral-7b、Llama2-7b 和 CodeLlama-7b 模型,在代码层面识别 C++ 项目中不稳定测试的根本原因,实验表明 Mistral-7b 性能最优,为高效调试不稳定测试提供了新途径。
2025-06-05 cs.SE
An Empirical Study of Flaky Tests in JavaScript
片状测试(具有非确定性结果的测试)可能会对测试效率和软件可靠性造成问题。测试套件中的零散测试也会显著延迟软件发布。已经有几项研究试图量化不同程序设计语言中测试片状性的影响(例如,Java和Python)和应用程序域(例如,移动和基于GUI)。本文对JavaScript中的JavaScript测试状态进行了实证研究。我们从两个方面研究了JavaScript项目中的重复测试:这些项目中重复测试的主要原因和常见的修复策略。通过分析来自GitHub的大型、得分最高的JavaScript项目的452次提交,我们发现并发相关问题(例如,等待、竞争条件或死锁)是测试不稳定的最主要原因。其他导致重复测试的主要原因是特定于操作系统的(例如,在特定OS或OS版本上工作的特征)和网络稳定性(例如,因特网可用性或不良套接字管理)。就如何处理恶意测试而言,大多数恶意测试(>80%)都是固定的,以消除恶意行为,开发人员有时会跳过,隔离或删除恶意测试。
2022-07-03 cs.SE
Practical Flaky Test Prediction using Common Code Evolution and Test History Data
非确定性行为的测试用例会导致开发人员对他们的回归测试套件失去信任,并最终忽略失败。因此,检测漏洞测试是维护代码质量的一项关键任务,因为它为任何形式的系统响应建立了必要的基础,例如测试验证或自动调试。以前的研究已经提出了各种方法来检测flakiness,但当试图在工业环境中部署这些方法时,它们对仪器,测试重新运行或特定于语言的工件的依赖是令人望而却步的。因此,在本文中,我们调查的预测,没有这样的要求,底层的程序设计语言,CI,构建或测试执行框架的测试。相反,我们只依赖于最常用的工件,即测试的结果和持续时间,以及关于代码演变的基本信息,来构建能够检测脆弱性的预测模型。此外,我们的方法不需要额外的重新运行,因为它从现有的测试执行中收集这些数据。我们根据建议的功能训练了几个已建立的分类器,并在一个大型工业软件系统上评估了它们的性能,从中我们收集了100个测试和100个非测试和代码历史的数据集。最好的模型仅使用3个特征就能够达到95.5%的F1分数:测试的翻转率,过去54天内对源文件的更改数量,以及最近一次拉取请求中更改的文件数量。
2023-03-18 cs.SE
Automating Detection and Root-Cause Analysis of Flaky Tests in Quantum Software
本文提出利用LLMs自动化检测量子软件中的故障测试并识别其根本原因,通过扩展数据集和评估模型性能,展示了LLMs在提升量子软件测试可靠性方面的潜力。
2026-03-09 cs.AI cs.ET cs.SE
Predicting Flaky Tests Categories using Few-Shot Learning
Flaky测试是在同一版本的程序上运行时产生不同结果的测试。这种不确定性行为会给持续集成带来错误信号,浪费开发人员的时间,降低他们对测试套件的信任。研究强调了保持测试无剥落的重要性。近年来,研究界提出了许多静态和动态的方法来推进对伪测试的检测。虽然有希望,但这些方法主要集中在将测试分类为合格或不合格,即使报告了高性能,理解片状的原因仍然具有挑战性。这一部分对于旨在解决它的研究人员和开发人员至关重要。为了帮助理解给定的故障测试,我们提出了FlakyCat,这是第一种基于根本原因类别对故障测试进行分类的方法。FlakyCat依赖于CodeBERT进行代码表示,并利用基于Siamese网络的少样本学习方法来训练具有少量数据的多类分类器。我们对FlakyCat进行了训练,并在一组从开源Java项目中收集的343项测试中对FlakyCat进行了评估。我们的评估表明,FlakyCat准确地对重复测试进行分类,加权F1得分为70%。此外,我们研究了我们的方法对每个类别的性能,揭示了异步等待,无序收集和时间相关的测试是准确分类,而并发相关的测试是更具有挑战性的预测。最后,为了便于理解FlakyCat的预测,我们提出了一种新的技术CodeBERT为基础的模型的可解释性,突出代码语句影响的分类。
2022-08-31 cs.SE
The Importance of Discerning Flaky from Fault-triggering Test Failures: A Case Study on the Chromium CI
Flaky测试是指在同一个被测程序版本的不同执行中通过和失败的测试。他们让开发人员调查错误警报(测试失败),浪费了宝贵的开发人员时间。为了解决这个问题,已经提出了许多识别非线性测试的预测方法。虽然有希望,这些方法的实际效用仍然不清楚,因为它们还没有在一个持续集成(CI)的过程中进行评估。特别是,仍然不清楚遗漏故障的影响,即,在不同的CI周期中,将故障触发测试失败视为故障。为了填补这一空白,我们在Chromium CI中应用了最先进的片状预测方法,并检查了它们的性能。也许令人惊讶的是,我们发现,尽管高精度(99.2%)的方法,他们的应用导致许多错误错过,约76.2%的所有回归故障。为了解释这一结果,我们分析了故障触发失败,并表明,故障检测具有很强的故障揭示能力,即,它们揭示了所有回归故障的1/3以上,这表明所有方法的固有局限性,这些方法集中于识别重复测试,而不是重复测试失败。更进一步,我们构建了以故障为中心的预测方法,并通过考虑新功能对其进行优化。有趣的是,我们发现这些方法比以测试为重点的方法表现更好,MCC从0.20增加到0.42。总的来说,我们的研究结果意味着,一方面,未来的研究应该集中在预测的抗剥落测试失败,而不是抗剥落测试和需要采用更彻底的实验方法时,评估片状预测方法,另一方面。
2023-02-21 cs.SE
Automated Test Validators for Flaky Cyber-Physical System Simulators: Approach and Evaluation
University of Ottawa(渥太华大学);University of Michigan at Dearborn(密歇根大学迪尔伯恩分校)
本文提出使用测试验证器过滤无效测试输入,通过遗传编程和决策树生成方法,展示其在航空航天、网络和自动驾驶领域中的有效性,证明GP结合Ochiai方法在准确性上更具优势。
2026-04-16 cs.SE
Identifying Flaky Tests in Quantum Code: A Machine Learning Approach
University of Maryland, Baltimore County(马里兰大学巴尔的摩分校)
本文提出一种基于多机器学习模型的平台,用于自动检测量子程序中的不稳定测试,其中极端梯度提升和决策树模型表现最优,并扩展了相关数据集,以提升量子软件测试的可靠性。
2025-02-06 cs.LG cs.SE
Software Testing Meets Bayesian Workflow: A Literature-Driven Artifact Study of Probabilistic Programs
本研究结合软件测试与贝叶斯工作流,从《Statistical Rethinking》提取17种概率模型可测试属性,实现测试预言机并以59个模型验证,发现多数测试稳定,且标准变异算子无法捕获概率属性追踪的故障。
2026-10-14 cs.SE
Exploring the Impact of Code Style in Identifying Good Programmers
本研究首次探讨代码风格能否作为识别优秀程序员的指标,基于 Google Code Jam 数据,采用聚类分析和监督机器学习模型进行预测,结果表明监督机器学习模型能有效识别优秀程序员。。
2023-02-07 cs.SE
Identifying Patch Correctness in Test-Based Program Repair
基于测试的程序自动修复近年来引起了广泛的关注。然而,在实践中的测试套件往往是太弱,以保证正确性和现有的方法往往会产生大量的不正确的补丁。为了减少生成的不正确的补丁的数量,我们提出了一种新的方法,该方法可以精确地确定生成的补丁的正确性。其核心思想是利用测试用例执行的行为相似性。对原始程序和修补程序的通过测试可能表现相似,而对原始程序和修补程序的失败测试可能表现不同。此外,如果两个测试表现出类似的运行时行为,则这两个测试可能具有相同的测试结果。基于这些观察,我们生成新的测试输入,以增强测试套件,并使用它们的行为相似性,以确定补丁的正确性。我们的方法进行评估的数据集上生成的139补丁从现有的程序修复系统,包括jGenProg,Nopol,jKali,ACS和HDRepair。我们的方法成功地防止了56.3%的不正确的补丁生成,没有阻止任何正确的补丁。
2018-07-27 cs.SE
LEOPARD: Identifying Vulnerable Code for Vulnerability Assessment through Program Metrics
识别代码库中的潜在脆弱位置是有效脆弱性评估的关键步骤;即,它可以极大地帮助安全专家将他们的时间和精力投入到最需要的地方。已经提出了基于度量和基于模式的方法来识别脆弱代码。前者依赖于机器学习,由于非脆弱代码和脆弱代码之间的严重不平衡或缺乏特征来表征漏洞,因此无法很好地工作。后者需要已知漏洞的先验知识,只能识别类似但不是新类型的漏洞。在本文中,我们提出并实现了一个通用的,轻量级的和可扩展的框架,LEOPARD,通过程序度量来识别潜在的脆弱功能。LEOPARD不需要事先了解已知的漏洞。它有两个步骤,结合两套系统推导的指标。首先,它使用复杂性度量将目标应用程序中的函数分组到一组bin中。然后,它使用脆弱性指标对每个bin中的函数进行排名,并将顶部的函数识别为潜在脆弱的函数。我们在11个实际项目上的实验结果表明,LEOPARD可以通过识别20%的功能作为脆弱的,并优于基于机器学习和基于静态分析的技术覆盖74.0%的脆弱功能。我们进一步提出了三个应用程序的LEOPARD手动代码审查和模糊,通过我们发现了22个新的错误在实际应用程序,如PHP,radare 2和FFmpeg,其中8个是新的漏洞。
2020-01-19 cs.SE
Identifying Effective Program Comprehension Strategies through Gaze Transitions over Syntactic Elements
National Institute of Technology(KOSEN), Nara College(奈良工业高等专门学校);Nara Institute of Science and Technology(奈良先端科学技术大学院大学)
本研究通过将眼动数据转换为句法节点间的转换,分析注视比例和视线转换模式,发现成功参与者表现出更系统的句法元素间转换,表明使用了结构化阅读策略。
2026-07-02 cs.SE
Identifying Talented Software Engineering Students through Data-driven Skill Assessment
对于软件开发公司来说,最重要的目标之一是识别和获得有才华的软件工程师,以保持一支能够生产有竞争力产品的熟练团队。传统的发掘年轻软件工程师人才的途径主要是通过各种形式的程序设计竞赛,主要是测试参与者的程序设计技能。然而,成功的软件工程在实践中需要更广泛的技能,从团队成员,包括分析,设计,编程,测试,沟通,协作和自我管理等,在本文中,我们探讨潜在的方法来识别人才软件工程学生在数据驱动的方式,通过敏捷项目管理(APM)平台。通过我们提出的HASE在线APM工具,我们在2014年进行了一项研究,涉及21个由100多名本科软件工程学生组成的STEM团队,他们参加了为期数周的课程项目。在这项研究中,学生们进行了超过10,000个由HASE记录的ASD活动。我们展示了这一新的研究方向的可能性和潜力,并讨论了其对软件工程教育和行业招聘的影响。
2014-11-23 cs.SE
Detecting Errors in Spreadsheets
本文提出了两个互补的战略,以确定错误的电子表格程序。所提出的策略是基于这样的假设,即电子表格是软件,尽管与传统的程序软件的性质不同。相应地,识别错误的策略必须考虑到电子表格的固有属性,因为他们必须认识到,“电子表格程序员”的概念模型不同于传统程序员的概念模型。然而,没有人能够也愿意在没有这样一个概念模型的情况下编写电子表格,无论是数字性质的,还是专注于某种布局的几何性质的。
2008-05-12 cs.SE
Path-Based Function Embedding and its Application to Specification Mining
识别程序元素之间的关系对于程序理解、调试和分析是有用的。其中一种关系是同义关系。函数同义词是在代码中扮演类似角色的函数,例如为不同设备驱动程序执行初始化的函数,或实现不同密钥加密方案的函数。函数同义词在语义上不一定等同,在语法上也可能不同;因此,不能使用识别代码克隆或功能等同的方法来识别它们。本文介绍了func 2 vec,一个算法,每个函数映射到一个向量空间中的向量,使功能同义词分组在一起。我们计算的函数嵌入训练神经网络的随机行走产生的句子编码的程序作为一个标记的下推系统(L-PDS)。我们证明,func 2 vec是有效的识别功能同义词在Linux内核中。此外,我们将展示函数同义词如何在Linux文件系统和驱动程序中实现高度支持的挖掘错误处理规范。
2018-02-25 cs.SE
Identifying Bug Patterns in Quantum Programs
错误模式是错误的代码习惯用法或糟糕的编码实践,已被证明一次又一次地失败,通常是由于误解了程序设计语言的功能,使用错误的设计模式,或共享共同行为的简单错误。本文对量子程序设计语言Qiskit中的一些错误模式进行了识别和分类,并简要讨论了如何消除或预防这些错误模式。我们将这项研究作为第一步,为调试和测试量子程序提供基础。
2021-03-16 cs.PL cs.SE quant-ph
A Preliminary Study of Fixed Flaky Tests in Rust Projects on GitHub
本文初步研究 GitHub 上 Rust 项目中已修复的 flaky tests,通过分析 53 个测试发现异步等待和并发问题是主要根本原因,为理解 Rust 测试 flakiness 的成因与修复策略提供依据。
2025-02-04 cs.SE
Program Feature-based Fuzzing Benchmarking
针对传统模糊测试评估少有关注细粒度程序特征影响的问题,研究提取7项相关程序特征,构建含153个可配置程序的新型基准,评估11款工具后证实程序特征显著影响模糊测试性能,为优化评估提供支撑。
2025-06-18 cs.SE
Automated TEE Adaptation with LLMs: Identifying, Transforming, and Porting Sensitive Functions in Programs
School of Computing and Information Systems, Singapore Management University(新加坡管理大学计算与信息学学院);School of Computing Science, University of Alberta(阿尔伯塔大学计算科学学院);School of Computing and Information Technology, University of Wollongong(伍伦贡大学计算与信息技术学院)
AUTOTEE通过LLM自动识别并移植程序中的敏感函数到TEE,提升安全性和开发效率。
2026-03-05 cs.CR cs.SE
Applying Genetic Algorithm for Prioritization of Test Case Scenarios Derived from UML Diagrams
软件测试包括识别发现程序中错误的测试用例。然而,详尽的软件测试是非常耗时的。本文提出了一种利用遗传算法识别关键路线簇的测试用例场景优先级排序方法。测试用例场景是从UML活动图和状态图中导出的。将遗传算法应用于测试数据,优化了测试效率。在这项工作中采用的信息流度量计算与活动图和状态图的每个节点的信息流的复杂性。
2014-10-17 cs.SE
Identifying change patterns in software history
用于检测源代码中的差异的传统算法关注行之间的差异。因此,很少能够了解项目中随着时间的推移而发生的抽象更改。程序抽象语法树上的结构差异揭示了代码中语法级别的变化,这使我们能够进一步处理差异以理解它们的含义。我们建议,分组的变化由一些度量的相似性,然后通过反统一的模式提取将允许我们识别模式的变化在一个软件项目中包含的版本控制系统(VPS)的变化序列。诸如树编辑距离之类的树相似性度量可以用于对改变进行分组,以便标识可以表示单个改变类的分组(例如,向函数调用添加参数)。通过在每个群中应用反统一,我们能够从具体变化的族推广到结构变化的模式。在结构层面上研究变化模式,而不是逐行地研究,可以让我们深入了解软件的演变。
2013-07-05 cs.SE
Using StackOverflow content to assist in code review
程序员的一个重要目标是最小化识别和纠正源代码中缺陷的成本。代码评审通常用于识别编程缺陷。然而,手动代码审查有一些缺点:a)它很耗时,b)结果是主观的,取决于审查者的技能。因此,非常需要一种用于协助代码审查的自动化方法。我们提出了一个工具,以协助在代码审查和结果,从我们的实验评估工具在不同的情况下。该工具利用专业程序员支持论坛(例如StackOverflow.com)提供的内容来确定给定源代码片段的潜在缺陷。缺陷程度以{可能有缺陷、中性、不太可能有缺陷}的等级表示。该工具中采用的基本思想是:a)识别StackOverflow上的讨论帖子的集合P,使得P中的每个p包含与正在审查的输入代码C充分相似的源代码片段。b)通过考虑P中的所有p来确定C有缺陷的可能性。我们的方法的一个新颖的方面是使用文档指纹比较两段源代码。我们选择的文档指纹技术的灵感来自源代码剽窃检测工具,它已被证明是非常成功的。在我们进行的验证我们方法有效性的实验中,来自300多个GitHub开源存储库的源代码样本被用作输入。在确定正确/相关结果方面,已达到90%以上的精度。
2018-03-15 cs.ET cs.SE
BinGo: Identifying Security Patches in Binary Code with Graph Representation Learning
针对现有安全补丁识别方法无法直接适配二进制代码的问题,提出基于图表示学习的BinGo系统,通过代码属性图与基本块语言模型捕捉特征,构建Linux内核二进制补丁数据集,实现了最高80.77%的识别准确率,可降低编译差异带来的误检漏检。
2023-12-13 cs.CR cs.SE
Quality Attributes on Quantum Computing Platforms
随着实用的量子计算平台(QCP)迅速成为现实,人们希望在软件应用中利用它们的真正潜力。因此,确定QCP对软件体系结构的影响变得非常重要。在本文中,我们提出了深入的检查国家的最先进的QCP,以确定所有这些特性的QCP是相关的软件架构的角度来看。缺乏本机量子操作系统、对量子算法的严格依赖、较低级别的编程抽象是可能影响量子软件应用程序架构的QCP特征的许多示例中的少数。本文的主要贡献包括识别:一)一般架构的QCP,二)编程模型,通常用于开发软件时,QCP,三)架构上的重要特点的QCP和四)这些特点对各种质量属性(QA)的影响。我们表明,除了性能和可扩展性,大多数其他的QA(例如,可维护性,可测试性,可靠性等)。受到QCP不同特性的不利影响。
2018-03-15 cs.ET cs.SE quant-ph