一种基于BP神经网络的软件功能点数估算方法与流程

文档序号:20681058发布日期:2020-05-08 18:23阅读:408来源:国知局
一种基于BP神经网络的软件功能点数估算方法与流程
本发明涉及软件开发成本度量中的软件规模估算领域,尤其涉及一种基于bp神经网络的软件功能点数估算方法。
背景技术
:2019年7月1日正式生效的国家标准《软件工程软件开发成本度量规范》(gb/t36964-2018)为软件行业度量开发成本提供了依据。该标准中定义的软件开发成本估算过程包括软件规模估算、工作量估算、成本估算、确定软件开发成本四部分。其中,估算软件规模时采用ifpug、markii、nesma、cosmic、fisma等五种国际标准的功能点计数方法。ifpug标准基于明确的规则约束,能保证软件规模评估结果的客观性和一致性;markii标准操作简单,只需进行简单的加权计算,但缺乏对基本元素的识别规则;nesma标准对代码数据进行度量、对隐含查询不予考虑,所以完整性和一致性不强;cosmic标准引入了“分层”概念,需要考虑软件的技术因素,从而减弱了软件功能点对业务人员透明的优势;fisma标准强调采用“服务”替代“功能”,但服务的加权系数各不相同,操作困难。其中ifpug标准评估方法在软件成本评估中应用最为广泛,该方法根据五种信息域特征估算并合计每个信息域的复杂度对应的功能点数,得出一个初步的总功能点数(ufc),最后根据项目的具体情况,选择相应的技术复杂度参数,估算出最终的软件开发成本。然而该方法在每个信息域估算功能点数时,没有考虑到突变点存在的情况,同时估算事务的功能点数时不可避免地要考虑数据存储,可能会引发在突变点附近取值不精确、过度计算的问题,因此设计一种基于bp神经网络的软件功能点数估算方法是十分有必要的。技术实现要素:本发明为克服上述的不足之处,目的在于提供一种基于bp神经网络的软件功能点数估算方法,本发明从数据存储出发,把对相同数据存储的相同事务合并到一起,以新得到的数据为单位,对新的功能点数求和。本发明改进了原有的功能点数估算方法,减少了估算事务功能点数时的误差,对于提高功能点评估准确度具有重大意义。本发明是通过以下技术方案达到上述目的:一种基于bp神经网络的软件功能点数估算方法,包括如下步骤:(1)合并基于ifpug功能点评估方法处理得到的每组数据中的相同数据存储、相同事务,得到包含七种属性的新数据;其中,七种属性分别为数据存储det1、事务det2、ftr、事务类型、数据存储类型、操作数、功能点数;(2)利用bp神经网络进行训练,得到软件功能点数估算模型;(3)基于训练好的软件功能点数估算模型估算软件功能点数。作为优选,所述步骤(1)具体为:提取基于ifpug功能点评估方法处理得到的的每组数据,合并访问同一数据存储的相同事务操作,合计所有功能点数,得到包含七种属性的新数据,具体如下:ifpug功能点评估方法分别估算在数据存储和事务方面的功能点数,数据存储中ilf和eif的功能点数由数据元素类型det和记录元素类型ret决定,其中det表示数据表的属性数或外部接口的输出属性数,ret表示数据表或外部接口的关联数;事务中ei、eo、eq的功能点数由数据元素类型det和引用文件类型ftr决定,其中ftr表示被维护和读取的数据表或被读取的外部接口;在实际处理中,假设每次操作的ftr=ret,合并每组数据存储的功能点数和对该组数据存储进行相同操作的事务的功能点数,产生新的一组数据,即包含det1(数据存储)、det2(事务)、ftr、事务类型(ei、eo、eq)、数据存储类型(ilf、eif)、操作数、功能点数七种属性的新数据。作为优选,所述的功能点数的估算方法包括三种:(a)根据ilf/eif功能点数矩阵提取出来的数据包括det、ret、数据存储类型、功能点数四种属性,用如下公式表示:f1=f(det,ret,ie)其中f1表示数据存储对应的功能点数1,det、ret分别表示det、ret的数值,ie表示该数据存储是ilf还是eif;(b)根据eo/eq功能点数矩阵提取出来的数据包括det、ftr、事务类型、功能点数四种属性,用如下公式表示:f2=f(det,ftr,eoeq)其中f2表示数据存储对应的功能点数2,det、ftr分别表示det、ftr的数值,eoeq表示该事务操作是eo还是eq;(c)根据ei功能点数矩阵提取出来的数据包括det、ftr、事务类型、功能点数四种属性,用如下公式表示:f3=f(det,ftr,ei)其中f3表示数据存储对应的功能点数3,det、ftr的分别表示det、ftr的数值,ei表示该数据存储是ei。作为优选,所述合并时,以数据存储为单位,合并得到包括det1(数据存储)、det2(事务)、ftr、事务类型(ei、eo、eq)、数据存储类型(ilf、eif)、操作数、功能点数七种属性的一组数据,具体情况如下:(i)事务没有任意数据存储:根据事务类型合并相同事务,只需考虑事务的功能点数而不需要考虑数据存储的功能点数;(ii)该数据存储没有被事务直接访问:只需考虑数据存储的功能点数而不需要考虑事务的功能点数;(iii)该数据存储有被事务直接访问:根据事务类型合并相同事务,功能点数同时考虑数据存储和事务。作为优选,所述步骤(2)使用bp神经网络进行训练包括如下步骤:(2.1)根据步骤(1)得到的新数据,即将新数据作为样本,建立三层拓扑结构的bp神经网络,其中输入层为六个神经元,输出层为一个神经元,隐藏层取十个神经元;初始化隐藏层权值v,输出层权值w,隐藏层阈值γ,输出层阈值θ,预设计算精度ε,最大迭代次数m,学习率η;(2.2)随机选取一个输入样本以及对应的输出期望,计算隐藏层各神经元的输入和输出;网络输出的结果与输出期望的误差的函数被称作损失函数,计算损失函数对输出层的各神经元的偏导数;并利用输出层各神经元的偏导和隐藏层各神经元的输出来调整隐藏层到输出层的权值、隐藏层各神经元的偏导和输入层各神经元的输入调整输入层到隐藏层的权值,并计算全局误差;(2.3)当全局误差小于等于预设计算精度ε或迭代次数大于最大迭代次数m时,训练结束,执行步骤(2.4);否则返回步骤(2.2),进入下一轮迭代;(2.4)验证和测试训练模型,如果通过则保存模型,否则返回步骤(2.1)重新训练。作为优选,所述步骤(2.2)具体如下:随机选取第l个输入样本和对应的样本输出,计算出隐藏层和输出层各神经元的输入、输出:隐藏层输入:隐藏层输出:hoj(l)=σ(hij(l))输出层输入:输出层输出:yok(l)=σ(yik(l))其中ω为所在两个神经元之间的联结权重,θ为输出层阈值,i、j、k分别表示输入层、隐藏层、输出层的神经元,σ为激活函数,其中激活函数采用sigmoid函数求导结果为σ′=σ(1-σ);模型输出记为yok,给定样本期望tk,采用均方差作为输出层的损失函数,公式为:使用梯度下降方法进行优化,对损失函数在输出层权重w方向进行求偏导:代入yok=σ(yik),并对sigmoid函数求导:展开yik,输出层第k个节点的输入等于上一层各个的输出乘上相应的权值的累加和阈值,而上一层的输出与输出层的权重变量无关,可以看做一个常数,所以直接求导可以得到:再次代入yok=σ(yik):定义δk=yok(1-yok)(yok-tk),得到:利用输出层各神经元的δk(l)和隐藏层各神经元的输出、学习率η来修正连接权值wjk(l),如下所示:采用同样方法对隐藏层的权重进行计算,对损失函数在隐藏层权重v方向进行求偏导:代入yok=σ(yik),对sigmoid函数求导:再次代入yok=σ(yik),然后使用求导的链式法则:根据得到:代入hoj=σ(hij),对sigmoid函数求导:与求的方法一样,上一层的输出与隐藏层的权重变量无关,可直接求导得得到;定义得到:利用隐藏层各神经元的δj(l)和输入层各神经元的输入、学习率η来修正连接权值vij(l)。最后计算全局误差:作为优选,所述步骤(3)采用步骤(2)所述训练好的软件功能点数估算模型估算功能点数,把提取出来的每组数据放入新模型估算出各自的功能点数,累加每组数据的功能点得到总的功能点数。作为优选,所述步骤(3)包括如下步骤:(3.1)提取项目中数据并分组,分组包含det1(数据存储)、det2(事务)、ftr、事务类型(ei、eo、eq)、数据存储类型(ilf、eif)、操作数n六种属性;(3.2)把每组数据分别输入到训练好的软件功能点数估算模型,估算出各自功能点数并累加,所得结果就是该项目的功能点总数:fp=f(det1,det2,ftr,ioq,ie,n)其中ioq表示事务类型,ie表示数据存储类型,m表示组数,sumfp表示功能点总数。本发明的有益效果在于:本发明改进了原有的功能点数估算方法,减少了估算事务功能点数时的误差,对于提高功能点评估准确度具有重大意义。附图说明图1是本发明的方法流程示意图;图2是本发明的bp神经网络示意图;图3是本发明实施例的sigmoid函数示意图。具体实施方式下面结合具体实施例对本发明进行进一步描述,但本发明的保护范围并不仅限于此:实施例:如图1所示,一种基于bp神经网络的软件功能点数估算方法,包括如下步骤:步骤1:合并基于ifpug功能点评估方法处理得到的每组数据中的相同数据存储、相同事务的操作,得到包含det1、det2、ftr、事务类型、数据存储类型、操作数、功能点数等七种属性的新数据;步骤1.1:提取使用ifpug功能点评估方法的每组数据。ifpug能点评估方法分别估算在数据存储和事务方面的功能点数。数据存储中的ilf和eif分别对应项目的数据表和外部接口。ret表示关联数目,在数据表中,det表示表的属性数,在外部接口中,det表示接口的外部输出属性数目。ilf/eif功能点数取值根据《ifpug-cpm4.2-功能点实践手册》中的ilf/eif功能点数矩阵,如表1所示。1-19det20-50det51+det1retilf:7/eif:5ilf:7/eif:5ilf:10/eif:72-5retilf:7/eif:5ilf:10/eif:7ilf:15/eif:106+retilf:10/eif:7ilf:15/eif:10ilf:15/eif:10表1根据表1提取出来的数据每组包括det、ret、数据存储类型、功能点数四种属性。可以用如下公式表示:f1=f(det,ret,ie)(1)其中f1表示这是数据存储对应的功能点数,det、ret分别表示det、ret的数值,ie表示该数据存储是ilf还是eif。事务中ei、eo、eq分别对应项目的功能操作中的输入、输出、查询。任意操作需要关联数据表或外部接口或无关联,ftr表示关联数目,det表示所有关联的数据表或外部接口的属性数目,eo/eq功能点数取值根据《ifpug-cpm4.2-功能点实践手册》中的eo/eq功能点数矩阵,如表2所示。1-5det6-19det20+det0-1ftreo:4/eq:3eo:4/eq:3eo:5/eq:42-3ftreo:4/eq:3eo:5/eq:4eo:7/eq:64+ftreo:5/eq:4eo:7/eq:6eo:7/eq:6表2根据表2提取出来的数据每组包括det、ftr、事务类型、功能点数四种属性。可以用如下公式表示:f2=f(det,ftr,eoeq)(2)其中f2表示这是数据存储对应的功能点数,det、ftr分别表示det、ftr的数值,eoeq表示该事务操作是eo还是eq。ei功能点数估算取值根据《ifpug-cpm4.2-功能点实践手册》中的ei功能点数矩阵,如表3所示。1-4det5-15det16+det0-1ftr3342-3ftr3464+ftr466表3根据表3提取出来的数据每组包括det、ftr、事务类型、功能点数四种属性。可以用如下公式表示:f3=f(det,ftr,ei)(3)其中f3表示这是数据存储对应的功能点数,det、ftr的分别表示det、ftr的数值,ei表示该数据存储是ei。由于这些参数所代表的含义各不相同,所以这些公式不能抽象一个包含三元未知量的式子。但它们之间还是有所关联的。其中ret指用户可识别的数据域的子集个数,ftr指在一个事务过程中,所引用到的各种文件的个数,假如一个文件只包括一个数据域子集,又因为任一功能操作都会访问到数据表或外部接口(如果有的话),那么可以假设在对同一个数据存储的事务操作过程中ret=ftr;在公式1中,det只包含它本身存储过程中的无递归、不重复的信息单元,而在公式2、公式3中,det不仅包含事务操作访问到的某个数据表或外部接口的信息单元,还包括这个数据表或外部接口所关联的其它数据表或外部接口的无递归、不重复的信息单元,只有当ret和ftr都等于1时,两边的det数值才相等,所以不能直接把数据存储和事务的det划等号。步骤1.2:合并访问同一数据存储的相同事务操作,合计所有功能点数。其中,功能点合计由数据存储和事务操作两部分组成,因为事务操作有ei、eo、eq共三种,需避免重复估算功能点数。另外假设有n种功能操作,但它们的核心逻辑都是对同一数据存储的相同事务操作,而在实际开发中,这些工作量已经被包含在第一次实现这个功能,后续新增功能可能没有太多工作量,即不需要重新编写核心逻辑,所以在估算功能点时它的复杂度可能会比表中的要少些许,因此用神经网络拟合模型。以数据存储为单位,合并得到包括det1(数据存储)、det2(事务)、ftr、事务类型(ei、eo、eq)、数据存储类型(ilf、eif)、操作数、功能点数等七种属性的一组数据。具体情况如下:(i)事务没有任意数据存储;根据事务类型合并相同事务,只需考虑事务的功能点数而不需要考虑数据存储的功能点数。(ii)该数据存储没有被事务直接访问;只需考虑数据存储的功能点数而不需要考虑事务的功能点数。(iii)该数据存储有被事务直接访问;根据事务类型合并相同事务,功能点数同时考虑数据存储和事务。总共得到4264组包含七种属性的数据,去除重复数据后还剩1000组。步骤2:使用bp神经网络进行训练;步骤2.1:建立三层结构的bp神经网络,其中输入层为6个神经元,输出层为1个神经元,隐藏层取10个神经元,如图2所示。初始化隐藏层(输入层到隐藏层)权值v,输出层(隐藏层到输出层)权值w,隐藏层阈值γ,输出层阈值θ,给定计算精度ε、最大迭代次数m、学习率η。步骤2.2:随机选取第l个输入样本和对应的样本输出,计算出隐藏层和输出层各神经元的输入、输出。隐藏层输入:隐藏层输出:hoj(l)=σ(hij(l))(5)输出层输入:输出层输出:yok(l)=σ(yik(l))(7)其中ω为所在两个神经元之间的联结权重,θ为阈值,i、j、k分别表示输入层、隐藏层、输出层的神经元,σ为激活函数,本文激活函数采用sigmoid函数函数图像如图3所示,求导结果为σ′=σ(1-σ)。模型输出记为yok,给定样本期望tk,采用均方差作为输出层的损失函数,公式为:使用梯度下降方法进行优化,对损失函数在输出层权重w方向进行求偏导:代入yok=σ(yik),并对sigmoid函数求导:展开yik,输出层第k个节点的输入等于上一层各个的输出乘上相应的权值的累加和阈值,而上一层的输出与输出层的权重变量无关,可以看做一个常数,所以直接求导可以得到:再次代入yok=σ(yik):定义δk=yok(1-yok)(yok-tk),所以利用输出层各神经元的δk(l)和隐藏层各神经元的输出、学习率η来修正连接权值wjk(l)。采用同样方法对隐藏层的权重进行计算,对损失函数在隐藏层权重v方向进行求偏导:代入yok=σ(yik),对sigmoid函数求导:再次代入yok=σ(yik),然后使用求导的链式法则:根据公式11,代入hoj=σ(hij),对sigmoid函数求导:与求公式11的方法一样,上一层的输出与隐藏层的权重变量无关,可直接求导得所以定义所以利用隐藏层各神经元的δj(l)和输入层各神经元的输入、学习率η来修正连接权值vij(l)。最后计算全局误差:步骤2.3:当全局误差e小于等于预设计算精度ε或迭代次数大于最大迭代次数m时,训练结束,执行步骤2.4;否则返回步骤2.2,进入下一轮迭代;步骤2.4:验证和测试训练模型,如果通过则保存模型,否则返回步骤2.1重新训练。步骤3:使用训练好的软件功能点数估算模型估算功能点;步骤3.1:提取项目中数据并分组,分组包含det1(数据存储)、det2(事务)、ftr、事务类型(ei、eo、eq)、数据存储类型(ilf、eif)、操作数n等六种属性。步骤3.2:把每组数据分别输入到训练好的模型,估算出各自功能点数并累加求和,所得结果就是该项目的功能点总数:fp=f(det1,det2,ftr,ioq,ie,n)(24)其中ioq表示事务类型,ie表示数据存储类型,m表示组数,sumfp表示功能点总数。以上的所述乃是本发明的具体实施例及所运用的技术原理,若依本发明的构想所作的改变,其所产生的功能作用仍未超出说明书及附图所涵盖的精神时,仍应属本发明的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1