法律状态公告日
法律状态信息
法律状态
2019-02-15
授权
授权
2018-11-02
实质审查的生效 IPC(主分类):G06F8/70 申请日:20180514
实质审查的生效
2018-10-09
公开
公开
技术领域
本发明属于软件质量维护技术领域,涉及一种对参数中的缩写词进行自动扩展的方法。
背景技术
在软件开发过程中,软件维护是整个软件生命周期中重要的组成部分。源代码中的标识符大约是软件中所有字符的70%。因此,高质量的标识符名称对软件的可读性和可维护性是至关重要的。
软件中的标识符经常包含缩写词,这将不利于对项目的理解以及基于信息检索技术进行的软件维护活动。例如,软件维护人员在理解软件实体之前,需要对缩写词对应的扩展进行推测,这种方式是不准确的,有可能会导致维护人员对软件实体的误解;基于信息检索技术进行的软件维护也不能充分发挥出其潜能。
为了使缩写词的不利影响最小化,大量的缩写词扩展方法被提出。这些方法主要基于词典进行并且具有一定的准确性。基于词典的扩展方法简单易行,得到广泛地应用。然而这些方法在扩展长度较小的缩写词时其准确性和召回率会有显著下降。
本发明主要针对函数参数中的缩写词进行自动扩展,提出了一种基于实参-形参相似性的缩写词扩展方法。对于给定的实参-形参中的缩写词,本发明根据启发式规则在对应的形参-实参以及参数类型中匹配其扩展词。只有当匹配失败时,才使用基于词典的缩写词扩展方法。本方法与现有方法的显著不同在于本方法充分利用了实参与形参之间的文本相似性以扩展参数中的缩写词。
发明内容
本发明的目的是为了克服已有技术的缺陷,为了解决现有缩写词扩展方法中对函数参数中缩写词进行扩展推荐较差的现状问题,提出了一种对参数中的缩写词进行自动扩展的方法。
本发明方法是通过下述技术方案实现的:
一种对参数中的缩写词进行自动扩展的方法,其基本实施过程如下:
步骤1:根据开源软件的函数定义以及函数调用信息,提取函数的形参、实参和参数相应的类型并存储到数据库中;
具体的说,利用JDT工具解析项目中的标识符,提取出每个开源软件函数定义时的形参和函数调用时的实参以及参数对应的类型;其中,实参包括函数调用中参数列表中的变量或函数名称;形参包括函数定义中参数列表中的变量或函数名称。
步骤2:根据步骤1提取出的函数形参、函数实参、形参类型和实参类型进行分割,并提取出其中的缩写词;
具体的说,将每个标识符的名称分割为单词序列。假定标识符遵循驼峰或蛇形命名规则,因此分割标识符的依据是下划线、大写字母和数字;若分割后的单词在一般的英文词典中不能检索到,则认为其是缩写词。
步骤3:对于步骤2提取出来的缩写词,利用启发式规则从其文本信息中检索对应的扩展词;
具体的说,启发式规则具体为,首先对于给定的缩写词,从其对应的参数名中进行检索,若存在其相应的扩展词,则返回参数名作为扩展,检索结束;若不存在,继续在参数类型中进行检索,若存在扩展词,则返回参数类型,检索结束;否则,在词典中进一步进行检索,若以上检索都不能成功返回,则表明本方法对这个缩写词不能有效地进行扩展。
其中,对于给定的缩写词,从其对应的参数名中进行检索的时候,若缩写词来自函数形参,则在对应的实参中检索扩展词,若缩写词来自函数实参,则在对应的形参中检索扩展词。
步骤A:从对应参数名中进行检索时遵守的启发式规则为:
①缩写词是由对应参数名的首字母序列组成;
②缩写词是对应参数名的前缀;
③缩写词是对应参数名的子序列。
按照以上顺序执行启发式规则,当满足以上3条中某1条启发式规则时,则对应参数名的检索结束;若不能满足以上3条中某1条启发式规则时,则对应参数名的检索结束,就需进一步在参数类型中进行检索。
步骤B:从对应参数类型中进行检索时遵守的启发式规则为:
①缩写词是参数类型的首字母序列组合;
②缩写词是参数类型的前缀。
按照以上顺序执行启发式规则,当满足以上2条中某1条启发式规则时,则对应参数类型的检索结束;若不能满足以上2条中某1条启发式规则时,则对应参数类型的检索结束,就需进一步在词典中进行检索。
步骤C:当对于一个给定的缩写词存在多个推荐的扩展词时,我们将对其进行了一个投票处理,具体过程为:对每个<缩写词,扩展词>词对出现的次数进行统计,数量最多的扩展词对为给定缩写词的扩展词;
步骤D:在所得的<缩写词,扩展词>词对集合中,将扩展词仍为缩写词的<缩写词,扩展词>词对进行递归扩展。
其中,递归扩展为假设本步骤所得某一结果为<缩写词1,扩展词1>。若扩展词1仍是缩写词时,本发明会进行递归扩展:在本步骤得到的全部结果集中,检索是否存在<缩写词2,扩展词2>词对,其中缩写词2和扩展词1相同,若检索成功,更新结果为<缩写词1,扩展词2>;递归执行此过程,直到不存在这类扩展为止。
对于给定的缩写词,若以上步骤在函数的函数名、参数类型和词典中都不能检索到相应的扩展词,则认为本发明不能对此类缩写词进行有效地扩展。
至此,经过步骤1到步骤3,完成了对参数中的缩写词进行自动扩展的方法,如图2所示。
有益效果
一种对参数中的缩写词进行自动扩展的方法,与现有技术中基于词典和基于源代码的扩展推荐方法相比,具有如下有益效果:
1.对于给定测试项目,25.6%缩写词提取于函数的参数,证明了本发明提出的假设;
2.平均准确率为96%,与现有方法相比,本发明的准确率提高了336%;
3.平均召回率为60%,与现有方法相比,本发明的召回率提高了173%。
附图说明
图1是本发明工作原理示意图;
图2是本发明对给定缩写词检索其对应扩展词的过程示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步说明和详细描述。
实施例
本实施例详细阐述了本发明对参数中的缩写词进行自动扩展方法在3个开源项目下具体实施时的方法和效果。
在如表1所示的硬件环境下,我们对表2所示的开源软件进行测试。
表1:硬件环境配置信息表
表2:开源软件基本信息表
步骤1:根据表2所示的开源软件信息,本发明根据开源项目RxJava的函数定义以及函数调用信息,提取出函数的形参、实参和参数对应的类型并存储到数据库中;
步骤2:对步骤1提取出的函数形参、函数实参和参数对应的类型进行分割,从而获得缩写词,函数形参中提取出缩写词数量为160个,函数实参中提取出缩写词数量为504个。函数的形参为strIndex,对标识符进行分割后得到单词序列为str和index,其中str不能在英文词典中检索到,因此获得的缩写词为str;
将每个标识符的名称pntIndex_t分割为单词序列pnt、index、t。假定标识符遵循驼峰或蛇形命名规则,因此分割标识符的依据是下划线、大写字母和数字;若分割后的单词pnt在英文词典中不能检索到,则认为其是缩写词。在所测试的RxJava开源项目中,总共解析了3276个缩写词。此外,本发明记录了缩写词的来源,分别统计了来自函数实参的缩写词的数量N2(504个)和来自函数形参的缩写词的数量N3(160个)。其他开源项目中函数参数中的缩写词的统计结果如表3。
表3:参数中的缩写词
步骤3:对于步骤2提取出来的缩写词,利用启发式规则从其文本信息中检索对应的扩展词;
具体的说,本发明选择了开源项目RxJava中的100个缩写词进行扩展;首先对于给定的缩写词,从其对应的参数名中进行检索,若存在其相应的扩展词,则返回参数名作为扩展,检索结束;若不存在,本发明继续在参数类型中进行检索,若存在扩展词,则返回参数类型,检索结束;否则,在Linsen方法提供的缩写词词典中进一步进行检索。在所选择的100个缩写词中,其中有62个缩写词得到了正确的扩展,有3个缩写词不能被正确地扩展,有26个缩写本发明不能进行有效地扩展。每个开源项目的缩写词的具体扩展信息如表4所示,基于开源项目RxJava进行测试,本发明对参数中的缩写词进行扩展,其准确率为95%,召回率为65%,现有的基于词典和源代码进行缩写词扩展方法的准确率为19%,召回率为19%;
表4:推荐方法的准确率和召回率
表4中的准确率=正确的缩写词扩展/推荐的缩写词扩展;
表4中的召回率=正确的缩写词扩展/待推荐的缩写词总数。
结果表明:
1.平均准确率为96%,与现有方法相比,本发明的准确率提高336%;
2.平均召回率为60%,与现有方法相比,本发明的召回率提高173%。
以上所述为本发明的较佳实施例而已,本发明不应该局限于该实施例和附图所公开的内容。凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。
机译: 传感器例如温度传感器,一种用于自动化工程的输出值确定方法,涉及通过对两个点集进行插值来从另一个输入参数值中确定输出参数的值
机译: 一种用于自动计算至少一个上限,光圈中的至少一个和至少一个参数集的方法,以对人体中的目标体积进行照射
机译: 自动挖掘首字母缩写词-扩展对样式和形成规则的系统和方法