Page 335 - 《软件学报》2025年第8期
P. 335

3758                                                       软件学报  2025  年第  36  卷第  8  期


                 3) conciseness 指标过低的注释, 此类注释可能长度过短或相应的代码过长. 4) conciseness 过高, 较为冗长的注释.
                    自然性: 现有数据集普遍存在较难阅读的注释, 该类注释通常包含由多个单词拼接而成的词语, 由此降低了注
                 释的可读性. 此外, 现有数据集预处理不充分, 存在一些实际内容为代码的注释, 此类噪音应该加以过滤.
                    有用性: coefficient 指标和  mesia  指标有助于评价注释的有用性. 当前数据集存在部分注释缺少补充信息, 对
                 开发者帮助不大. 此外, 当前数据集还存在            mesia  值过高的注释, 可能是噪音, 需要加以过滤.

                     例1  注释:calculate number of security servers
                        public static int calculateSecurityServerCount(int externalsessioncount) {…}  coefficient:    0.6
                                                                                        mesia:            1.9267
                     例2  注释:show the consumer context menu if a consumer is selected.
                        private void showContextMenu (final MouseEvent event) {         coefficient:    0.3
                           if (consumers.getSelectedIndex( ) > -_NUM) {}                mesia:            3.9541
                        }
                     例3  注释:replacement function for System.currentTimeMillis
                        public static long nanoTime() {                                 coefficient:    0
                           wasTimeAccessed= _BOOL;                                      mesia:            7.7988
                           return currentTime* _NUM;
                        }
                     例4  注释:too many inout parameters
                        public static void calculatePendingGroupDiffs(MitroRequestContext context, Collection<?   coefficient:    0
                        extends PendingGroup> pendingGroupsList, DBGroup org, Map<String,DBGroup> existingGroups,
                                                                                        mesia:            9.7557
                        Map<String,GroupDiff> diffs, Map<String,MemberList> pendingGroupMap, String scope)
                        throws MitroServletException, SQLException{…}
                                             图 7 代码注释有用性分析的若干案例

                 5   典型方法生成注释的质量分析

                    本节使用第     3.2 节选取的评价指标对典型注释生成方法             CodeT5  生成的代码注释    (后文简称生成注释) 的质量
                 进行评价和分析. 下面详细介绍各个维度上的评价和分析结果.

                 5.1   相关性
                    图  8  展示了生成注释、人工参考注释以及低             BLEU  集中的人工参考注释在        lexical_tfidf 和  lexical_w2v 两项
                 指标上取值的分布情况. 可以看到, 随          lexical_tfidf 值的升高, 人工参考注释的比例不断下降, 然而         CodeT5  生成注
                 释的比例不是持续下降, 而是先逐步上升后缓慢下降.

                                                                 32
                                                  Generate             Generate
                         25                       Dataset        28    Dataset
                                                  Low-BLEU       24    Low-BLEU
                         20
                        Probability (%)  15                     Probability (%)  20
                                                                 16
                                                                 12
                         10
                                                                  8
                          5
                                                                  4
                          0                                       0
                            0    0.2   0.4   0.6   0.8   1.0      −1.00−0.75−0.50−0.25  0  0.25 0.50 0.75 1.00
                                       lexical_tfidf                           lexical_w2v
                                      图 8 3  个注释集合在     lexical_tfidf、lexical_w2v 上的分布

                    表  11  展示了  3  个注释集合在两项指标上的均值和中位数. 可以看到, 生成注释在                  lexical_tfidf 指标的均值和
                 中位数上显著高于数据集中的人工参考注释, 这表明生成注释倾向于与代码有更多词汇上的重合. 进一步可以看
                 到, 低  BLEU  集的人工注释在    lexical_tfidf 上的均值和中位数明显更低. 这说明如果参考注释与代码的词汇重合较
                 少, 那么这样的注释更难被生成, 导致取得较低的              BLEU  值. 在  lexical_w2v 指标的分析也展现出与    lexical_tfidf 类
   330   331   332   333   334   335   336   337   338   339   340