一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

软件需求和代码映射方法及系统与流程

2021-12-14 21:58:00 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种软件需求和代码映射方法及系统。


背景技术:

2.软件质量与效率是软件开发活动两个最重要的技术指标,但严重受制于目前软件过程中各个环节的独立性。软件需求更改、代码更改、软件重用和软件测试等是软件工程的重要活动,它们都涉及软件需求与代码之间的映射关系。
3.软件需求文档、设计文档、代码文档和测试用例文档是软件过程的中间产品,目前国内外绝大多数软件系统,这些文档相互之间没有关系,在进行修改时,人为的将对应的文件统一修改,这给软件需求或代码的更改、软件的维护带来极大的不便。
4.因此,如何提供一种软件需求和代码映射方法及系统,建立起从软件的需求到代码间的映射,利用此映射,有效提高相关的软件活动效率和质量,成为亟待解决的问题。


技术实现要素:

5.针对现有技术中的缺陷,本发明实施例提供一种软件需求和代码映射方法及系统,至少现有技术中无法实现软件需求和代码的映射关联,导致相关的软件活动效率低下和质量差的技术问题。
6.提供一种软件需求和代码映射方法,包括:
7.基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量;
8.基于源代码文本,根据源代码特征提取模型,确定源代码特征向量;其中,所述源代码特征向量包括:源代码文本语义信息和源代码功能语义信息;
9.基于所述需求文本语义向量和所述源代码特征向量的相似度,确定所述软件需求和代码的映射关系。
10.本发明还提供一种软件需求和代码映射系统,包括:需求特征确定单元、代码特征确定单元和相似度确定单元;
11.所述需求特征确定单元,用于基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量;
12.所述代码特征确定单元,用于基于源代码文本,根据源代码特征提取模型,确定源代码特征向量;其中,所述源代码特征向量包括:源代码文本语义信息和源代码功能语义信息;
13.所述相似度确定单元,用于基于所述需求文本语义向量和所述源代码特征向量的相似度,确定所述软件需求和代码的映射关系。
14.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述软件需求和代码映射方法的步骤。
15.本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算
机程序被处理器执行时实现如上述任一种所述软件需求和代码映射方法的步骤。
16.本发明提供的软件需求和代码映射方法及系统,确定包含源代码文本语义信息和源代码功能语义信息的源代码特性向量,以及需求文档的需求文本语义向量,根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,利用此映射,有效提高相关的软件活动效率和质量。
附图说明
17.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
18.图1为本发明提供的软件需求和代码映射方法流程图;
19.图2为本发明提供的软件需求和代码映射方法流程示意图;
20.图3为本发明提供的建立面向软件工程领域词嵌入模型的流程示意图;
21.图4为本发明提供的提取需求与源代码文本语义信息的流程示意图;
22.图5为本发明提供的提取源代码功能语义信息的流程示意图;
23.图6为本发明提供的tree

lstm神经网络单元结构示意图;
24.图7为本发明提供的图神经网络模型工作原理示意图;
25.图8为本发明提供的软件需求和代码映射系统结构示意图;
26.图9为本发明提供的电子设备的实体结构示意图。
具体实施方式
27.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
28.频繁的需求与代码更改是软件开发不可或缺的、软件的重用、软件的影响域分析、软件测试等都需要建立起从软件的需求到代码间的一种映射,利用此映射,可以有效提高相关的软件活动效率和质量。
29.近些年来,人工智能技术的发展为此技术提供了可能。通过优化神经网机器学习模型,利用词嵌入算法,可将需求文档、代码转变成特征向量集;通过多种神经网络(循环神经网络、最大池神经网络、注意力机制神经网络等)的学习算法,可将特征向量进行融合;利用神经网络将控制流图特征、抽象语法树特征转变成特征向量,并基于代码语义库,以便能很好的理解代码的语义。通过向量的比较、代码语义,以建立其从需求到代码准确的映射。基于现有的面向领域的中英文词库、代码语义库,通过大量的工程实验,以验证计算方法的准确性和有效性。
30.图1为本发明提供的软件需求和代码映射方法流程图,如图1所示,本发明实施例提供一种软件需求和代码映射方法,包括:
31.步骤s1,基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向
量;
32.步骤s2,基于源代码文本,根据源代码特征提取模型,确定源代码特征向量;其中,源代码特征向量包括:源代码文本语义信息和源代码功能语义信息;
33.步骤s3,基于需求文本语义向量和源代码特征向量的相似度,确定软件需求和代码的映射关系。
34.需要说明的是,上述方法的执行主体可以是计算机设备。
35.具体的,图2为本发明提供的软件需求和代码映射方法流程示意图2所示,由于需求文档中包含的信息可能存在许多连词和助词等没有包含具体文本语义信息的词,在对需求文档进行处理之前,可以将无意义的词进行剔除,提取需求文档中包含文本语义信息的词,句子等内容,并确定需求文档词向量。
36.需求文档词向量可记为:
37.e
(n)
=e1,e2……
e
n
=embedding(words in requirment)
38.其中,words in requirment表示需求文档中的词汇,embedding表示需求文档的词嵌入模型,e1,e2……
e
n
是这些词汇经过词嵌入模型编码后得到的词向量。
39.同理,将源代码文件中无意义的信息进行剔除,提取源代码文件中包含文本语义信息的文件名、函数名、注释、语句、变量、常量和api接口等内容,并确定源代码文本词向量。
40.源代码文本词向量可记为:
41.e

(n)
=e
′1,e
′2……
e

n
=embedding(words in requirment)
42.其中,words in code表示源代码文本中的词汇,其中以驼峰或下划线的方式命名的变量名,函数名等或被拆分成多个词汇。embedding表示源代码的词嵌入模型,e
′1,e
′2……
e

n
是这些词汇经过词嵌入模型编码后得到的词向量。
43.在步骤s1中,基于需求文档确定需求文档词向量e(n),根据需求文档语义特征提取模型,利用神经网络将其融合为一个代表需求文本语义的向量,确定需求文本语义向量。
44.需求文本语义向量可记为:
[0045][0046]
其中,h1,h2,

h
n
代表经过需求文档中词汇的词向量。代表经过神经网络训练后这些词向量的权重系数。b是神经网络的偏置项。
[0047]
可以理解的是,由于源代码涉及循环、选择和跳转等多种语句,仅顺序的提取源代码的文本语义信息并不足以反应源代码的特征,因此,需要在源代码文本语义信息的基础上,结合源代码功能语义信息,共同反映源代码的特征信息。
[0048]
在步骤s2中,基于源代码文本确定源代码文本词向量e

(n)
,根据源代码特征提取模型,确定源代码特征向量其中,源代码特征向量包括:源代码文本语义信息和源代码功能语义信息。
[0049]
可以理解的是,在利用需求文档语义特征提取模型和源代码特征提取模型之前,还需要对模型进行训练,模型训练时所使用的具体方法和模型的具体结构可根据实际需求进行调整,本发明对此不做限定。
[0050]
在确定需求文本语义向量和源代码特征向量之后,在步骤s3中,计算和的相似度,根据相似度的大小,确定软件需求和代码的映射关系。
[0051]
例如:根据余弦相似度公式计算需求文本语义向量和源代码特征向量相似度的相似度:
[0052]
余弦相似度公式:
[0053]
其中,m,n分别表示要比较的两个特征向量,m
i
和n
i
分别表示两个特征向量的分量。
[0054]
需要说明的是,在本发明中,计算需求文本语义向量和源代码特征向量相似度的方法除了余弦相似度外,还可使用计算欧式距离和曼哈顿距离等方法。在本发明实际应用过程中,相似度计算方法,均可根据实际情况进行调整,本发明对此不做限定。
[0055]
可以理解的是,可以基于本发明提供的软件需求和代码映射方法构建软件需求和代码映射数据库,在确定软件需求的条件下,根据映射关系查找相对应的代码,或者在确定代码的条件下,根据映射关系查找相对应的软件需求。本发明具体的应用方法可根据实际需求进行调整,本发明对此不做限定。
[0056]
本发明提供的软件需求和代码映射方法,确定包含源代码文本语义信息和源代码功能语义信息的源代码特性向量,以及需求文档的需求文本语义向量,根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,利用此映射,有效提高相关的软件活动效率和质量。
[0057]
可选的,根据本发明提供的一种软件需求和代码映射方法,基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量,具体包括:
[0058]
基于需求文档,根据需求文档词嵌入模型,确定需求文档词向量;
[0059]
基于需求文档词向量,根据需求文档语义特征提取模型,确定需求文本语义向量。
[0060]
具体的,基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量,具体包括:
[0061]
基于需求文档,根据预先训练好的需求文档词嵌入模型,确定需求文档词向量;
[0062]
基于需求文档词向量,根据需求文档语义特征提取模型,确定需求文本语义特征。
[0063]
图3为本发明提供的建立面向软件工程领域词嵌入模型的流程示意图,如图3所示,可以理解的是,在确定需求文本和源代码文本的特征信息时,需要应用需求文档词嵌入模型和源代码词嵌入模型,在此之前,还需要训练需求文档词嵌入模型和源代码词嵌入模型。
[0064]
可以理解的是,由于需求文档和源代码中均包含一些并没有实际意义的词,为了便于模型的训练和特征的识别,需要使用分词工具,去除需求文档和源代码中的停用词后作为词嵌入模型的输入。
[0065]
由于在书写软件需求文档时,所应用的语言不限于单一类别,以同时使用中文和英文为例,在训练需求文档词嵌入模型时,需要收集面向软件工程领域的中文词汇和面向软件工程领域的英文词汇构建需求词库,并建立面向软件工程中英文词库以及它们之间的
对应关系。
[0066]
基于词嵌入算法,构建需求文档词嵌入模型,利用上述需求词库以及中英文词语之间的对应关系训练需求文档词嵌入模型,并验证词嵌入模型的效果。可以理解的是,在上述例子中,需求词库中包含中文词汇和英文词汇,除此之外,还可根据本发明的应用场景调整词库中包含的语言类型,本发明对此不做限定。
[0067]
此外,目前软件工程的词库中几乎没有中文的软件工程领域词库,同样需要收集实际软件工程项目如航空航天、医疗卫生和金融等,并提取其中的专业词汇与专业术语进行详细的补充。由于软件工程中的专有词汇会不断增加,因此本发明中的词库会随着软件工程词库的增长而不断收纳新的词汇。
[0068]
在训练源代码词嵌入模型时,软件的源文件中需要去除了构建配置,二进制文件,项目描述,数据描述等文件,也无需考虑来自第三方的文件,比如各种库文件。根据大量的源文件确定源代码数据库。
[0069]
基于词嵌入算法,构建源代码词嵌入模型,利用上述源代码数据库训练源代码词嵌入模型,并验证词嵌入模型的效果。
[0070]
可以理解的是,以构建适用于软件工程中需求与源代码的词嵌入模型为例,对本发明进行说明。
[0071]
本发明的词嵌入模型以任意一个单词w
k
作为输入,并经过训练,如果w
k
出现在了单词w
t
的上下文中,那么预测概率为1,否则为0。训练公式如下:
[0072][0073]
其中,在给定任意一个单词w
k
的情况下,其向量表示w
k
作为w
t
logistic回归模型中的参数,即为w
k
的特征向量。
[0074]
在训练过程中如果w
k
在w
t
的上下文下,则认为它是一个w

。任何其他词都可以作为一个w
_
。上下文c
t
通常定义为一个以当前单词w
t
为中心的固定大小的窗口。(有噪声的)否定例n
t
的集合是通过从领域词汇中随机抽取固定数量的单词来构建的,针对上下文c
t
中的每个单词。
[0075]
当训练包含t个单词的句子序列时,该使用随机梯度下降来最小化如下方程所示的对数似然目标函数j(w)。
[0076]
损失函数如下:
[0077][0078]
进一步,可以理解的是,提取源代码文本语义时的输入包括代码中的注释,类属性(这里定义为从源码中提取的包括类名,全局变量,函数名)和函数内的局部变量名。
[0079]
本发明采用改进后的基于注意力机制的长短时记忆神经网络(attention

based lstm)来处理需求和源代码中的注释语句。因为这些文本是用自然语言描述的连续语句,十分适合使用attention

based lstm提取其中的语义信息。
[0080]
每个lstm单元包含了一个输入门,一个输出门,一个遗忘门,他们的计算公式分别如下所示。
[0081]
i
t
=σ(w
i
x
t
u
i
h
t
‑1 b
i
)
[0082]
o
t
=σ(w
o
x
t
u
o
h
t
‑1 b
o
)
[0083]
f
t
=σ(w
f
x
t
u
f
h
t
‑1 b
f
)
[0084]
其中,x
t
代表该记忆单元的输入,h
t
‑1代表上一个记忆单元的输出,w
i
,w
o
,w
f
分别代表输入门,输出门,遗忘门中输入x
t
的权重。u
i
,u
o
,u
f
则分别代表输入门,输出门,遗忘门中上一个记忆单元输出h
t
‑1的权重。b
i
,b
o
,b
f
分别代表输入门,输出门,遗忘门中的偏置项。σ是神经网络的激活函数。
[0085]
除此之外,lstm单元还包括一个记忆候选向量和记忆单元c
t
。记忆候选向量由一个双曲正切函数控制。记忆单元则是由通过输入门的候选向量与上一个记忆单元c
t
‑1通过遗忘门的和得到的。

是hadamard(哈达玛)乘积,表示对应位置元素相乘。
[0086][0087][0088]
h
t
=o
t

tanh(c
t
)
[0089]
lstm模型(long

short term memory,长短期记忆模型)中,以最后一个lstm单元的输出作为整个句子经过神经网络的输出结果。attention机制是通过保留每个lstm单元对输入序列的中间输出结果,然后训练一个模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联。公式如下所示:
[0090][0091]
α=softmax(ω
t
c)
[0092][0093][0094]
其中,是lstm中每个神经单元的输出,tanh是双曲正切函数,softmax函数是归一化指数函数,用于逻辑回归模型。
[0095]
需要说明的是,上述模型的训练方法仅作为一个具体的例子对本发明进行说明,在本发明实际应用过程中,模型训练时所使用的具体方法和模型的具体结构可根据实际需求进行调整,本发明对此不做限定。
[0096]
进一步,在确定词嵌入模型之后,还可以进行模型准确性的判断,根据准确性不断调整模型进行优化。
[0097]
基于公式,
[0098]
用对数似然损失函数计算词嵌入模型的准确性,其中,x为输入变量y为输出变量,n为输入样本量,y
i
是一个0,1的指标,为模型输出正确类别的概率。
[0099]
本发明提供的软件需求和代码映射方法,通过基于训练好的需求文档词嵌入模型和源代码词嵌入模型,分别处理需求文档和源代码文档,确定需求文档词向量和源代码文本词向量,根据词嵌入模型提取需求文档和源代码的词向量特征,准确的描述需求文档和源文件中所包含的词向量信息。
[0100]
可选的,根据本发明提供的一种软件需求和代码映射方法,源代码特征提取模型包括:源代码词嵌入模型、源代码文本语义特征提取模型和功能语义特征提取模型;
[0101]
基于源代码文本,根据源代码特征提取模型,确定源代码特征向量,具体包括:
[0102]
基于源代码文本,根据源代码词嵌入模型,确定源代码文本词向量;
[0103]
基于源代码文本词向量,根据源代码文本语义特征提取模型,确定源代码文本语义向量;
[0104]
基于源代码文本,根据功能语义特征提取模型和源代码词嵌入模型,确定源代码功能语义向量;
[0105]
基于源代码文本语义向量和源代码功能语义向量,确定源代码特征向量。
[0106]
具体的,由于在确定源代码的特征信息时,需要确定源代码文本语义信息和源代码功能语义信息。对应的,源代码特征提取模型包括:源代码词嵌入模型、源代码文本语义特征提取模型和功能语义特征提取模型。分别提取上述两类特征信息。
[0107]
基于源代码文本,根据源代码特征提取模型,确定源代码特征向量,具体包括:
[0108]
基于源代码文本,根据预先训练好的源代码词嵌入模型,确定源代码文本词向量e

(n)
。可以理解的是,建立源代码词嵌入模型的方法在上文中以进行详细说明,在此不再赘述。
[0109]
基于源代码文本词向量e

(n)
,根据源代码文本语义特征提取模型,确定源代码文本语义向量。以提取的源代码文本词向量e

(n)
为基础,利用神经网络将其融合为一个代表需求文本语义的向量,即源代码文本语义向量。
[0110]
源代码文本语义向量为:
[0111][0112]
其中,h
′1,h
′2,

h

n
代表经过源代码文件中词汇的词向量。代表经过神经网络训练后这些词向量的权重系数。b

是神经网络的偏置项。
[0113]
基于源代码文本,根据功能语义特征提取模型和源代码词嵌入模型,确定源代码功能语义向量。可以理解的是,源代码功能语义向量包含了源代码在执行时所能实现的功能信息。源代码词嵌入模型用于将源代码词汇转换为语义向量。
[0114]
基于源代码文本语义向量和源代码功能语义向量,将两个类型的特征进行结合,确定源代码特征向量
[0115]
可以理解的是,在应用源代码词嵌入模型、源代码文本语义特征提取模型和功能语义特征提取模型之前,还包括训练源代码词嵌入模型、源代码文本语义特征提取模型和功能语义特征提取模型,具体的模型的训练方法和模型的具体结构可根据实际情况进行设置,本发明对此不做限定。
[0116]
图4为本发明提供的提取需求与源代码文本语义信息的流程示意图,如图4所示,由于本发明构建映射关系的基础在于需求文档的特征和源代码特征的相似性,确定需求文档和源代码的文本语义向量(需求文本语义向量和源代码文本语义向量)之后,还可以基于相似性计算,确定语义向量之间的关联关系,基于该关联关系是否准确匹配,对模型进行优化。
[0117]
可以理解的是,由于本发明根据需求文档以及源代码编码后的特征向量之间的相似度来建立映射链接,对于一条需求选择与其相似度最高的k个源代码文件,验证其中存在映射关系的个数,从而判断提取语义信息模型的准确性。
[0118]
在确定源代码特征向量之后,可以计算向量融合模型的准确性,根据准确性的数值,不断调整模型进行优化。
[0119]
向量融合模型的准确性计算公式:
[0120][0121]
其中,top(k)表示与一条需求相似度最高的k个源代码文件。right是其中存在映射关系的文件个数。模型的准确性与rs、cs、e、nnt、nns、nnc有关,其中,rs,cs分别代表需求与源代码编写的规范性,e代表词嵌入模型的准确性,nnt,nns,nnc分别代表提取文本语义信息中的特征向量融合神经网络的类型,结构以及它们之间的连接关系。f
t
则是这些影响因素与映射链接精确性之间的系数
[0122]
此外,在将需求和代码进行映射联系之后,还可以计算需求与代码映射链接精确性根据准确性的数值,调整需求和代码之间的映射关系。
[0123]
需求与代码映射链接精确性公式:
[0124][0125]
验证需求与代码映射链接精确性的判定方法与向量融合的判定方法相似,然而影响因素却存在差异。
[0126]
其中,top(k)表示与一条需求相似度最高的k个源代码文件。right是其中存在映射关系的文件个数。rs,cs分别代表需求与源代码编写的规范性,wc代表收集的软件工程领域中英文专有词汇收集的完整度,e代表词嵌入模型的准确性,ts,fs分别代表提取需求与源代码文本语义信息模型以及程序功能语义信息模型的准确性。f
p
则是这些影响因素与映射链接精确性之间的系数
[0127]
本发明提供的软件需求和代码映射方法,源代码特征提取模型包括:源代码词嵌入模型、源代码文本语义特征提取模型和功能语义特征提取模型,通过源代码文本语义特征提取模型提取源代码的文本语义信息,通过功能语义特征提取模型提取源代码的功能语义信息,基于源代码文本语义信息和源代码功能语义信息的能够准确地反映源代码的特征,有效的提高了对源代码的识别能力。根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,利用此映射,有效提高相关的软件活动效率和质量。
[0128]
可选的,根据本发明提供的一种软件需求和代码映射方法,功能语义特征提取模型包括:信息提取层、功能语义提取层、全局信息确定层和特征融合层;
[0129]
基于源代码文本,根据功能语义特征提取模型和源代码词嵌入模型,确定源代码功能语义向量,具体包括:
[0130]
将源代码文本输入信息提取层中,根据信息提取层,根据源代码词嵌入模型,确定抽象语法树特征、路径特征集和控制流图特征;
[0131]
将抽象语法树特征和路径特征集输入功能语义提取层中,根据功能语义提取层,确定源代码功能语义特征;
[0132]
将控制流图特征输入全局信息确定层中,根据全局信息确定层,确定源代码全局语义信息;
[0133]
将源代码功能语义特征和源代码功能语义信息输入特征融合层中,根据特征融合层,确定源代码功能语义向量。
[0134]
具体的,图5为本发明提供的提取源代码功能语义信息的流程示意图,如图5所示,功能语义特征提取模型包括:信息提取层、功能语义提取层、全局信息确定层和特征融合层。
[0135]
基于源代码文本词向量,根据功能语义特征提取模型,确定源代码功能语义向量,具体包括:
[0136]
将源代码文本词向量输入信息提取层中,提取源代码的抽象语法树(abstract syntax code,ast)、路径集和控制流图(control flow graph,cfg)。根据源代码词嵌入模型,分别将抽象语法树、路径集和控制流图中的语义信息转换为语义向量,将抽象语法树、路径集和控制流图经过词嵌入模型编码,确定抽象语法树特征、路径特征集和控制流图特征。
[0137]
可以理解的是,抽象语法树是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。路径集包含了源代码中所有的支路,控制流图为源代码程序的抽象表现。
[0138]
将抽象语法树特征和路径特征集输入功能语义提取层中,根据功能语义提取层,根据抽象语法树特征与路径特征集中路径相对应,能够有效确定与抽象语法树特征中与路径相关节点的信息,确定源代码功能语义特征。可以理解的是,该源代码功能语义特征为局部的特征信息,仅与路径相关,无法反应全局特征。
[0139]
将控制流图特征输入全局信息确定层中,根据全局信息确定层,确定源代码全局语义信息。可以理解的是,控制流图特征是代码的抽象表示,确定的源代码全局语义信息能够反映源代码的全局特征。
[0140]
将源代码功能语义特征和源代码功能语义信息输入特征融合层中,根据特征融合层,将两特征进行组合,确定源代码功能语义向量。
[0141]
可以理解的是,在应用功能语义特征提取模型之前,还需要训练功能语义特征提取模型,具体的训练方法和模型的具体结构可根据实际情况进行设置,本发明对此不做限定。
[0142]
进一步,在训练功能语义特征提取模型时,可以根据一下公式计算功能语义特征提取模型的准确性,根据准确性的数值,不断调整模型进行优化。
[0143][0144]
模型的准确性precision(fs)用交叉熵损失函数l
crossentropy
来计算。其中,n为输入样本量,m为功能类别的数量,对每一个样本i,模型给出属于该样本在类别c上的概率p
ic
,y
ic
为二值指示变量(0或1),若模型预测样本i的类别c与实际标签一致,则y
ic
为1,否则为0。
[0145]
进一步地,损失函数可简化为模型赋予真实标签概率p
true
的负对数,当模型赋予真实标签的概率趋于1时,损失函数接近于零。概率越接近于0,损失越大。
[0146]
本发明根据词嵌入模型准确性判定、文本语义信息提取中的向量融合模型准确性判定、功能语义特征提取模型准确性判定以及最终建立的映射关系的准确性判定4个公式验证模型的准确性并不断调整模型的结构,保证需求和代码映射的准确性。
[0147]
本发明提供的软件需求和代码映射方法,根据功能语义特征提取模型的信息提取层、功能语义提取层、全局信息确定层和特征融合层,分别确定源代码的局部特征和全局特征,结合局部特征和全局特征确定源代码功能语义向量,有效的提高了对源代码的识别能力。根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,利用此映射,有效提高相关的软件活动效率和质量。
[0148]
可选的,根据本发明提供的一种软件需求和代码映射方法,将抽象语法树特征和路径特征集输入功能语义提取层中,根据功能语义提取层,确定源代码功能语义特征,具体包括:
[0149]
将抽象语法树特征和路径特征集输入功能语义提取层中;
[0150]
基于功能语义提取层,根据预设拆分规则,将抽象语法树特征拆分为若干子语法树特征;
[0151]
基于子语法树特征和路径特征集,确定源代码功能语义特征。
[0152]
具体的,将抽象语法树特征和路径特征集输入功能语义提取层中,根据功能语义提取层,确定源代码功能语义特征,具体包括:
[0153]
将抽象语法树特征和路径特征集输入功能语义提取层中;
[0154]
基于功能语义提取层,根据预设拆分规则,将抽象语法树特征拆分为一系列若干子语法树特征。
[0155]
需要说明的是,基于预设拆分规则拆分抽象语法树特征是基于代码的属性特性和结构特性进行拆分的,由于源代码中不同的功能语句中可能还包含有功能语句(例如:选择语句中嵌套循环语句),再进行拆分时,可仅拆一层,或者是在此基础上再次对第二层进行拆分。具体的拆分规则(拆分的层级和子语法树特征的大小等)可根据实际情况进行调整,本发明对此不做限定。
[0156]
基于子语法树特征和路径特征集,将所有子语法树特征和路径特征集中路径相对应,能够有效确定与子语法树特征中与路径相关节点的信息,确定源代码功能语义特征。
[0157]
可以理解的是,由于源代码的输入和输出之间可能存在多个分支,因此,路径特征集中包括至少一条路径,在确定源代码功能语义特征时,可以在路径特征集中确定一条路径作为目标路径,仅确定该路径对应的局部特征。
[0158]
需要说明的是,在路径特征集中确定目标路径的方法可以是随机选择,或者选择最短、最长、分支最少的路径等选择方法,可根据实际需求设置,本发明对此不做限定。
[0159]
本发明提供的软件需求和代码映射方法,将抽象语法树特征拆分为若干子语法树特征,基于子语法树特征和路径特征集确定源代码功能语义特征,由于子语法树特征无法确定全局特征,源代码功能语义特征反映了源代码中与路径相关的局部特征,有效的提高了对源代码的识别能力。根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,利用此映射,有效提高相关的软件活动效率和质量。
[0160]
可选的,根据本发明提供的一种软件需求和代码映射方法,基于子语法树特征和路径特征集,确定源代码功能语义特征,具体包括:
[0161]
基于子语法树特征,确定子语法树特征中的所有节点的节点向量;
[0162]
基于路径特征集和节点向量,确定源代码功能语义特征。
[0163]
具体的,基于子语法树特征和路径特征集,确定源代码功能语义特征,具体包括:
[0164]
基于子语法树特征,确定子语法树特征中的所有节点,并将节点编码为token向量,将token向量映射成实值向量,确定节点向量。
[0165]
基于路径特征集和节点向量,将路径特征集中的对应的节点向量进行融合,确定源代码功能语义特征。
[0166]
以最大池(max

pooling)神经网络,tree

lstm神经网络提取源代码功能语义特征为例,对本发明进行解释说明。
[0167]
将源代码中的类属性(定义为从源码中提取的包括类名,全局变量,函数名)和函数内的局部变量名,以驼峰或下划线命名方式进行拆分,拆分后得到的词汇并不是连续的语句,因此并不适合使用attention

based lstm对他们经过词嵌入的分布式向量进行处理。
[0168]
本发明使用最大池(max

pooling)神经网络提取它们中的语义信息。当向量集通过max

pooling网络后,输出每一个特征的最大值h
m

[0169][0170]
由此可知,最大池网络最适合提取文件名,函数名,变量名等不存在上下文信息的词汇对应的文本语义信息。
[0171]
因此,利用attention

based lstm以及max

pooling网络对需求以及源代码中的各个部分提取其中的语义信息。
[0172]
确定源代码文本语义信息后,基于tree

lstm神经网络(树形

长短期记忆网络)确定源代码功能语义特征。
[0173]
tree

lstm神经网络中每个lstm单元包含一个输入门、一个存储单元和一个输出门。传统的lstm根据先前的隐藏状态h
t
‑1、先前的单元状态c
t
‑1和当前顺序输入x
t
生成新的隐藏和单元状态。
[0174]
图6为本发明提供的tree

lstm神经网络单元结构示意图,如图6所示,在基于子节点总和的tree

lstm中,组件节点状态是根据其子节点在树中的状态生成的,内部门(即输入、输出和中间单元状态)将使用组件节点的子节点隐藏状态的总和进行更新,利用该隐藏状态,节点的输入,中间以及输出状态如下公式所示:
[0175][0176]
f
jk
=σ(w
(f)
x
j
u
f
h
k
b
(f)
)
[0177][0178]
[0179][0180]
h
j
=o
j

tanh(c
j
)
[0181]
其中,c(j)为节点j的子节点,对应到抽象语法树特征中,即为某节点的所有子节点。
[0182]
w
(i)
,w
(f)
,w
(o)
,w
(u)
,u
i
,u
f
,u
o
,u
u
,b
(i)
,b
(f)
,b
(o)
,b
(u)
为需要被学习的参数。最后得到的h
j
为该节点进行神经网络后的特征向量。
[0183]
需要说明的是,上述以最大池(max

pooling)神经网络,tree

lstm神经网络提取源代码功能语义特征的方法仅作为一个具体的例子对本发明进行说明,除此之外,还可使用其他的模型结构,本发明对此不做限定。
[0184]
本发明提供的软件需求和代码映射方法,通过将抽象语法树特征拆分为多个子语法树特征,基于子语法树特征中节点向量和路径特征集源代码功能语义特征,更精确的提取了源代码的局部特征,有效的进一步提高了对源代码的识别能力。根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,利用此映射,有效提高相关的软件活动效率和质量。
[0185]
可选的,根据本发明提供的一种软件需求和代码映射方法,将控制流图特征输入全局信息确定层中,根据全局信息确定层,确定源代码全局语义信息,具体包括:
[0186]
将控制流图特征输入全局信息确定层中;
[0187]
基于全局信息确定层,根据控制流图特征,确定所有节点的局部邻居信息;
[0188]
基于所有节点的局部邻居信息和控制流图特征,确定源代码全局语义信息。
[0189]
具体的,将控制流图特征输入全局信息确定层中,根据全局信息确定层,确定源代码全局语义信息,具体包括:
[0190]
将控制流图特征输入全局信息确定层中,基于全局信息确定层,根据控制流图特征,获取源代码中所有节点的局部邻居信息。局部邻居信息即表示当前节点与相邻节点之间的关系。
[0191]
将所有节点的局部邻居信息和控制流图特征组合在一个联合数据结构中,确定源代码全局语义信息。
[0192]
进一步,可以理解的是,由于源代码所有的路径中可能出现无法输出结果的路径,即控制流图特征中包括可达路径和不可达路径,在确定源代码全局语义信息时,可以对控制流图特征中的路径进行过滤,仅保留可达路径对应的信息,确定源代码全局语义信息。
[0193]
其次,由于控制流图特征中所有的节点对全局的贡献能力不同,在进行模型训练时,还可以利用神经网络中的注意力机制学习控制流图特征中的各节点的全局注意得分(进一步提高特征提取的准确性)。
[0194]
本发明采用图神经网络(gnn)编码控制流图特征中的语义信息(全局信息)。图7为本发明提供的图神经网络模型工作原理示意图,gnn总体架构如图7所示,gnn的目标是学习每个包含其邻域信息的节点的状态嵌入,有时是学习整个图的嵌入。gnn模型适合于通用框架消息传递神经网络(mpnn)。
[0195]
gnn包括两个阶段:消息传递和读取。假设有一个图g=(v,e)其中v是顶点的集合,e是边的集合。g中的每个节点保留一个状态h,并为每条边分配一个嵌入状态e。
[0196]
消息传递步骤通过以下方式更新节点的状态:
[0197][0198][0199]
h
i(t 1)
=f
update
(h
i(t)
,m
i
)
[0200]
其中,f
message
是消息函数,f
update
是顶点更新函数,f
aggregate
是的聚合函数。m
j

i
和m
i
可以看作是一个聚合器,其中每个节点从它的邻居节点收集信息。h
i(t 1)
是更新器,更新所有节点的隐藏状态。在消息传递阶段,上面的更新过程运行t个步骤。
[0201]
在最终表示阶段,模型用函数f
r
来计算整个图形的特征向量表示:h
g
=f
r
({h
it
|i∈v})
[0202]
需要说明的是,上述以图神经网络(gnn)编码控制流图特征中的语义信息的方法仅作为一个具体的例子对本发明进行说明,除此之外,还可使用其他的模型结构,本发明对此不做限定。
[0203]
本发明提供的软件需求和代码映射方法,通过控制流图特征提取源代码的全局特征,结合局部特征和全局特征确定源代码功能语义向量,有效的提高了对源代码的识别能力。根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,建立软件中不同形态文件之间的映射关系,为软件人员提供一种新的工具,有效提高相关的软件活动效率和质量。
[0204]
下面结合具体实例对本发明做进一步说明:
[0205]
switchyard是一个开源的轻量级的服务交付框架,提供完整的开发、发布和管理面向服务应用程序的全生命周期。首先从世界上最大的代码托管平台github上下载其需求以及源码。之后将switchyard的需求以及源码经过预处理(去除需求中的连词,介词等以及源代码中构建配置,二进制文件,项目描述,数据描述等)。最后将这些需求以及源代码经过本发明的工具生成各自的特征向量。
[0206]
其中,有一条需求为“define the various configuration parameters required by the soap gateway to provide and consume a service.at this point,we can stick with the basic configuration to consume and provide a soap

based web service.”该条需求对应的特征向量如下,该向量是一个512维的空间向量。
[0207]
需求空间向量为:
[0208]
[0.10515048 0.11615929 0.12640095 0.07063103 0.10334915 0.13073659 0.11408362 0.12997395 0.12891303 0.1292508 0.13104829 0.12664136 0.10006573 0.10855305 0.12798485 0.09018414 0.13000922 0.11905037......0.13174862 0.12080269 0.12544681 0.13074669 0.04665744 0.1234728 0.10245915 0.11446398 0.1158184 0.12313773 0.13249686 0.09409612 0.12071036 0.13049617 0.12777309 0.07450321 0.12486064 0.07977229 0.12690648 0.12889607 0.12293468 0.130904 0.09915127 0.12964463 0.1301892 0.12579775]
[0209]
将所有代码文件对应的空间向量(512维)与该向量计算它们之间的相似度。在所有代码文件生成的空间向量中,以下源代码空间向量与上述需求空间向量之间的相似度最高,为0.6547193。
[0210]
源代码空间向量为:
[0211]
[0.10655024 0.1323362 0.12882155 0.13384555 0.12729985 0.13170199 0.12950401 0.13155615 0.12127218 0.1292508 0.12186828 0.10801543 0.12889594 0.1303077 0.10410306 0.12859169 0.12659349 0.12870887 0.13174862 0.10314744 0.1127788 0.11487558 0.12913778 0.13241331......0.12465679 0.12940776 0.11710706 0.13337903 0.10071062 0.12919688 0.12699024 0.1325534 0.13035178 0.12872809 0.11351611 0.13123164 0.12690648 0.12582329 0.1300416 0.09621355 0.13136524 0.11978611 0.12701505 0.08593945]
[0212]
确定上述源代码空间向量对应的代码文件为:
[0213]
soap/src/main/java/org/switchyard/component/soap/config/model/soapbindingmodel.java。
[0214]
经过人工确认,该源代码文件确实与这条需求之间存在映射链接。通过实际项目验证了本发明可以通过比较需求与代码文件生成的空间向量之间的相似度来建立它们之间的映射关系。
[0215]
需要说明的是,上述方法仅作为一个具体的例子对本发明进行说明,除此之外,在本发明具体应用时,应用的具体方法可根据实际情况进行调整,本发明对此不做限定。
[0216]
图8为本发明提供的软件需求和代码映射系统结构示意图,如图8所示,本发明还提供一种软件需求和代码映射系统,包括:需求特征确定单元810、代码特征确定单元820和相似度确定单元830;
[0217]
需求特征确定单元810,用于基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量;
[0218]
代码特征确定单元820,用于基于源代码文本,根据源代码特征提取模型,确定源代码特征向量;其中,源代码特征向量包括:源代码文本语义信息和源代码功能语义信息;
[0219]
相似度确定单元830,用于基于需求文本语义向量和源代码特征向量的相似度,确定软件需求和代码的映射关系。
[0220]
图2为本发明提供的软件需求和代码映射方法流程示意图2所示,由于需求文档中包含的信息可能存在许多连词和助词等没有包含具体文本语义信息的词,在对需求文档进行处理之前,可以将无意义的词进行剔除,提取需求文档中包含文本语义信息的词,句子等内容,并确定需求文档词向量。
[0221]
需求文档词向量可记为:
[0222]
e
(n)
=e1,e2……
e
n
=embedding(words in requirment)
[0223]
其中,words in requirment表示需求文档中的词汇,embedding表示需求文档的词嵌入模型,e1,e2……
e
n
是这些词汇经过词嵌入模型编码后得到的词向量。
[0224]
同理,将源代码文件中无意义的信息进行剔除,提取源代码文件中包含文本语义信息的文件名,函数名,注释,语句,变量,常量,api接口等内容,并确定源代码文本词向量。
[0225]
源代码文本词向量可记为:
[0226]
e

(n)
=e
′1,e
′2……
e

n
=embedding(words in requirment)
[0227]
其中,words in code表示源代码文本中的词汇,其中以驼峰或下划线的方式命名的变量名,函数名等或被拆分成多个词汇。embedding表示源代码的词嵌入模型,e
′1,e
′2……
e

n
是这些词汇经过词嵌入模型编码后得到的词向量。
[0228]
需求特征确定单元810,用于基于需求文档确定需求文档词向量e
(n)
,根据需求文档语义特征提取模型,利用神经网络将其融合为一个代表需求文本语义的向量,确定需求文本语义向量。
[0229]
需求文本语义向量可记为:
[0230][0231]
其中,h1,h2,

h
n
代表经过需求文档中词汇的词向量。代表经过神经网络训练后这些词向量的权重系数。b是神经网络的偏置项。
[0232]
可以理解的是,由于源代码涉及循环、选择和跳转等多种语句,仅顺序的提取源代码的文本语义信息并不足以反应源代码的特征,因此,需要在源代码文本语义信息的基础上,结合源代码功能语义信息,共同反映源代码的特征信息。
[0233]
代码特征确定单元820,用于基于源代码文本确定源代码文本词向量e

(n)
,根据源代码特征提取模型,确定源代码特征向量其中,源代码特征向量包括:源代码文本语义信息和源代码功能语义信息。
[0234]
可以理解的是,在利用需求文档语义特征提取模型和源代码特征提取模型之前,还需要对模型进行训练,模型训练时所使用的具体方法和模型的具体结构可根据实际需求进行调整,本发明对此不做限定。
[0235]
在确定需求文本语义向量和源代码特征向量之后,相似度确定单元830,用于计算和均相似度,根据相似度的大小,确定软件需求和代码的映射关系。
[0236]
例如:根据余弦相似度公式计算需求文本语义向量和源代码特征向量相似度的相似度:
[0237]
余弦相似度公式:
[0238]
其中,m,n分别表示要比较的两个特征向量,m
i
和n
i
分别表示两个特征向量的分量。
[0239]
需要说明的是,在本发明中,计算需求文本语义向量和源代码特征向量相似度的方法除了余弦相似度外,还可使用计算欧式距离和曼哈顿距离等方法。在本发明实际应用过程中,相似度计算方法,均可根据实际情况进行调整,本发明对此不做限定。
[0240]
可以理解的是,可以基于本发明提供的软件需求和代码映射方法构建软件需求和代码映射数据库,在确定软件需求的条件下,根据映射关系查找相对应的代码,或者在确定代码的条件下,根据映射关系查找相对应的软件需求。本发明具体的应用方法可根据实际需求进行调整,本发明对此不做限定。
[0241]
本发明提供的软件需求和代码映射系统,确定包含源代码文本语义信息和源代码功能语义信息的源代码特性向量,以及需求文档的需求文本语义向量,根据需求文本语义向量和源代码特征向量的相似度建立起从软件的需求到代码间的映射,利用此映射,有效
提高相关的软件活动效率和质量。
[0242]
需要说明的是,本发明提供的软件需求和代码映射系统用于执行上述软件需求和代码映射方法,其具体的实施方式与方法实施方式一致,在此不再赘述。
[0243]
图9为本发明提供的软件需求和代码映射系统结构示意图,如图9所示,该电子设备可以包括:处理器(processor)901、通信接口(communications interface)902、存储器(memory)903和通信总线904,其中,处理器901,通信接口902,存储器903通过通信总线904完成相互间的通信。处理器901可以调用存储器903中的逻辑指令,以执行软件需求和代码映射方法,该方法包括:基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量;基于源代码文本,根据源代码特征提取模型,确定源代码特征向量;其中,源代码特征向量包括:源代码文本语义信息和源代码功能语义信息;基于需求文本语义向量和源代码特征向量的相似度,确定软件需求和代码的映射关系。
[0244]
此外,上述的存储器904中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0245]
另一方面,本发明还提供一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各方法所提供的软件需求和代码映射方法,该方法包括:基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量;基于源代码文本,根据源代码特征提取模型,确定源代码特征向量;其中,源代码特征向量包括:源代码文本语义信息和源代码功能语义信息;基于需求文本语义向量和源代码特征向量的相似度,确定软件需求和代码的映射关系。
[0246]
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的软件需求和代码映射方法,该方法包括:基于需求文档,根据需求文档语义特征提取模型,确定需求文本语义向量;基于源代码文本,根据源代码特征提取模型,确定源代码特征向量;其中,源代码特征向量包括:源代码文本语义信息和源代码功能语义信息;基于需求文本语义向量和源代码特征向量的相似度,确定软件需求和代码的映射关系。
[0247]
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0248]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上
述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
[0249]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献