Page 275 - 《软件学报》2021年第7期
P. 275
徐海燕 等:针对复杂用户评论的代码质量属性判断 2193
据因果连词语义可以判断两个主题的代码质量属性之间具有因果关系,即“没有注释”是“看不懂”的原因.因此,
对于该用户评论的“可读性”代码质量属性,“没有注释”是“可读性”的表现,“看不懂”是“可读性”的表现结果.基
于这种代码质量属性之间的关系,本文对用户评论中的代码质量属性表现和代码质量属性表现结果进行了定
义.代码质量属性表现是指“在用户评论中,代码质量属性的具体体现.”代码质量属性表现结果是指“在用户评
论中,对于同一种代码质量属性,其表现所引发的结果”.通过区分代码质量属性表现与代码质量属性表现结果,
可以帮助开发者直观地获取代码质量信息.
基于代码质量属性表现与表现结果的定义,在经过第 4.2 节的处理后,各主题的主题相关词可以用来描述
各主题对应的代码质量属性,则主题相关词即为代码质量属性表现.因此,经过第 4.2 节的处理,各主题对应的代
码质量属性只有代码质量属性表现.根据代码质量属性表现与表现结果的定义,代码质量属性表现结果在识别
之前以代码质量属性表现存在,则可以通过多个主题之间的因果关系对同一代码质量属性对应的代码质量属
性表现与表现结果进行识别.本文基于主题间的因果关系识别代码质量属性表现与代码质量属性表现结果的
算法如算法 2 所示.
算法 2. 基于因果关系识别代码质量属性表现与代码质量属性表现结果.
Input:Ti=(topic=topic Ti ,exp=exp Ti ),Tj=(topic=topic Tj ,exp=exp Tj )//Ti 与 Tj 之间为因果关系
Output:T=(topic=topic T ,exp=exp T ,res=res T )//topic T 为主题 T 对应的代码质量属性,exp T 为主题 T 对应的代码
质量属性表现,res T 为主题 T 对应的代码质量属性表现结果.
1 if topic Ti ==topic Tj ://Ti 与 Tj 为相同主题
2 T=(topic=topic T ,exp=exp T ,res=res T )//初始化一个新的主题,其中,topic T ,exp T ,res T 均为空
3 if Ti 为原因:
4 topic T =topic Ti
5 exp T =exp Ti //Ti 的代码质量属性表现 exp Ti 为主题 topic T 的表现 exp T
6 res T =exp Tj //Tj 的代码质量属性表现 exp Tj 为主题 topic T 的表现 exp T 的表现结果 res T
7 else://Tj 为原因
8 topic T =topic Tj
9 exp T =exp Tj //Tj 的代码质量属性表现 exp Tj 为主题 topic T 的表现 exp T
10 res T =exp Ti //Ti 的代码质量属性表现 exp Ti 为主题 topic T 的表现 exp T 的表现结果
以第 4.1 节中的复杂用户评论分句“而且没有注释所以看不懂”为例,分句的依存句法关系图满足动宾关系
主题判断规则.应用动宾关系主题判断规则并识别主题对应的代码质量属性后,原分句依存句法图如图 8 所示.
Fig.8 Example of getting the representation and the representation result of code quality attribute
图 8 获取代码质量属性表现与表现结果示例
图 8 中粗虚线箭头为主题判断规则断开的边,细虚线箭头和虚线节点为剪枝操作而去掉的边和节点,灰色