一种基于需求识别的软件规模度量方法

allin2023-04-17  115



1.本发明涉及软件规模度量技术领域,具体提供一种基于需求识别的软件规模度量方法。


背景技术:

2.软件开发项目规模度量是估算软件项目工作量、编制成本预算、策划合理项目进度的基础。规模度量是软件项目失败的重要原因之一。随着计算机技术和软件工程的发展,越来越多的软件项目涌现出来。成功的软件系统开发意味着按时、按预算地交付符合用户需求的软件系统。从国内外软件项目的开发经验来看,影响系统开发成败的因素有多种,而软件规模估算和管理控制是其成功的关键因素之一。如果规模估算过大,导致费用过高,就会造成资源的巨大浪费;如果估算的规模过小,导致费用过低,就会造成整个项目失控,远远超过项目预算和交付日期。因此,对软件规模进行准确度量具有重要意义。
3.目前虽然已有相关学者对于软件规模度量方法进行了探索,但在软件规模度量领域仍然存在一些亟待解决的问题。由于软件规模度量方法需要处理大量的文本数据,目前软件规模估算主要通过人工从繁杂的项目材料中进行功能点的识别统计,效率较低,且由于识别人员的水平参差不齐难以保证规模估算的准确率。因此,如何从需求规范文档中准确的识别出用户需求和需求对应功能点是一项耗时且具有挑战性的工作。随着机器学习、自然语言处理技术的兴起,越来越多的研究者们尝试采用机器学习等方法来处理需求文档,代替人工从繁杂的需求文档中获取用户需求和功能点的识别统计。传统的基于机器学习的需求分类方法是通过人工预处理提取特征信息并利用浅层分类器来实现需求分类,一些研究者采用语义相似度、自定义字典和手工预处理等方法取得了较高的分类精度。然而由于人们对需求分类的效果要求越来越高,传统的需求分类方法耗时较长且精确度不高。
4.目前已有的需求分类研究仍有一定的局限性。首先,现有的需求分类技术忽略了结构特征和句法信息。传统的需求分类方法在很大程度上依赖特征工程,模型将文本视为几个词的集合,和每个单词出现在集合独立与其他词没有建立关系,传统的特征提取技术只获取单词本身的特征和需求句的浅层信息很难获取语法和句法信息。其次,大多数需求分类模型泛化能力较差,特别是使用人工预处理的模型,应用到未知软件项目时,模型性能急剧下降,导致需求分类模型很难应用到实际项目中。
5.我们采用的图注意力网络是一种基于图数据的图神经网络,相比于传统的网络,图注意力网络能更好的通过图结构的数据捕获需求语句的特征信息,被广泛应用于推荐系统,图像处理,知识推理,知识图谱构建等任务中。将先进的自然语言处理技术应用有需求识别,可以更好的提高软件规模度量任务的准确度和效率。从而提供自动化软件规模度量的思路和技术,这种方式具备一定的可行性。


技术实现要素:

6.发明目的:为了解决现有的技术的不足,本发明提供了一种基于需求识别的软件
规模度量方法。
7.技术方案:本发明提供了一种需求识别的软件规模度量方法,包括如下步骤:
8.步骤1:获取目标软件的需求规范文档。
9.步骤2:对目标软件需求文档进行数据预处理,得到需求语句数据。
10.步骤3:将预处理过的需求语句数据输入到使用图注意力网络和bert构建的自动需求分类模型中,输出需求语句类别。
11.步骤4:根据需求识别结果,需求语句中若含有功能需求则进行功能点获取,若含有非功能需求则将非功能需求属性嵌入到该语句对应的功能点计算出该功能点规模,并将非功能属性统计到全局非功能属性。
12.步骤5:最后根据获取的功能点规模、全局非功能需求分类统计和专家评判意见计算软件规模度量。
13.进一步,所述步骤3中,对所构建的基于图注意力网络和bert的自动需求分类模型,包括如下步骤:
14.步骤3-1)数据预处理模块。我们对获取的需求文本进行数据清洗,去掉非需求语句,并对需求语句进行去重,去乱码,去空格和语句分词处理。
15.步骤3-2)需求图构建模块。对每一条需求语句构建了一个相应的语法解析树,用于揭示需求语句中丰富的句法信息和词汇间的依赖关系;基于句法解析树构造依赖关系图。
16.步骤3-3)图嵌入模块。首先使用bert对构建的依赖解析图进行节点初始化嵌入,得到向量化的节点表示;然后使用图注意力网络学习需求语句的特征信息,通过对图中节点的前向邻域和后向邻域的信息进行聚合,得到双向节点嵌入,在学习节点嵌入的基础上构造图嵌入,获取整个图的特征信息表示。
17.步骤3-4)图分类模块。将输出的图嵌入信息输入到多层感知器(mlp)中进行分类操作,输出需求候选子类的概率分布。然后使用softmax函数进行归一化处理输出需求分类结果。
18.步骤3-1)中数据预处理模块具体构建过程如下:
19.将需求文档中的句子整理成语料库s={s1,s2,...,sn},对数据进行去重操作,删除句子前后的空格,去掉语料库s中的非需求语句,并对需求语句进行去乱码,去空格,语句去重和语句分词处理。
20.步骤3-2)中需求图构建模块过程如下:
21.步骤3-2-1):构建句法解析图。我们使用依赖解析器执行线性时间扫描法来构建句法解析图。依次对需求语句进行转换操作,直至所有语句构建对应的句法解析图。
22.步骤3-2-2):构建依赖解析图。我们将句法解析图中的每个词设置为依赖解析图的节点,得到节点集合,每个节点信息都是一个字典类型,包括节点值,节点位置id(该词在原始文本序列中的位置)和节点id;将词语之间的句法关系连接设置为依赖解析图的边,我们使用一个新节点来表示两个节点之间的依赖关系,将每条边视为一个图节点并构建二部图。
23.步骤3-3)中图嵌入模块具体构建过程如下:
24.步骤3-3-1:使用bert进行节点初始化嵌入。我们将需求句重构为适合bert输入的
形式,在需求句的开头和结尾分别添加“[cls]”和“[cls]”。调整输入序列为合适大小。
[0025]
步骤3-3-2:双向图注意力网络特征学习
[0026]
(1)我们根据节点之间的边方向,指向w的邻居节点称为前向邻居,记为流出w的邻居节点称为后向邻居。表示
[0027]
(2)我们通过全连接的神经网络连接每个前向邻居的向量,然后使用聚合器执行最大池化操作。将节点wi的k个正向邻居的正向表示聚合为单个向量k∈{1,...,k}为迭代索引。前向聚合的运行公式为:
[0028][0029]
其中max是元素的max运算符,σ是一个激活函数,w
pool
是一个池参数矩阵。
[0030]
(3)我们使用新生成的邻域向量连接节点w的前向表示并将连接向量输入到全连接层,更新节点的前向表示,供下一次迭代使用。
[0031]
(4)我们使用与步骤(2)和(3)中正向操作相似的过程来更新向后操作。向后聚合所用的聚合函数公式为:
[0032][0033]
(5)重复步骤(2)-(4)k次,将最终的正向表示和反向表示积分为v的最终双向表示,完成节点嵌入操作。
[0034]
(6)最后,采用基于节点的方法进行图的嵌入操作。我们在输入图中添加一个新的核心节点ws,并将所有其他节点直接添加到ws中生成图嵌入。
[0035]
步骤3-4)中图分类模块具体构建过程如下:
[0036]
步骤3-4-1:使用多层感知机进行分类。我们使用mlp模型来计算概率。r表示一个固定的分布,w1∈rh×m为全连接权值矩阵,h为隐含层数,b1是一个偏置项,o∈rh×1为全连接层输出,具体计算公式如下:
[0037]
o=f(w1r+b1)
[0038]
步骤3-4-2:使用softmax进行分类结果标准化。我们将原始特征空间转换为置信空间,然后应用softmax层进行分类,softmax层i∈rc×1表示如下:
[0039]
i=w2o
[0040]
其中w2∈rc×h为转换矩阵,c为类数。如果对需求的四个子类进行分类,则c=4。每个类样本的置信度为i。我们根据softmax层输出的标准化置信度值来确定最终的分类结果。
[0041]
步骤4中,针对需求分类结果,对功能需求语句获取功能点,其中将功能点分类为数据功能和交易功能。数据功能是指向用户提供的满足内部或者外部数据需求的功能,交易功能指的是向用户提供的用来处理数据的功能。对非功能需求语句获取非功能需求属性,将非功能需求的语句划分到性能、可靠性、可用性、安全性、可维护性这五大类非功能需求类型之中。并将非功能需求属性嵌入到该语句对应的功能点中参与功能点规模计算,最后将非功能需求属性统计到全局非功能属性中,作为软件工作量规模的调整因子之一。
[0042]
步骤5中,根据功能点规模、全局非功能需求分类统计和专家评判意见计算软件规模度量。其中功能点规模和全局非功能需求分类统计根据权利要求7获取。专家根据项目经验判定软件所属类型和性质进行评判打分。
[0043]
本发明的有益效果是,针对需求文本的一些特性,设计需求文本预处理方法,在此基础上构建需求语句的依赖解析图来表示需求的句子结构和句法特征,我们使用bert预训练模型对依赖解析图中节点进行初始化嵌入,生成上下文语义信息的动态词向量,然后利用图注意力网络挖掘需求的隐式结构特征和句法特征,并且通过特征融合的方法将bert和图注意力网络的优势进行互补,捕获更多的需求信息,达到提升自动需求分类精度的目的,在实际的需求分析中发挥了重要作用。
附图说明
[0044]
图1为本发明提供的一种基于需求识别的软件规模度量流程图。
[0045]
图2为本发明提供的一种需求识别流程图。
[0046]
图3为本发明提供的一种基于bert和图注意力网络的自动需求分类模型框架图。具体实施方法
[0047]
下面结合附图和实施例进一步描述本发明,应该理解,以下所述实施例旨在便于对本发明的理解,而对其不起任何限定作用。
[0048]
本发明在充分理解实际软件规模度量流程以及对功能点度量软件规模等方法进行深入学习的前提下,通过对已有功能点分析过程知识的学习,实现智能化功能点分析,采用自然语言处理模型实现需求识别,最后将功能点度量方法和需求识别相结合,实现高效、准确、可靠的软件规模度量流程,如图1所示。
[0049]
首先,本发明通过对软件规模度量领域已有的公共数据源进行基础数据构建,同时针对特定领域(如电子政务、电商、交通等领域)的术语及功能点词汇进行数据清洗、语句去重、去乱码、去空格和语句分词处理。然后,针对不同的应用类型和应用目标,围绕需求识别、需求分类、命名实体识别、功能点提取等技术手段,采用bert和图神经网络技术相结合的技术思路,对需求识别和功能点提取等任务提供分析以及数据支撑。
[0050]
之后,本发明通过结合功能点算法,通过需求识别实现智能功能点识别,根据功能点算法在软件规模度量中的应用,结合自然语言处理技术以及深度学习技术,实现免人工、高效率、高准确度的软件规模度量方法。下面通过具体的实施方式对本发明做进一步说明。
[0051]
如图1所示,本发明的基于需求识别的软件规模度量流程,整个过程主要包括如下步骤:
[0052]
步骤1:获取目标软件的需求规范文档。
[0053]
步骤2:对目标软件需求文档进行数据预处理;根据项目的软件需求文档,先对文档进行了归一化处理,剔除无意义字符或多余字符,大小写转换,繁简转换进行数据清洗,然后进行数据缺失补全,数据噪声过滤,数据格式一致性等的操作。
[0054]
步骤3:将预处理过的需求语句数据输入到使用图注意力网络和bert构建的自动需求分类模型中,输出需求语句类别,该模型结构图如图3所示。
[0055]
步骤3-1)数据预处理模块。我们对获取的需求文本进行处理,去掉非需求语句,并对需求语句进行去重,去乱码,去空格和语句分词处理;将需求文档中的句子整理成语料库s={s1,s2,

,sn},对数据进行去重操作,删除句子前后的空格,去掉语料库s中的非需求语句,并对需求语句进行去乱码,去空格,语句去重和语句分词处理。
[0056]
分词是需求语句处理的基础,现有的分词方法可分为三大类:基于字符串匹配的
分词方法、基于理解的分词方法和基于统计的分词方法。我们使用主流的分词词库进行分词,通过实验发现现有的分词词库对于某一领域的专业词汇分类效果不好,因此我们在现有词库的基础上进行专业词汇扩充,并导入停用词表,提高需求语句的分词准确率。
[0057]
对于模型训练的数据,以计数项内容作为出发点,因为计数项内容是从功能点描述文本中提取出来的,可以说计数项的内容是对功能点类型判别的一种依据。对文本进行分词之后,判断文本分词后的单个词是否蕴含与计数项内容的信息,然后将分词文本与计数项内容进项匹配。使每个词语都有一个与之对应的标签。
[0058]
步骤3-2)需求图构建模块。对每一条需求语句构建了一个相应的语法解析树,用于揭示需求语句中丰富的句法信息和词汇间的依赖关系;基于句法解析树构造依赖关系图。
[0059]
步骤3-2-1):构建句法解析图。我们使用依赖解析器执行线性时间扫描法来构建句法解析图。依次对需求语句进行转换操作,直至所有语句构建对应的句法解析图。
[0060]
步骤3-2-2):构建依赖解析图。我们将句法解析图中的每个词设置为依赖解析图的节点,得到节点集合,每个节点信息都是一个字典类型,包括节点值,节点位置id(该词在原始文本序列中的位置)和节点id;将词语之间的句法关系连接设置为依赖解析图的边,我们使用一个新节点来表示两个节点之间的依赖关系,将每条边视为一个图节点并构建二部图。
[0061]
步骤3-3)图嵌入模块。首先使用bert对构建的依赖解析图进行节点初始化嵌入,得到向量化的节点表示;然后使用图注意力网络学习需求语句的特征信息,通过对图中节点的前向邻域和后向邻域的信息进行聚合,得到双向节点嵌入,在学习节点嵌入的基础上构造图嵌入,获取整个图的特征信息表示。
[0062]
步骤3-3-1:使用bert进行节点初始化嵌入。我们将需求句重构为适合bert输入的形式,在需求句的开头和结尾分别添加“[cls]”和“[cls]”。调整输入序列为合适大小。
[0063]
步骤3-3-2:双向图注意力网络特征学习:
[0064]
(1)我们根据节点之间的边方向,指向w的邻居节点称为前向邻居,记为流出w的邻居节点称为后向邻居。表示
[0065]
(2)我们通过全连接的神经网络连接每个前向邻居的向量,然后使用聚合器执行最大池化操作。将节点wi的k个正向邻居的正向表示聚合为单个向量k∈{1,...,k}为迭代索引。
[0066]
前向聚合的运行公式为:
[0067]
其中max是元素的max运算符,σ是一个激活函数,w
pool
是一个池参数矩阵。
[0068]
(3)我们使用新生成的邻域向量连接节点w的前向表示并将连接向量输入到全连接层,更新节点的前向表示,供下一次迭代使用。
[0069]
(4)我们使用与步骤(2)和(3)中正向操作相似的过程来更新向后操作。
[0070]
向后聚合所用的聚合函数公式为:
[0071]
(5)重复步骤(2)-(4)k次,将最终的正向表示和反向表示积分为v的最终双向表示,完成节点嵌入操作。
[0072]
(6)最后,采用基于节点的方法进行图的嵌入操作。我们在输入图中添加一个新的
核心节点ws,并将所有其他节点直接添加到ws中生成图嵌入。
[0073]
步骤3-4)图分类模块。将输出的图嵌入信息输入到多层感知器(mlp)中进行分类操作,输出需求候选子类的概率分布。然后使用softmax函数进行归一化处理输出需求分类结果。
[0074]
步骤3-4-1:使用多层感知机进行分类。我们使用mlp模型来计算概率。r表示一个固定的分布,w1∈rh×m为全连接权值矩阵,h为隐含层数,b1是一个偏置项,o∈rh×1为全连接层输出,具体计算公式如下:o=f(w1r+b1)
[0075]
步骤3-4-2:使用softmax进行分类结果标准化。我们将原始特征空间转换为置信空间,然后应用softmax层进行分类,softmax层i∈rc×1表示如下:
[0076]
i=w2o
[0077]
其中w2∈rc×h为转换矩阵,c为类数。如果对需求的四个子类进行分类,则c=4。每个类样本的置信度为i。我们根据softmax层输出的标准化置信度值来确定最终的分类结果。
[0078]
步骤4:根据需求识别结果,需求语句中若含有功能需求则对该语句进行功能点获取,若含有非功能需求则将非功能需求属性嵌入到该语句对应的功能点计算出该功能点规模,并将非功能属性统计到全局非功能属性,具体操作步骤如下:
[0079]
根据需求识别结果我们可以确定含有功能点的需求语句,在此基础上对功能需求语句中所包含的功能点进行提取。未经调整的功能点数反映了应用向用户提供的功能的数量,在计数过程中未经调整的功能点数主要包括两个大类:数据功能和交易功能。数据功能是指向用户提供的满足内部或者外部数据需求的功能,交易功能指的是向用户提供的用来处理数据的功能。
[0080]
若需求语句为非功能需求,则将非功能需求的语句划分到性能、可靠性、可用性、安全性、可维护性这五大类非功能需求类型之中。进行分类统计,作为后续软件规模度量的调整因子。
[0081]
若需求语句同时包含功能需求和非功能需求,例如,“用户登录系统过程中,需要验证用户身份和权限”这句话不仅包括用户登录的数据功能,并且隐含了安全性这一非功能需求。将非功能需求属性嵌入到该需求语句对应的功能点中,参与功能点规模调整,并将非功能需求属性统计到全局非功能属性中,作为后续软件规模度量的调整因子。
[0082]
步骤5:最后根据获取的功能点规模、全局非功能需求分类统计和专家评判意见计算软件规模度量。
[0083]
步骤5-1:功能点规模的计算。功能点规模的计算主要在需求识别的基础上,对功能需求中的功能点进行统计,若该需求语句含有非功能需求属性,就按照非功能属性因子进行嵌入,调整该功能点大小,然后将调整后的所有功能点进行统计,得到软件的功能点规模大小。
[0084]
功能点规模=∑[功能点*(1+非功能需求属性)]
[0085]
步骤5-2:确定调整系数。调整系数主要为全局非功能需求统计和功能点算法中提到的通用系统特性及其影响程度的评定。
[0086]
通用系统特性及其影响程度由富有经验的软件专家进行评判打分,具体打分表格如下:
通用系统特性影响程度级别备注1.系统安全性2.分布式数据处理3.性能4.使用强度高的配置5.响应速度6.在线数据输入7.最终用户的效率8.在线更新9.软件复杂度10.可复用性11.易安装性12.易操作性13.是否多场地布置14.变更要求每个系统特性的影响程度分成6级,0不存在或者没有影响;1偶尔的影响;2轻微的影响;3中等的影响;4显著的影响;5强烈的影响。
[0087]
调整系数是建立在系统非功能需求统计和14个用来评价被分析的应用的功能的通用系统特性的基础之上的。每一个特性都有一些规则来进行评分。对这14个通用系统特性进行总结,然后计算出最终调整系数,该系数会在正负40%的幅度上调整功能点规模。
[0088]
调整系数=非功能需求影响因子+系统特性影响因子
[0089]
步骤5-3:软件规模度量计算。在软件功能点数确定和调整系数确定后,通过计算来确定最终的软件规模。计算公式:软件规模=功能点规模*调整系数。

技术特征:
1.基于需求识别的软件规模度量方法,其特征是,包括:步骤1:获取目标软件的需求规范文档;步骤2:对目标软件需求文档进行数据预处理,得到需求语句数据;步骤3:将预处理过的需求语句数据输入到使用图注意力网络和bert构建的自动需求分类模型中,输出需求语句类别;步骤4:根据需求识别结果,需求语句中若含有功能需求则进行功能点获取,若含有非功能需求则将非功能需求属性嵌入到该语句对应的功能点计算出该功能点规模,并将非功能属性统计到全局非功能属性;步骤5:最后根据获取的功能点规模、全局非功能需求分类统计和系统特性计算软件规模度量。2.根据权利要求1所述的方法,其特征在于,步骤3中,对所构建的基于图注意力网络和bert的自动需求分类模型,包括如下步骤:1)数据预处理模块:我们对获取的需求文本进行数据清洗,去掉非需求语句,并对需求语句进行去重,去乱码,去空格和语句分词处理;2)需求图构建模块:对每一条需求语句构建了一个相应的语法解析树,用于揭示需求语句中丰富的句法信息和词汇间的依赖关系,并基于句法解析树构造依赖关系图;3)图嵌入模块:首先使用bert对构建的依赖解析图进行节点初始化嵌入,得到向量化的节点表示;然后使用图注意力网络学习需求语句的特征信息,通过对图中节点的前向邻域和后向邻域的信息进行聚合,得到双向节点嵌入,在学习节点嵌入的基础上构造图嵌入,获取整个图的特征信息表示;4)图分类模块:将输出的图嵌入信息输入到多层感知器(mlp)中进行分类操作,输出需求候选子类的概率分布;然后使用softmax函数进行归一化处理输出需求分类结果。3.根据权利要求2所述的方法,其特征在于,步骤2)中需求图构建模块过程如下:我们使用依赖解析器执行线性时间扫描法来构建句法解析图,然后,将句法解析图中的每个词设置为依赖解析图的节点,得到节点集合;将词语之间的句法关系连接设置为依赖解析图的边。4.根据权利要求2所述的方法,其特征在于,步骤3) 中图嵌入模块具体构建过程如下:使用bert进行节点初始化嵌入;我们将需求句重构为适合bert输入的形式,调整输入序列为合适大小,然后使用双向图注意力网络特征学习,根据节点间边的方向,添加节点的前后邻居节点,查找全连接的神经网络连接每个前向(后向)邻居的向量,然后使用聚合器执行最大池化操作将节点的邻居信息聚合为节点的邻域向量,最后,采用基于节点的方法进行图的嵌入操作;我们在输入图中添加一个新的核心节点,并将所有其他节点直接添加到新的核心节点中生成图嵌入。5.根据权利要求2所述的方法,其特征在于,步骤4)中图分类模块具体构建过程如下:首先,使用mlp模型来计算概率;然后通过softmax进行分类结果标准化;我们根据softmax层输出的标准化置信度值来确定最终的分类结果。6.根据权利要求1所述的方法,其特征在于,步骤4中,针对需求分类结果,对功能需求语句获取功能点,其中将功能点分类为数据功能和交易功能,数据功能是指向用户提供的
满足内部或者外部数据需求的功能,交易功能指的是向用户提供的用来处理数据的功能,对非功能需求语句获取非功能需求属性,将非功能需求的语句划分到性能、可靠性、可用性、安全性、可维护性这五大类非功能需求类型之中,并将非功能需求属性嵌入到该语句对应的功能点中参与功能点规模计算,最后将非功能需求属性统计到全局非功能属性中,作为软件工作量规模的调整因子之一。7.根据权利要求1所述的方法,其特征在于,步骤5中,根据功能点规模、全局非功能需求分类统计和系统特性计算软件规模度量;其中功能点规模和全局非功能需求分类统计根据权利要求6获取;专家根据项目经验判定软件所属类型和性质进行评判打分。

技术总结
本发明公开了一种基于需求识别的软件规模度量方法。该方法以软件的需求规范文档为基础,获取软件需求并进行需求分类,通过对功能需求中的功能点识别统计得到软件规模。包括:获取目标软件的需求规范文档;对目标软件需求文档进行数据预处理,得到需求语句数据;使用图注意力网络和BERT构建自动需求分类模型进行需求识别分类;对功能需求则进行功能点规模计算,对非功能需求进行属性嵌入和全局统计;最后以功能点规模估算为主,全局非功能需求分类统计和系统特性作为调整系数完成软件规模度量。度量。度量。


技术研发人员:李刚 郑成鹏 李敏 周鸣乐 韩德隆
受保护的技术使用者:齐鲁工业大学
技术研发日:2022.03.29
技术公布日:2022/7/5
转载请注明原文地址: https://www.8miu.com/read-10662.html

最新回复(0)