
-
生物通官微
陪你抓住生命科技
跳动的脉搏
多标签代码异味检测数据集SmellyCode++的构建与应用研究
【字体: 大 中 小 】 时间:2025年07月13日 来源:Scientific Data 5.8
编辑推荐:
本研究针对现有代码异味检测数据集多为单标签分类、缺乏真实性的问题,开发了集成文本特征与数值指标的多标签数据集SmellyCode++。研究人员从103个Java开源项目中提取107,554个样本,涵盖God Class等4种异味,通过AST解析和特征融合,实现了最高95.89%的F1分数。该数据集为LLM微调提供了重要资源,推动了软件质量维护技术的进步。
在软件工程领域,代码异味(Code Smells)如同程序中的"慢性病",虽不直接导致系统崩溃,却会随着时间推移严重损害软件的可维护性。传统检测方法多采用单标签分类框架,但现实中一个代码片段可能同时存在多种异味——比如某个方法既冗长(Long Method)又表现出"特征嫉妒"(Feature Envy),这种复杂性长期缺乏高质量数据集支撑。更棘手的是,现有数据集往往仅包含数值化指标,难以适配当前火热的代码大语言模型(LLM)微调需求,成为阻碍智能检测技术发展的关键瓶颈。
来自沙特阿拉伯国王法赫德石油矿产大学(King Fahd University of Petroleum and Minerals)的Nawaf Alomari团队在《Scientific Data》发表的研究,构建了首个同时融合代码文本与结构特征的多标签异味检测数据集SmellyCode++。研究人员从103个涵盖数据库、DevOps等领域的Java开源项目中,通过ANTLR4解析器生成抽象语法树(AST),提取程序长度(Program Length)、认知复杂度(Cyclomatic Complexity)等14项指标,并整合三个权威研究的标注数据,最终形成包含107,554个样本的资源库。特别创新的是采用多热编码(Multi-hot Encoding)技术,允许单个样本标注多种异味,更真实反映实际开发场景。
关键技术方法包括:1) 使用ANTLR4工具链解析Java代码生成AST;2) 基于Halstead复杂度理论计算N1(操作符总数)等指标;3) 通过正则表达式匹配来自Arcelli Fontana等研究的异构标注;4) 应用SMOTE算法处理数据不平衡问题。样本来源覆盖Apache系列项目等103个代码库,按LOC(代码行数)分为小型(<1万行)到超大型(>70万行)五类。
数据集包含God Class(4333例)、Data Class(3284例)等四种异味的组合分布,其中Feature Envy与Long Method共现案例达1153例。数值特征分析显示,样本平均代码体积(Volume)达3935.9比特,认知复杂度均值为35.8,印证了所选项目的典型性。
团队通过微调Transformer模型CoRT取得显著效果:Data Class检测F1达95.89%,God Class达94.48%。特别值得注意的是,模型在难度系数(Difficulty)超过5的复杂代码中仍保持88%以上的召回率(Recall),证明数据集能有效支持复杂场景下的异味识别。
这项研究突破了传统单标签数据集的局限性,其创新价值主要体现在三方面:首先,多标签架构首次系统性地建模了异味共现现象;其次,文本-数值双模态特征为LLM微调与传统机器学习提供了比较基准;最后,项目规模的多样性(从JMeter测试工具到Hadoop分布式系统)确保了数据的泛化能力。正如作者在讨论中指出,未来扩展到C++等语言将进一步提升其影响力,而当前成果已为构建智能化的代码质量防护体系奠定了关键数据基础。
生物通微信公众号
知名企业招聘