five

test-smell-dataset

收藏
github2026-06-28 更新2026-07-01 收录
下载链接:
https://github.com/giahuy2005/test-smell-dataset
下载链接
链接失效反馈
官方服务:
资源简介:
这是一个用于Java测试异味检测的数据集,基于TSSM基准构建,包含Eager Test、Mystery Guest和Resource Optimism三种测试异味的标签。数据集通过克隆GitHub仓库、解析AST特征并与标签匹配的方式收集,最终划分为训练集、验证集和测试集,并公开在Hugging Face Hub上。
创建时间:
2026-06-28
原始信息汇总

数据集概述

该数据集主要用于测试气味检测任务,基于混合的 GraphCodeBERT + AST 特征 方法构建。数据来源于 TSSM 基准测试,并经过一系列自定义的数据处理流程生成。

数据来源

  • 原始基准: TSSM (Test Smell Specific Metrics) 基准测试,具体数据源自 testMethodSmells.csv 文件。
  • 参考仓库: TSSM 仓库(链接仅供了解,不视为数据集内容)

数据处理流程 (Data Pipeline)

数据集并非以公开处理好的形式直接提供,而是通过以下步骤自行构建:

  1. 项目选择 (scripts/01_select_top_projects.py):

    • 根据 testMethodSmells.csv 中的项目标签进行聚合,按“Mystery Guest”和“Resource Optimism”两种稀有标签的总和排序,优先选择标签丰富的项目。
    • 过滤掉重复的 Android 克隆项目 (frameworks_base)。
    • 输出 data/top_40_projects_status.csv
  2. 源码克隆 (scripts/02_download_repos.py):

    • 根据 top_40_projects_status.csv 中的项目信息和 PROJECT_MAP(项目与仓库 URL/提交号的映射)克隆 Java 源代码。
    • 对于有元数据的项目,检出原始提交版本;对于无元数据的项目,直接从 GitHub 克隆 HEAD 版本。
    • 大约克隆了 35 个 Java 仓库(本地存储,不上传到 GitHub)。
  3. 特征提取与标签匹配 (scripts/03_extract_features.py):

    • 使用 javalang 对克隆的仓库进行 AST 解析。
    • 通过 (className.lower, methodName.lower)testMethodSmells.csv 中的标签进行匹配。
    • 每个项目输出一个 {project_name}_methods.csv 文件,包含代码和标签。
  4. 数据合并与划分 (scripts/04_split_train_val_test.py):

    • 合并所有 *_methods.csv 文件。
    • 项目(而非按行)划分训练集、验证集和测试集,避免数据泄露。
    • 划分比例约为 70/15/15,随机种子固定为 42
    • 输出 train.csvval.csvtest.csv
  5. 预处理、增强、训练与评估 (notebooks/pipeline_full.ipynb):

    • 过滤长度小于 150 个字符的方法,删除矛盾标签,清理残留泄露数据和注释。
    • 数据增强:以 15% 的比例注入“脏”代码。
    • 标记替换:将项目特定的 token 替换为 <STR><NUM><CHAR>
    • 提取 34 个手工 AST 结构特征。
    • 训练三种模型变体:Only BERT、Gate Hybrid、Hybrid Concat (GraphCodeBERT + 手工特征)。
    • 在测试集上评估,结果存储在 results/metrics_test_set.json

数据可用性

由于 GitHub 存储限制,以下数据文件不包含在该代码仓库中,而是上传至 Hugging Face Hub

  • 数据文件: train.csvval.csvtest.csv 以及原始标签文件 testMethodSmells.csv

  • Hugging Face 地址: https://huggingface.co/datasets/AIwho/test-smell-dataset

  • 加载方式示例: python from datasets import load_dataset ds = load_dataset("AIwho/test-smell-dataset") train_df = ds["train"].to_pandas() val_df = ds["validation"].to_pandas() test_df = ds["test"].to_pandas()

  • 原始 Java 源码(步骤 2-3 中克隆的数十 GB 代码)未在任何地方存储,需要重新运行 scripts/02_download_repos.py 进行克隆。

搜集汇总
数据集介绍
main_image_url
构建方式
该数据集基于TSSM基准测试套件,采用标签优先策略构建。首先从原始基准数据中筛选出优先项目,特别关注Mystery Guest和Resource Optimism这两类稀有标签以确保足够阳性样本。随后克隆对应Java仓库源码,利用javalang库解析抽象语法树,通过类名与方法名的匹配将代码与标签对齐。最终按项目而非样本行进行划分,以约70/15/15的比例生成训练、验证与测试子集,避免数据泄露。
特点
数据集的核心特色在于其多维度融合的检测能力。它整合了GraphCodeBERT的语义理解与34项手工设计的AST结构特征,形成三种训练变体:纯BERT、门控混合及混合连接模型。通过掩码标记处理项目特有标识,并引入15%的噪声代码注入作为数据增强手段,显著提升了跨项目场景下测试坏味检测的鲁棒性与泛化能力。
使用方法
数据集托管于Hugging Face Hub,用户可直接通过datasets库加载预划分的CSV格式子集,并转换为Pandas DataFrame进行下游任务。原始Java源码因体积庞大需用户自行运行脚本从GitHub克隆。复现完整流程需依次执行项目脚本完成项目选择、仓库克隆、特征提取及训练评估步骤,最终在测试集上获得模型性能指标。
背景与挑战
背景概述
代码异味(Code Smell)是软件工程领域中指向潜在设计缺陷的代码模式,其中测试代码异味(Test Smell)特指单元测试编写中的不良实践,如“神秘客人”(Mystery Guest)和“资源乐观”(Resource Optimism)等,它们会显著降低测试的可维护性与可靠性。test-smell-dataset 数据集由研究者于近年创建,源自 TSSM 基准,通过精密的管道流程对 40 余个 Java 开源项目进行标签优先的代码采集与特征提取,旨在为基于深度学习的测试异味检测提供高质量、结构化的训练与评估数据。该数据集以 GraphCodeBERT 结合 AST 手工特征为核心建模方案,在 Hugging Face Hub 上公开发布,为测试质量自动化分析领域注入了重要的数据驱动力,推动了代码异味检测从规则依赖向智能化的范式转移。
当前挑战
该数据集所解决的领域问题核心在于测试代码异味检测的高度复杂性:异味定义模糊、多类别间不平衡(如稀有标签样本严重不足)、且代码语义依赖项目上下文的细微差异,传统规则方法难以捕捉。构建过程中面临多重严峻挑战:首先,基准 TSSM 的标签需与源码方法精确匹配,因跨项目异同导致逻辑映射易出错;其次,需要从 40 余个庞大 Java 仓库中按指定 commit 或最新 HEAD 高效克隆,处理网络中断、存储限制等工程难题;最后,在数据预处理中需清除矛盾标签、注释干扰与潜在的数据泄漏,同时巧妙注入脏代码进行增强,以确保模型泛化能力,每一步均需精心设计以维持数据的真实性与一致性。
常用场景
经典使用场景
在软件工程领域,测试代码的质量直接关乎软件系统的可靠性与可维护性,而测试坏味(test smell)的存在则可能削弱测试套件的有效性。该数据集专为检测Java项目中测试坏味而构建,其经典使用场景在于利用混合模型——融合GraphCodeBERT与手工设计的AST结构特征——对测试方法进行二分类或多标签分类。研究者可在此基础上训练模型,以识别诸如Mystery Guest、Resource Optimism等典型坏味模式,从而为自动化测试质量评估提供基准数据支撑。
实际应用
在实际软件工程场景中,该数据集可被集成到持续集成(CI)流水线中,实现对提交代码的自动审查与测试质量预警。开发团队可利用预训练模型快速定位存在高风险坏味的测试方法,例如资源未释放或测试意图模糊的用例,从而降低后期维护成本。同时,该数据集支持针对不同坏味类型的细粒度分析,有助于企业级质量保障工具的开发,例如集成到SonarQube或自定义的代码评审插件中,提升自动化测试的治理能力。
衍生相关工作
基于该数据集,衍生出了多项推动测试坏味检测边界的前沿工作。一方面,研究者将GraphCodeBERT与AST特征的混合架构扩展为多模态框架,探索了代码语义与结构表征的互补性;另一方面,利用该数据集训练的轻量级模型被迁移至其他编程语言(如Python或JavaScript)的测试坏味检测任务中,验证了跨语言泛化能力。此外,部分工作进一步解耦了坏味类型的因果关联,构建了可解释性强的检测规则,为学术社区提供了丰富的理论与实验基础。
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务