Page 205 - 《软件学报》2024年第6期
P. 205
杨岚心 等: 基于多标签学习的代码评审意见质量评价 2781
步补充和验证质量属性.
● 数据源 3: 实例分析结果
通过分析大量的代码评审意见实例, 本文发现评审者在意见中经常表达“疑问”, 这些疑问有的是 (1) 期望理解
代码意图和实现, 如“这里为什么要抛异常?” 有的是 (2) 对指出缺陷的不确定, 如“是否会有越界风险?” 表达“疑问”
的评审意见尽管不能都触发代码变更, 但是可以起到“提醒”(对代码作者) 和“知识传播”(对代码评审者) 的作用, 防
止代码评审发生“漏判”和“误判”, 否则将导致代码质量问题和代码作者的负面情绪. 因此, 本文将“疑问”也作为评
价评审意见质量的属性之一. 此外, 本文发现评审意见在发挥“质量保证”作用时有两种典型的表达方式: (1) 指出
代码缺陷, 如“cleartext 不符合小驼峰”; (2) 提供修改建议, 如“建议 long 后面数字使用大写后缀 L”. 于是, 本文将通
过文献综述合成的“质量保证”拆分为“评价”和“建议”两个质量属性, 分别对应上述两种表达方式. 表 2 展示了本
文合成的最主要和重要的代码评审意见质量属性、合理性说明和标注时使用的符号. 需要注意的是, 本文在标注
“情绪”时仅考虑“消极”和“非消极”. 关于质量属性的标注经验详见第 5.1 节.
表 2 代码评审意见质量属性
属性 合理性说明 标注
节介绍了本文提出的方法的基本原理
情绪 代码评审 (意见)应该就事论事, 不传递负面情绪 消极 (0); 非消极 (1)
代码评审如有疑问应该及时提出, 不让疑问变成风险和危害; 另一方面, 代码评审 (意见)
疑问 未提问 (0); 提问 (1)
应该促进团队知识共享, 而非单方(代码作者)受益
评价 代码评审 (意见)的最基本目标是发现和识别代码缺陷 未评价 (0); 评价 (1)
建议 代码评审 (意见)应该帮助修复代码缺陷, 提升质量, 提升开发者质量意识 未建议 (0); 建议 (1)
3.2.2 映射关系
单一质量属性仅从某一方面“描述”了评审意见, 联合若干质量属性才能共同决定质量等级. 本文方法中设置
了 4 个质量属性和 4 个质量等级. 前者分别是“情绪”“疑问”“评价”和“建议”; 后者分别是“优秀”“良好”“一般”
和“较差”. 如第 3.1 节介绍的, 本文提出的方法需要建立起质量属性和质量等级之间的映射关系. 表 3 展示了一个
映射表实例. 该映射表经本文的 3 位作者经调研软件从业者的意见后形成初始版本, 然后经全体作者共同讨论后
形成中间版本, 最后经提供本文的实验数据集的软件企业的代码评审专家确认后形成最后版本. 本文提出的方法
具有相当的灵活性, 其质量属性和映射关系都可以根据各软件组织的具体需求做裁剪或扩充.
表 3 映射表实例
属性 M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12 M13 M14 M15 M16
情绪 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1
疑问 0 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1
评价 0 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1
建议 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1
等级 较差 较差 一般 一般 一般 一般 一般 一般 一般 良好 良好 良好 优秀 优秀 优秀 优秀
3.3 方法自动化: 基于多标签学习范式和预训练语言模型的文本分类
第 3.1 节和第 3.2 (概念模型), 实际使用时还需要基于算法和模型以实
现自动化的质量评价 (自动化模型). 后者由基于多标签学习范式和预训练语言模型的文本分类模型来实现.
3.3.1 基础知识
多标签学习 (multi-label learning) [23] 又被称为多标签分类 (multi-label classification), 是一种有监督机器学习范
式. 在传统的单标签学习/分类问题中, 每个样本仅有单个标签, 即只能表示一个分类任务; 相反, 在多标签学习中,
每个样本具有互不排斥甚至存在依赖关系的多个标签, 即可以同时表示多个分类任务. 本文基于多标签学习构建
评价模型的原因是: (1) 模型简化: 本文提出的方法中设置了 4 个质量属性, 假如使用单标签学习, 需要构建 4 个模
型, 分别用于学习 4 个质量属性. 在该情形下, 使用同构模型还是异构模型, 如何对每个模型进行针对性的模型设