How Do Community Smells Influence Self-Admitted Technical Debt in Machine Learning Projects?
本研究针对155个开源机器学习项目的版本数据,分析10类社区异味与6类自承认技术债(SATD)的关联及演化规律,发现特定异味与SATD高发强相关,强调早期干预社会技术问题对ML系统长期质量的重要性。
2025-07-31 cs.SE
Copy-and-Paste? Identifying EVM-Inequivalent Code Smells in Multi-chain Reuse Contracts
本文首次实证研究多链复用合约中的EVM不等价代码异味,定义六类异味并开发EquivGuard工具,通过静态污点分析和符号执行实现自动检测,在六大区块链90余万份合约中发现平均17.70%的异味出现率,警示开发者避免复制粘贴式复用。
2025-04-11 cs.SE
"Project smells" -- Experiences in Analysing the Software Quality of ML Projects with mllint
TU Delft(代尔夫特理工大学);AI for Fintech Research, ING(荷兰国际集团金融科技人工智能研究部);ML Engineering Chapter, ING(荷兰国际集团机器学习工程部)
机器学习(ML)项目在开发和生产过程中遇到了传统软件应用程序的新挑战,尽管确保项目软件质量的既定原则和最佳实践仍然适用。虽然使用静态分析来捕捉代码气味已被证明可以提高软件质量属性,但这只是软件质量难题的一小部分,特别是在ML项目的情况下,因为它们面临额外的挑战,并且开发它们的数据科学家的软件工程(SE)经验较低。我们引入了项目气味的新概念,将项目管理中的缺陷视为ML项目中软件质量的更全面的视角。还实现了一个开源的静态分析工具mlint来帮助检测和缓解这些问题。我们的研究评估了ING(一家全球性银行和大型软件和数据密集型组织)行业背景下的项目气味这一新概念。我们还调查了这些项目气味对于概念验证与生产就绪ML项目的重要性,以及使用静态分析工具(如mlint)的障碍和好处。我们的研究结果表明,需要上下文感知的静态分析工具,适合项目的需求,在其当前的发展阶段,同时需要最小的配置工作从用户。
2022-01-20 cs.AI cs.SE
Code Smells in Machine Learning Systems
University of California, Irvine(加州大学欧文分校);Facebook(脸书);Singapore Management University(新加坡管理大学);Federal University of Bahia(巴伊亚联邦大学);Microsoft Research(微软研究院);Zhejiang University(浙江大学)
随着深度学习(DL)系统的不断发展和成长,确保其质量成为一项重要但具有挑战性的任务。与非深度学习系统相比,深度学习系统具有更复杂的团队构成和更强的数据依赖性。这些固有的特性可能会导致DL系统更容易出现错误,并且从长远来看,更容易出现维护问题。代码气味作为非DL系统的有效指标进行了经验测试。因此,我们向前迈进了一步,在这个全面的研究中识别代码气味,并了解它们对维护的影响。这是第一次在深度学习软件系统的背景下研究代码气味,这有助于研究人员和从业人员首先了解进行了什么样的维护修改以及开发人员一直在处理什么样的代码气味。我们的论文有三个主要贡献。首先,我们全面调查的维护修改,已通过研究DL系统的演变DL开发人员,我们确定了9个经常发生的维护相关的修改类别在DL系统。其次,我们总结了DL系统中的五种代码气味。第三,我们通过定性和定量分析的混合验证了我们新识别的代码气味的流行程度和影响。我们发现,从开发人员的角度来看,我们新识别的代码气味对DL系统的维护是普遍和有影响的。
2022-03-02 cs.LG cs.SE
Specification and Detection of LLM Code Smells
École de technologie supérieure;Université du Québec à Montréal
本文提出LLM代码异味的概念,通过扩展检测工具SpecDetect4AI,分析了200个开源LLM系统中60.50%的系统存在代码异味问题,检测精度达86.06%。
2025-12-19 cs.AI cs.SE
LLM Code Smells: A Taxonomy and Detection Approach
École de technologie supérieure;Université du Québec à Montréal
本文提出并完善了LLM代码异味的概念,构建了包含9种异味的分类体系,开发了静态检测工具SpecDetect4LLM,并在692个开源项目中验证了其检测效果(精确率91.3%,召回率71.8%),发现73.5%的项目存在此类异味。
2026-10-28 cs.AI cs.SE
Security Code Smells in Android ICC
Android组件间通信(ICC)非常复杂,在很大程度上不受约束,开发人员很难理解。因此,ICC是Android应用程序中安全漏洞的常见来源。为了促进安全编程实践,我们回顾了相关研究,并确定了Android设备中可避免的ICC漏洞以及指示其存在的安全代码气味。我们解释了漏洞及其相应的气味,并讨论了如何在开发过程中消除或减轻它们。我们在Android Lint之上提供了一个轻量级的静态分析工具,它可以分析开发中的代码,并在IDE中提供有关代码中是否存在此类气味的即时反馈。此外,在这个工具的帮助下,我们研究了700多个开源应用程序中安全代码气味的流行程度,并手动检查了大约15%的应用程序,以评估识别这些气味发现ICC安全漏洞的程度。
2018-12-10 cs.CR cs.SE
When Code Smells Meet ML: On the Lifecycle of ML-specific Code Smells in ML-enabled Systems
本研究针对ML赋能系统质量保障方法不足的问题,提出研究计划,将通过构建新型检测器CodeSmell,分析337个项目的40余万次提交,探究ML特定代码异味的 prevalence、引入移除机制及存活周期。
2024-03-13 cs.SE
Dependency Smells in JavaScript Projects
现代软件开发中的依赖管理为希望保持最新功能和修复同时确保向后兼容性的开发人员带来了许多挑战。项目维护人员选择了各种各样的,有时是相互冲突的方法来维护他们的依赖关系。选择不合适的方法可能会给项目带来bug和漏洞,引入破坏性的更改,导致无关的安装,并降低依赖性的可理解性,使其他人更难有效地做出贡献。在本文中,我们经验性地研究了经常性的依赖管理问题(依赖气味)的证据。我们查看了1,146个活动JavaScript存储库的数据集的提交数据,以分类,量化和理解依赖气味。通过对从业者的一系列调查,我们确定并量化了七种受欢迎程度不同的依赖气味,并调查了为什么它们会在整个项目历史中被引入。我们的研究结果表明,依赖气味在JavaScript项目中很普遍,80%的项目中出现了两种或两种以上不同的气味,但它们通常会感染项目的少数依赖项。我们的观察表明,依赖气味的数量往往会随着时间的推移而增加。实践者认为依赖气味会带来许多问题,包括安全威胁、bug、依赖破坏、运行时错误和其他维护问题。这些气味通常是在开发人员对依赖不当行为和npm生态系统的缺点做出反应时引入的。
2021-08-18 cs.SE
Performance Smells in ML and Non-ML Python Projects: A Comparative Study
本研究对比分析了300个基于Python的GitHub项目,发现由于ML工作流的计算和数据密集型特性,ML项目比非ML项目更易出现性能坏味,且主要集中在数据处理阶段,为开发者提供了针对性的优化建议。
2025-04-28 cs.SE
PyNose: A Test Smell Detector For Python
与生产代码类似,代码气味也出现在测试代码中,它们被称为测试气味。测试气味不仅对测试代码,而且对正在测试的生产代码都有不利影响。到目前为止,大多数关于测试气味的研究都集中在程序设计语言上,比如Java和Scala。然而,没有可用的自动化工具来支持Python测试气味的识别,尽管近年来Python的流行度迅速增长。在本文中,我们努力将研究扩展到Python,建立一个工具来检测这种语言的测试气味,并在Python项目中进行测试气味的实证分析。我们首先从现有的研究中收集了一系列测试气味,并选择了可以被认为与语言无关或在Python的标准Unittest框架中具有类似功能的测试气味。我们总共确定了17种不同的测试气味。此外,我们通过挖掘频繁的代码更改模式来搜索Python特定的测试气味,这些模式可以被视为修复或引入测试气味。基于这些变化,我们提出了我们自己的测试气味,称为次优断言。为了检测所有这些测试气味,我们开发了一个名为PyNose的工具,它是PyCharm(一个流行的Python IDE)的插件。最后,我们进行了一项大规模的实证调查,旨在分析Python代码中测试气味的流行程度。我们的研究结果表明,98%的项目和84%的测试套件在研究数据集中包含至少一个测试气味。我们提出的次优断言气味在多达70.6%的项目中被检测到,使其成为列表中有价值的补充。
2021-08-10 cs.SE
Comparing ML-Specific and General Python Code Smells Across Project Characteristics
通过分析279个GitHub上的开源机器学习项目,研究项目特征(如规模、年龄、贡献者、提交频率、CI/CD采用和领域)与ML特定及通用Python代码异味的关系,发现ML代码异味频率远低于通用Python异味,且提交频率和领域与ML特定质量显著相关,而通用Python异味与项目特征无关,表明需要针对不同异味类型制定定制化质量策略。
2026-06-01 cs.SE
xNose: A Test Smell Detector for C#
本文针对 C# 测试坏味检测工具缺乏的问题,开发了 xNose 工具,识别 16 种测试坏味并分析其在 xUnit 项目中的分布,精确率和召回率分别达 96.97% 和 96.03%,以帮助开发者维护代码质量。
2024-05-07 cs.SE
On the use of test smells for prediction of flaky tests
Federal University of Paraná(巴拉那联邦大学);Federal University of Technology - Paraná(巴拉那联邦理工大学)
回归测试是交付高质量软件的一个重要阶段。然而,重复测试妨碍了测试结果的评估,并可能增加成本。这是因为一个测试集可能通过或失败,这是不确定的,并且为了正确地识别测试的脆弱性,需要多次重新运行测试集。为了应对这一挑战,已经提出了基于预测模型和机器学习的方法。现有的方法的基础上使用的测试用例词汇可能是上下文敏感的,容易过拟合,表现出较低的性能时,在跨项目的情况下执行。为了克服这些局限性,我们调查使用测试气味作为预测的气味测试。我们进行了一项实证研究,以了解测试气味是否具有良好的性能,作为一个分类器,以预测在跨项目的情况下,片状,并分析了每个测试气味的信息增益。我们还比较了基于测试气味的方法和基于词汇的方法。因此,我们获得了一个分类器,具有合理的性能(随机森林,0.83),以预测在测试阶段的片状。该分类器在跨项目预测中表现出比基于词汇的模型更好的性能。断言轮盘赌和睡眠测试气味类型是与最佳信息增益值相关的气味类型。
2021-09-14 cs.LG cs.SE
Dirty-Waters: Detecting Software Supply Chain Smells
针对使用开源依赖的项目难以及时察觉软件供应链风险的问题,本文提出软件供应链坏味道概念与检测工具Dirty-Waters,经多版本JavaScript项目验证其能有效识别大量风险点,为供应链安全防护提供明确指引。
2024-10-21 cs.CR cs.SE
Developers perception on the severity of test smells: an empirical study
单元测试是软件开发生命周期的重要组成部分。通过创建和运行单元测试,开发人员可以轻松快速地捕获和修复源代码中引入的软件错误。尽管单元测试很重要,但它会受到糟糕的设计或实现决策的影响,即所谓的测试气味。这些可能会从各个方面降低软件系统的质量,使其更难理解,更复杂的维护,更容易出现错误和bug。许多研究讨论了测试气味对测试代码的可能影响。然而,缺乏研究,捕捉开发人员对这些问题的看法。本研究实证分析了开发人员如何在他们开发的测试代码中感知测试气味的严重性。严重性是指测试气味可能对测试代码产生负面影响的程度。我们从GitHub中选择了六个开源软件项目,并采访了他们的开发人员,以了解测试气味是否以及如何影响测试代码。尽管大多数受访的开发人员认为测试气味对他们的代码的严重性很低,但他们表示测试气味可能会对项目产生负面影响,特别是在测试代码的可维护性和演化方面。此外,从测试代码中检测和移除测试气味可能对项目有积极意义。
2021-07-29 cs.SE
Understanding Code Smell Detection via Code Review: A Study of the OpenStack Community
代码评审在软件质量控制中起着重要的作用。一个典型的评审过程包括仔细检查一段代码,试图找到缺陷和其他质量问题/违规。可能影响软件质量的一种类型的问题是代码气味-即,可能导致缺陷或维护问题的不良编程实践。然而,我们对在代码审查过程中识别代码气味的程度知之甚少。为了研究代码审查中识别出的代码气味背后的概念,以及审查者建议和开发人员采取什么行动来响应识别出的气味,我们使用两个最活跃的OpenStack项目(Nova和Neutron)对代码审查中的代码气味进行了实证研究。我们手动检查了通过关键字搜索和随机选择获得的19,146条评论,并获得了1,190条与气味相关的评论,以研究代码气味的原因以及针对识别出的气味采取的行动。我们的分析发现:1)代码气味通常不会在代码审查中被识别出来,2)气味通常是由违反编码约定引起的,3)审查人员通常会提供建设性的反馈,包括修复(重构)建议,以帮助开发人员消除气味,4)开发人员通常会遵循这些建议并采取行动。我们的研究结果表明:1)开发人员应该在他们的项目中严格遵循编码惯例,以避免引入代码气味; 2)基于审查的代码气味检测被开发人员认为是一种值得信赖的方法,主要是因为审查是上下文敏感的(因为审查者更了解代码的上下文,因为他们是项目开发团队的一部分)。
2021-03-21 cs.SE
SpecDetect4ML: Detecting Non-Local ML Code Smells with Code Property Graphs
École de technologie supérieure;Université du Québec à Montréal(魁北克大学蒙特利尔分校)
本文研究ML代码异味问题,提出基于规范的检测工具SpecDetect4ML,通过声明式DSL和可扩展分析引擎,实现项目级的代码异味检测,提升可复现性和可维护性。
2026-07-01 cs.AI cs.SE
Code Smells Detection via Modern Code Review: A Study of the OpenStack and Qt Communities
代码评审在软件质量控制中起着重要的作用,它可以检测和定位缺陷和其他质量问题。可能影响软件质量的一种问题是代码气味。然而,我们对现代代码审查中代码气味的识别程度知之甚少。为了研究现代代码审查中识别出的代码气味背后的概念,以及审查者建议和开发人员采取什么行动来响应识别出的气味,我们通过分析来自OpenStack(Nova和Neutron)和Qt(Qt Base和Qt Creator)社区的四个大型开源项目的审查,对代码审查中的代码气味进行了研究。我们手动检查了通过关键字搜索和随机选择获得的总共25,415条代码审查评论,并确定了1,539条与气味相关的评论。我们的分析发现:1)代码气味在代码评审中通常不会被识别出来,2)气味通常是由违反编码约定引起的,3)评审人员通常会提供建设性的反馈,包括修复(重构)建议,以帮助开发人员消除气味,4)开发人员通常遵循这些建议并采取行动的变化,5)一旦确定由审查,开发人员通常花费不到一周的时间来修复气味,以及6)开发人员选择忽略所识别的气味的主要原因是不值得修复气味。我们的研究结果表明:1)开发人员应该在他们的项目中严格遵循编码惯例,以避免引入代码气味,2)基于审查的代码气味检测被开发人员认为是一种值得信赖的方法,主要是因为审查是上下文敏感的(由于评审人员是项目开发团队的一部分,因此他们更了解代码的上下文),以及3)需要充分考虑程序上下文以便做出是否立…
2022-05-16 cs.SE
Machine Learning-Based Test Smell Detection
University of Salerno(萨勒诺大学);Tampere University(坦佩雷大学)
测试气味是开发测试用例时采用的次优设计选择的症状。已有的研究已经证明了它们对测试代码的可维护性和有效性的危害。因此,研究人员一直在提出自动化的、基于电子学的技术来检测它们。然而,这样的检测器的性能仍然是有限的,并且取决于要调谐的阈值。目的:设计并实验了一种基于机器学习的气味检测方法。方法:我们计划开发最大的人工验证测试气味数据集。该数据集将用于训练六个机器学习器,并评估他们在项目内和跨项目场景中的能力。最后,我们计划将我们的方法与最先进的基于几何学的技术进行比较。
2022-08-16 cs.LG cs.SE
Towards Anticipation of Architectural Smells using Link Prediction Techniques
ISISTAN Research Institute, CONICET-UNICEN University(CONICET-UNICEN大学ISISTAN研究所)
软件系统会自然地进化,而这种进化经常会带来导致系统退化的设计问题。架构气味是此类问题的典型症状,其中一些气味与模块之间不希望的依赖性有关。早期检测这些气味对开发人员很重要,因为他们可以提前计划维护或重构工作,从而防止系统降级。用于识别架构气味的现有工具可以在气味存在于源代码中时检测到气味。这意味着已经创建了它们不需要的依赖关系。在这项工作中,我们探索了一种前瞻性的方法,能够推断出可能的模块依赖关系,可以预测在未来的系统版本的架构气味组。我们的方法将当前模块结构视为网络,以及来自以前版本的信息,并应用链接预测技术(来自社会网络分析领域)。特别是,我们专注于依赖相关的气味,如循环依赖和枢纽依赖,这很好地符合链接预测模型。对两个开源项目的初步评估表明,在某些考虑因素下,我们的方法的预测是令人满意的。此外,该方法可以扩展到其他类型的基于依赖性的气味或度量。
2018-08-20 cs.LG cs.SE
PyExamine A Comprehensive, UnOpinionated Smell Detection Tool for Python
PyExamine是一个全面的Python代码坏味检测工具,通过架构、结构和代码级三个层级分析49个指标,在7个项目中取得高检测准确率,并在183个项目中验证了坏味普遍性。
2025-01-30 cs.SE
Cache-Related Smells in GitLab CI/CD: Comprehensive Catalog, Automated Detection, and Empirical Evidence
University of Vienna(维也纳大学)
本文研究GitLab CI/CD中的缓存问题,提出十种缓存相关问题的全面目录,并通过CROSSER工具自动检测其中七种,实证显示这些问题在大量项目中普遍存在。
2026-04-20 cs.SE
Are Architectural Smells Independent from Code Smells? An Empirical Study
背景架构气味和代码气味是不良代码或设计的症状,它们可能导致不同的质量问题,例如错误、技术债务或维护和进化方面的困难。一些研究表明,代码气味和架构气味经常出现在同一个文件中。然而,代码气味和架构气味之间的相关性还不清楚;一些对有限项目的研究声称架构气味可以从代码气味中衍生出来,而其他研究则相反。Objective.这项工作的目标是了解架构气味是否独立于代码气味,或者可以从代码气味或其中的一个类别中派生出来。法我们进行了一个案例研究,分析了19种代码气味,6种代码气味和4种架构气味之间的相关性。结果结果表明,架构气味与代码气味相关的发生率非常低,因此不能从代码气味中获得。结论架构气味独立于代码气味,因此值得研究人员和从业人员特别关注,研究人员应该调查它们的实际危害,从业人员应该考虑是否以及何时删除它们。
2019-04-26 cs.SE
MLScent A tool for Anti-pattern detection in ML projects
University of Oslo(奥斯陆大学)
MLScent是一种基于AST分析的静态工具,通过76个检测器覆盖主流ML框架,高效识别ML项目中的反模式和代码异味,提升代码质量与可维护性。
2025-01-30 cs.AI cs.SE
Predicting Community Smells' Occurrence on Individual Developers by Sentiments
社区气味出现在次优的软件开发社区结构中,导致不可预见的额外项目成本,例如,生产力下降,技术债务增加。以前的研究分析和预测社区气味的粒度社区亚组使用社会技术因素。然而,重构这种气味需要开发人员单独努力。要消除这些障碍,必须根据其主题和工作状态,为每个开发人员制定相应的支持措施。最近的研究表明,开发人员的个性可能会影响社区气味的变化,他们的情绪可能会影响生产力。因此,情绪可以被评估来预测社区气味在他们身上的发生。为此,本文构建了一个面向开发人员的感知社区气味预测模型,考虑了组织筒仓,孤狼和瓶颈等3种气味。此外,它还预测开发商是否在受到任何气味影响后离开社区。所提出的模型实现了跨项目和项目内的预测F-测量范围从76%到93%。研究还发现,与活跃度指标相比,6个情感特征具有更强的预测能力。祈使语和指示性表达、礼貌和几种情绪是最有力的预测因素。最后,我们统计测试的平均值和分布的情感特征。根据我们的研究结果,我们建议开发人员应该以直接和礼貌的方式进行沟通。
2021-03-12 cs.SE
A systematic literature review on the code smells datasets and validation mechanisms
School of Computer Engineering, Iran University of Science and Technology(伊朗科技大学计算机工程学院);University of Salerno(萨勒诺大学)
本文系统综述45个代码坏味数据集,分析其规模、严重程度、项目类型和样本比例等属性及验证机制,指出现有数据集存在类别覆盖不足、样本不平衡、缺少严重程度且局限于Java等问题。
2023-06-02 cs.AI cs.PL cs.SE
On the evolution and impact of Architectural Smells -- An industrial case study
架构气味(AS)对软件系统的可维护性和可演化性有着长期的影响。大多数的研究工作都是通过挖掘开源Java系统的软件存储库来研究这个主题的,这使得很难将它们推广并应用到工业环境和其他程序设计语言中。为了解决这一研究空白,我们进行了嵌入式多案例研究,与一个大型行业合作伙伴合作,研究如何在工业嵌入式系统AS演变。我们在9个C/C++项目中检测和跟踪AS,每个项目的开发时间超过两年,每个项目的发布版本超过30个,仅最后一个版本就有超过2000万行代码。除了这些定量结果,我们还采访了12名开发人员和建筑师,他们在这些项目中工作,收集了超过六个小时的定性数据,这些数据是关于AS分析的有用性以及他们在维护和发展受AS影响的人工制品时遇到的问题。我们的定量研究结果显示了个体气味实例如何随着时间的推移而演变,它们通常在系统中存活多久,它们如何与其他气味类型的实例重叠,以及最后当它们重叠时,气味类型的引入顺序是什么。相反,我们的定性研究结果,提供了洞察力的影响,AS的长期可维护性和系统的可演化性,从我们的采访中的几个摘录的支持。实践者还提到AS分析的哪些部分实际上提供了可操作的见解,他们可以使用这些见解来计划重构活动。
2022-03-16 cs.SE
Empirical Characterization of Logging Smells in Machine Learning Code
Polytechnique Montreal(蒙特利尔理工学院)
本文通过分析444个机器学习项目,识别出12种日志异味类型,揭示日志质量对系统可重复性、可维护性和可信度的影响,并公开数据集以支持未来研究。
2026-03-24 cs.SE
Defect prediction with bad smells in code
背景资料:软件中的缺陷预测对于开发项目来说是非常有益的,因为预测是非常有效的,并且容易出现缺陷的区域被正确地预测。获得有效的软件缺陷预测的关键因素之一是正确选择用于数据集准备的度量。目的:本研究的目的是验证,是否代码气味度量,收集使用Microsoft CodeAnalysis工具,添加到基本度量集,可以提高缺陷预测在工业软件开发项目。结果如下:我们验证了,如果数据集扩展的代码气味来源的指标,改变缺陷预测的有效性,通过比较预测结果的数据集与代码气味导向的指标。结果,我们观察到,当使用用难闻气味度量扩展的数据集时,缺陷预测的有效性只有很小的提高:平均准确度值增加了0.0091,并保持在误差范围内。然而,当仅使用基于代码气味的度量用于预测(没有基本度量集)时,这样的过程产生了令人惊讶的高准确度(0.8249)和F测量(0.8286)结果。我们还详细阐述了当使用两个不同的度量源来准备一组一致的数据时,我们观察到的数据异常和问题。结论:通过代码气味源度量扩展数据集不会显着提高预测效率。取得的结果并不能补偿收集额外指标所需的努力。然而,我们观察到,仅基于代码气味的缺陷预测仍然非常有效,特别是在几乎不使用其他度量的情况下可以使用。
2017-03-18 cs.SE
Bias Smells in AI Software Development: Recognizing Potential Sources of Fairness Debt
University of Calgary(卡尔加里大学);Universidade Federal Rural de Pernambuco (UFRPE)(巴西联邦农村佩尔南布科大学);Virginia Commonwealth University(弗吉尼亚联邦大学)
该研究通过对某组织四个AI项目的探索性案例研究,识别出六种“偏见异味”指标,将软件异味范式扩展至公平性领域,为将公平性纳入软件质量保证提供了基础。
2026-08-12 cs.SE
An Event-Driven Tool for Context-Aware Code Smell Detection Using SmellDSL
University of Vale do Rio dos Sinos (Unisinos)(圣瓦莱杜里奥多斯西诺斯大学)
本文提出SmellHunter工具,通过SmellDSL领域特定语言解析脚本,结合静态代码度量和上下文信息(如团队特征、项目阶段和地理元数据)来检测和上下文化代码异味,支持更明智的重构决策。
2026-05-20 cs.SE
On The Effect Of Code Review On Code Smells
代码气味是设计质量差的症状。由于代码审查是一个过程,也旨在提高代码质量,我们调查是否以及如何影响代码气味的严重性。在这项研究中,我们分析了属于7个Java开源项目的21,000多个代码审查;我们发现,积极和参与的代码审查对降低代码气味严重程度的可能性有显着影响。这个结果似乎证实了代码审查对代码质量的影响。然而,通过人工调查365个案例,其中一个文件中的代码气味的严重性通过审查而降低,我们发现,在95%的情况下,这种降低是审查人员要求对与代码气味无关的事项进行更改的副作用。数据和材料[https://doi.org/10.5281/zenodo.3588501]。
2019-12-20 cs.SE
Community Smells -- The Sources of Social Debt: A Systematic Literature Review
社会债务描述了次优软件开发过程中不可预见的项目成本(或潜在成本)的积累。社区气味是社会技术的反模式,也是影响软件团队、开发过程、结果和组织的社会债务的一个来源。目的:根据已发表的文献,提供社区气味的概述,并描述未来的研究。方法:我们进行了系统的文献综述(SLR),以确定属性,了解起源和演变,并描述社区气味的出现。这个SLR解释了社区气味对团队合作和团队绩效的影响。结果:共纳入25项研究。社会债务描述了糟糕的社会技术决策对工作环境、人员、软件产品和社会的影响。对于30个确定的社区气味,我们提供了一个描述,管理方法,组织战略和缓解效果。我们确定了五组管理方法:组织战略,框架,模型,工具和指导方针。我们描述了社区气味的11个特性。我们开发了社区气味阶段框架,以简洁地描述社区气味的起源和演变。我们描述了每个社区气味的原因和影响。我们确定并描述了社区气味的8种原因和11种影响。最后,我们提供了8个Sankey图表,这些图表提供了对社区气味对团队合作因素和团队绩效构成的威胁的见解。结论:社区气味解释了工作条件对软件开发人员的影响。文献很少,集中在少数社区气味上。因此,社区气味还需要更多的研究。这篇评论整理了关于社区气味的最新研究成果,并为未来的研究提供了动力和教育材料。
2022-09-21 cs.SE
Security smells in infrastructure as code: a taxonomy update beyond the seven sins
University of Luxembourg(卢森堡大学)
针对基础设施即代码(IaC)安全气味分类法受限于单一工具和手动偏差的问题,本研究扩展数据集至七种IaC工具,结合LLM自动化分析与人工验证,构建含62类的综合分类法,并实现精确率达1.00的检查规则,揭示安全气味长期存在的现状。
2025-09-23 cs.AI cs.CR cs.LG
How Do Code Smells Affect Skill Growth in Scratch Novice Programmers?
Universidad Rey Juan Carlos(雷伊胡安卡洛斯大学)
本研究通过分析约200万个Scratch项目,探究计算思维技能与设计级代码坏味之间的关联,并识别最相关的CT维度及任务背景的调节作用,旨在为教育课程和自动化反馈系统提供依据。
2026-06-24 cs.SE
The Influence of Code Smells in Efferent Neighbors on Class Stability
University of Auckland(奥克兰大学)
本研究探讨了代码异味在传出邻居中的影响对类稳定性的作用,考虑了代码异味的互相关和相互作用因素。
2026-10-26 cs.SE
Automated Unit Test Refactoring
针对测试异味导致测试代码质量低、维护难及现有自动化重构方法灵活性不足的问题,提出基于LLM的上下文增强框架UTRefactor,通过思维链模拟手动重构并结合检查点机制,在6个开源Java项目测试中实现89%异味消除率,性能显著优于现有方法。
2025-02-11 cs.SE
On the Interplay of Smells Large Class, Complex Class and Duplicate Code
坏味道被定义为描述代码中的潜在问题,可能指出重构的机会。一些实证研究强调,气味对理解和可维护性有负面影响。因此,已经提出了几种方法来检测和重组它们。然而,在源代码中不同类型的气味发生的相互关系的研究仍然缺乏,特别是那些集中在这种相互关系的量化。在这项工作中,我们的目标是了解和量化的可能的相互关系的气味大类- LC,复杂的类- CC和重复代码- DC。特别是,我们调查模式的LC和CC的存在或不存在的重复代码。我们对五个开源项目进行了定量研究,并进行了定性分析,以测量和了解特定气味的关联。作为主要结果之一,我们强调,有“发生模式”之间的这些气味,例如:无论是在复杂类或在大类和复杂类的共同出现,克隆往往是更普遍的高度复杂的类比不太复杂的类。发现的模式可以用于提高检测工具的性能,甚至有助于重构任务。
2021-07-20 cs.SE
GLITCH: Automated Polyglot Security Smell Detection in Infrastructure as Code
基础架构即代码(IaC)是通过可编程配置文件(也称为IaC脚本)管理IT基础架构的过程。与其他软件工件一样,IaC脚本可能包含安全气味,这是可能导致安全漏洞的编码模式。存在用于检测IaC脚本中安全气味的自动分析工具,但它们专注于特定技术,如Puppet,Ansible或Chef。这意味着,当在其中一个工具中实现新气味的检测时,它不能立即用于其他工具支持的技术-唯一的选择是重复工作。本文提出了一种方法,使一致的安全气味检测不同的IaC技术。我们进行了一项大规模的实证研究,分析了包含196,755个IaC脚本和12,281,251个IaC脚本的三个大型数据集的安全气味。我们发现,所有类别的安全气味在所有数据集,我们确定了一些气味,可能会影响许多IaC项目。为了进行这项研究,我们开发了GLITCH,这是一种新的技术不可知的框架,通过将IaC脚本转换为中间表示,可以定义不同的安全气味检测器,从而实现自动化的多语种气味检测。GLITCH目前支持在Ansible、Chef或Puppet编写的脚本中检测九种不同的安全气味。我们将GLITCH与最先进的安全气味探测器进行比较。实验结果表明,GLITCH不仅可以减少编写多种IaC技术的安全气味分析的工作量,而且比当前最先进的工具具有更高的准确率和召回率。
2022-09-07 cs.CR cs.SE
Towards Heuristics for Supporting the Validation of Code Smells
代码气味的识别在很大程度上被认为是一项主观任务。因此,现有的自动检测工具不足以处理任务中涉及的整个主观性,需要人工验证。然而,开发人员可能遵循不同但互补的观点来手动验证相同的代码气味。基于这种情况下,我们的研究旨在表征一个全面的和优化的一组特征,用于指导开发人员验证自动检测工具报告的代码气味的发生率。为此,我们进行了实证研究,与12个经验丰富的软件开发人员。在这项研究中,我们邀请开发人员单独验证来自开源Java项目的24个代码片段中代码气味的发生率。对于每个验证,开发人员应该提供支持他们决策的参数。研究结果显示,开发人员倾向于从不同的角度看待问题,即使他们同意代码气味的发生率。在将303个参数编码并提炼之后,我们组成了一组优化的验证项目,用于指导开发人员手动验证八种类型的代码气味的发生率:数据类,上帝类,投机性一般性,中间人,拒绝遗赠,原始痴迷,长参数列表和功能嫉妒。我们目前正计划与专家一起进行调查,以确定改进所提议的验证项目集的机会。
2021-10-06 cs.SE
SmellBench: Evaluating LLM Agents on Architectural Code Smell Repair
University of Craiova(克劳索瓦大学);NVIDIA(NVIDIA公司);University Politehnica of Bucharest(布加勒斯特理工大学)
本文提出SmellBench框架,用于评估LLM代理在修复建筑代码异味方面的性能,通过专家验证发现最佳代理修复率为47.7%,但修复 aggressiveness 与代码库质量呈负相关。
2026-05-12 cs.CL cs.SE
PHP code smells in web apps: survival and anomalies
Iscte - Instituto Universitário de Lisboa, ISTAR(里斯本大学学院);NOVAIMS, UNL(新里斯本大学管理信息系统研究所)
本文对PHP Web应用中代码异味的生存与异常进行了纵向研究,发现异味生存期取决于其范围(局部约4年,分散约5年),约60%被移除,并证明异常图形化能揭示项目历史以督促定期重构。
2020-12-31 cs.SE
Beyond Strict Rules: Assessing the Effectiveness of Large Language Models for Code Smell Detection
Universidade Federal de Minas Gerais(米纳斯吉拉斯联邦大学);Universidade Federal de Ouro Preto(奥罗普雷托联邦大学);University of Ottawa(渥太华大学)
本研究评估了四种大型语言模型(DeepSeek-R1、GPT-5 mini、Llama-3.3、Qwen2.5-Code)在30个Java项目中检测九种代码异味的效果,并提出了结合LLM与静态分析工具的检测策略,该策略在五个异味类型上F1分数优于单独使用LLM或工具。
2026-05-29 cs.SE
An Empirical Evaluation of Code Smell Detection in Angular Applications
Federal University of Ceará(塞阿拉联邦大学);Federal University of Bahia(巴伊亚联邦大学)
本文通过灰色文献综述识别出11种Angular代码异味,其中6种也存在于React系统中,展示了自动化工具在检测代码异味中的高准确性与有效性。
2026-04-30 cs.SE
Parichayana: An Eclipse Plugin for Detecting Exception Handling Anti-Patterns and Code Smells in Java Programs
反模式和代码气味是源代码中的标志,它们不是缺陷(不会阻止程序运行,也不会导致编译错误),而是更深层次和更大问题的指标。异常处理是一种编程构造,设计用于处理异常或异常条件(改变程序执行的正常流程)的发生。在本文中,我们提出了一个Eclipse插件(称为Parichayana),用于检测Java程序中的异常处理反模式和代码气味。Parichayana能够自动检测几个常见的例外处理编程错误。我们扩展了Eclipse IDE,并通过Parichayana插件(托管在GitHub上的免费开源)创建了新的菜单项和相关操作。我们比较和对比Parichayana与几个代码气味检测工具,并证明我们的工具提供了独特的能力,在现有的工具。我们已经创建了一个更新站点,开发人员可以使用Eclipse更新管理器从我们的站点安装Parichayana。我们在几个基于Java的大型开源项目中使用了Parichyana,并检测到异常处理反模式的存在
2016-12-31 cs.SE
Towards the Systematic Testing of Virtual Reality Programs (extended version)
软件测试是确保软件符合其规范的关键活动。然而,目前的软件测试活动往往是不完全有效的,当应用在特定的软件领域在虚拟现实(VR),具有几种新的类型的功能,如图像,声音,视频,和差异化的互动,这可能成为新的故障的来源。本文概述了可能对验证、确认和测试(VV&T)产生影响的主要VR特征。此外,它还分析了一些最成功的VR开源项目,以了解缺乏软件测试活动的危险。我们比较了开源VR项目中软件测试实践的现状,并评估了缺乏测试如何损害产品的开发。我们评估了代码气味的发生率,并验证了这些项目如何表现出故障的倾向。结果表明,软件测试的实践在虚拟现实应用程序的开发中还没有得到广泛的应用。研究还发现,VR项目中代码气味的发生率很高。关于故障倾向,结果显示,在VR项目中分析的类中,约有12.2%是故障倾向。关于软件测试技术在VR项目中的应用,据观察,只有少数项目关注为VR项目开发测试用例,可能是因为我们仍然没有必要的工具来帮助这一方向。关于气味,我们得出的结论是,在VR项目中有很高的发生率,特别是在实施气味方面,这种高发生率可能会对故障产生重大影响。最后,与故障倾向相关的研究指出,缺乏软件测试活动是项目成功的一个重大风险。
2020-09-18 cs.SE
Empirical Characterization of Logging Smells in Machine Learning Code
Polytechnique Montréal(蒙特利尔理工学院)
本研究通过实证分析识别并描述机器学习系统中日志恶臭,旨在提供基于证据的理解,以改进日志记录实践。
2026-01-09 cs.SE
An architectural technical debt index based on machine learning and architectural smells
本文提出一种基于机器学习和架构坏味的技术债务本金估算方法,通过训练学习排序模型评估坏味严重性并结合静态代码行数计算,经案例研究验证,71%的从业者认可其估算的代表性。
2023-10-17 cs.SE
Less is More: Minimizing Code Reorganization using XTREE
上下文:开发人员使用糟糕的代码气味来指导代码重组。然而,开发人员、教科书、工具和研究人员对哪些难闻的气味是重要的意见不一。目的:评估代码重组以解决不良代码气味将改善代码缺陷倾向的可能性。方法:我们引入了XTREE,这是一个工具,它分析了代码中以前看到的缺陷的历史日志,并生成了一组有用的代码更改。任何需要在该集合之外进行更改的难闻气味都可以降低优先级(因为没有历史证据表明难闻气味会导致任何问题)。评价:我们评估XTREE的建议,从以前的工作(Shatnawi,阿尔维斯和博尔赫斯)使用多个数据集的代码度量和缺陷计数的建议,改善难闻的气味。结果如下:响应Xtree建议而更改的代码模块包含的缺陷比以前研究的建议少得多。此外,XTREE支持对很少的代码度量进行更改,并且难闻气味建议(从以前的研究中学习)并不适用于所有软件项目。结论:在基于坏气味报告进行代码重组之前,使用像Xtree这样的工具来检查并忽略任何无用的操作;即在历史记录中缺乏证据表明进行更改是有用的。请注意,此用例既适用于开发人员提出的手动代码重组,也适用于由自动方法执行的代码重组。本建议假定存在历史记录。如果不存在,那么本文的结果可以作为指导。
2017-05-14 cs.SE
Towards Refactoring of DMARF and GIPSY Case Studies -- a Team 8 SOEN6471-S14 Project Report
决定软件系统质量的因素之一是它的设计和体系结构。拥有良好且清晰的设计和体系结构,可以使系统不断发展(计划和添加新功能),更容易理解、更容易开发、更容易维护;总之,可以延长的使用寿命,并在市场上更具竞争力。在下面的文章中,我们研究了两个不同的系统的体系结构:GIPSY和DMARF。本文对这两个系统进行了概述。这两个系统、目的、架构及其设计模式是什么?还确定了具有弱体系结构和设计以及代码气味的类,并建议和实现了一些重构。在整个文件中使用了几个工具,用于几个目的。LOGICSCOPE、JDeodoant、McCabe被用来识别设计和代码味道较弱的类。其他工具和插件也被用来识别类设计和类之间的关系,如ObjectAid(Eclipse插件)。
2014-12-23 cs.SE
Towards Refactoring of DMARF and GIPSY Case Studies -- A Team 5 SOEN6471-S14 Project Report
本文分析了两个用Java开发的分布式开源系统(OSS)的体系结构设计:分布式模块化音频识别框架(DMARF)和通用内涵编程系统(GIPSY)。该研究从这些框架的背景研究开始,以确定其整体架构。然后,我们确定参与者和利益相关者,并为每个框架起草一个领域模型。接下来,我们评估并提出了一个融合DMARF在GIPSY运行时架构(DoGRTA)作为一个域的概念。后来,团队提取并研究了实际的类图,并确定了感兴趣的类。接下来,我们确定了每个框架的代码中存在的设计模式。最后,使用流行的工具检测源代码中的代码气味,并使用已建立的技术重构选定数量的已识别气味,并在最终的源代码中实现。在重构之前和之后编写并运行测试,以检查任何行为更改。
2014-12-23 cs.SE
Profiling Developers Through the Lens of Technical Debt
内容:技术债需要管理以避免灾难性的后果,调查开发人员关于技术债管理的习惯是软件开发中非常宝贵的信息。目的:本研究旨在描述开发人员如何根据他们诱导的代码气味和他们应用的重构来管理技术债务。方法:我们为选定项目的每个开发人员挖掘了一个公开的技术债务数据集,以获取Git提交信息,代码气味,编码违规和重构活动。结果如下:通过结合这些信息,我们可以对开发人员进行分析,以识别多产的编码人员,突出区分开发人员角色(评审员,领导者,架构师)的活动,并估计编码成熟度和技术债务容忍度。
2020-09-08 cs.SE
How We Refactor and How We Document it? On the Use of Supervised Machine Learning Algorithms to Classify Refactoring Documentation
Rochester Institute of Technology(罗切斯特理工学院);ETS Montreal, University of Quebec(魁北克大学蒙特利尔分校);University of Michigan(密歇根大学)
重构是一种在不改变系统外部行为的情况下改进系统设计的艺术。重构已经成为一个完善的和有纪律的软件工程实践,已经吸引了大量的研究假设重构的主要动机是需要改善系统结构。然而,最近的研究表明,开发人员可能会将重构纳入其他开发活动中,而不仅仅是改进设计。不幸的是,这些研究仅限于开发人员访谈和一组减少的项目。为了克服上述限制,我们的目标是通过挖掘和分类从800个Java项目中提取的111,884个包含重构的提交来更好地理解是什么促使开发人员应用重构。我们训练了一个多类分类器,将这些提交分为3个类别,即内部QA,外部QA和代码验证解决方案,以及传统的BugFix和Functional类别。这种分类挑战了重构的原始定义,它专门用于改进设计和修复代码气味。此外,为了更好地理解我们的分类结果,我们分析了提交消息,以提取开发人员经常用来描述其重构的文本模式。结果表明:(1)修复代码气味不是开发人员重构代码库的主要驱动力。请求重构的原因有很多,超出了它的传统定义;(2)重构的分布在生产和测试文件之间不同;(3)开发人员使用几种模式来有目的地针对重构;(4)从提交消息中提取的文本模式为开发人员如何记录他们的重构提供了更好的覆盖。
2020-10-26 cs.LG cs.SE