Page 331 - 《软件学报》2025年第8期
P. 331
3754 软件学报 2025 年第 36 卷第 8 期
了 TLC 数据集的 68 743 条数据, 使用置信区间样本大小 (置信水平为 95%, 置信区间为 5%), 从中随机抽取 382
个 Java 方法及注释, 人工判断注释是否准确并且与代码相关, 并将结果分为 3 类: 是、否、未知. 其中“是”表示开
发者认为注释的信息是准确的, 正确反映了代码的实现和意图; “否”表示注释与代码的实现没有任何关联, 或者有
明显的错误; “未知”表示注释中含有指代不明的信息、句意模糊, 或者由于缺少代码的上下文信息、项目特定信
息, 无法判断其是否准确. 本文将“未知”单独作为一个类别, 是因为当前数据集中许多样本仅凭代码无法判断注释
的准确性/相关性, 需要更多的信息, 例如方法所处的类、方法实现的接口等, 而这些信息在目前的数据集中均是
缺失的, 这会为模型的训练增加难度.
表 6 展示了人工判定的 3 种类别注释的数量、占比以及在两个指标上的表现. 可以看到, “否”和“未知”类别
的注释占比超过了 6%, 这表明目前的数据集存在一定比例的注释是不够准确的. 另外, “否”和“未知”类别的注释
在两项指标上的平均值都显著低于“是”类别的注释, 例如在 lexical_w2v 指标上, 358 条“是”类别的注释中仅有 32
条 (8.9%) 的取值小于“未知”类别的均值, 仅有 29 条 (8.1%) 的取值小于“否”类别的均值. 这说明上述指标一定程
度上有助于发现注释的准确性/相关性问题: 指标数值越低, 意味着注释更有可能存在准确性/相关性问题.
表 6 3 种类别注释的相关性指标统计
指标 是 否 未知
数量 358 4 20
占比 (%) 93.7 1.0 5.2
lexical_tfidf均值 0.336 8 0.114 2 0.149 9
lexical_w2v均值 0.396 2 0.059 2 0.072 3
以上结果表明, 本文选取的两项指标有助于发现注释的准确性/相关性问题. 但是在分析数据的过程中, 也发
现指标存在一些不足, 例如对于描述代码的意图、代码存在的原因等高层信息的注释不一定适用, 而且难以检测
注释中一些明显的错误.
4.2 简洁性
本节使用简洁性指标 comment_len 和 conciseness 度量 3 个数据集的注释. 由于 conciseness 的计算涉及代码
长度, 本文同时分析了代码长度 code_len.
表 7 展示了 3 个数据集在简洁性指标上的度量结果. 可以看到, 3 个数据集在简洁性指标上的表现有一些显
著差异. 譬如 Funcom 数据集的注释平均长度明显低于 TLC 和 CSN, CSN 数据集的代码长度显著大于 TLC 和
Funcom, 这也同时导致该数据集的 conciseness 指标均值非常低.
表 7 3 个数据集在简洁性指标上的均值
指标 TLC CSN Funcom
comment_len均值 10.407 3 10.034 2 8.548 2
code_len均值 53.351 2 88.548 8 33.505 5
conciseness均值 0.421 2 0.206 8 0.394 2
图 3 展示了 3 个数据集的注释长度的分布情况. 可以发现当前数据集中注释的长度都集中于 3–18 个词之间.
TLC 和 CSN 数据集的分布没有太大差异, 但 Funcom 数据集在较低区间 [3, 12] 上的样本比例显著高于 TLC 和
CSN, 整体注释长度偏短.
在上述度量结果中, conciseness 指标过低可能意味着注释非常短, 或者代码非常长以至超出目前模型训练时
的输入长度限制; 过高可能意味着注释较为冗长. 为了验证 conciseness 指标是否实际反映了上述的注释问题, 本
文对 conciseness 指标较为异常的注释进行了人工分析并给出了一些典型案例. 首先针对 conciseness 过低的情况,
本文从 CSN 数据集中取出 conciseness 最低的 50 条数据进行人工检查, 发现 conciseness 过低的确是由代码长度
过长造成的. 部分样本代码的长度甚至超过 70 000. 这样的样本数据不利于模型学习, 应当加以过滤.

