法律状态公告日
法律状态信息
法律状态
2019-03-12
授权
授权
2016-09-28
实质审查的生效 IPC(主分类):G06F17/30 申请日:20160405
实质审查的生效
2016-08-31
公开
公开
技术领域
本发明属于软件理解领域,特别涉及一种面向软件代码检索的查询语句重新生成方法。
背景技术
在软件工程中,理解大段的软件代码花费了软件维护人员许多时间,并且每个软件开发人员有属于自己的命名风格,包括词组的缩写和连结,这使得软件维护难度大大增加。所以为了方便理解软件代码,我们通过查询软件代码库来更准确地检索出相关的信息供软件开发人员参考,从而使得软件维护顺利进行。因此,查询语句的质量决定了我们能否准确地检索出维护人员想要的关键信息。然而,不断更替的软件维护人员和日益庞大的软件源代码使得构造一个高质量查询语句的难度非常大。所以,需要研究查询语句重新生成技术来提高软件信息检索的准确度。在对软件进行维护时,需要软件维护人员熟悉、理解软件代码。查询语句再生成能在某种程度上帮助维护人员构造更为精准的查询语句。
在本发明提出之前,大多数查询语句再生成技术是基于软件代码库中的单词之间的位置关系构建的,例如,Bunyamin等人通过框定关键词位置、寻找邻近词的方式对查询语句进行替换、增加、删减,自动生成新的查询语句。然而,代码库中关键词的关系非常复杂,例如代码类名、方法名大多是由合成词组成的,每位开发人员的命名习惯也是不一样的等等,所以仅仅基于关键词之间的位置关系并不能有效地找出查询语句的相关词语,甚至会干扰词汇并影响了查询语句重新生成的准确率。另外,Bunyamin等人通过机器自动选择构成新查询语句的方式,相比于人工选择,其精准度低,甚至会由于机器的选择偏差,查询结果与原查询语句背道而驰。
发明内容
本发明的目的就在于克服上述缺陷,研制一种面向软件代码检索的查询语句重新生成方法。
本发明的技术方案是:
一种面向软件代码检索的查询语句重新生成方法,其主要技术特征在于步骤如下:
(1)对软件代码库中的代码及注释部分和用户输入的查询语句进行预处理,包括词条划分,词根处理,动名词同义词、近义词查询扩充词汇量,生成软件代码词库与查询语句词库;
(2)提取软件代码词库中的合成词,将其拆分出来的两个或多个关键词定义为异性关系;
(3)一方面,查询关键词的同义词及近义词,如果这些同义词/近义词出现在软件代码词库中,则定义它们为同性关系;另一方面,如果某两个关键词的异性关系词是同一个单词或者是同义/近义词,则定义它们是同性关系;
(4)在软件代码词库中,找出查询语句中的所有关键词的同性关键词和异性关键词;
(5)根据出现频率给出前20个关键词并找出相应代码片段,再根据给出代码片段中所含原、新关键词的数目进行排序,并根据排序结果对前20个关键词的顺序进行微调,将其可视化,供用户选择更合适的关键词;
(6)若用户选择的关键词与上次输入没有变化,则该结果为最终结果,停止查询语句重新生成;否则,将用户新选出来的结果作为新的查询语句重复上述步骤(4)、(5)。
有益效果
本发明结合软件代码库对软件维护人员输入的查询语句进行重新生成。本发明有效地检索出软件代码库中的相关信息,而且扩充了原查询语句包含的关键词,并提供其代码片段,实现了信息的查询与扩展,有效地提高了软件维护人员对软件的理解程度与效率。主要有以下一些优点:
1)本发明将软件源码库中词与词之间的复杂关系有效地提取为同性关系和异性关系,准确有效地扩充了查询语句的关键词语。
2)本发明结合人机交互的方式,对扩充出来的词语进行进一步筛选,在一定程度上提高了查询语句重新生成的准确率。
3)本发明提出的查询语句重新生成技术适用性广,不仅适合源码信息检索,而 且适用于其他软件库(例如bug库、commit库)信息查询。
4)本发明在选择新的关键词时,给用户提供新关键词的代码片段,以便用户判断该关键词是否为所需关键词。
具体优点和效果将在下面继续予以说明。
附图说明
图1——本发明流程示意图。
图2——本发明中用户选择同性/异性关键词的可视化界面示意图。
具体实施方式
本发明的技术思路是:
本发明的方法是使用查询语句再生成,并基于软件代码库中关键词的复杂关系对查询语句有效扩充相关词汇,并且结合人工方式对扩充出来的词语进一步筛选,从而有效地重新生成查询语句。
下面结合附图1、2对本发明的技术方案进行详细说明:
步骤(1)将软件代码库分为纯代码文档库和纯注释文档库,并与用户输入的查询语句进行预处理,具体包括词条划分,词根处理,动名词同义词、近义词查询扩充词汇量等等,生成软件代码段词库与查询语句词库;
例如:对Mozilla项目中bug616264的描述“Cookies set for www.foo.com.are sent to www.foo.com”进行预处理后的结果为:cookie,cooky,biscuit,set,bent,foo。
步骤(2)提取软件代码词库中的合成词,将其拆分出来的两个或多个关键词定义为异性(and)关系;
例如:Mozilla项目源码中有一系列对文件进行操作的方法,其中阅读文件的方法名为“readFiles”,写入文件的方法名为“writeFiles”,修改文件的方法名为“modifyFiles”。因此,我们可以定义file的异性关系词有:read,write,modify。
步骤(3)一方面,查询关键词的同义词及近义词,如果这些同义词/近义词出现在软件代码词库中,则定义它们为同性(or)关系;
例如:modify和change是同义词,那么它们是同性关系。
另一方面,如果某两个关键词的异性关系词是同一个单词或者是同义/ 近义词,则定义它们是同性(or)关系;
例如:步骤(2)中file的异性关系词有:read,write,modify,那么,read,write,modify三者之间为同性关系词。
步骤(4)在软件代码词库中,找出查询语句中的所有关键词的同性关键词和异性关键词;
例如:对bug616264的描述进行预处理后的关键词set进行扩充同性关键词有:put,get,input,place。如图2,用户可以点击这些单词前面白色的框框表示选择作为查询语句再生成的关键词,并且用户可以选择某个关键词获取其代码片段(More details按钮),以便判断该关键词是否为所需关键词。
步骤(5)根据出现频率各给出前20个关键词并找出相应代码片段,再根据给出代码片段中所含原、新关键词的数目进行排序,并根据排序结果对前20个关键词的顺序进行微调,将其可视化,供用户选择更合适的关键词;例如:步骤4)中关键词set的同性关键词排序为get,put,input,place,结合相应代码片段中的关键词数目对四个关键词的排序进行微调,依次为input,put,get,place。
步骤(6)若用户选择的关键词与上次输入没有变化,则该结果为最终结果,停止查询语句重新生成;否则,将用户新选出来的结果作为新的查询语句重复第(4)、(5)步骤。
例如:在步骤4)中,用户选择了put关键词作为查询语句新的关键词,那么此时的查询语句的关键词发生了变化,当用户点击Next按钮后,系统重复第(4)步骤查找查询语句的同性/异性关系词;如果用户一个单词都没有选择,那么查询语句的关键词数量不变,作为最后结果,查询语句停止重新生成步骤。
机译: 面向对象编程语言的源代码修改方法,例如C,涉及创建文件,并通过消除生成的文件并通过扩展的非引用类创建另一个文件来重新生成源代码
机译: 根据设备中安装的国家/地区代码,使用存储在光盘上的多种语言的字幕或音频数据选择并重新生成字幕代码或音频数据的国家代码来选择和重新生成数据的方法
机译: 软件生成设备,软件生成支持设备,软件生成方法,Java代码实现设备,软件以及Java Lyee计算方法(商标)语言的实现方法