Page 213 - 《软件学报》2024年第6期
P. 213
杨岚心 等: 基于多标签学习的代码评审意见质量评价 2789
5.1 标签标注经验
本节讨论针对代码评审意见的标注经验和一致性保证措施.
5.1.1 标注检查表
针对 4 个质量属性的标注检查表总结如下.
消极情绪: (1) 出现连续的标点, 如 “, , ,”“. . .”“! ! !”等; (2) 出现带有反问、讽刺语气的字词, 如“啊”“难道”“难
不成”“谁能”“神经”“干啥”“都啥”“毛病”等, 该评审意见通常传递了消极情绪.
提出疑问: (1) 出现问号; (2) 出现疑问词, 如“吗”“呢”“啥”“什么”“为什么”“为何”“为啥”等, 该评审意见通常提
出了疑问.
给予评价: (1) 出现形容词, 如“无用”“冗余”“错误”“重复”“啰嗦”“完整”“清晰”等; (2) 出现程度副词, 如“太”“过”
“十分”“非常”等; (3) 出现关键词“未”“不”“缺少”“没有”等, 该评审意见通常给予了评价/指出了缺陷.
提 供 建 议 : 出 现 动 词 , 尤 其 是 实 义 动 词 和 表 指 示 或 建 议 的 抽 象 动 词 , 如 “ 增 ” “ 删 ” “ 改 ” “ 关 闭 ” “ 补 充 ”
“完善”“需要”“不需要”“建议”“不建议”等, 该评审意见通常提供了针对代码的修改或提升建议.
尽管可以总结出若干标注经验和使用 SentiCR [49] 等自动化模型/工具来帮助判断代码评审意见的质量属性, 但
和“边界”实例. (3) 互相监督以保证工作效率和质量等.
是人工经验 (“正则表达式”) 不能覆盖所有的情形; 自动化模型/工具经常存在“漏报”和“误报”问题 [50] . 因此在构建
ground-truth 数据集时, 人工标注和检查是重要的和必须的. “人在回路 (human-in-the-loop)”的数据标注 [51] 结合了
人工经验和自动化模型的优点, 是缓解数据标注工作挑战的有效措施之一.
对于第 2.1 节表 1 中的评审意见实例, 其质量属性 (由人工标注/模型学习) 和质量等级 (根据映射表生成) 如下.
如表 8 所示, 本文提出的方法一方面能够精细地区分不同评审意见的质量属性和质量等级; 另一方面, 尽管评
审意见 C2—“逻辑不对”、C3—“魔鬼数字”、C4—“info 日志打印太多”在表达形式上有细微差异 (C2 和 C4 出现
关键字: “逻辑”和“日志”, 并且直接评价缺陷; C3 出现术语: “魔鬼数字”, 并且间接评价缺陷; C4 出现代码元素), 但
对它们的标注结果却是一致的, 反映了本文提出的方法的泛化能力.
表 8 代码评审意见质量属性和等级实例
属性 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
情绪 1 1 1 1 1 1 0 1 1 1
疑问 0 0 0 0 1 0 0 1 0 0
评价 0 1 1 1 0 1 1 0 0 1
建议 0 0 0 0 0 1 0 1 1 1
等级 较差 良好 良好 良好 一般 优秀 一般 优秀 良好 优秀
5.1.2 一致性保证
除了制定标注检查表, 本文还采取了若干措施来尽可能地保证和提升评审意见质量属性标注的一致性, 现总
结如下.
预标注: 预标注的好处在于: (1) 使标注人员更快熟悉评审意见实例/样本和标注检查表, 从而更快进入工作状
态. (2) 能够及时发现“异常”和“边界”实例, 如有必要, 需要重新制定质量属性和标注检查表等.
锁定检查表: 临时锁定检查表的好处在于: (1) 保证每次标注前都有一份可参考的完整指南. (2) 保证每次标注
后都有一份可使用的完整数据集. (3) 帮助发现“异常”和“边界”实例等.
结对标注: 结对标注的好处同“结对编程”和“结对评审”类似: (1) 帮助理解检查表. (2) 帮助发现和处理“异常”
一致性检验: 实施一致性检验的好处在于量化地评估同一标注者在不同时候, 或多个标注者, 对同一份数据集
的标注结果是否一致, 同时间接评估其对标注检查表的理解是否一致. 针对出现不一致标注的实例, 需要重点分析;
如有必要, 需要重新制定质量属性和标注检查表等. 一致性检验除了可以使用经典的 Kappa 系数外, 还可以使用本
文实验所用的评价指标 (详见第 4.2.3 节). 此时, 两份标注结果分别被视作“真实值”和“预测值”.