一种软件缺陷报告修复方法转让专利

申请号 : CN201110209093.5

文献号 : CN102262663B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张文吴文金杨叶王青

申请人 : 中国科学院软件研究所

摘要 :

本发明公开了一种软件缺陷报告修复方法,属于计算机软件开发技术领域。本方法为:1)从软件缺陷报告数据库中提取已修复的历史缺陷报告,及其主体描述部分、开发者对缺陷报告的评论、相关的开发者;2)对报告进行分词处理,得到每一报告的标引词集合;3)计算每一标引词的权值,根据标引词的权值将报告转变成向量空间模型中的特征向量;4)将一未分配修复推荐人的缺陷报告转变成向量空间模型中的特征向量,搜索与该未分配报告特征向量相似的历史缺陷报告集合;5)根据4)所得报告集合构造出开发者社会网络,对开发者节点进行排序,从前Q个开发者中确定该未分配报告的修复人对其进行修复。本发明大大改进了缺陷报告修复人效率。

权利要求 :

1.一种软件缺陷报告修复方法,其步骤为:

1)从软件缺陷报告数据库中提取已修复的历史缺陷报告,及所提取历史缺陷报告的主体描述部分、开发者对缺陷报告的评论、相关的开发者;

2)对历史缺陷报告进行分词处理,得到每一历史缺陷报告的标引词集合;

3)计算每一标引词的词频和逆文档频率,得到该标引词的权值,然后根据标引词的权值将每篇历史缺陷报告转变成向量空间模型中的特征向量;

4)将一未分配修复推荐人的缺陷报告转变成向量空间模型中的特征向量,搜索与该未分配修复推荐人的缺陷报告的特征向量相似的历史缺陷报告集合;

5)根据4)所得历史缺陷报告集合构造出开发者社会网络,然后采用社会网络分析方法对所构造开发者社会网络中的开发者节点进行排序,从前Q个开发者中确定该未分配修复推荐人缺陷报告的修复人对其进行修复;

其中,构建所述开发者社会网络的方法为:首先将所述历史缺陷报告集合中每一历史缺陷报告的相关的开发者评论表示为一列表: 然后从节点devi,k分别生成指向节点devi,1,devi,2,...,devi,k-1的有向边,建立偏向序的关系,得到所述开发者社会网络;节点为相关的开发者,Ci,k是开发者devi,k发表的评论。

2.如权利要求1所述的方法,其特征在于所述相关的开发者包括:历史缺陷报告的开发者、对历史缺陷报告进行评论的开发者。

3.如权利要求2所述的方法,其特征在于按照所述相关的开发者的评论时间顺序,对所述相关的开发者进行排序。

4.如权利要求1所述的方法,其特征在于采用所述空间向量模型,利用K近邻搜索方法搜索与未分配修复推荐人的缺陷报告的特征向量相似的历史缺陷报告,得到所述历史缺陷报告集合。

5.如权利要求4所述的方法,其特征在于首先对转换成向量空间模型中特征向量的所述历史缺陷报告建立倒排索引,然后利用所述K近邻搜索方法进行搜索。

6.如权利要求1所述的方法,其特征在于Ci,k是开发者devi,k在读了评论Ci,1,Ci,2,...,Ci,k-1后发表的评论。

7.如权利要求6所述的方法,其特征在于分别计算所述开发者社会网络的指标值来对开发者地位进行排序,选取前Q个开发者作为该未分配修复推荐人缺陷报告的修复人;其中所述指标包括:入度、出度、度、PageRank、中间中心度以及接近中心度。

8.如权利要求1所述的方法,其特征在于所述步骤3)中,将标引词的权值小于设定阈值的标引词丢弃。

说明书 :

一种软件缺陷报告修复方法

技术领域

[0001] 本发明涉及一种软件缺陷报告修复方法,属于计算机软件开发技术领域。

背景技术

[0002] 软件缺陷作为衡量软件质量的重要指标,一直受到学术界和工业界的关注。软件缺陷管理是软件开发过程中较为重要的环节之一,软件缺陷的数量及分布直接关系到软件项目的时间成本和金钱开销。在软件开发过程中,及时发现并修复软件产品中的缺陷可有效地提高软件产品质量。软件缺陷的存在会导致软件产品在一定程度上无法满足用户的需求。
[0003] 为了有效管理缺陷,软件开发组织在开发和维护大型软件系统时,通常使用Bugzilla等缺陷跟踪系统管理软件的缺陷及需求。通过缺陷跟踪系统,软件使用者及开发者可以方便地向系统提交及时发现的软件缺陷。缺陷跟踪系统记录、跟踪每个缺陷报告的状况,有效地展示软件产品的整体质量现状,同时还提供搜索缺陷、分配缺陷等功能。在缺陷跟踪系统中,开发者讨论缺陷的修复,QA分发缺陷报告、测试缺陷报告,项目管理者跟踪软件质量现状。缺陷跟踪系统是软件开发过程中开发者、QA及项目管理者等角色的重要交流枢纽。
[0004] 当前,在大型软件开发组织中,每天会有大量的新增软件缺陷被提交到缺陷跟踪系统,这些缺陷报告主要通过人工进行分发给修复者,给软件组织成员,包括软件开发者、软件项目管理人员,带来沉重的负担。面对大量新增缺陷报告,将缺陷报告个性化地推荐给相关修复者,减少人工参与分发缺陷报告所花费的时间。

发明内容

[0005] 鉴于软件缺陷修复人推荐的重要性以及现有人工方法的局限性,本发明提供了一种软件缺陷报告修复方法。本发明的目的是将新增的软件缺陷报告推荐给相关的修复者进行修复。
[0006] 本发明的技术内容为:
[0007] 一种软件缺陷报告修复方法,其步骤为:
[0008] 1)从软件缺陷报告数据库中提取已修复的历史缺陷报告,及所提取历史缺陷报告的主体描述部分、开发者对缺陷报告的评论、相关的开发者;
[0009] 2)对历史缺陷报告进行分词处理,得到每一历史缺陷报告的标引词集合;
[0010] 3)计算每一标引词的词频和逆文档频率,得到该标引词的权值,然后根据标引词的权值将每篇历史缺陷报告转变成向量空间模型中的特征向量;
[0011] 4)将一未分配修复推荐人的缺陷报告转变成向量空间模型中的特征向量,搜索与该未分配修复推荐人的缺陷报告的特征向量相似的历史缺陷报告集合;
[0012] 5)根据4)所得历史缺陷报告集合构造出开发者社会网络,然后采用社会网络分析方法对所构造开发者社会网络中的开发者节点进行排序,从前Q个开发者中确定该未分配修复推荐人缺陷报告的修复人对其进行修复。
[0013] 进一步的,所述相关的开发者包括:历史缺陷报告的开发者、对历史缺陷报告进行评论的开发者。
[0014] 进一步的,按照所述相关的开发者的评论时间顺序,对所述相关的开发者进行排序。
[0015] 进一步的,采用所述空间向量模型,利用K近邻搜索方法搜索与未分配修复推荐人的缺陷报告的特征向量相似的历史缺陷报告,得到所述历史缺陷报告集合。
[0016] 进一步的,首先对转换成向量空间模型中特征向量的所述历史缺陷报告建立倒排索引,然后利用所述K近邻搜索方法进行搜索。
[0017] 进一步的,构建所述开发者社会网络的方法为:首先将所述历史缺陷报告集合中每一历史缺陷报告的相关的开发者评论表示为一列表: 然后从节点devi,k分别生成指向节点devi,1,devi,2,...,devi,k-1的有向边,建立偏向序的关系,得到所述开发者社会网络;其中,节点为相关的开发者,Ci,k是开发者devi,k发表的评论。
[0018] 进一步的,Ci,k是开发者devi,k在读了评论Ci,1,Ci,2,...,Ci,k-1后发表的评论。
[0019] 进一步的,分别计算所述开发者社会网络的指标值来对开发者地位进行排序,选取前Q个开发者作为该未分配修复推荐人缺陷报告的修复人;其中所述指标包括:入度、出度、度、PageRank、中间中心度以及接近中心度。
[0020] 进一步的,所述步骤3)中,将标引词的权值小于设定阈值的标引词丢弃。
[0021] 下面说明本发明的核心内容。
[0022] 本发明方法的整体框架如附图所示,主要包括两大部分:构建相似缺陷报告集合;相关开发者地位排序。
[0023] 具体地,一种基于信息检索和社会网络分析的软件缺陷修复人推荐方法,其步骤为:
[0024] 1.构建相似缺陷报告集合
[0025] 此阶段目的是为新缺陷报告构建相似缺陷报告集合。首先需要对缺陷报告进行预处理,比如文本预处理,文本表示,以及建立倒排索引,最后采用K近邻搜索获得Top K相似缺陷报告集合。此阶段的输入是新缺陷报告brnew,输出是brnew的相似历史缺陷报告文档集合(Dsim1,Dsim2,...,DsimK)。具体包括以下步骤:
[0026] (1)文本预处理
[0027] 对于英文缺陷报告,分词较为简单,采用空格和标点符号对句子进行分割,如果是对于中文描述的缺陷报告,使用中文分词软件;随后采用停用词表去停用词;然后采用Porter算法取词干,获得能代表文档的标引词集合。
[0028] (2)tf*idf文本表示
[0029] 对于上一步骤处理获得每个文档的标引词集合,我们采用tf*idf方法计算每个标引词的权重。tf*idf是向量空间模型中最常用的权重计算方法,通常使用标引词的词频和逆文档频率的乘积作为相应标引词的权值:
[0030]
[0031] 其中n为文档的个数。每个文档由一系列标引词构成,那么每个文档被表示为标引词对应的tf*idf值构成向量空间模型中的特征向量。
[0032] 实现系统时,方法将丢弃tf*idf值小于一定阈值的标引词。
[0033] (3)K近邻搜索
[0034] 由于历史缺陷报告数量较大,为了加快K近邻搜索的速度,我们对历史缺陷报告建立倒排索引。具体过程:先对历史缺陷报告进行上述两个步骤:文本预处理及文本表示;然后建立倒排索引,索引的基本结构为(term,<bug_id1,bug_id2,...,bug_ids>),其中term为词,bug_idk为第k个缺陷报告的id。
[0035] K近 邻 搜 索 的 过 程 如 下( 参 考:Chung-Min Chen and Yibei Ling-A Sampling-Based Estimator for Top-k Query.ICDE 2002:617-627):对于已经过预处理的新缺陷报告,使用构成新缺陷报告的标引词查找倒排索引可以获得可能相似缺陷报告的bug_id,因为相似缺陷报告的个数远小于历史缺陷报告总数,加快了K近邻搜索的速度;然后在计算新缺陷报告与每个可能相似的缺陷报告之间的相似度,获得相似度最大K的历史缺陷报告,而每个历史缺陷报告会关联到一个缺陷修复相关的开发者有序集合。缺陷修复相关的开发者有序集合是指,对于每个历史缺陷报告brhis ,它的缺陷修复相关的开发者有序集合为 中所有的开发者都针对该缺陷报告发表了至少一次评论,devi,1为第一个发表评论的开发者, 为最后一个发表评论者。此外,同一个开发devi,k可能因为多次发表评论而在 集合中而出现多次。
[0036] 2.相关开发者地位排序
[0037] 在构建了新缺陷报告的相似缺陷报告集合后,由于每个历史缺陷报告都关联到一个缺陷修复相关的开发者有序集合。在这一步骤,我们首先构建开发者社会网络,然后通过社会网络分析技术对开发者地位进行排序。
[0038] (1)构建开发者社会网络
[0039] 在此本发明所构建的社会网络反映开发者在讨论缺陷修复过程中的讨论交流行为,从图论角度讲,开发者社会网络是一个带权重有向图(Weighted and Directed Graph),节点为相关的开发者,带权重有向边代表开发者之间交流情况。
[0040] 本发明采用如下办法构建开发者社会网络(Developer network),对于一个缺陷报告的评论列表,可以表示为 认为后面的评论者都是在阅读了之前的缺陷描述和评论后才发表评论的,即Ci,k是开发者devi,k在读了评论Ci,1,Ci,2,...,Ci,k-1后发表的评论,由此建立偏向序的关系,即从节点devi,k分别生成指向(devi,1,devi,
2,...,devi,k-1)等节点的有向边。
[0041] (2)开发者地位排序
[0042] 对开发者地位进行排序,决定最后Top Q个开发者为新缺陷报告的相关人员。在我们的方法中,分别计算社会网络指标:入度(Indegree),出度(Outdegree),度(Degree),PageRank,中间中心度(Betweeneness)以及接近中心度(Closeness)等值来对开发者地位进行排序,具体计算每种指标的算法是经典算法,不属于本发明范围。
[0043] 与现有技术相比,本发明的积极效果为:
[0044] 本发明指出缺陷报告修复是一种开发者协作任务,是一种社会交流活动,将缺陷报告修复人推荐定义为多标签的分类问题,最后通过引入社会网络分析方法,挖掘开发者社会网络对开发者进行地位排序,从而确定推荐的缺陷修复者对新缺陷报告进行修复。本发明充分利用了软件缺陷历史数据,首次提出利用社会网络分析方法来改进缺陷报告修复人推荐的效果。对于信息检索及社会网络分析等技术采用的是相关领域的研究成果,不属于本发明对现有技术改进的内容,因此本说明书不再对其进行详细描述。

附图说明

[0045] 本发明一种软件缺陷报告修复方法框架图。

具体实施方式

[0046] 下面通过具体实施方式对本方法作进一步说明
[0047] 1.选取历史缺陷报告数据
[0048] 连接软件项目的缺陷数据库,从中获取历史缺陷报告数据。一般地,每个缺陷报告的描述信息会包括缺陷主体描述部分、缺陷报告的预定义字段(如:提交人、时间、状态、所属模块等)、开发者对缺陷报告的评论。
[0049] 本方法从历史缺陷报告库中选择已经被修复的历史缺陷报告,以Bugzilla缺陷管理工具中的数据库字段为例,选择字段bug_resolution=“FIXED”并且字段bug_status=“VERIFIED”or“CLOSED”or“RESOLVED”;然后从缺陷报告库中为每个缺陷报告提取主体描述部分和开发者对缺陷报告的评论,并将它们合并成为一体;此外,还需要为每个缺陷报告关联相关的开发者,这里相关联的开发者包括缺陷报告的提交者和对缺陷报告进行评论的开发者,由于这些开发者的评论是有时间先后顺序的,需要保存评论者的时序关系;即按照评论的时间顺序对相关的开发者进行排序。
[0050] 2.预处理缺陷数据
[0051] 步骤一提取了缺陷报告的主体描述部分、开发者对缺陷报告的评论、以及相关的开发者ID。为了将缺陷报告用于模型计算,需要将它们转变成特征向量表示形式。本方法对缺陷文档进行自然语言处理,包括分词、去停用词、词干还原等步骤转换成离散的标引词集合。本文处理的是英文缺陷报告,分词较为简单,采用空格和标点符号对句子进行分割;随后采用停用词表去停用词;然后采用Porter算法取词干,获得能代表文档的标引词集合。计算文档集中文档词的tf-idf权重,将每篇缺陷文档表示成向量空间模型中的特征向量。
[0052] 3.训练模型并为新缺陷报告推荐相关修复人对其进行修复
[0053] 具体地,分为以下三个小步骤:
[0054] (1).对于新缺陷报告,采用类似步骤2的方法,使用自然语言处理技术,包括分词、去停用词、词干还原、tfidf等,将新缺陷报告转变成向量空间模型中的特征向量。
[0055] (2).为新缺陷报告构建相似的历史缺陷报告集合。采用向量空间模型(参考:S.K.M.Wong et al.Generalized Vector Space Model In Information Retrieval.International ACM SIGIR conference on Research and Development in Information Retrieval,1985:18-25.),使用K近邻搜索办法(参考:Chung-Min Chen and Yibei Ling-A Sampling-Based Estimator for Top-k Query.ICDE 2002:617-627),计算新缺陷报告和历史报告相似度,获得由K个历史报告组成的相似集合。在此,K是参数,需要进行参数调试,具体的办法是:在一定的历史数据集上,K遍历某个取值区间,如[10,30],选取预测效果最好的K。与K临近搜索方法相似的其他搜索方法很多,如词频、卡方值、互信息等等
[0056] (3).利用步骤(2)获得的相似的历史缺陷报告集合。由于每个缺陷报告都会有开发者参与其中、并讨论缺陷的修复,那么通过整合相似报告集合中所有开发者的交流情况,我们就可以构造出开发者社会网络。然后采用社会网络分析技术,对网络中的开发者节点进行排序,选取Top Q个(Q一般小于或等于3个)开发者作为新缺陷的修复人,可以按照现有的成熟方法对新的软件缺陷进行修复。
[0057] 以上内容对本发明所述基于信息检索技术和社会网络分析技术的软件缺陷修复方法进行了详细的说明,但显然本发明的具体实现形式并不局限于此。对于本技术领域的一般技术人员来说,在不背离本发明的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。