本技术涉及软件工程,尤其涉及一种软件风险评估方法、装置、存储介质、程序产品及设备。
背景技术:
1、随着软件系统的复杂性和规模的不断增加,软件成分分析成为了软件工程中一项重要的任务。传统的分析方法通常需要人工按照设定好的风险指标来对软件源代码进行风险评估。然而,这在处理大规模代码时存在效率低、准确率不高的问题。
2、随着开源软件的普及,网络上存在着大量的源代码以供开发人员调用,如果不慎调用了代码质量不佳的源代码,会对所开发的软件项目造成一定的威胁(例如引起所开发的软件崩溃),因此,如何高效精准地识别和分析软件中所存在的风险程度,成为了提高软件质量和软件安全性的重要课题。
技术实现思路
1、为了解决上述技术问题,本技术实施例提出了一种软件风险评估方法、装置、存储介质、程序产品及设备,能够高效精准地识别出软件中所存在的风险,以提高软件质量和软件安全性。
2、第一方面,本技术实施例提供了一种软件风险评估方法,包括:
3、基于待评估软件的代码文件进行解析,得到代码信息,其中,所述代码信息用于指示所述代码文件对应的组件及库函数;
4、基于所述代码信息进行特征提取,得到词向量特征,并根据所述词向量特征确定词向量风险评分;
5、基于所述代码文件,对所述组件进行风险评估得到第一静态特征风险评分,以及,对所述库函数进行风险评估得到第二静态特征风险评分;
6、基于所述第一静态特征风险评分及所述第二静态特征风险评分,确定静态特征风险评分;
7、基于所述词向量风险评分及所述静态特征风险评分,确定总体风险评分。
8、可选地,所述代码信息包括抽象语法树,所述抽象语法树用于指示所述组件及所述库函数,所述基于待评估软件的代码文件进行解析,得到代码信息,包括:
9、对所述代码文件进行预处理得到目标代码;
10、基于与所述代码文件相匹配的语法规则,确定词法分析器和语法分析器;
11、调用所述词法分析器,将所述目标代码分解为至少一词法单元;
12、调用所述语法分析器,基于所述至少一词法单元构建出所述抽象语法树。
13、可选地,所述基于所述代码信息进行特征提取,得到词向量特征,并根据所述词向量特征确定词向量风险评分,包括:
14、利用神经网络模型,对所述代码信息进行特征提取,生成至少一词向量;
15、基于所述至少一词向量,构建所述词向量特征;
16、计算所述词向量特征中每一维度的绝对值,并将各所述维度的绝对值之和作为所述词向量风险评分。
17、可选地,所述利用神经网络模型,对所述代码信息进行特征提取,生成至少一词向量,包括:
18、基于所述代码信息所指示的语法结构及上下文关系,确定包括窗口大小及最小词频的超参数;
19、为所述神经网络模型配置所确定的超参数;
20、利用所配置的神经网络模型,对所述代码信息进行特征提取,生成至少一词向量。
21、可选地,所述基于所述至少一词向量,构建所述词向量特征,包括:
22、基于所述代码信息,分别对所述至少一词向量中每一词向量进行tf-idf统计,以得到所述每一词向量对应的权重;
23、分别对所述至少一词向量中每一词向量进行归一化处理;
24、基于经归一化处理的至少一词向量及其各自对应的权重,进行加权计算得到所述词向量特征。
25、可选地,所述第一静态特征风险评分包括如下至少之一:第一漏洞严重性评分、第一使用频率评分、第一版本评分、第一许可证合规评分;
26、所述第二静态特征风险评分包括如下至少之一:第二漏洞严重性评分、第二使用频率评分、第二版本评分、第二许可证合规评分。
27、可选地,所述方法还包括:
28、利用预先构建的基于lda的成分分析与风险评估模型,识别出所述代码文件中的各成分,以及,对所述代码文件中的各成分进行风险评估得到lda成分风险评分;
29、所述基于所述词向量风险评分及所述静态特征风险评分,确定总体风险评分,包括:
30、基于所述lda成分风险评分、所述词向量风险评分及所述静态特征风险评分进行加权求和,得到所述总体风险评分。
31、可选地,所述利用预先构建的基于lda的成分分析与风险评估模型,识别出所述代码文件中的各成分,包括:
32、将所述代码文件分解为多个子文档,其中,所述多个子文档包括类片段、方法片段及注释片段;
33、利用所述基于lda的成分分析与风险评估模型,对所述多个子文档进行识别,得到所述代码文件中的各成分。
34、第二方面,本技术实施例提供了一种软件风险评估装置,包括:
35、解析模块,用于基于待评估软件的代码文件进行解析,得到代码信息,其中,所述代码信息用于指示所述代码文件对应的组件及库函数;
36、第一风险评估模块,用于基于所述代码信息进行特征提取,得到词向量特征,并根据所述词向量特征确定词向量风险评分;
37、第二风险评估模块,用于基于所述代码文件,对所述组件进行风险评估得到第一静态特征风险评分,以及,对所述库函数进行风险评估得到第二静态特征风险评分;
38、第三风险评估模块,用于基于所述第一静态特征风险评分及所述第二静态特征风险评分,确定静态特征风险评分;
39、总体风险评分模块,用于基于所述词向量风险评分及所述静态特征风险评分,确定总体风险评分。
40、可选地,所述代码信息包括抽象语法树,所述抽象语法树用于指示所述组件及所述库函数,所述基于待评估软件的代码文件进行解析,得到代码信息,包括:
41、对所述代码文件进行预处理得到目标代码;
42、基于与所述代码文件相匹配的语法规则,确定词法分析器和语法分析器;
43、调用所述词法分析器,将所述目标代码分解为至少一词法单元;
44、调用所述语法分析器,基于所述至少一词法单元构建出所述抽象语法树。
45、可选地,所述基于所述代码信息进行特征提取,得到词向量特征,并根据所述词向量特征确定词向量风险评分,包括:
46、利用神经网络模型,对所述代码信息进行特征提取,生成至少一词向量;
47、基于所述至少一词向量,构建所述词向量特征;
48、计算所述词向量特征中每一维度的绝对值,并将各所述维度的绝对值之和作为所述词向量风险评分。
49、可选地,所述利用神经网络模型,对所述代码信息进行特征提取,生成至少一词向量,包括:
50、基于所述代码信息所指示的语法结构及上下文关系,确定包括窗口大小及最小词频的超参数;
51、为所述神经网络模型配置所确定的超参数;
52、利用所配置的神经网络模型,对所述代码信息进行特征提取,生成至少一词向量。
53、可选地,所述基于所述至少一词向量,构建所述词向量特征,包括:
54、基于所述代码信息,分别对所述至少一词向量中每一词向量进行tf-idf统计,以得到所述每一词向量对应的权重;
55、分别对所述至少一词向量中每一词向量进行归一化处理;
56、基于经归一化处理的至少一词向量及其各自对应的权重,进行加权计算得到所述词向量特征。
57、可选地,所述第一静态特征风险评分包括如下至少之一:第一漏洞严重性评分、第一使用频率评分、第一版本评分、第一许可证合规评分;
58、所述第二静态特征风险评分包括如下至少之一:第二漏洞严重性评分、第二使用频率评分、第二版本评分、第二许可证合规评分。
59、可选地,所述装置还包括:
60、第四风险评估模块,用于利用预先构建的基于lda的成分分析与风险评估模型,识别出所述代码文件中的各成分,以及,对所述代码文件中的各成分进行风险评估得到lda成分风险评分;
61、所述基于所述词向量风险评分及所述静态特征风险评分,确定总体风险评分,包括:
62、基于所述lda成分风险评分、所述词向量风险评分及所述静态特征风险评分进行加权求和,得到所述总体风险评分。
63、可选地,所述利用预先构建的基于lda的成分分析与风险评估模型,识别出所述代码文件中的各成分,包括:
64、将所述代码文件分解为多个子文档,其中,所述多个子文档包括类片段、方法片段及注释片段;
65、利用所述基于lda的成分分析与风险评估模型,对所述多个子文档进行识别,得到所述代码文件中的各成分。
66、第三方面,本技术实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的软件风险评估方法的步骤。
67、第四方面,本技术实施例提供了一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现上述任一项所述的软件风险评估方法的步骤。
68、第五方面,本技术实施例提供了一种计算机设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的软件风险评估方法的步骤。
69、综上,本技术实施例至少具有以下有益效果:
70、采用本技术实施例,通过基于待评估软件的代码文件进行解析,得到代码信息,其中,所述代码信息用于指示所述代码文件对应的组件及库函数;基于所述代码信息进行特征提取,得到词向量特征,并根据所述词向量特征确定词向量风险评分;基于所述代码文件,对所述组件进行风险评估得到第一静态特征风险评分,以及,对所述库函数进行风险评估得到第二静态特征风险评分;基于所述第一静态特征风险评分及所述第二静态特征风险评分,确定静态特征风险评分;基于所述词向量风险评分及所述静态特征风险评分,确定总体风险评分,从而能够高效精准地识别出软件中所存在的风险,以提高软件质量和软件安全性。