一种基于LDA主题模型的相关软件历史数据提取方法
技术领域
本发明涉及一种软件维护方法,特别涉及一种软件历史数据提取方法。
背景技术
当前很少有软件是从零开发,大部分软件都是经过不断的修改和升级而进行演化的,软件演化的本质也即是软件修改,而每一次的软件修改都需要完整准确地记录在软件演化历史库中,这些软件历史库包括软件的源代码、软件的修改记录、维护或开发人员的通信记录等。这些软件开发和维护历史记录往往可以用于评估和实施新的修改请求。具体地,用户提出某个新的维护请求,开发人员在对该请求的评估和实施时往往会参考已有软件历史库中一些数据来指导当前维护请求的评估和实施。而随着软件的演化,软件历史库越来越庞大,哪些信息是有用的,哪些信息是过时的,很难去辨别。而软件演化历史库在软件维护和演化过程中是必不可少的信息分析来源,目前大量的在软件维护和演化方面的研究和应用都是基于软件演化历史数据的挖掘和分析进行的。例如,利用软件演化历史库中的共同修改可以指导开发人员去分析某个修改所需进行的共同修改元素,软件演化历史库中的故障跟踪库可帮助开发人员预测当前软件中包含的可能故障,软件演化历史库可用来帮助分析某个维护请求应由哪个开发人员去实施比较合适,等。所以,参考软件演化历史库中的已有相关历史数据能有效地指导当前维护请求。
但是到目前为止,大部分研究或应用都是关于怎么使用软件演化历史库来指导软件维护和演化活动的,很少有关于如何从软件历史库中选取相关当前维护请求和当前软件的软件历史数据。尽管研究表明使用软件演化历史库可有效改进传统的基于单一的当前软件版本的分析技术,但是,这些软件维护与演化活动如果直接使用软件演化历史数据进行分析,其精度还不是很高,并不能对实际的维护请求给出很有效的指导作用。当前关于这方面的研究主要是选取最近的几个软件版本历史数据来指导当前软件维护请求的评估与实施。但是,当前的维护请求并不一定就与最近的几个软件版本数据相关,它可能与更前面的历史数据相关或者相似,这样,参考更前面的历史数据对当前维护请求更具指导意义,这是软件历史相关数据选取不全面的原因造成的。另外,如果在最近的几个软件历史版本中,有一些与当前软件版本相背或相差甚大的软件修改版本如果也选择作为分析对象进行分析,就会造成当前维护请求的干扰,会造成当前维护请求评估结果的很大偏差,这是不相干的软件历史数据造成评估结果精确性差的原因。因此,我们需要采取有效的方法从软件演化历史库中选择与当前软件版本和当前维护请求相关的历史数据进行分析,这样,可有效地改进软件维护和演化各种活动的精确性和有效性。
现有技术中的软件演化历史库包括故障跟踪库、通信库以及软件版本控制库,故障跟踪库中主要保存的是已有的一些故障的修改和处理;通信库中主要保存开发人员在开发过程中保存的关于软件系统开发的交流信息;软件版本控制库是存储整个软件升级的各个版本的演化情况。
隐含狄利克雷分布(Latent Dirichlet
Allocation,简称LDA)是一种分析非结构化文本语料库的概率模型。该模型可以提取概括整个文档的主题。我们利用隐含狄利克雷分布提取不同软件数据的主题,然后通过相似度计算与当前软件版本和维护请求相关的历史数据作为本次维护请求的评估和实施数据来源,这样可有效改进软件维护和演化各种活动的精确性和有效性。
发明内容
本发明的目的是提供一种基于LDA主题模型的相关软件历史数据提取方法,利用主题模型中的隐含狄利克雷分布(LDA)技术有效地进行相关软件历史数据的提取,直接生成一种高质量、高效的相关软件历史数据集,提高软件维护与演化的精度。
本发明的目的是这样实现的:一种基于LDA主题模型的相关软件历史数据提取方法,其特征在于,包括以下步骤:
步骤1:将软件当前所需的维护请求进行预处理,所述预处理过程包括将请求语句进行分解,表示成用于相似度计算的一个由单词组成的向量MR;
步骤2:从软件演化历史库中选取故障跟踪库和通信库进行分析;通过LDA主题模型对故障跟踪库和通信库进行分析,提取潜在主题,故障跟踪库所提取的主题用矩阵B表示,通信库所提取的主题用矩阵C表示,然后,分别计算矩阵B、矩阵C中和向量MR中相似的元素,识别出与向量MR中维护请求元素相对应的故障跟踪库中的故障元素Bug以及通信库中的通信元素Comm;
步骤3:利用LDA主题模型从当前软件版本中提取潜在主题,所提取的主题用向量Cu表示;
步骤4:利用LDA主题模型对软件版本控制库进行分析,提取潜在主题,所提取的主题用矩阵U表示;然后,计算矩阵U中和所述向量Cu相似的软件版本元素V2;
步骤5:找出步骤2中计算得到故障元素Bug和通信元素Comm所对应的软件版本元素V1,另外,找出步骤4中计算得到的软件版本元素V2,最终,计算得出所有与当前维护请求和当前软件版本相关的的软件数据为V=V1∪V2。
作为本发明的限定,向量元素相似性计算采用余弦相似性模型进行计算,即通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。
作为本发明的进一步限定,本发明中程序元素的数据粒度层次均是文件层次。本发明中关于当前的修改请求的各种软件维护和演化活动可基于这些相关文件进行分析和处理。
作为本发明的进一步限定, 在利用LDA模型进行主题提取时,将软件演化历史库中的各种文件作为文本语料库输入,在利用LDA分析这些文件前,首先要对这些文件进行预处理,如提取标识符、注释;将软件中的关键词(int,double,等)和常用词(the,it,等)删除;然后设置需要提取主题的个数,根据隐含狄利克雷分布对这些非结构化文本语料库进行分析,提取不同软件数据库的主题。
与现有技术相比,本发明的有益效果在于:
(1)该发明直接从已有的大量软件历史数据中提取与当前软件版本和维护请求相关的历史数据,它既考虑了当前软件版本的实际情况,也考虑了当前维护请求的类型和内容,基于这些有效数据的分析,可提高软件维护和演化各种分析活动的精确性和有效性;
(2)该发明所提出的软件历史相关数据提取是基于LDA主题模型进行的,目前LDA主题模型已经成熟并有很多现有的成熟工具,因此,该方法实现比较容易;
(3)本发明提供了可选的历史数据分析的粒度层次。本发明中的程序元素粒度可以是文件、类、方法、甚至可以是语句层次,因此,在实际软件历史数据提取和分析时,可根据实际的软件维护和演化活动、成本等现实情况,选择相应的粒度层次进行历史数据的提取,为本发明提供了灵活的选择框架;本发明可以应用于各种编程语言的软件维护中。
附图说明
图1为基于LDA主题模型的相关软件历史数据提取过程示意图。
图2为软件维护与演化活动流程图。
具体实施方式
本发明是一种基于LDA主题模型的相关软件历史数据提取方法,基于所提取的软件历史数据,软件维护和演化各种活动都可以基于这些数据进行分析,图2是软件维护和演化的各种活动,包括对原系统进行软件理解、影响分析、修改实例,最终得到新系统,修改实例过程中还会进行重构以及修改传播分析,影响分析过程若无影响则返回原系统,影响分析过程若有影响,则进行修改实例操作,这些活动都可基于软件演化历史的数据进行分析,因此,软件演化历史数据的精确性和完整性影响着这些软件维护与演化活动的有效性。
本发明在提取相关软件历史数据时使用的是LDA主题模型技术,它可以将文档集中每篇文档的主题按照概率分布的形式给出,同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可;此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它;LDA是一种典型的词袋模型,即它认为一篇文档是由一组词构成的一个集合,词与词之间没有顺及先后的关系,一篇文档可以包含多个主题,文档中每一个词都由其中的一序以个主题生成。
如图1所示,利用LDA对软件演化历史库中的信息进行主题提取,并与当前软件维护请求和当前软件版本进行近似度匹配,从而提取出相关的软件历史数据。在利用LDA模型进行主题提取时,将软件演化历史库中的文件作为文本语料库输入,在利用LDA分析这些文件前,首先对所述文件进行过滤预处理,如提取标识符、注释;将软件中的一些关键词和常用词删除;然后设置需要提取主题的个数,根据隐含狄利克雷分布对这些非结构化文本语料库进行分析,提取不同软件数据库的主题。
具体技术方案如下:
步骤1:将软件当前所需的维护请求进行预处理,所述预处理过程包括将请求语句进行分解,表示成用于相似度计算的一个由单词组成的向量MR,假设MR={mr1, mr2, mr3, mr4};
步骤2:从软件演化历史库中选取故障跟踪库和通信库进行分析;通过LDA主题模型对故障跟踪库和通信库进行分析,提取潜在主题,故障跟踪库所提取的主题用矩阵B表示,通信库所提取的主题用矩阵C表示,然后,分别计算矩阵B、矩阵C中和向量MR中相似的元素,元素相似性计算采用余弦相似性模型进行计算,本实施例中所提到的元素的数据粒度层次均是文件层次,识别出与向量MR中元素相对应的故障跟踪库中的故障元素Bug以及通信库中的通信元素Comm,假设Bug={b1, b2, b3,
b4},Comm={c1, c2, c3};
步骤3:利用LDA主题模型从当前软件版本中提取潜在主题,所提取的主题用向量Cu表示,假设Cu={cu1, cu2, cu3, cu4,
cu5, cu6};
步骤4:利用LDA主题模型对软件版本控制库进行分析,提取潜在主题,所提取的主题用矩阵Uc表示;然后,计算矩阵Uc中和所述向量Cu相似的软件版本元素V2;
步骤5:找出步骤2中计算得到故障元素Bug和通信元素Comm所对应的软件版本元素V1,假设V1={v2,v3,v4,v5},另外,找出步骤4中计算得到的软件版本V2,假设V2={v1,v2,v3},最终,计算得出所有与当前维护请求和当前软件版本相关的的软件数据为V=V1∪V2={v1,v2,v3,v4,v5};
到此,我们直接得到了与当前软件维护请求和当前软件版本相关的软件历史数据。
本发明并不局限于上述实施例,在本发明公开的技术方案的基础上,本领域的技术人员根据所公开的技术内容,不需要创造性的劳动就可以对其中的一些技术特征作出一些替换和变形,这些替换和变形均在本发明的保护范围内。