Page 279 - 《软件学报》2021年第7期
P. 279
徐海燕 等:针对复杂用户评论的代码质量属性判断 2197
Table 5 Example of judgment result
表 5 判断结果示例
处理过程 处理结果
复杂用户评论 编码格式不对一直报错,而且没有注释所以看不懂!一堆堆的错误!
分句 1:编码格式不对一直报错
预处理用户评论 分句 2:而且没有注释所以看不懂
(第 4.1 节)
分句 3:一堆堆错误
分句 1:[主题 1:编码 格式 不对;主题 2:报错;]
抽取分句主题 分句 2:[主题 1:没有 注释;主题 2:看不懂;]
(第 4.2.1 节)
分句 3:[主题 1:错误;]
识别分句各主题对应的 分句 1:[主题 1:topic=编程规范性,exp=编码 格式 不对;主题 2:topic=可靠性,exp=报错;]
代码质量属性 分句 2:[主题 1:topic=可读性,exp=没有 注释;主题 2:topic=可读性,exp=看不懂;]
(第 4.2.2 节) 分句 3:[主题 1:topic=可靠性,exp=报错;]
分句 1:[主题 1:topic=编程规范性,exp=编码 格式 不对,res=NULL;主题 2:topic=可靠
识别代码质量属性表现 性,exp=报错;res=NULL;]
与表现结果(第 4.3 节) 分句 2:[主题 1:topic=可读性,exp=没有 注释,res=看不懂;]
分句 3:[主题 1:topic=可靠性,exp=错误,res=NULL;]
[主题 1:topic=编程规范性,exp=编码 格式 不对,res=NULL;主题 2:topic=可靠性,exp=[报
同一主题处理(第 4.4 节)
错][错误];res=NULL;主题 3:topic=可读性,exp=没有 注释,res=看不懂;]
[主题 1:topic=编程规范性,可靠性,可读性,exp=[编码 格式 不对],[报错][错误],[没有
不同主题处理(第 4.4 节)
注释],res=,,[看不懂];]
4.5 动态扩充初始的代码质量特征词库
在经过第 4.4 节主题判断规则处理后,可以给出复杂用户评论中存在的多种代码质量属性的表现与表现结
果等相关信息的判断结果.在得到的复杂用户评论的代码质量属性表现与表现结果中,包含了代码质量属性特
征词库中的特征词,以及一些与特征词共同出现的主题相关词,这些主题相关词与其他标识代码质量的特征词
共同出现更能准确地体现某种代码质量属性.因此,为了能够更加准确地标识用户评论的代码质量属性以及对
新的数据进行准确处理,本文采用半监督自学习的方式,以名词、动词、形容词、副词为限制条件,对识别出的
复杂用户评论的代码质量属性表现与表现结果对应的主题相关词分别抽取主题对应的关键词,将抽取的主题
关键词按照其在复杂用户评论中的位置重新组合,作为该主题对应的代码质量属性的特征词对,加入到初始的
代码质量属性特征词库中.例如,“代码运行失败了”与“怎么就运行困难了呢”对应的主题关键词分别为“代码
运行 失败”与“运行 困难”,虽然都包含特征词“运行”,但是分别可以准确对应“可测试性”与“易用性”.因而,将
新的特征词对加入特征词库后,在下一次使用扩充后的代码质量属性特征词库时,优先匹配新加入的特征词对
可以更加准确地判断代码质量属性.此外,在初始代码质量属性特征词库中,包含了单个特征词与少量的特征词
对.而在动态扩充后,特征词库中包含了丰富的特征词对,可以充分利用有限代码质量信息对特征词库进行扩
展.扩充代码质量属性特征词库的算法如算法 3 所示.
算法 3. 动态扩充初始的代码质量属性特征词库的算法.
Input:Expression-ResultList={expressionresult 1 ,…,expressionresult i ,…,expressionresult o }(1≤i≤o))//复杂用户
评论代码质量属性相关信息列表,其中,expressionresult i =(Attribute i ,Expression i ,Result i )为三元组,o 为复杂用户
评论中代码质量属性个数
codeQualityAttributeFeatureWord={Attribute 1 :FeatureWordList 1 ,…,Attribute a :FeatureWordList a ,…,
Attribute 11 :FeatureWordList 11 }(1≤a≤11))//11 个代码质量属性特征词库
Output:codeQualityAttributeFeatureWord//扩充后代码质量属性特征词库
1 for expressionresult in Expression-ResultList://遍历复杂句的代码质量属性相关信息列表
2 Attribute=expressionresult[0]//代码质量属性
3 expression=expressionresult[1]//代码质量属性表现
4 result=expressionresult[2]//代码质量属性表现结果
5 expFeawordpair=getFeaturewordPair(expression)//抽取代码质量属性表现中的主题关键词构建表现