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. 这样的样本数据不利于模型学习, 应当加以过滤.
   326   327   328   329   330   331   332   333   334   335   336