test-smell-dataset
收藏数据集概述
该数据集主要用于测试气味检测任务,基于混合的 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进行克隆。




