Page 268 - 《软件学报》2021年第7期
P. 268

2186                                     Journal of Software  软件学报 Vol.32, No.7,  July 2021

                 提取的代码质量属性是否准确.
                    因此,本文针对复杂用户评论,基于前期工作提出的 11 个静态和动态代码质量属性进行主题判断处理,并对
                 复杂用户评论中包含的代码质量属性之间的逻辑关系进行分析,提出了一种针对复杂用户评论的代码质量属
                 性判断方法.

                 3    代码质量属性

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