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

检测软件代码风险的方法、系统、设备及存储介质与流程

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


1.本发明涉及代码检测的技术领域,尤其是涉及一种检测软件代码风险的方法、系统、设备及存储介质。


背景技术:

2.软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。
3.开放源代码也称开源代码,指的是一种软件发布模式。有些软件的作者会将原始码公开,此称之为“源代码公开”,所有公布软件源代码的程序都可以称为开放源代码软件,开放源代码软件在开放源代码许可证下发布的软件,以保障软件用户自由使用及接触源代码的权利。
4.相关技术中的软件开发,为了降低开发成本、提高开发效率,大多会使用开源代码用于功能开放,但是相关技术中,没有对软件代码风险检测的方法,存在抄袭代码的风险。


技术实现要素:

5.为了改善软件开发时,没有对软件代码风险检测而存在抄袭代码风险的问题,本技术提供一种检测软件代码风险的方法、系统、设备及存储介质。
6.第一方面,本技术提供一种检测软件代码风险的方法,采用如下的技术方案:一种检测软件代码风险的方法,所述方法包括:接收用户输入的代码风险检测请求,所述代码风险检测请求包括待检测源代码,所述待检测源代码包含不同功能的源代码段;针对目标功能的源代码段,调取预先存储的数据库中与所述目标功能对应的开源代码;将所述源代码段与所述开源代码进行一次相似度比对,得出第一相似度数值;若所述第一相似度数值高于预设的第一相似度标准值,则输出带有第一相似度数值的风险预警;否则,将所述源代码段与所述开源代码进行二次相似度比对,得出第二相似度数值,所述一次相似度比对和二次相似度比对采用的比对方法不同;若所述第二相似度数值高于预设的第二相似度标准值,则输出带有第二相似度数值的风险预警。
7.通过采用上述技术方案,通过针对目标功能相对应的源代码段和开源代码进行两次相似度比对,且两次相似度比对采用的比对方法均不同,比对效率高。另外当第二相似度数值高于预设的第二相似度标准值时,输出带有第二相似度数值的风险预警,以提醒人员修改代码,降低了软件代码抄袭的风险。
8.可选的,所述相似度比对的方法,包括:利用词法分析器将所述开源代码转化为第一token序列,获取所述第一token序列
包含的多个token值;利用词法分析器将所述源代码段转化为第二token序列;统计所述第二token序列中含有的每个所述token值的总数量;若所述目标token值的总数量大于token总量预设值,计算所述目标token值的总数量与第一token序列中的所述多个token值的总数量占比,将占比设置为相似度数值。
9.通过采用上述技术方案,采用token序列比对的方式对开源代码与源代码段进行相似度比对,方便快速地对功能相对应的源代码段与开源代码进行相似度比对,相似度比对效率高。
10.可选的,所述相似度比对的方法,包括:利用哈希算法将所述源代码段的每行代码转换为实测哈希码;利用哈希算法将所述开源代码的每行代码转换为参考哈希码;统计所述实测哈希码和参考哈希码中同时存在的哈希码的总数;计算所述同时存在的哈希码的总数与所述参考哈希码的总数量的占比,将占比设置为相似度数值。
11.通过采用上述技术方案,利用哈希算法对比的方式,能够快速的进行相似度比对,提高了代码风险的检测效率。
12.可选的,所述相似度比对的方法,包括:分别统计所述源代码段的实测行数,以及所述开源代码的参考行数;计算所述实测行数与所述参考行数之间的差值,若所述差值位于预设的差值阈值范围内,将所述源代码段与所述开源代码进行相似度比对,得出相似度数值。
13.通过采用上述技术方案,将实测行数和参考行数相近的源代码段和开源代码进行相似度比对,进一步提高了相似度比对速度。
14.可选的,所述在所述调取预先存储的数据库中与所述目标功能对应的开源代码之前,还包括:判断所述源代码段是否为常用功能;若是,则调取预先存储的数据库中与所述常用功能对应的开源代码。
15.通过采用上述技术方案,通过将常用功能的源代码段与开源代码进行相似度比对,以提高软件代码风险的检测效率。
16.可选的,在所述输出带有第二相似度数值的风险预警之后,还包括:判断所述源代码段是否对应为常用功能;若是,则判断所述第一相似度数值和所述第二相似度数值是否均小于预设的标准值;若是,则将所述源代码段和所述目标功能对应添加到预先存储的代码参考库。
17.通过采用上述技术方案,将属于常用功能且相似度较低的源代码段添加的代码参考库中,便于人员参照参考代码库中的参考代码段进行代码修改,以降低软件代码抄袭的风险。
18.可选的,在所述输出带有第二相似度数值的风险预警之后,还包括:针对目标功能相同的源代码段,调取预先存储的代码参考库中与目标功能对应的参考代码段,生成带有参考代码段的代码修改提示预警。
19.通过采用上述技术方案,若检测到源代码段的二次相似度数值较高时,则生成带有参考代码段的代码修改提示预警,便于人员快速根据参考代码段修改源代码段,降低了软件代码抄袭的风险。
20.第二方面,本技术提供一种检测软件代码风险的系统,采用如下的技术方案:所述系统包括:请求接收模块,用于接收用户输入的代码风险检测请求,所述代码风险检测请求包括待检测源代码,所述待检测源代码包含不同功能的源代码段;数据调取模块,用于针对目标功能的源代码段,调取预先存储的数据库中与所述目标功能对应的开源代码;相似度比对模块,用于将所述源代码段与所述开源代码进行一次相似度比对,得出第一相似度数值;若所述第一相似度数值高于预设的第一相似度标准值,则输出带有第一相似度数值的风险预警;否则,将所述源代码段与所述开源代码进行二次相似度比对,得出第二相似度数值,所述依次相似度比对和二次相似度比对采用的对比方法不同;风险预警模块,用于判断所述第二相似度数值是否高于预设的第二相似度标准值;若是,则输出带有第二相似度数值的风险预警。
21.通过采用上述技术方案,对待检测源代码进行风险检测时,通过将针对目标功能相对应的源代码段和开源代码进行两次相似度比对,且两次相似度比对的算法不同,提高了对软件代码的检测精度,降低了软件代码抄袭的风险。
22.第三方面,本技术提供一种计算机设备,采用如下的技术方案:包括存储器和处理器,所述存储器上存储有能够被处理器加载并执行如上所述任一种方法的计算机程序。
23.通过采用上述技术方案,处理器可根据存储器中存储的相关计算机程度,实现上述软件代码风险检测的方法,通过将目标功能相对应的源代码段和开源代码进行二次相似度比对,对软件代码的风险检测精度高,降低了软件代码抄袭的风险。
24.第四方面,本技术提供一种存储介质,采用如下的技术方案:存储有能够被处理器加载并执行上述任一种方法的计算机程序。
25.通过采用上述技术方案,通过将目标功能相对应的源代码段和开源代码进行二次相似度比对,对软件代码的风险检测精度高,降低了软件代码抄袭的风险。
26.综上所述,本技术包括以下至少一种有益技术效果:1.通过对目标功能相对应的源代码段和开源代码进行二次相似度比对,相似度比对精度高,降低了软件代码抄袭的风险;2.对目标功能相对应的源代码段和开源代码进行二次相似度比对前,对行数相近的源代码段和开源代码进行相似度比对,对比效率高,提高了对软件代码检测的准确度。
附图说明
27.图1是本技术实施例中检测软件代码风险的方法的流程图。
28.图2是本技术实施例中s17的子步骤流程图。
29.附图标记说明:201、请求接收模块;202、数据调取模块;203、相似度比对模块;204、风险预警模块。
具体实施方式
30.以下结合附图1

2对本技术作进一步详细说明。
31.本技术实施例公开一种检测软件代码风险的方法,该方法基于一种第三方库组件分析系统,用户在软件开发时,会将软件代码存储在第三方库组件中,由于用户开发的软件代码存在抄袭开源代码的风险,利用该检测软件代码风险的方法对第三方库组件中的软件代码进行风险检测,以判断软件代码是否存在代码抄袭的风险。
32.如图1所示,该方法包括以下步骤:s101,接收用户输入的代码风险检测请求。
33.具体来说,软件开发过程中,用户可以通过电脑将代码风险检测请求输入到第三方库组件分析系统中,代码风险检测请求包括存储在第三方库组件中的待检测源代码,且第三方库组件分析系统接收到代码风险检测请求后,第三方库组件分析系统将待检测源代码分有多个不同功能的源代码段。
34.s102,针对目标功能的源代码段,调取预先存储的数据库中与目标功能对应的开源代码。
35.具体来说,第三方库组件分析系统中包含有不同功能的开源代码,针对目标功能的源代码段,调取第三方库组件分析系统中与目标功能相对应的开源代码,使得源代码段与开源代码的功能相对应。
36.s103,将源代码段与开源代码进行一次相似度比对,得出第一相似度数值。
37.s104,得到第一相似度数值后,获取数据库中预先设置的第一次相似度标准值,将第一相似度数值与第一相似度标准值进行对比。若第一相似度数值高于预设的第一相似度标准值,输出带有第一相似度数值的风险预警。
38.具体来说,通过将第一相似度数值与第一相似度标准值比对来判断第一相似度数值的高低,若第一相似度数值高于第一相似度标准值,则输出带有第一相似度数值的风险预警,以提醒用户修改源代码段。
39.s105,若第一相似度数值低于第一相似度标准值时,将源代码段与开源代码进行二次相似度比对,以得出第二相似度数值,且设置二次相似度对比方法不同于一次相似度对比方法,提高了对源代码段与开源代码之间的相似度对比效果。
40.s106,若第二相似度数值高于预设的第二相似度标准值,则输出带有第二相似度数值的风险预警。
41.具体来说,当第二相似度数值高于预设的第二相似度标准值时,输出带有第二相似度数值的风险预警,以便提醒人员对源代码段进行修改,降低了软件代码抄袭的风险。
42.在一个实施例中,考虑到相似度对比的效率,在调取预先存储的数据库中与目标功能对应的开源代码之前,还包括:判断源代码段是否对应为常用功能;若是,则调取预先存储的数据库中与常用功能对应的开源代码。
43.具体来说,筛选并调取出待检测源代码中的常用功能的源代码段,调取第三方库组件分析系统中预先存储的开源代码,将常用功能相对应的源代码段与开源代码进行相似度比对,最终以得出相似度数值;通过直接对常用功能的源代码段进行风险检测,比对效率高。
44.在一个实施例中,相似度比对的方法,包括:利用词法分析器将开源代码转化为第一token序列,并获取第一token序列包含的多个token值。其中,词法分析器用于对程序代码进行词法分析,即把字符串形式的源程序分解为单词符号串形式;再利用词法分析器将源代码段转化为第二token序列;利用词法分析器扫描并统计第二token序列中含有的每个token值的总数量;若目标token值的总数量大于token总量预设值,计算目标token值的总数量与第一token序列中的多个token值的总数量占比,将占比设置为相似度数值。
45.举例而言,如第一token序列中包含的token值有“2”、“6”、“25”,在第二token序列中分别统计token值=2、token值=6、token值=25的总数量。同时,第三方库组件分析系统中可以预先设定有用于比对token序列相似度的token总量预设值,当上述第二token序列中的某个token值(即目标token值)的总数量大于该token总量预设值时,则计算目标token值的总数量与第一token序列中的多个token值的总数量占比,将占比设置为相似度数值。采用上述步骤对目标功能相对应的源代码段与开源代码进行相似度比对时,通过将代码转换为特定的序列,对比效率高。
46.在一个实施例中,相似度比对的方法,还包括:利用哈希算法将源代码段的每行代码转换为实测哈希码;利用哈希算法将开源代码的每行代码转换为参考哈希码;统计实测哈希码和参考哈希码中同时存在的哈希码数量;计算同时存在的哈希码的总数与参考哈希码的总数量的占比,并将占比设置为相似度数值。
47.具体来说,上述相似度对比方法,将源代码段和开源代码均转化为哈希码,便于快速的进行相似度对比。
48.在一个实施例中,相似度比对的方法,还包括:分别统计源代码段的实测行数,以及开源代码的参考行数;计算实测行数与参考行数之间的差值,若差值位于预设的差值阈值范围内,将源代码段与开源代码进行相似度比对,得出相似度数值。
49.具体来说,当差值位于预设的差值阈值范围之内,则判定源代码段与开源代码之间的行数相近,即可对行数相近的源代码段与开源代码进行相似度比对,提高了相似度比对速度和效率。
50.举例而言,如待检测源代码中所有源代码段的实测行数分别为“15”、“25”、“35”、“50”等,第三方库组件分析系统中与目标功能相对应的所有开源代码的参考行数分别为“17”、“19”、“37”、“48”等,针对目标功能相同的源代码段与开源代码,计算实测行数与参考行数之间的差值,且设置实测行数和参考行数之间的差值可以为绝对值。第三方库组件分析系统中可以预先设置有差值阈值范围,如预设的差值阈值范围为“0~5”,则将实测行数为15的源代码段与参考行数为17的源代码段进行相似度比对,以得出相似度数值。
51.在一个实施例中,相似度比对的方法,还包括:利用编程算法将源代码段的每行代码转换为实测字符串;利用编程算法将开源代码的每行代码转换为参考字符串;
统计实测字符串和参考字符串中的同时存在的字符数量;计算同时存在的字符数量与参考字符串中的总的字符量之间的占比,将占比设置为相似度数值;若相似度数值大于预设的相似度标准值时,输出带有第三相似度数值的风险预警。
52.具体来说,通过将源代码段转换为实测字符串,将开源代码转化为参考字符串,统计实测字符串和参考字符串中的同时存在的字符数量,并计算同时存在的字符数量与参考字符串中的总的字符量之间的占比,设置该占比为相似度数值,判断相似度数值是否大于预设的相似度标准值;若是,则输出带有相似度数值的风险预警;通过采用字符对比的方式,能够快速的对源代码段和开源代码进行相似度对比,提高了软件代码风险检测效率。
53.在一个实施例中,相似度对比的方法,还包括:利用散列算法对开源代码计算散列值,得出开源代码的抽象语法树;利用散列算法对待检测源代码计算散列值,得出待检测源代码的抽象语法树;分别将开源代码的抽象语法树的子树和待检测源代码的抽象语法树的子树根据根节点类型分别进行分类;将根节点类型相同的开源代码的抽象语法树的子树与待检测源代码的抽象语法树的子树进行对比;若开源代码的抽象语法树与待检测源代码之间存在公共子树,则统计公共子树的总量;计算公共子树的总量与开源代码的抽象语法数的子树总量的占比,得出相似度数值。
54.具体来说,通过采用抽象语法树的相似度对比方式,检测精度高,以降低软件代码抄袭的风险。
55.在一个实施例中,相似度对比的方法,还包括:利用散列算法对开源代码计算散列值,得出开源代码的抽象语义树;利用散列算法对待检测源代码计算散列值,得出待检测源代码的抽象语义树;分别将开源代码的抽象语义树的子树和待检测源代码的抽象语义树的子树根据根节点类型分别进行分类;将根节点类型相同的开源代码的抽象语义树的子树与待检测源代码的抽象语义树的子树进行对比;若开源代码的抽象语义树与待检测源代码之间存在公共子树,则统计公共子树的总量;计算公共子树的总量与开源代码的抽象语义树的子树总量的占比,得出相似度数值。
56.具体来说,通过采用抽象语义树的相似度对比方法,检测精度高,降低了软件代码抄袭的风险。
57.在一个实施例中,在输出带有第二相似度数值的风险预警之后,还包括:统计待检测源代码的每段源代码段的第一相似度数值总和;统计待检测源代码的每段源代码段的第二相似度数值总和;
计算第一相似度数值总和与第二相似度数值总和的相似度总数,将相似度总数设置为待检测源代码的相似度数值;输出带有待检测源代码的相似度数值的风险预警。
58.具体来说,由于对待检测源代码检测时,是按功能进行分段检测,并分别得出每段源代码段的第一相似度数值或第二相似度数值;为了输出整个待检测源代码的相似度数值,先统计待检测源代码中的每段源代码段的第一相似度数值总和,再统计待检测源代码的每段源代码段的第二相似度数值总和,然后计算第一相似度数值总和和第二相似度数值总和的相似度总数,将相似度总数设置为待检测源代码的相似度数值,最终输出带有待检测源代码的相似度数值的风险预警,进而便于人员查看整个待检测源代码的相似度数值,并对待检测源代码进行分析和修改,以降低软件代码抄袭的风险。
59.在一个实施例中,考虑到对抄袭风险低的源代码段进行记录,为方便用户修改源代码段,以降低软件代码抄袭的风险。在输出带有第二相似度数值的风险预警之后,还包括:判断开源代码的目标功能是否为常用功能;若是,则第一相似度数值和第二相似度数值是否均小于预设的标准值;若是,则将源代码段添加到预先存储的代码参考库。
60.具体来说,第三方库组件分析系统中可预先建立一个代码参考库,代码参考库中可以根据不同的常用功能划分有多个参考代码段。当检测到第一相似度数值和第二相似度数值均小于预设的标准值时,先判断源代码段是否属于常用功能;若是,则将对应的相似度较低的源代码段添加到代码参考库中,方便用户修改软件代码时,可以参照代码参考库中的参考代码段进行代码修改,降低了软件代码抄袭的风险。
61.在一个实施例中,考虑到用户修改软件代码的效率,在将源代码段添加到预设的代码参考库之后,还包括:判断二次相似度数值是否大于预设的参考值;若是,针对目标功能相同的源代码段,调取预先存储的代码参考库中与目标功能对应的参考代码段,并生成带有参考代码段的代码修改提示预警。
62.具体来说,若二次相似度数值大于预设的参考值后,针对目标功能相同的源代码段,在代码参考库中调取参考代码段,通过生成带有参考代码段的代码修改提示预警,以便用户在编写代码时,直接根据参考代码段来修改源代码段,进一步提高了修改软件代码的效率,降低了软件代码抄袭的风险。
63.本技术实施例的实施原理为:软件代码风险检测时,首先选用出待检测源代码中具有常用功能的源代码段,然后在预先存储的数据库中调取与目标功能相对应的开源代码,先对目标功能相对应的源代码段和开源代码进行一次相似度比对,并得出一次相似度数值,若一次相似度数值高于预设的一次相似度标准值时,输出带有一次相似度的风险预警;否则,将源代码段和开源代码进行二次相似度比对,并得出二次相似度数值,若二次相似度数值高于预设的二次相似度标准值时,输出带有二次相似度标准值的风险预警;通过设置一次相似度比对方法不同于二次相似度比对方法,提高了对待检测源代码的相似度比对准确度,降低了软件代码抄袭的风险。
64.另外,当输出带有二次相似度标准值的风险预警后,针对常用功能的源代码段,调
取预先存储的代码参考库中与目标功能对应的参考代码段,并生成带有参考代码段的代码修改提示预警,以便于为用户提供修改软件代码的参考代码,提高了软件代码的修改效率,降低了软件代码抄袭的风险。
65.基于上述方法,本技术实施例还公开一种检测软件代码风险的系统。
66.结合图2,该系统包括以下模块:请求接收模块s201,用于接收用户输入的代码风险检测请求,代码风险检测请求包括待检测源代码,待检测源代码包含不同功能的源代码段;数据调取模块s202,用于针对目标功能的源代码段,调取预先存储的数据库中与目标功能对应的开源代码;相似度比对模块s203,用于将源代码段与开源代码进行一次相似度比对,得出第一相似度数值;若第一相似度数值高于预设的第一相似度标准值,则输出带有第一相似度数值的风险预警;否则,将源代码段与开源代码进行二次相似度比对,得出第二相似度数值,一次相似度比对和二次相似度比对采用的比对方法不同;风险预警模块s204,用于判断第二相似度数值是否高于预设的第二相似度标准值;若是,则输出带有第二相似度数值的风险预警。
67.在一个实施例中,系统还包括:整体相似度输出模块,用于统计待检测源代码的每段源代码段的第一相似度数值总和;统计待检测源代码的每段源代码段的第二相似度数值总和;计算第一相似度数值总和与第二相似度数值总和的相似度总数,将相似度总数设置为待检测源代码的相似度数值;输出带有待检测源代码的相似度数值的风险预警。
68.在一个实施中,系统还包括:参考代码更新模块,用于判断源代码段的目标功能是否为常用功能;若是,则判断第一相似度数值和第二相似度数值是否均小于预设的标准值;若是,则将源代码段添加到预先存储的代码参考库,代码参考代码库中包含不同常用功能的参考代码段。
69.在一个实施例中,系统还包括:参考代码提示模块,针对目标功能相同的源代码段,调取预先存储的代码参考库中与目标功能对应的参考代码段,生成带有参考代码段的代码修改提示预警。
70.本技术实施例还公开一种计算机设备。
71.具体来说,该设备包括存储器和处理器,存储器上存储有能够被处理器加载并执行上述一种检测软件代码风险的计算机程序。
72.本技术实施例还公开一种计算机可读存储介质。
73.具体来说,该计算机可读存储介质,其存储有能够被处理器加载并执行如上一种检测软件代码风险的方法的计算机程序,该计算机可读存储介质例如包括:u盘、移动硬盘、只读存储器(read

onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
74.本具体实施方式的实施例均为本技术的较佳实施例,并非依此限制本技术的保护范围,故:凡依本技术的结构、形状、原理所做的等效变化,均应涵盖于本技术的保护范围之内。
再多了解一些

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

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

相关文献