Page 268 - 《软件学报》2021年第7期
P. 268
2186 Journal of Software 软件学报 Vol.32, No.7, July 2021
提取的代码质量属性是否准确.
因此,本文针对复杂用户评论,基于前期工作提出的 11 个静态和动态代码质量属性进行主题判断处理,并对
复杂用户评论中包含的代码质量属性之间的逻辑关系进行分析,提出了一种针对复杂用户评论的代码质量属
性判断方法.
3 代码质量属性
为了判断复杂用户评论中的代码质量属性,对代码质量属性的定义十分重要.代码不经过编译运行就具有
的质量属性一般作为代码的静态质量属性,例如代码规模、代码命名、代码结构、编程规范、控制流逻辑等.
代码在编译运行时体现出的行为一般与代码的动态质量相关联,例如代码是否能够进行编译、代码的运行速度
以及内存占用、代码是否存在错误等.在针对代码的用户评论中,由于不同的开发人员对代码质量的要求存在
差别,用户在使用代码时也会评判代码质量,因此用户评论中不仅包含代码的静态质量属性信息,还包括大量代
码在测试编译运行过程中才能体现出来的动态代码质量属性信息.
结合代码静态分析和代码动态测试的相关研究 [1820] ,参考 McCall 软件质量度量模型 [21] ,本文在前期工作 [6]
中针对代码静态质量和动态质量分别划分出了 4 个静态代码质量属性和 7 个动态代码质量属性,各个质量属性
之间互不重叠.
此外,针对代码的用户评论具有的强领域性特点,代码质量属性可以通过评论中的大量领域性词语来进行
[6]
标识.我们在前期工作 中发现,名词通常与代码静态质量具有强相关性,动词一般与代码的动态质量具有强相
关性.基于这种规律,针对 11 个代码质量属性,从大量用户评论中人工抽取了具有强相关性及代表性的特征词,
例如“缩进”与编程规范性相关,“编译”则与可测试性相关.然而,应用单个特征词虽然可以识别出复杂用户评论
中的代码质量属性,但是识别的准确度不高.通过进一步对复杂用户评论进行分析,当单个特征词与不同词组合
时,可以更加准确地标识出不同的代码质量属性.例如“版本更新”与“版本不兼容”中都包含了“版本”,但是分别
表示了代码的可维护性与可移植性;“运行不成功”与“运行出错”中都包含了“运行”,但是分别表示了代码的可
测试性与可靠性.为了能够准确判断出代码质量属性,本文将这种由多个特征词组合并可以准确描述某种代码
质量属性的词对定义为特征词对.本文通过分析大量针对代码的用户评论,针对不同代码质量属性具有的不同
属性特征,将特征词扩展为特征词对,并在文献[6]给出的代码质量属性特征词的基础上,扩充了前期构建的代码
质量属性特征词库,形成了新的初始代码质量属性特征词库.
综上,结合相关研究和用户评论,本文对 11 个代码质量属性进行了定义,并给出了每个代码质量属性的特征
词对示例,见表 1.
Table 1 Definition of code quality attributes
表 1 代码质量属性的定义
类型 质量属性 质量属性定义 特征词对示例
可读性 代码以简单易理解的方式实现其功能,并容易为用户所分析的性质 代码 臃肿\看 不 明白\写 清楚
编程规范性 代码符合编程语言的命名和结构规范,以及设计开发中的规范性要求 格式 规范\变量 定义\函数 命名
静态
质量 可重用性 代码所提供的功能具有应用范围广、代码之间依赖性小、代码内 代码 完整\代码 不全\不 受用
依赖性大的性质
逻辑性 代码的算术计算、控制流程和设计开发逻辑运行正确 数据 溢出\数组 越界\控制流 设计
功能性 代码实现满足用户的功能,且功能全部或部分有效可用 用户 权限\登录 不 可用\验证 不 成功
可测试性 代码在给定的测试环境下,可支持编译测试的程度 编译 成功\执行 失败\搭建 不 起来
可维护性 代码在新的功能改善和扩充时,可被修改的容易程度 路径 失效\代码 升级\版本 更新
代码在其运行过程中表现的性能,包括时间复杂度、空间复杂度 速度 慢\内存 占用 多\显示 不 出来
动态 运行性能 和实现效果 \加载 不了
质量
可靠性 代码在其他环境或操作下能否保证运行正确的性质 运行 报错\有 问题\程序 崩溃
在代码运行条件发生改变时无需多做修改就可运行,即一次编辑到处 版本 不 兼容\环境 不
可移植性
运行的性质 支持\代码 集成
易用性 代码简洁明了,具有详细的文档使用说明,用户易于操作 使用 说明\上手 简单\怎么 使用