一种融合缺陷历史抛掷关系的缺陷自动分派方法与系统
文献发布时间:2023-06-19 11:57:35
技术领域
本发明涉及缺陷报告自动分派技术领域,尤其涉及一种融合缺陷历史抛掷关系的缺陷自动分派方法与系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
在软件开发和维护的整个生命周期中,缺陷(Bug)的出现是不可避免的。如果缺陷没有被及时修复,就会影响软件系统的正常使用,导致系统升级更新延迟、用户体验度降低,甚至带来严重的后果。修复这些缺陷是一项耗时并且成本高昂的任务,一般软件维护成本至少占与软件产品相关总成本的50%,有时会超过90%,一些估计则认为维护成本是初始软件版本成本的几倍。提高缺陷修复的效率会缩短项目周期、减少修复的工作量并降低软件生产的成本。
为了正确的跟踪每个缺陷报告(Bug Report)的处理过程,通常将软件测试时发现或用户使用过程中遇到的缺陷作为一条条的记录输入到缺陷跟踪管理系统中,记录的缺陷信息一般包含发现的软件错误类型,错误出现的产品、组件、硬件信息,错误的严重等级,错误的标题和具体的描述信息,必要的附图,测试注释等,处理信息包括处理者姓名,处理时间,处理步骤,错误记录的当前状态,通过这些信息就能回溯任一时间的缺陷记录和相应的修改信息.
这种缺陷跟踪系统的一个普遍例子就是Bugzilla,它是Mozilla公司提供的一款开源免费的缺陷跟踪系统,最初在Mozilla Web浏览器的开发中引入,现在被普遍应用于许多其他项目中。缺陷跟踪管理系统在开源软件开发中尤其重要,因为在开源软件开发中,团队成员可能分散在世界各地,开发人员和其他项目贡献者很少见面,这就为修复工作增加了难度。而缺陷跟踪管理系统正好解决了这一问题,Bugzilla不仅可以跟踪问题报告和特性请求,而且可以协调开发人员之间的工作,当提交新的缺陷报告时,高级开发人员或项目负责人将选择具有修复缺陷报告技能的开发人员去负责修复,在缺陷修复过程中,开发人员和缺陷报告者将通过评论进行交流,他们可以上传额外的资源(如截图),用来支持缺陷报告的修复,这种把缺陷报告分配给适当的开发人员的过程叫做缺陷分派(Bug Triage)。
但事实上,首次分派的开发人员可能会由于没有解决特定类型缺陷报告的专业知识或者缺陷报告太过复杂,很难由一个开发者完成修复任务,所以必须进行重新分派,直至修复工作完成,这个缺陷报告重新分派的过程称为Bug Tossing。缺陷报告的重新分派是一个冗长而昂贵的过程,一些实证研究表明,平均来说,将一个缺陷报告分配给Eclipse项目中的第一个开发人员大约需要40天,然后将缺陷报告重新分配给第二个开发人员需要额外的100天或更长的时间。同样,在Mozilla项目中,第一次分配需要180天,如果第一次分配的开发人员无法修复,则需要额外的250天进行再次分配。而在Eclipse和Mozilla网站中,37%和44%的缺陷报告至少往外抛出了一次(抛掷路径≥1),10%的缺陷报告甚至会被重新分配五次或更多次。在缺陷测试过程中,不正确的分配和抛掷会增大缺陷的修复时间,这也会严重推迟软件的交付周期。
为了更好的将出现的缺陷报告分派给能够解决该缺陷的开发者,研究人员们提出了各种缺陷分派的方法,现有的缺陷分派通常有以下几类:
第一类采用信息检索技术,使用缺陷报告的文本信息,通过构造缺陷报告和开发者之间的表示,然后将缺陷报告与最相关的开发者匹配;第二类采用机器学习技术,通过提取缺陷报告的特征或学习表示,并将开发者视为标签,缺陷报告的属性信息视为特征,以分类的方式训练和推荐合适的开发者;
此外,研究人员们还提出了几种结合机器学习和Tossing图的方法来减少抛掷路径的长度,提高预测的精度。但是,上述的缺陷分派算法仍然存在以下问题:
1)二次分派过程当中,只考虑了自身无法修复缺陷,二次分派给其它修复者的概率,并没有综合考虑自身修改该缺陷的概率。
2)二次分派过程当中,仅用可枚举的特征(例如:产品类型、组件等)作为分配依据,而没有综合考虑缺陷报告的信息(例如缺陷报告的描述信息),缺少了抛掷的可解释性。
3)二次分派过程当中,没有考虑到首次分配的概率密度信息。
发明内容
为了解决上述问题,本发明提出了一种融合缺陷历史抛掷关系的缺陷自动分派方法与系统,能够在进行缺陷分派时同时考虑缺陷报告的特征和开发者之间的Tossing关系,实现自动的将缺陷报告分派给开发者。
在一些实施方式中,采用如下技术方案:
一种融合缺陷历史抛掷关系的缺陷自动分派方法,包括:
获取缺陷报告的元数据信息和文本特征信息,基于所述缺陷报告的历史修复信息提取开发者们之间对缺陷报告的Tossing关系;
将获取的数据进行处理后输入到训练好的缺陷分派模型中,所述缺陷分派模型获取由半途开发者转移到最终修复者的概率,生成转移概率矩阵;
基于首次分派的概率与所述转移概率矩阵,得到与缺陷报告最匹配的开发者排序,根据所述排序将缺陷报告推荐给相应的开发者。
在另一些实施方式中,采用如下技术方案:
一种融合缺陷历史抛掷关系的缺陷自动分派系统,包括:
数据获取模块,用于获取缺陷报告的元数据信息和文本特征信息,基于所述缺陷报告的历史修复信息提取开发者们之间对缺陷报告的Tossing关系;
缺陷报告分派模块,用于将获取的数据进行处理后输入到训练好的缺陷分派模型中,所述缺陷分派模型获取由半途开发者转移到最终修复者的概率,生成转移概率矩阵;基于首次分派的概率与所述转移概率矩阵,得到与缺陷报告最匹配的开发者排序,根据所述排序将缺陷报告推荐给相应的开发者。
在另一些实施方式中,采用如下技术方案:
一种终端设备,其包括处理器和存储器,处理器用于实现各指令;存储器用于存储多条指令,所述指令适于由处理器加载并执行上述的融合缺陷历史抛掷关系的缺陷自动分派方法。
在另一些实施方式中,采用如下技术方案:
一种计算机可读存储介质,其中存储有多条指令,所述指令适于由终端设备的处理器加载并执行上述的融合缺陷历史抛掷关系的缺陷自动分派方法。
与现有技术相比,本发明的有益效果是:
本发明方法可通过基于缺陷报告本身的特征在进行二次分派时考虑开发者自身修复该缺陷报告的可能性;
本发明方法有助于增强缺陷报告特征的表示学习能力以及对同时考虑开发者之间Tossing关系的建模潜力;
本发明方法提供了一个矩阵相乘的方案,针对特定报告信息,综合考虑首次分配的概率密度与修复者的转移概率的二次分配排序;
本发明的其他特征和附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本方面的实践了解到。
附图说明
图1是缺陷报告处理流程示意图;
图2是缺陷报告抛掷图示意图;
图3是本发明实施例的融合缺陷报告特征与历史缺陷关系的模型;
图4是本发明实施例的根据历史抛掷关系生成的转移矩阵模型。
具体实施方式
应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本发明使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
实施例一
大多数缺陷报告通用的处理流程如图1所示,包括:用户或开发人员发现问题,然后使用错误跟踪系统提交问题。然后,相应项目的经理或开发人员将阅读缺陷报告,判断属于哪个模块的问题,并将错误指派给适当的开发人员,当被指派的开发人员无法完全胜任修复任务时,就会发生缺陷抛掷,直到该缺陷被修复,并由其他开发人员或经理进行验证。最后,如果验证没有通过,则重新进行处理,验证通过后,关闭缺陷报告。
Tossing Path:当缺陷报告分派给的第一位开发人员d1无法完成修复工作时,他就会把缺陷报告抛掷给另一位开发人员d2,直到缺陷报告抛给第n个能够胜任修复工作的开发者时结束,T=d1—>d2—>d3....—>dn被称作抛掷路径,d1是第一个分派的修复者,dn是最终的修复者,n-1被称作抛掷路径的长度。
Tossing Graph:假设有这么几条抛掷路径,A—>B—>C—>D,A—>D—>E,B—>C—>E,C—>D—>E—>F,A—>C—>E—>F,对于这四条抛掷路径,考虑抛掷的每一个步骤,以当前节点到下一个节点为边构建抛掷图,生成的抛掷图如图2所示:节点表示开发人员,边上的数字表示由当前开发人员向下一个开发人员抛掷的次数。
缺陷报告本身有其自己的特征,同时不同的缺陷报告之间存在一定的相似性,具有特定专业知识的开发者可能只擅长解决一种或几种类型的缺陷报告,所以,在进行二次分派时,本实施例增加了缺陷报告之间的相似性与开发者们之间Tossing联系。
根据本发明的实施例,公开了一种融合缺陷历史抛掷关系的缺陷自动分派方法,包括以下步骤:
(1)获取缺陷报告的元数据信息(产品、组件和硬件)和文本特征信息(标题和描述),基于所述缺陷报告的历史修复信息提取开发者们之间对缺陷报告的Tossing关系;
Tossing关系指的是:对于一份缺陷报告,首先分派给开发人员d1,若d1因为各种原因不能解决该缺陷报告,那么该缺陷报告抛掷给第二个开发人员d2,以此类推,直到最终的修复者dn,这一过程就叫做Tossing,T=di—>d2……dn称之为抛掷路径。对于开发人员来说,他们可能只擅长于解决特定类型的缺陷报告,所以在进行抛掷时,特定类型的缺陷报告最终会被抛掷给有特定专业的开发人员,这就是Tossing关系。
在我们收集的数据集中,有每一个缺陷报告的历史修复信息,其中包括缺陷报告的抛掷路径信息,根据数据集里每个缺陷报告的抛掷路径可以提取抛掷关系。
根据开发者们对缺陷报告的抛掷关系,可以在抛掷时将缺陷报告省去一些不必要的抛掷,缩短抛掷路径,降低维护成本。
(2)将获取的数据进行处理后输入到训练好的缺陷分派模型中,所述缺陷分派模型获取由半途开发者转移到最终修复者的概率,生成转移概率矩阵;
基于首次分派的概率与所述转移概率矩阵,得到与缺陷报告最匹配的开发者排序,根据所述排序将缺陷报告推荐给相应的开发者。
首次分派是用机器学习算法(例如SVM,朴素贝叶斯,贝叶斯网络等)进行推荐开发者,首次分派的概率是通过将缺陷报告的特征和修复者输入到机器学习算法中进行训练,然后进行预测,输出前K个开发者,得到推荐出的前K个开发者解决该缺陷报告的概率即为首次分派的概率。
具体地,在数据处理阶段,首先对元数据进行Embedding,对缺陷报告的标题和描述信息通过Bert转成向量,将所有特征数据的向量进行拼接,生成模型的输入数据。根据历史已经解决过的缺陷报告记录,获得开发人员对缺陷报告的抛掷信息,得到开发者已经解决的缺陷报告和未解决往外抛出的缺陷报告。
根据采集的数据集通过提取历史抛掷记录得到开发者们对缺陷报告的抛掷关系,这个关系就是Tossing关系。
对处理好的数据通过Attention机制计算特定的缺陷报告与它的开发者历史修复记录的相似度,经由全连接神经网络、sigmoid函数获得特定的缺陷报告,经由半途开发者转移到最终修复者的概率,生成转移概率矩阵。最后,将首次分派的推荐的概率分布同转移概率矩阵相乘,得到推荐的最终结果。
需要说明的是,需要对缺陷分派模型进行训练;将特定的缺陷报告和其半途开发者没有与最终修复者相关的缺陷报告输入到模型中,经过反向传播,调整模型内部的参数,通过loss的不断下降找到一个最理想的参数模型保存下来。
本实施例中,对缺陷报告的元数据进行Onehot编码,作为输入数据,进入分类算法,得到首次分派的开发者,以及首次分派的概率密度:
其中
在进行二次分派时,将元数据信息转为枚举类型,直接通过Embedding方法,将枚举序号分别映射成一个10维的向量表示。将文本信息标题和描述信息分别通过Bert转为200维的向量。特别地,我们对Bert在encoder层中的注意头个数设置为10,编码层和池化层的维度为200来提取缺陷报告的有效特征。
将每一个缺陷报告转为向量的数据进行拼接,作为模型的输入数据,设S
定义分派关系Α,其中A
对半途开发者进行向量化表示如下:通过Attention机制计算缺陷报告R
设查询向量Q
设
其中,dk为向量的维度。
对最终开发者进行向量化表示,通过Attention机制计算缺陷报告R
设查询向量Q
设
接下来计算转移概率。
拼接第K个缺陷报告的向量化表示S
然后将拼接好的向量S经由全连接神经网络,sigmoid函数。获得特定的缺陷报告R
其中,sigmoid为逻辑回归函数,Linear为全连接层,Relu为激活函数,Contact为向量拼接运算。
然后,我们就可以构造Tossing Assign指派矩阵:
S
每个缺陷报告生成一个转移概率矩阵,矩阵中的每一个值都是这样得到的:针对一个特定的缺陷报告,在用机器学习算法(例如SVM,朴素贝叶斯,贝叶斯网络等)进行推荐开发者时,推荐出Top10的开发者[d1,d2,d3……d10],对于Top10中的每一个开发者di,i∈(1,10),根据在数据集中的提取的历史修改记录,找到开发者di,i∈(1,10)未解决抛出的缺陷报告和dj,j∈(1,10)解决的缺陷报告,通过我们提出的模型,得到开发者di未解决,开发者dj解决的概率值。
对于一个新的待修复报告n,通过首次分派后,我们能够得到初始推荐概率分布
记初始推荐概率分布向量P
p
其中,I为对角矩阵,α、β为非负的超参数,用来控制模型不同部分的重要性。
通过矩阵相乘,我们得到最终修复者的推荐分布为p
然后根据结果将缺陷报告推荐给匹配度最高的开发者。
实施例二
根据本发明的实施例,公开了一种融合缺陷历史抛掷关系的缺陷自动分派系统,包括:
数据获取模块,用于获取缺陷报告的元数据信息和文本特征信息,基于所述缺陷报告的历史修复信息提取开发者们之间对缺陷报告的Tossing关系;
缺陷报告分派模块,用于将获取的数据进行处理后输入到训练好的缺陷分派模型中,所述缺陷分派模型获取由半途开发者转移到最终修复者的概率,生成转移概率矩阵;基于首次分派的概率与所述转移概率矩阵,得到与缺陷报告最匹配的开发者排序,根据所述排序将缺陷报告推荐给相应的开发者。
需要说明的是,上述各模块的具体实现方式已经在实施例一中进行了详细的说明,不再赘述。
实施例三
根据本发明的实施例,公开了一种终端设备的实施例,其包括处理器和存储器,处理器用于实现各指令;存储器用于存储多条指令,所述指令适于由处理器加载并执行实施例一中所述的融合缺陷历史抛掷关系的缺陷自动分派方法。
在另一些实施方式中,公开了一种计算机可读存储介质,其中存储有多条指令,所述指令适于由终端设备的处理器加载并执行实施例一中所述的融合缺陷历史抛掷关系的缺陷自动分派方法。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
- 一种融合缺陷历史抛掷关系的缺陷自动分派方法与系统
- 一种基于缺陷管理平台的缺陷分派方法及系统