test-smell-dataset
收藏资源简介:
这是一个用于Java测试异味检测的数据集,基于TSSM基准构建,包含Eager Test、Mystery Guest和Resource Optimism三种测试异味的标签。数据集通过克隆GitHub仓库、解析AST特征并与标签匹配的方式收集,最终划分为训练集、验证集和测试集,并公开在Hugging Face Hub上。
This is a dataset for Java test smell detection, constructed based on the TSSM benchmark. It contains three test smell labels: Eager Test, Mystery Guest, and Resource Optimism. The dataset is collected by cloning GitHub repositories, parsing AST features and matching them with the labels. Finally, it is split into training, validation and test sets, and is publicly hosted on the Hugging Face Hub.
数据集概述
该数据集主要用于测试气味检测任务,基于混合的 GraphCodeBERT + AST 特征 方法构建。数据来源于 TSSM 基准测试,并经过一系列自定义的数据处理流程生成。
数据来源
- 原始基准: TSSM (Test Smell Specific Metrics) 基准测试,具体数据源自
testMethodSmells.csv文件。 - 参考仓库: TSSM 仓库(链接仅供了解,不视为数据集内容)
数据处理流程 (Data Pipeline)
数据集并非以公开处理好的形式直接提供,而是通过以下步骤自行构建:
-
项目选择 (
scripts/01_select_top_projects.py):- 根据
testMethodSmells.csv中的项目标签进行聚合,按“Mystery Guest”和“Resource Optimism”两种稀有标签的总和排序,优先选择标签丰富的项目。 - 过滤掉重复的 Android 克隆项目 (
frameworks_base)。 - 输出
data/top_40_projects_status.csv。
- 根据
-
源码克隆 (
scripts/02_download_repos.py):- 根据
top_40_projects_status.csv中的项目信息和PROJECT_MAP(项目与仓库 URL/提交号的映射)克隆 Java 源代码。 - 对于有元数据的项目,检出原始提交版本;对于无元数据的项目,直接从 GitHub 克隆 HEAD 版本。
- 大约克隆了 35 个 Java 仓库(本地存储,不上传到 GitHub)。
- 根据
-
特征提取与标签匹配 (
scripts/03_extract_features.py):- 使用
javalang对克隆的仓库进行 AST 解析。 - 通过
(className.lower, methodName.lower)与testMethodSmells.csv中的标签进行匹配。 - 每个项目输出一个
{project_name}_methods.csv文件,包含代码和标签。
- 使用
-
数据合并与划分 (
scripts/04_split_train_val_test.py):- 合并所有
*_methods.csv文件。 - 按项目(而非按行)划分训练集、验证集和测试集,避免数据泄露。
- 划分比例约为 70/15/15,随机种子固定为
42。 - 输出
train.csv、val.csv、test.csv。
- 合并所有
-
预处理、增强、训练与评估 (
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.csv、val.csv、test.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进行克隆。




