一种基于新增需求的代码变更量量化评估方法及其系统的制作方法

文档序号:6600298阅读:722来源:国知局

专利名称::一种基于新增需求的代码变更量量化评估方法及其系统的制作方法
技术领域
:本发明涉及一种基于新增需求的代码变更量量化评估方法及其系统,属于计算机软件开发
技术领域

背景技术
:软件代码量的大小对软件的开发进度以及软件应用前景有着重要影响,研究人员通过控制软件代码量的大小满足了用户的不同需求(参考专利号ZL03800635.9,发明名称“代码量控制装置和代码量控制方法”的技术文献)。同时软件代码量的大小与软件开发过程的需求演化直接相关,需求演化是软件需求开发中最容易发生的,也是不可避免的问题,需求演化会导致软件项目代码量的变化,如果没有得到恰当的处理,对软件的开发成本和进度都会产生较大的影响,往往导致软件项目失败的主要原因是需求演化。当需求发生演化的时候,需要对演化带来的影响进行评价和分析,以便采取相应的处理措施。量化的影响分析方法将有利于上层决策者对于软件演化做出准确的分析和决策,从而保证软件项目顺利完成。软件项目的需求多为使用自然语言对软件功能的描述,而软件的代码量则是由编程语言开发。当需求发生演化时,很难将自然语言描述的变化准确地定位到编程语言开发的代码中。而当软件项目新增需求的时候,更加无法有效地估算新增需求将要产生的代码量。现有的需求演化影响分析方法中,能够预测代码变更量的方法比较少。已有方法主要分为两类,一类是根据代码中的调用关系进行估算;一类是根据需求间的依赖关系进行估算。根据代码调用关系的估算需求演化代码影响量的方法(参考文献“FranckXia,PraveenSrikanth.“AChangeImpactDependencyMeasureforPredictingtheMaintainabilityofSourceCode,"[C].compsac,vol.2,28thAnnualInternationalComputerSoftwareandApplicationsConference-fforkshopsandFastAbstracts-(COMPSAC'04),200422-23")当一个需求发生变化的时候,由于受到这个变化导致代码中某部分直接受到影响,影响根据代码的调用与被调用关系扩散,并且随着调用层次的增加,受到的影响逐渐变小。对受到影响的代码量进行求和,作为需求影响值。根据需求依赖关系的估算需求演化代码影响量的方法(参考文献“杨鹤标,张继敏,朱玉全.一种需求变更影响的评估算法[J].计算机工程,2006,32(23):82_84”)根据需求依赖关系,建立由需求依赖树形成的森林。当依赖源需求发生变化,会对依赖目标需求产生影响,影响通过依赖关系从源需求向目标需求传递。对受到影响的需求对应的工作量求和,作为需求的影响值。以上两类方法在估算影响时,都需要首先确定演化的需求所对应的代码,而对于新增需求,则不能够将新增需求与已有代码建立有效的关联关系,所以无法准确估算新增需求将要产生的代码量。
发明内容鉴于量化需求演化影响的重要性以及现有方法的局限性,本发明通过基于数据挖掘的需求演化影口向的量化分析方法(Requirementevolutionimpactanalysisusingdatamining,REIA-DM)对代码变更量进行量化分析,并实现了基于REIA-DM方法的自动化估算系统。即本发明的目的在于提供一种基于新增需求的代码变更量量化评估方法及其系统,其能够估算新增需求将要产生的代码量,从而当软件项目新增需求的时候,能够有效的帮助项目管理者降低软件项目失败的风险。本发明的技术方案为一种基于新增需求的代码变更量量化评估方法,其步骤为1)根据设定的需求特征对数据库中某软件项目已有的N个需求进行特征提取;2)选取该项目中m个需求的特征提取数据(RS1,Rs2,Rsi,RsJ作为训练数据,其中0<m<N;3)将m个需求中每个需求的特征提取数据Rsi分别与除该需求外的已有需求的特征提取数据进行聚类,并计算该需求Rsi的实际代码量与其所在簇的代码量参考值的比值Yi;其中,i=1.··m;4)根据得到的比值Yi计算该软件项目的调整系数Y;5)根据设定的需求特征对该软件项目的新增需求进行特征提取;6)利用1)和5)的特征提取数据对每一新增需求与该N个已有需求进行聚类;7)根据公式E=γ·(估算新增需求的代码量E,其中C为新增需求所在簇中的代码量参考值。进一步的,所述需求特征包括需求描述质量、需求内容质量、需求文本长度、需求依赖密度、开发团队综合能力。进一步的,将特征提取的需求特征值映射到一相同的取值区间;每个需求的特征提取数据的格式为需求编号代码量需求特征1特征值1需求特征2特征值2···。进一步的,根据每个需求的实际代码量筛选出所述训练数据。进一步的,所述代码量参考值为某需求所在簇中除去该需求以外其他需求对应的代码量的平均值为该需求的代码量参考值。进一步的,所述根据得到的比值Yi计算该软件项目的调整系数Y的方法为首先检查所得到的每个比值Yi是否符合设定要求,然后取符合设定要求的比值^平均值为该软件项目的调整系数Y。进一步的,所述聚类算法为基于划分的k均值方法。一种基于新增需求的代码变更量量化评估系统,其包括特征提取模块、核心聚类算法计算模块、调整参数Y训练模块、代码量预测模块;所述特征提取模块,用于根据设定的需求特征对软件项目的每个需求进行特征提取;所述核心聚类算法计算模块,用于提供所需的聚类算法,对输入数据进行聚类计算;所述调整参数Y训练模块,用于根据特征提取的数据,调用核心聚类算法模块的接口,训练调整参数Y,获得估算公式;所述代码量预测模块,用于根据新增需求和已有需求的特征提取后的数据,调用核心聚类算法模块的接口并利用所述估算公式,预测每一新增需求将要产生的代码量。进一步的,所述系统还包括一测试验证模块,用于对所述代码量预测模块估算出来的新增需求代码量与实际代码量进行比较,验证预测的有效性。进一步的,所述需求特征包括需求描述质量、需求内容质量、需求文本长度、需求依赖密度、开发团队综合能力。本发明的REIA-DM是一种针对新增需求使用聚类的无监督学习方法,关于“聚类的无监督学习方法”出自英文书籍(JiaweiHan,MichelineKamber.DataMiningConceptsandTechniques,SecondEdition[Μ].MorganKaufmannPublishersInc.SanFransisco,CA,USA.2001),或者对应的中文书籍(数据挖掘技术与概念(原书第2版)/(加)韩家炜,堪博(MichelineKamber)著;范明,孟小峰译。北京机械工业出版社,2007.3),不需要对软件的需求进行预先的分类而直接对新增需求与软件已有需求进行划分的方法,使得聚为一个簇中的需求具有相似的属性。通过对新增需求所在簇中的元素来进行分析,能够相对准确的量化新增需求将要产生的代码量。根据发明的目的,REIA-DM的具体流程为(一)训练调整参数Y,获得估算公式(1)对已有的N个需求进行特征提取选择需求描述质量、需求内容质量、需求文本长度、需求依赖密度、开发团队综合能力作为需求特征。(2)选择该软件项目中的m(0<m<N)个需求(RS1,Rs2,Rsi,...,RsJ作为训练数据,以获得调整参数Y;(3)对选择的训练数据中的每一个需求Rsi与另外N-I个已有的需求进行聚类,计算该需求实际代码量与所在簇的代码量参考值的比值Yi;1m(4)将/=一Σ广作为针对当前软件项目的调整系数。(二)预测新增需求的代码量(1)对新增需求进行特征提取选择与步骤(一)中相同的需求特征以相同的标准进行需求特征的提取。(2)将每一个新增需求与已有需求按照选取的需求特征分别进行聚类使用与(一)中相同的聚类方法对需求进行聚类。(3)分析新增需求所在簇中的其他需求由于使用与需求对应的代码量相关的需求特征作为聚类特征,当一个新增需求与软件已有需求聚类到同一个簇之后,说明这些需求有着相似的性质。因而,新增需求将要产生的代码量与所在簇中的需求所对应的代码量相似。(4)估算新增需求的代码量为了能够相对准确的估算新增需求将要产生的代码量,选取簇中需求代码量均值作为参考值,并认为新增需求将产生的代码量也在参考值上下。使用估算公式丄对新增需求的代码量进行估算。其中,<formula>formulaseeoriginaldocumentpage5</formula>为簇中需求代码量均值;Y为(一)中获得的调整参数,η为已有需求数目,Li为第i个已有需求对应的代码量。本发明的另一个目的在于提供一个使用REIA-DM方法的预测新增需求代码量的软件系统,该系统在输入特征提取的数据后,能够自动化的实现新增需求代码量的预测,也能够接受用户自行调整的参数进行半自动的预测。本系统包括特征提取模块、核心聚类算法计算模块、调整参数Y训练模块、代码量预测模块和测试验证模块,具体功能如下特征提取模块,用于根据设定的需求特征对软件项目的每个需求进行特征提取;核心聚类算法模块作为系统的基础模块,提供整个系统需要的聚类算法,此部分聚类算法可以使用多种不同的算法,不局限于基于划分的k均值方法(k-means)。调整参数Y训练模块,使用输入的根据需求特征提取后的数据,调用核心聚类算法模块的接口,训练调整参数Y,从而获得估算公式。代码量预测模块,使用用户输入的新增需求和已有需求的特征提取后的数据,调用核心聚类算法模块的接口,使用调整参数Y训练模块获得的估算公式,预测每一个新增需求将要产生的代码量。测试验证模块,对代码量预测模块估算出来的新增需求代码量与实际代码量进行比较,验证估算方法的有效性。本发明的优点和技术效果如下(1)本发明的方法将新增需求与软件项目已有需求进行聚类,对于聚类结果进行分析,能够相对准确的量化新增需求将要产生的代码量。(2)本发明根据REIA-DM方法实现的估算系统,在用户输入根据需求特征提取的数据后,能够自动化的预测新增需求将要产生的代码量,并且能够直观显示估算结果。图IREIA-DM方法训练调整参数Y并获得估算公式主要流程;图2REIA-DM方法预测新增需求的代码量主要流程;图3自动化估算系统流程图。具体实施例方式下面将具体说明基于数据挖掘的需求演化影响的量化分析方法和系统本发明提出的REIA-DM方法可以分为两大步骤训练调整参数Y,获得估算公式;估算新增需求将要产生的代码量。(一)训练调整参数Y,获得估算公式REIA-DM方法提出一个估算新增需求将要产生的代码量的方法,并给出估算公式Ε=γ·€=γ·-·(^)其中,丄.ff丄为簇中需求代码量均值,而Y为调整参数。YnV'=i乂。η^‘)是根据估算的软件项目而定制的调整参数,使得估算公式更加准确的应用于某一个软件项目。训练调整参数Y的步骤主要有以下四步(1)已有需求的特征提取因为最终的目的是为了量化新增需求将要产生的代码量,所以在进行需求特征提取的时候,只选择与需求对应代码量相关联的需求特征。最终选择的特征是需求描述质量、需求内容质量、需求文本长度、需求依赖密度、开发团队综合能力作为需求特征。在此,不使用通常的文本聚类时所用到的文本特征(特征词),主要的原因是同一个软件的需求的描述比较相似,因而文本特征对于不同需求的区分度不够,如果掺入文本特征将会对于需求固有的特征造成一定的影响。在进行需求特征提取时,为了保证每个需求特征在聚类效果上的有效性,应将每个需求特征值映射到一个相同的取值区间中,比如,其中0表示“非常差/非常短/非常弱”,10表示“非常好/非常长/非常强”。对于一个软件项目的已有的N个需求进行特征提取,并生成需求特征提取后的数据文件。数据文件作为输入数据应用于估算系统,估算系统的数据格式为需求IDl代码量1特征1特征值特征2特征值特征3特征值...需求ID2代码量2特征1特征值特征2特征值特征3特征值......需求IDN代码量N特征1:特征值特征2特征值特征3特征值...(2)选择训练调整参数的训练数据数据选择时,应该去除掉比较明显的不合理数据,以避免对于估算方法的影响,使得估算公式尽量的准确。不合理数据包括软件项目开发过程中,工作量极大和极小的需求,或者工作量明显偏离当时估算值的。最终,选择该软件项目中的m(0<m<N)个需求(Rsi,Rs2,Rsi,...,Rsm)作为训练数据。(3)需求聚类对选择的训练数据(m个需求)中的每一个需求Rsi与另外N-I个已有的需求进行聚类。对于聚类结果,计算与需求Rsi处在同一个簇中的其他需求对应的代码量的均值作为簇代码量参考值;如果需求Rsi自己单独处在一个簇,那么这个需求Rsi应该在(2)中不选择,并且不参与计算。计算需求Rsi实际代码量与所在簇的代码量参考值的比值Yi:_需求Rs,实际代码量h"簇代码量参考值°(4)计算调整参数Y1m为了使得估算公式更加的准确,对m个Yi取均值,将7=二Σ广作为针对当前软m=\件项目的调整参数,并带入估算公式用于当前软降项目的新增需求估算。(二)估算新增需求将要产生的代码量(1)新增需求的特征提取选择与步骤(一)(1)中相同的需求特征以相同的标准对新增需求进行需求特征的提取,并生成相同格式的数据。(2)需求聚类为了保证每个新增需求之间不互相影响,因而将每一个新增需求与已有需求分别进行聚类,单独估算每一个新增需求的代码量。此步骤中的聚类,使用上一步中需求特征提取的数据,并且使用与(一)(3)中相同的聚类方法。(3)分析新增需求所在簇中的其他需求由于使用与需求对应的代码量相关的需求特征作为聚类特征,当一个新增需求与软件已有需求聚类到同一个簇之后,说明这些需求有着相似的性质。因而,新增需求将要产生的代码量与所在簇中的需求所对应的代码量相似。每个簇中需求对应代码量的平均值可以作为该簇中需求对应代码量的一个参考值,而每个需求实际对应代码量在这个参考值上下小范围波动。(4)估算新增需求的代码量为了能够相对准确的估算新增需求将要产生的代码量,选取簇中需求代码量均值作为参考值,并认为新增需求将产生的代码量也在参考值上下。假设新增需求所在簇中包含η条软件项目的已有需求,每条已有需求对应代码量分别为L1L2L3...Ln,则新增需求代码量参考值c为Ijt/^。使用估算公式五〒C=y丄对新增需求的代码量进n\i=\JnV'=IJ行估算。其中,γ为(一)中获得的调整参数。以下结合实例对操作各部分进行具体说明。实例为办公自动化软件项目OfficeAutomation,该软件项目自2002年开始开发并不断维护升级,主要应用于实验室内部人员的工作记录。该软件项目共有11个大的功能模块(具体功能及描述参照表1中需求对应模块一栏的11个功能模块),按照这11个大的功能模块,对应将需求归类为11个大类的功能需求并编号为R1R2R3...R11,每大类的功能需求Ri的实现一个对应的功能模块。将需求Rl至R9作为训练数据,而将需求RlO和Rll视为新增需求,估算需求RlO和Rll将要产生的代码量。实验的主要过程如下对数据进行特征提取;对训练集数据进行训练以获得调整参数Y;使用估算公式进行预测。(1)需求特征提取此步骤中,完成对于全部需求的特征提取工作,包括已有需求与新增需求。在选取需求特征时,使用需求描述质量、需求内容质量、需求描述的文本长度、需求依赖密度、开发团队综合能力作为需求特征。进行需求特征提取,并将每个需求特征值映射到区间中,其中0表示“非常差/非常短/非常弱”,10表示“非常好/非常长/非常强”。需求特征值以及需求对应代码量统计结果如表1表1需求特征值以及需求对应代码量统计结果<table>tableseeoriginaldocumentpage9</column></row><table>生成的数据文件如下Rl8081:62:83:54:105:6R814831:62:73:94:25:8R24091:42:43:34:15:8R39801:42:43:64:15:6R41771:42:43:14:15:6R59871:42:53:64:25:6R69831:42:43:64:15:6R72791:42:43:24:15:6R98741:42:43:54:15:6*R104611:62:53:34:25:6*R1117971:62:63:94:25:8其中RlO和Rll前面的“*”表示需求RlO和需求Rll是新增需求,RlO和Rll对应的的代码行数如果为0,则只进行估算,不进行估算值与实际值的比较工作。(2)选择训练调整参数的训练数据去除掉训练数据(Rl至R9)中代码量最小的需求R4和最大的需求R8,将其余的需求数据用于训练调整参数Y。(3)需求聚类,训练调整参数Y将需求Rl、R2、R3、R5、R6、R7和R9分别作为被估算需求,与其余8个需求进行聚类,并计算需求对应代码量的实际值与所在簇代码量参考值的比值。设置聚类中心点个数为4,聚类需求Rl至R9结果如表2表2需求R1至R9聚类结果<table>tableseeoriginaldocumentpage10</column></row><table>对于聚类结果,计算每个需求Ri所在簇中其他需求对应代码量的平均值作为簇代码量参考值,并计算Ri对应的实际代码量与簇代码量参考值的比值。分析结果如表3表3Ri对应的实际代码量与簇代码量参考值的比值_____<table>tableseeoriginaldocumentpage10</column></row><table>其中,需求对应代码量的实际值取自(1)中的需求对应代码量;簇代码量参考值是聚类结果中,需求Ri所在簇中去除掉Ri外所有需求对应代码量的平均值;对于计算调整参数,应该去除掉比值中不合理的数值。这时,去除没有值的R1。(4)计算调整参数Y最终,取Y为比值的平均值<formula>formulaseeoriginaldocumentpage10</formula>获得估算公式<formula>formulaseeoriginaldocumentpage10</formula>(5)新增需求特征提取将需求RlO和Rll作为新增需求,对新增需求进行特征提取。因为,新增需求的特征提取工作已经在(1)中完成,所以跳过此步骤。如果先前没有对新增需求进行过特征提取,则此处应当先对新增需求进行需求特征提取。(6)聚类新增需求为了避免两个新增需求的相互影响,分别将需求RlO和Rll与训练集数据(需求Rl至R9)进行聚类,估算其将要产生的代码量,聚类结果如表4、表5表4需求Rltl与需求R1至R9聚类结果<table>tableseeoriginaldocumentpage11</column></row><table>表5需求R11与需求R1至R9聚类结果<table>tableseeoriginaldocumentpage11</column></row><table>(7)分析簇特征,估算代码量使用估算公式(需求代码量估算值等于调整参数Y与所在簇的代码量参考值的乘积)的估算两个新增需求将要产生的代码量,结果如表6表6两个新增需求将要产生的代码量估算结果<table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table>综上,本发明所提出的基于新增需求的代码变更量量化评估方法是通过有效的利用软件项目的历史数据,最终得出代码量的估算值。本发明提供的基于新增需求的代码变更量量化评估系统可以全自动的完成预测的过程,也可以根据用户的需求进行手动进行数据的调整。以上对本发明所述的基于新增需求的代码变更量量化评估方法及其系统进行了详细的说明,但显然本发明的具体实现形式并不局限于此。对于本
技术领域
的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。权利要求一种基于新增需求的代码变更量量化评估方法,其步骤为1)根据设定的需求特征对数据库中某软件项目已有的N个需求进行特征提取;2)选取该项目中m个需求的特征提取数据(RS1,RS2,RSi,...,RSm)作为训练数据,其中0<m<N;3)将m个需求中每个需求的特征提取数据RSi分别与除该需求外的已有需求的特征提取数据进行聚类,并计算该需求RSi的实际代码量与其所在簇的代码量参考值的比值γi;其中,i=1...m;4)根据得到的比值γi计算该软件项目的调整系数γ;5)根据设定的需求特征对该软件项目的新增需求进行特征提取;6)利用1)和5)的特征提取数据对每一新增需求与该N个已有需求进行聚类;7)根据公式E=γ·C估算新增需求的代码量E,其中C为新增需求所在簇中的代码量参考值。2.如权利要求1所述的方法,其特征在于所述需求特征包括需求描述质量、需求内容质量、需求文本长度、需求依赖密度、开发团队综合能力。3.如权利要求1或2所述的方法,其特征在于将特征提取的需求特征值映射到一相同的取值区间;每个需求的特征提取数据的格式为需求编号代码量需求特征1特征值1需求特征2:特征值2…。4.如权利要求3所述的方法,其特征在于根据每个需求的实际代码量筛选出所述训练数据。5.如权利要求1所述的方法,其特征在于所述代码量参考值为某需求所在簇中除去该需求以外其他需求对应的代码量的平均值为该需求的代码量参考值。6.如权利要求1所述的方法,其特征在于所述根据得到的比值L计算该软件项目的调整系数、的方法为首先检查所得到的每个比值^是否符合设定要求,然后取符合设定要求的比值L平均值为该软件项目的调整系数Y。7.如权利要求1所述的方法,其特征在于所述聚类算法为基于划分的k均值方法。8.一种基于新增需求的代码变更量量化评估系统,其包括特征提取模块、核心聚类算法计算模块、调整参数Y训练模块、代码量预测模块;所述特征提取模块,用于根据设定的需求特征对软件项目的每个需求进行特征提取;所述核心聚类算法计算模块,用于提供所需的聚类算法,对输入数据进行聚类计算;所述调整参数Y训练模块,用于根据特征提取的数据,调用核心聚类算法模块的接口,训练调整参数Y,获得估算公式;所述代码量预测模块,用于根据新增需求和已有需求的特征提取后的数据,调用核心聚类算法模块的接口并利用所述估算公式,预测每一新增需求将要产生的代码量。9.如权利要求8所述的系统,其特征在于还包括一测试验证模块,用于对所述代码量预测模块估算出来的新增需求代码量与实际代码量进行比较,验证预测的有效性。10.如权利要求8所述的系统,其特征在于所述需求特征包括需求描述质量、需求内容质量、需求文本长度、需求依赖密度、开发团队综合能力。全文摘要本发明公开了一种基于新增需求的代码变更量量化评估方法及其系统,属于计算机软件开发
技术领域
。本方法为1)根据设定的需求特征对某软件项目已有的N个需求进行特征提取;2)选取该项目中m个需求的特征提取数据作为训练数据,计算该软件项目的调整系数γ;3)根据设定的需求特征对该软件项目的新增需求进行特征提取;4)利用1)和3)的特征提取数据对每一新增需求与该N个已有需求进行聚类;5)根据公式E=γ·C估算新增需求的代码量E。本系统包括特征提取模块、核心聚类算法计算模块、调整参数γ训练模块、代码量预测模块。与现有技术相比,本发明能够自动化的预测新增需求将要产生的代码量,并且能够直观显示估算结果。文档编号G06F11/36GK101833501SQ20101014090公开日2010年9月15日申请日期2010年4月2日优先权日2010年4月2日发明者李娟,李引,杨达,王青,高健申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1