一种面向软件维护的修改请求重新定制的方法

文档序号:6623331阅读:163来源:国知局
一种面向软件维护的修改请求重新定制的方法
【专利摘要】本发明公开了软件工程领域内的一种面向软件维护的修改请求重新定制的方法,包括以下步骤:预处理→同义词扩充→分割标识符→匹配→排序,本发明可以有效帮助开发人员制定好的查询语句,从而更准确地定位到要进行维护的代码段,以提高软件维护的效率,可用于软件开发维护中。
【专利说明】一种面向软件维护的修改请求重新定制的方法

【技术领域】
[0001]本发明涉及一种软件维护方法,特别涉及一种软件修改请求重新定制的方法。

【背景技术】
[0002]在软件发布后,用户可能因为增加新的需求、发现新的软件故障、适应新的环境等会提出新的修改请求,这时需要对所开发的软件进行维护和升级。随着软件系统的不断演化,为了执行软件维护的任务而对代码进行定位变得越来越困难。维护者所写的修改请求语言通常都与开发者所用的词汇不一样,因此需要花费很大的时间和精力在制定准确的查询上,降低了维护软件的效率。现存的使用自然语言查询的静态代码搜索技术对维护者的帮助并不是很大,尤其是当一个维护者不能准确地写出关于源代码的修改请求的时候,这些静态代码搜索技术就显得很糟糕。因为传统的静态代码搜索技术只是单纯将用户输入的所有单词与源代码进行匹配,只要有一个单词在某个标识符中出现,就将该结果返回给用户,如果用户输入的查询语句有很大的冗余度,则可能有很多无用的结果会被反馈给用户,给用户判断结果是否相关造成了很大困难;如果用户输入的查询语句在源代码无法匹配到,则没有结果返回给用户,而让用户自己制定查询语句又给用户造成了很大的困扰。因此,本发明提出了面向软件维护的修改请求重新定制方法;标识符在编程语言中,是用户编程时使用的名字,对于集合、常量、函数、语句块也有名字,统统称之为标识符。


【发明内容】

[0003]本发明的目的是提供一种面向软件维护的修改请求重新定制的方法,提高数据提取的精度,方便用户查询语句、识别源程序。
[0004]本发明的目的是这样实现的:一种面向软件维护的修改请求重新定制的方法,包括以下步骤:
步骤I)预处理:对于用户输入的自然语言进行分析,用停用词表将冗余的部分去除,得到关键字集合,并存入类型为string名为words的集合中;
步骤2)同义词扩充:根据用户输入的自然语言的语言环境判断集合words中的每个单词的词性,利用wordnet工具去寻找词性相同的同义词集合,并为words中的每个单词建立该单词的同义词数组,将words和同义词数组内的单词进行替换配对,形成动词+名词的短语,一起存入名为featurewords的集合中,并作为要到代码库中进行匹配的对象;
步骤3)分割标识符:将当前软件程序中的有用的标识符提取出来,对所提取的标识符进行分割,这些分割后的标识符存入名为identifiers的集合中;
步骤4)匹配:将集合featurewords与集合identifiers进行匹配,若集合featurewords中的某个短语在集合identifiers中出现,则将identifiers中并未出现的短语作为冗余部分去除,并对该集合identifiers中的数据集进行语义上的重新排序,然后将得到的数据集存入集合keyterms中;
步骤5)排序:统计集合keyterms中短语的个数为sum,并统有短语出现的方法中短语的个数,记为nl、n2、".nk,再计算这些短语的个数nl、n2、…nk占sum的百分比,记为percentl, percent2,...percentk,将所得结果中的方法按照该百分比从大到小排序,并以方法名来划分层次结构,再将方法名+方法中所包含的短语推荐给用户。
[0005]作为本发明的改进,步骤2)在判断单词词性时,依照以下原则,判断该单词的前一个单词是否为名字,若不是,则确定该单词是名词,若是,则再次判断该单词的后一个单词是否为名词,若不是,则确定该单词是名词,若是,则根据该单词在现有语境条件下的词性判断该单词是动词还是名词。
[0006]作为本发明的改进,步骤3)的具体方法如下:
a)建立所用编程语言的关键字库:将编程语言中的所有关键字都放入数据库的数据表中;
b)提取有用标识符:将源程序与关键字库进行对照,过滤掉源程序中跟编程语言相关的关键字,得到源程序所有的标识符,在这些标识符中去掉只有一个字母、一个字母和下划线、一个字母和数字组成的标识符,最终所得的标识符即为有用的标识符,标识符由多个短语组成,每个短语内有多个单词;
c)分割标识符:对所提取的有用标识符进行分割,将所得的标识符都转换为小写字母,然后将标识符存入名为identifiers的集合中。
[0007]作为本发明的改进,步骤4)的具体方法如下:
a)设置门槛值:根据用户需求设置门槛值,该门槛值用以判定用户请求与源代码的相似度;
b)匹配:用集合featurewords与集合identifiers进行匹配,匹配方法为,判断集合identifiers中的短语是否满足条件a/b >门滥值,其中a表示集合identifiers内短语中单词在集合featurewords内短语中出现的数量,b表示变量featurewords内短语中单词的总数和变量identifiers内短语中单词的总数中较大的那一个,若满足条件,说明标识符中某个短语可以出输出,并存放在名为keyterms的集合中,若不满足条件,则进行下一标识符的匹配。
[0008]本发明在操作时,当用户输入修改请求的自然语言时,通过判断用户输入的查询语句中的每个单词的词性,用wordnet来寻找词性相同的同义词,然后在到分割好标识符的代码库中去逐个匹配,当两个短语的相似度达到一定门槛值时,便将从代码库中寻找到的短语推荐给用户,以便用户制定更好的查询,从而使用户更准确地定位到想要维护的代码段,本文所提供的技术方案可以自动地判断用户输入的自然语言中每个单词的词性,并通过词性来寻找同义词,当原查询语句没有找到任何符合条件的结果时,就用每个单词相对应的同义词来替换它,从而大大降低没有返回结果的可能性;同时,我们会对用户输入的自然语言进行预处理,并将处理后得到的短语作为整体到源代码中去匹配,这样返回给用户的结果不会太多,且与用户所要的结果的相关性很大,使得用户能够方便地去选择。
[0009]与现有技术相比,本发明的有益效果在于,本方法是基于查询单词词性分析技术的重新制定用户修改请求,通过分析用户输入的自然语言中关键单词的词性来寻找同义词,可以有效地解决查询过程中的同义词扩展问题;用短语而不是单个单词去匹配,可以有效地缩小反馈结果的范围,使用户便于判断;直接将当前程序代码中符合条件的标识符进行语序上的重排后推荐给用户,更加直观明了 ;可以有效帮助开发人员制定好的查询语句,从而更准确地定位到要进行维护的代码段,以提高软件维护的效率。本发明可用于软件开发维护中。

【专利附图】

【附图说明】
[0010]图1是本方法总体流程图。
[0011]图2是预处理用户输入的修改请求语言的流程图。
[0012]图3是提取并分割标识符的流程图。
[0013]图4是同义词扩展的流程图。
[0014]图5是结果排序的流程图。
[0015]图6是单词词性判断的流程图。
[0016]图7是十进制转换为十六进制的源代码。
[0017]图8是图7的源代码经步骤3)处理后得到的代码。
[0018]图9是以修改请求语句convert decimal to hex为例得到的结果。

【具体实施方式】
[0019]下面结合具体实施例对本发明作进一步说明:
本发明的方法是在判断用户输入的查询语句中每个单词词性的基础上,利用wordnet来提取词性相同的同义词,采用标识符分割技术,通过设置门槛值来向用户推荐可替换的词或短语,如图1所示。
实施例
[0020]一、方法相关参数定义
1.建立一张名为character的词性判断表;
2.用户输入的查询语句存入集合str中;
3.预处理后的查询语句存入集合words中,words中的每个单词存入word数组中,每个单词的词性存入property数组中;
4.在数据库中建立所用编程语言的关键字库表keywordLibrary;
5.每个单词对应的同义词存入数组synonyml,synonym2,....synonymn中;
6.在数据库中建立源代码表code,导入code表;
7.从源代码中提取出的有用的标识符存入向量tokens中,对这些标识符进行分割,将分割后得到的短语存入向量identifiers中;
8.将匹配后的达到门滥值的短语存入向量keyterms中。
[0021]二、方法流程
本实施例中以一个十进制转换为十六进制的java源程序(如图7所示)中修改十进制转换为十六进制功能为例,该方法主要分为四个步骤:(I)判断用户的查询语句每个单词的词性;(2)利用wordnet寻找词性相同的同义词(3)导入代码库并分割标识符(4)得到符合条件的短语并将结果排序。
[0022]1.判断用户的查询语句每个单词的词性假设用户输入的句子为简单句(即句子中只有一个动词),输入的修改请求是convertdecimal to hex ;经过预处理后,得到关键字convert decimal hex ;建立一张名为character的词性判断表,如图6所示,判断方法依照以下原则,判断该单词的前一个单词是否为名字,若不是,则确定该单词是名词,若是,则再次判断该单词的后一个单词是否为名词,若不是,则确定该单词是名词,若是,则根据该单词在现有语境条件下的词性判断该单词是动词还是名词,将所有的非停用词(停用词:文本中的常用词汇和一些构成句子但无实际意义的词汇,如:介词、形容词等)的动词用法和名词用法以及他们为动词和名词的概率的统计结果存入表中,当无法判别一个单词是否为动词或名词时,比如该单词的前后都为名词时,就根据它在通常的文本中是动词的概率大还是名词的概率大,将概率大的那一个最为它在该查询语句中的词性;并将其存入对应的property数组中,如convertdecimal hex这三个关键字,通过判断可知convert的词性为动词,decimal和hex的词性为名词。
[0023]2.利用wordnet寻找词性相同的同义词
a)将处理后得到的word数组及其词性property数组对应地输入到wordnet中,通过wordnet进行分析;
b)若该单词的词性为V类,则到动词词库中去寻找同义词;若该单词的词性为η类,则到名词词库中去寻找同义词;将找到的所有词性相同的同义词存入对应的synonym[l,2——,η]数组中;
c)以convertdecimal hex为例,convert的词性为v类,贝U它的同为v类的同义词有change, exchange, commute, win over 和 convince ;decimal 的词性为 n 类,则它的同为 η类的同义词有decimal fract1n ;hex的词性为η类,则它的同为η类的同义词有jinx,curse 和 whammy ;
d)用同义词对原修改请求语句进行替换,如图4所示,以convertdecimal hex为例,贝Ij替换后得到的短语有;change decimal hex, exchange decimal hex, commute decimalhex, win over decimal hex, convince decimal hex, convert decimal fract1n hex,change decimal fract1n hex, exchange decimal fract1n hex, commute decimalfract1n hex, win over decimal fract1n hex, convince decimal fract1n hex,convert decimal jinx,change decimal jinx,exchange decimal jinx,commute decimaljinx,win over decimal jinx,convince decimal jinx,convert decimal fract1n jinx,change decimal fract1n jinx, exchange decimal fract1n jinx, commute decimalfract1n jinx, win over decimal fract1n jinx, convince decimal fract1n jinx,convert decimal curse, change decimal curse, exchange decimal curse, commutedecimal curse, win over decimal curse, convince decimal curse, convert decimalfract1n curse,change decimal fract1n curse,exchange decimal fract1n curse,commute decimal fract1n curse, win over decimal fract1n curse, convincedecimal fract1n curse, convert decimal whammy, change decimal whammy, exchangedecimal whammy,commute decimal whammy,win over decimal whammy,convince decimalwhammy, convert decimal fract1n whammy, change decimal fract1n jinx, exchangedecimal fract1n whammy, commute decimal fract1n whammy, win over decimalfract1n whammy,和 convince decimal fract1n whammy共47个,一起存入 featurewords中。
[0024]3.输入代码库并分割标识符
a)在数据库中建立源代码表code,并将其输入到我们的程序中,同时输入关键字对照库,以十进制转换为十六进制这个程序为例,在code中存放的就是该十进制转换为十六进制的源代码;
b)将源程序与keywordLibrary列表进行对照,过滤掉源代码的注释和关键字,得到程序所有的标识符,在这些标识符中去掉只有一个字母、一个字母和下划线、一个字母和数字组成的标识符,且相同的标识符只出现一次,提取出剩余的标识符,存入向量tokens中;
c)对提取出的标识符进行分割,分割后的标识符存入向量identifiers,如图3所示,以convert decimal hex为例,分割后的代码如图8所示。
[0025]4.得到符合条件的短语并将结果排序
a)将进行同义词扩展后得到的短语,即向量featurewords与向量identifiers进行匹配,将到达门槛值的短语存入向量keyterms中,这里的门槛值设为0.1,即有向量identifiers内短语中一个单词出现在向量featurewords中即可;
b)统计整个代码中短语的个数为sum,出现短语的方法中的短语的个数为nl,n2,...nk ;
c)计算这些方法中出现的短语的个数在总的keyterms的个数的百分比为percentl,percent2,...percentk,并将所得结果中的方法名按照该百分比从大到小排序,并以方法名来划分层次结构,即将方法名+方法中所包含的keyterms推荐给用户,如图5所示;
d)以上述中的十进制转换为十六进制程序和修改请求语句convertdecimal to hex为例,最后呈现给用户的结果如图9所示。
[0026]本发明并不局限于上述实施例,在本发明公开的技术方案的基础上,本领域的技术人员根据所公开的技术内容,不需要创造性的劳动就可以对其中的一些技术特征作出一些替换和变形,这些替换和变形均在本发明的保护范围内。
【权利要求】
1.一种面向软件维护的修改请求重新定制的方法,其特征在于,包括以下步骤: 步骤I)预处理:对于用户输入的自然语言进行分析,用停用词表将冗余的部分去除,得到关键字集合,并存入类型为string名为words的集合中; 步骤2)同义词扩充:根据用户输入的自然语言的语言环境判断集合words中的每个单词的词性,利用wordnet工具去寻找词性相同的同义词集合,并为words中的每个单词建立该单词的同义词数组,将words和同义词数组内的单词进行替换配对,形成动词+名词的短语,一起存入名为featurewords的集合中,并作为要到代码库中进行匹配的对象; 步骤3)分割标识符:将当前软件程序中的有用的标识符提取出来,对所提取的标识符进行分割,这些分割后的标识符存入名为identifiers的集合中; 步骤4)匹配:将集合featurewords与集合identifiers进行匹配,若集合featurewords中的某个短语在集合identifiers中出现,则将identifiers中并未出现的短语作为冗余部分去除,并对该集合identifiers中的数据集进行语义上的重新排序,然后将得到的数据集存入集合keyterms中; 步骤5)排序:统计集合keyterms中短语的个数为sum,并统有短语出现的方法中短语的个数,记为nl、n2、".nk,再计算这些短语的个数nl、n2、".nk占sum的百分比,记为percentl, percent2,...percentk,将所得结果中的方法按照该百分比从大到小排序,并以方法名来划分层次结构,再将方法名+方法中所包含的短语推荐给用户。
2.根据权利要求1所述的一种面向软件维护的修改请求重新定制的方法,其特征在于,步骤2)在判断单词词性时,依照以下原则,判断该单词的前一个单词是否为名词,若不是,则确定该单词是名词,若是,则再次判断该单词的后一个单词是否为名词,若不是,则确定该单词是名词,若是,则根据该单词在现有语境条件下的词性判断该单词是动词还是名
ο
3.根据权利要求1所述的一种面向软件维护的修改请求重新定制的方法,其特征在于,步骤3)的具体方法如下: a)建立所用编程语言的关键字库:将编程语言中的所有关键字都放入数据库的数据表中; b)提取有用标识符:将源程序与关键字库进行对照,过滤掉源程序中跟编程语言相关的关键字,得到源程序所有的标识符,在这些标识符中去掉只有一个字母、一个字母和下划线、一个字母和数字组成的标识符,最终所得的标识符即为有用的标识符,标识符由多个短语组成,每个短语内有多个单词; c)分割标识符:对所提取的有用标识符进行分割,将所得的标识符都转换为小写字母,然后将标识符存入名为identifiers的集合中。
4.根据权利要求1所述的一种面向软件维护的修改请求重新定制的方法,其特征在于,步骤4)的具体方法如下: a)设置门槛值:根据用户需求设置门槛值,该门槛值用以判定用户请求与源代码的相似度; b)匹配:用集合featurewords与集合identifiers进行匹配,匹配方法为,判断集合identifiers中的短语是否满足条件a/b >门滥值,其中a表示集合identifiers内短语中单词在集合featurewords内短语中出现的数量,b表示变量featurewords内短语中单词的总数和变量identifiers内短语中单词的总数中较大的那一个,若满足条件,说明标识符中某个短语可以出输出,并存放在名为keyterms的集合中,若不满足条件,则进行下一标识符的匹配。
【文档编号】G06F9/44GK104166550SQ201410396663
【公开日】2014年11月26日 申请日期:2014年8月13日 优先权日:2014年8月13日
【发明者】孙小兵, 陆美莉 申请人:扬州大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1