专利名称::基于需求变更的缺陷预测方法和系统的制作方法
技术领域:
:本发明属于计算机安全领域,具体涉及需求发生变更时,基于软件项目历史经验数据,对由于这些变更产生新的项目缺陷的预测方法和系统。
背景技术:
:缺陷对软件质量甚至对软件经济有重要影响,同时缺陷分布问题的复杂性和差异性,以及现有的缺陷预测技术在解决实际问题上的不足等。软件缺陷预测技术从20世纪70年代发展至今,一直是软件工程领域最活跃的内容之一,在分析软件质量、平衡软件成本方面起着重要的作用。软件缺陷预测技术大体上分为静态和动态两种缺陷预测技术。静态预测技术,主要是指基于缺陷相关的度量数据,对缺陷的数量或者分布进行预测的技术;而动态技术则是基于缺陷或者失效产生的时间,对系统缺陷随时间的分布进行预测的技术。静态缺陷预测技术集中在基于软件规模等度量元的缺陷预测方面,亦即研究缺陷和软件规模、复杂度等基本属性之间的关系,以此预测软件可能存在的缺陷数量。后来出现了针对缺陷分布的预测技术。此外,缺陷在软件生命周期不同阶段的引入和移除对遗留缺陷也有严重的影响,一些相应的软件缺陷预测模型也取得了非常好的成果和应用。静态缺陷预测技术主要包括基于度量元的缺陷预测技术、缺陷分布预测技术以及缺陷预测模型技术。另外一类重要的缺陷预测技术是基于时间关系的动态预测技术。很多动态的可靠性模型都是基于这类缺陷预测技术。这类方法主要是基于经验研究和统计技术发现软件缺陷随其生命周期或其中某些阶段的时间关系的分布规律,最著名的有Rayleigh分布模型、指数分布模型和S曲线分布模型。但是,现有缺陷预测技术大都需要对软件的设计、代码进行分析,无法在软件生命周期的早期活动,例如需求活动,通过预测这些活动引起的潜在的缺陷的分布、类型和规模,从而为软件过程的后续活动提供有意义的依据和参考。
发明内容鉴于现有技术中的缺陷,本发明提供了一种在需求阶段预测由需求变更引起缺陷的方法,可以预测出的缺陷属性包括缺陷的数量、工作量、类型、优先级等。其中属性的数量和类别取决于用户输入历史缺陷数据,用户决定预测的具体缺陷属性。根据发明目的,本发明主要基于以下构思利用软件项目历史缺陷数据和需求文档构建需求与缺陷的关联集,将历史需求按其所关联的历史缺陷属性分类,并计算需求项中的需求特征值,建立SVM分类器(SupportVectorMachines,支持向量机);当新的需求变更发生时,提取该需求的需求特征,并根据需求特征的信息在SVM分类器中找到它所属的需求分类,得到该分类相关的缺陷属性,完成缺陷预测。为实现上述目的,基于需求变更的软件缺陷预测方法包括步骤1)通过信息检索方法计算项目历史的每条缺陷与每条需求的相关性值,得到需求与缺陷的关联集;2)在需求与缺陷的关联集中,根据每条需求项对应历史缺陷的统计属性,将需求项按不同的统计属性进行分类,每一种缺陷的统计属性对应一种需求项的分类标准;计算需求项特征值,得到由需求项所属分类、需求项特征及特征值组成的数据组;3)以上述数据组的需求项特征为超空间中各维度,需求项对应超空间中的点,找出分割这些需求项的最大间隔超平面,建立SVM分类器;4)发生需求变更时,提取需求变更的需求项特征,将需求项特征和特征值输入建立的SVM分类器中,用SVM工具找到变更需求对应的分类,由分类对应的统计属性预测出产生缺陷的属性。本发明的另一个目的在于提供一种实现上述方法的基于需求变更的软件缺陷预测系统,包括需求与缺陷关联器、需求类别器、需求特征提取器、SVM分类器和缺陷属性预测器,其中,每个模块所包含的具体功能如下-需求与缺陷关联器用于将需求与缺陷关联,并输出需求与缺陷的关联集,作为需求类别器的输入。需求类别器根据每条需求相关联的缺陷属性,将需求分类并输出分类集,同时需求被输入到需求项特征提取器中,按预先设定的特征提取规则提取特征。需求特征提取器输出的需求项特征连同需求类别器输出的分类集一同格式化为SVM的数据组输入到SVM分类模型中,SVM分类器自迭代选取SVM分类模型最优参数,适应不同的输入数据组。缺陷属性预测器将发送需求变更的需求特征信息输入SVM分类器中,得出相应的分类,并自动根据历史缺陷的分布情况,将分类数据转为量化的预测结果。此外,本系统还提供一用户交互接口,由用户输入各种参数并提供反馈。用户在预测过程开始之前设置这些参数后,该软件缺陷预测系统可自动地根据连接的历史数据库对变更的需求进行缺陷预测。由于每个模块的输出都为下一个模块提供输入,且中间过程的输出都为稳定格式,如果需要,用户可以中断自动过程,使用交互接口介入某些中间过程,为系统提供反馈以提高预测精度。本发明优点和技术效果如下1.本发明通过在软件生命周期早期的需求阶段预测可能产生的缺陷的各种详细属性,辅助需求分析人员对这些变更的需求进行评价,为软件开发管理人员的早期决策提供依据,以此控制软件开发的风险和成本,为软件产品的质量提供保证。2.本发明基于软件项目的历史需求和缺陷数据建立知识库,应用范围广且高度可定制。历史缺陷数据的属性决定了可预测的缺陷属性,因此可以得到较为详细的预测结果;用户可自行设置(添加或删除)所提取的需求特征的类别,并修改这些特征在分类模型中所占的权重,以使得到的预测模型符合项目特征,提高预测精度。此外,本发明中的SVM分类器会根据不同的训练数据集,使用自迭代的方式调整SVM分类模型的参数以提高预测精度。3.本发明预测过程高度自动化,预测结果直观。用户设置好一些初始参数,并将系统与历史需求和缺陷数据库相连接后,整个预测过程都可以自动地完成。因此系统可以通过缺陷预测,对多变的需求进行持续和快速的评估和监控,方便需求和开发人员做出决策。图1为基于需求变更的软件缺陷预测方法基本原理;图2为基于需求变更的软件缺陷预测方法流程示意图3为基于需求变更的软件缺陷预测系统各模块关系示意图4为预测结果和实际结果的对比图。具体实施例方式下面结合附图,具体说明本发明基于需求变更的软件缺陷预测方法和系统。图2所示为本发明软件缺陷预测方法的流程示意图,本方法大致可分为四个步骤关联历史缺陷数据与需求、需求项特征提取与分类、建立SVM分类器及利用SVM分类器预测软件缺陷。1.关联历史缺陷数据与需求本发明项目历史的缺陷记录在数据库中,而需求为文档格式,每个需求文档中有若干需求项,通过信息检索中的文本相关性匹配方法建立需求与缺陷之间的关联关系。一般来说,缺陷的描述比较简短,例如^"击"^^"资叙^A^"^^湊。而需求项的描述一般比较完整,一个标准的需求项应当包含以下内容蕭名嚴.'簽效多緣微碧跑经鄉離多^縱微嚴斜姿#:迕多^iy^A教薪,,#_#示在迕务賴0。#准魔,,遂乂工伊,脱/7^垒多^^#,.£賓写在多(^^吝艰J.〃連n叙。在本方法中,将每个缺陷描述作为查询,而每条需求项作为检索的文档,采用下面的公式(参见文献Gospodnetic0,HatcherE.:LuceneinAction,ManingPublication,2006)计算查询(缺陷)与每个文档(需求)的文本相关性2/w。*/DFO)*丑ooW(f。*ie"gf/2Wo7K(f.yeW/"r)(公式1),上面公式中,r是需求,d是缺陷,t指的是需求文本中的词;TF(tinr)为词t在r中出现的频率,(计算方法为词t在r中出现的次数除以r中词的总数);IDF(t)是指词t在整个文本集中的逆文档频率,Boost(t.fieldinr)为词t在目标需求项集合中的权重,LengthNorm(t.fieldinr)是词t的长度在目标需求域中归一化值(即除以需求项总数后的值)。使用公式计算后就可以得到每条缺陷描述与每条需求的相关性值,并根据用户预先设定的相关性阈值进行筛选,所有相关性大于此阈值的缺陷-需求对被认为是相关的,得到一个需求与缺陷的匹配集。如果需要,还可以根据用户的反馈,使用与上述公式相匹配的反馈算法调整结果,此处反馈算法原理如下计算文本相关性并返回所有大于相关性阈值的缺陷-需求对,由用户在这些匹配对中选取认为相关性阈值比较大的缺陷-需求对,系统根据新的缺陷-需求对,得到更精确和符合实际的需求与缺陷相关联的集合。实现本发明的文本相关性匹配方法有很多,本实施例给出的文本相关性匹配公式只是作为一个具体的实施例来说明。相关性阈值的范围在o-i之间,用户一般设定的相关性阈值为0.4或0.6。2.需求项特征提取与分类在得到历史需求与缺陷的关联集后,对于每条需求项,査看它对应的历史缺陷的数据记录获得统计属性,比如每条缺陷的数量、修正这些缺陷的平均工作量以及它们的优先级和类型的统计特征等等(这些由数据库中原有的历史缺陷数据获得)。对某一缺陷属性的需求项,按照统计属性的不同的分类标准进行分类,如分为C1,C2,C3……Ci。若用户要预测的缺陷属性类别不止一种,则首先将需求项按照不同的缺陷属性分为不同类别,如用户要预测的缺陷属性有需求相关的缺陷数量,需求相关的平均工作量两种。则此处要将需求项分别按照需求相关的缺陷数量中的统计属性进行分类,按照需求相关的缺陷数量的统计属性进行分类,两种分类互不影响,可以同时实现。每条需求项都有不同的需求特征,本方法分为一般文本特征和特殊特征进行详细说明。一般文本特征指的是基于词的权重特征。对于需求中所有需求项中的词组成的集合,称为词的域。先将域中所有词按拼音的字母顺序排列成一个表,表中每行记录这个词出现的相关需求项的id,这个表称为词的倒排表。一个倒排表的例子如下^/游,号际7游力吝,求观7霧求艰2憲求艰4……^i"游,专^i"游/t棼,求观2,求观J……z^3游,号好J游片棼霱求观2,求观5,求艰6……下面考察需求项中的词t对统计属性的分类Cl的影响大小情况,对于步骤l)得到的需求与缺陷的关联集,将需求项分为含有词t并属于类Cl的需求项的数目记为A,含有词t并不属于Cl的需求项数目记为B,不含词t并属于类Cl的需求项的数目记为C,不含词t并不属于类Cl的需求项数目记为D。令N=A+B+C+D,贝ij:CHI(t,C1)=N(AD-CB)2/(A+C)(B+D)(A+B)(C+D)对每个分类Ci,分别计算CHI(t,Ci),取词t对于不同分类的CHI(t,Ci)最大值作为词t的CHI值。计算完所有词的CHI值之后,将它们按从大到小排序,返回前k个CHI值最大的词的词频TF(TF的计算方法为词t在某个需求项中出现的次数除以该需求项中词的总数)为需求项的需求项特征值,作为SVM分类的前k维特征值,k由用户设置,本实例中取k4000。特殊特征是指可量化的需求特征,如需求项文本的长度、需求项所属软件产品的模块、需求变更次数、需求项事件流描述的条数、需求项前置条件的繁琐程度等等。如对于一具体的需求项,那么需求项文本的长度可以获得,即为此处所指的可以量化。这些特殊特征在SVM分类结果中不起决定性作用,但是可以由用户根据要预测的缺陷属性合理地选择这些特殊特征并设置它们所占的SVM分类模型维度,可以提高预测精度。用户可以设置特殊特征所占的维度参数,然后需求项特征提取的过程就以自动化的方式进行了。本实例中特殊特征维度总数为500。本步骤结束后,对每个需求项和每个分类标准将格式化为如下的数据组,作为SVM分类模型的输入数据组<label><indexl>:<valuel〉〈index2>:〈value2>......Lable是指该需求项所属的分类,每组〈indexl〉〈valuel〉表示一个特征值,index是该特征的序列号,value是它的数值。对于一般特征来说,index就是在该需求项中出现的某词在倒排表中的序号,该词是CHI值前k位的词;而value就是该词在该需求项中的词频。对于特殊特征来说,index值是从n+1到n+500递增标记的(n为倒排表中词的总数);而value是该特殊特征量化后的值。这样,所有需求项对于某个分类标准就可以形成一个SVM分类模型的输入数据组,该数据组的每一行都是这样一行数据,代表一个需求项的分类和它的特征。3.建立SVM分类器SVM是一种高维分类算法,它通过将数据(可看作多维向量)映射到一个高维空间中(也称超空间),在这个空间里建立一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面,最大间隔超平面使两个平行超平面的距离最大化。寻找并计算这个最大间隔超平面的过程称为建立SVM分类模型。本发明在超空间中建立SVM分类器的具体方式如下需求项的各项特征是超空间中各维度,每个需求项对应于超空间中的一个点,应用已有的SVM工具包(本实例中使用的SVM工具包为libSVM),根据步骤2中得到的输入数据组中的需求分类和特征值建立k+m维的超空间(k为一般特征维度总数,本实例中为1000,m为特殊特征维度,本实例中为500),并寻找最大间隔超平面,建立带有需求与缺陷特征的SVM分类器。SVM分类器自动选择不同的SVM分类模型参数,并使用交叉验证法(随机地将输入数据组的90%作为训练集,10%作为测试,测试的结果对比实际结果得出分类模型精度)测试分类模型的精度,将分类精度最高的一组对应参数保留,这种以自动循环递变的方式选取模型参数并根据结果选择最优参数的方式称为自迭代。4.利用SVM分类器预测软件缺陷当有需求变更发生时,采用步骤2中的特征提取方法提取变更需求的需求特征,将需求特征和需求特征值输入已建立的SVM分类模型,得到该需求项对应的需求分类,并根据需求分类信息找到此条变更需求所对应的缺陷属性,预测出产生的缺陷属性。本发明的基于需求变更的软件缺陷预测系统实现原理基于上面所述的方法原理,分为需求与缺陷关联器、需求类别器、需求特征提取器、SVM分类器、缺陷属性预测器几个模块,此外,用户交互部分提供对用户接口以输入各种参数并提供反馈,见附图3。在用户完成参数设置之后,系统可自动根据连接的历史数据库对变更的需求进行缺陷预测。系统与历史数据库连接之后,将需求与缺陷关联,并输出需求与缺陷的关联集,作为下一模块需求类别器的输入。SVM分类器根据每条需求相关联的缺陷属性,将需求分类并输出分类集,同时原需求被输入到需求特征提取器中,按预先设定的特征提取规则提取特征。特征提取器输出的需求特征连同需求类别器输出的分类集一同格式化为SVM的输入数据组输入到SVM分类器中。SVM分类器将根据输入数据组训练SVM分类模型,在训练过程中自动地选择不同的SVM分类模型参数,并使用交叉验证法测试分类模型的精度,将分类精度最高的一组对应参数保留,这种以自动循环递变的方式选取模型参数并根据结果选择最优参数的方式称为自迭代。当需求发生变更时,将这些需求项输入到系统中,需求特征提取器对这些需求提取特征之后,缺陷属性预测器将变更需求的特征及特征值输入已训练好的SVM分类器中,就会得出变更需求的相应分类,预测出需求变更的缺陷。缺陷属性预测器并可根据历史缺陷的分布情况,将预测出的缺陷转为量化的预测结果。量化的算法为将每个分类所含得需求项数量乘以原需求与缺陷关联集中每个需求分类所含的平均缺陷数。用户交互接口为用户提供各模块的参数设置和相关用户反馈输入,所述参数包括预测的体缺陷属性类型及属性类别个数、相关性阈值、SVM分类器中一般特征和特殊特征的维度。用户可以在预测过程开始之前设置这些属性,之后,整个分类和预测过程自动地完成。由于每个模块的输出都为下一个模块提供输入,且中间过程的输出都为稳定格式,所以如果需要,用户可以中断自动过程,使用交互接口介入某些中间过程,为系统提供反馈以提高预测精度。以下结合实例,介绍基于需求变更的缺陷预测方法的具体流程和实现方式。设定某个软件项目历史数据库中包含有4893条历史缺陷记录和581条需求项。缺陷记录含有如下几个域:域描述标题.缺陷的标题描述缺陷的详细描述提交者缺陷的提交者模块缺陷属于的软件模块工作量修改此条缺陷付出的工作量(人时)优先级缺陷的优先级一般,严重,致命类型缺陷的类型界面缺陷,内部缺陷或者是综合缺陷重现步骤重现该缺陷的步骤首先用文本相关性的匹配方法将这些历史缺陷和需求做关联,由用户设置的阈值参数和相关反馈之后得到一个需求-缺陷关联集,此处设定的阈值为0.6。下面考查需求关联的缺陷的以下4个属性<table>tableseeoriginaldocumentpage11</column></row><table>由用户选择要预测哪种缺陷属性,若用户只预测一种缺陷属性(如预测需求相关的缺陷数量),则只对这一种属性建立分类标准即可(只建立数量的分类标准)。定义分类标准后,系统就会自动地得到4种原需求的分类结果。然后,对这些需求项进行特征提取,得到它们的特征向量,并连同它们的分类一起得到如下格式的数据〈需求项所属分类,<一凝錄号/>;虔)^一^^淳^",号";〈辨^"i"澄,……〈一^^錄,岸号MW>,<#,^^澄><#廉特号7>,<#《7澄_>……《淳廉錄C^号5W,,^錄,5W^",。将含有4条以上格式需求项分类和特征信息的数据输入4个SVM分类模型中,对每个SVM分类模型,SVM分类器自迭代选取SVM分类模型最优参数,得到4个SVM分类器。现在考査数据库中记载的某次需求变更,共有48条需求变更发生。对不同分类,分别提取这48对特征,并将这48对〈需求特征,需求特征值唐别输入到4个SVM分类器,得到如下的软件需求项预测分类,分类对应有相应需求项可能产生的缺陷的属性分类每个分类所含的需求项数量按缺陷数目极少:19;少:21;中:7;多l;极多0按修正缺陷的平均工作量极少7;少16;中等15;高8;极高2按缺陷优先级一般:29;严重13;致命:6按缺陷类型界面17;内部13;综合18为获得进一步的软件缺陷预测数据,可将这些结果量化,得到最终直观的基于需求变更的缺陷预测结果。量化的方法为将每个分类所含得需求项数量乘以原需求与缺陷关联集中每个需求分类所含的平均缺陷数。本实例最终的预测结论是此48条需求变更将引起320条缺陷,共计12036人时的修正工作量;其中按缺陷优先级分,一般缺陷190条,严重缺陷73条,致命缺陷57条;按缺陷类型分,界面缺陷103条,内部缺陷92条,综合缺陷125条。图4显示了最后预测结果和数据库中实际记录的数据的对比。可以看到,本发明所提供的预测方法基于需求变更,预测的缺陷属性取决于项目的历史数据记录和知识库分类的不同标准,最后得出量化的直观的缺陷预测结果。本发明提供的基于需求变更的软件缺陷预测系统提供给用户一些必要参数的输入和反馈,之后整个预测过程自动地完成。以上对本发明所述的基于需求变更的缺陷预测方法和系统进行了详细的说明,但显然本发明的具体实现形式并不局限于此。对于本
技术领域:
的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。权利要求1.一种基于需求变更的软件缺陷预测方法,其步骤如下1)通过文本相关性匹配方法计算项目历史的每条缺陷与需求的相关性值,得到需求与缺陷的关联集;2)根据需求项关联的缺陷的统计属性,将需求项进行分类,每一种缺陷的统计属性对应一种需求项的分类标准;计算需求项特征值,得到由需求项所属分类、需求项特征及特征值组成的数据组;3)以数据组中需求项特征为超空间中各维度,需求项对应超空间中的点,找出分割需求项的最大间隔超平面,建立SVM分类模型;4)发生需求变更时,提取需求变更的需求项特征,将需求特征和特征值输入建立的SVM分类模型中,用SVM工具找到变更需求对应的分类,由分类对应的缺陷统计属性获得软件缺陷预测数据。2.如权利要求1所述的一种基于需求变更的软件缺陷预测方法,其特征在于,若预测缺陷属性的类别不止一种,则将需求项按不同的缺陷属性类别进行分类,并对每种类别的需求项建立SVM分类模型。3.如权利要求1所述的一种基于需求变更的软件缺陷预测方法,其特征在于,所述需求项特征包括基于词的权重特征、可量化的需求项特征。4.如权利要求3所述的一种基于需求变更的软件缺陷预测方法,其特征在于,所述可量化的需求项特征包括需求项文本的长度、需求项所属软件产品的模块、需求变更次数、需求项事件流描述的条数和需求项前置条件的繁琐程度。5.如权利要求1所述的一种基于需求变更的软件缺陷预测方法,其特征在于,所述需求与缺陷的关联集的相关性阈值为0.4。6.如权利要求1所述的一种基于需求变更的软件缺陷预测方法,其特征在于,所述需求与缺陷的关联集的相关性阈值为0.6。7.如权利要求1所述的一种基于需求变更的软件缺陷预测方法,其特征在于,步骤4)后将每个分类所含的需求项数量乘以需求与缺陷关联集中每个需求分类所含的平均缺陷数,得到量化的软件缺陷预测数据。8.—种基于需求变更的软件缺陷预测系统,包括需求与缺陷关联器、需求类别器、需求特征提取器、SVM分类器和缺陷属性预测器;所述需求与缺陷关联器用于建立项目历史的缺陷与需求的关联集;所述需求类别器用于根据需求相关联的缺陷属性,将需求项按不同的预测类别分类,并将处于同一类别的缺陷进行分类,输出分类集;所述需求特征提取器用于提取项目历史需求项特征及变更需求项特征;SVM分类器用于将需求项分类、需求项特征及特征值建立在超空间中;缺陷属性预测器用于将变更需求的特征及特征值输入SVM分类器,获得变更需求的相应分类,预测出需求变更的缺陷。9.如权利要求8所述的一种基于需求变更的软件缺陷预测系统,其特征在于所述系统还包括用户交互接口,用于提供参数的输入。10.如权利要求8所述的一种基于需求变更的软件缺陷预测系统,其特征在于所述SVM分类器自迭代选取SVM分类模型的最优参数。全文摘要本发明属于计算机安全领域,具体涉及基于需求变更的缺陷预测方法和系统。本发明利用软件项目历史缺陷数据和需求文档构建需求与缺陷的关联集,需求分类器将历史需求按其所关联的历史缺陷属性分类,并计算需求项中的需求特征值,建立SVM分类器;当新的需求变更发生时,需求特征提取器提取该需求的需求特征,缺陷属性预测器根据需求特征的信息在SVM分类器中找到它所属的需求分类,得到该分类相关的缺陷属性,完成缺陷预测。本发明可自行添加或删除要提取的需求特征类别,并修改这些特征在分类模型中所占的权重,以使得到的预测模型更准确,提高预测精度。本发明的系统可自动完成预测,预测结果直观。文档编号G06F11/36GK101556553SQ20091008074公开日2009年10月14日申请日期2009年3月27日优先权日2009年3月27日发明者磊何,娟李,叶杨,青王申请人:中国科学院软件研究所