CN110990256B - 开源代码检测方法、装置及计算机可读存储介质 - Google Patents
开源代码检测方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110990256B CN110990256B CN201911035273.9A CN201911035273A CN110990256B CN 110990256 B CN110990256 B CN 110990256B CN 201911035273 A CN201911035273 A CN 201911035273A CN 110990256 B CN110990256 B CN 110990256B
- Authority
- CN
- China
- Prior art keywords
- source code
- open source
- neural network
- network model
- entity
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 67
- 238000003062 neural network model Methods 0.000 claims abstract description 69
- 230000003068 static effect Effects 0.000 claims abstract description 61
- 238000012549 training Methods 0.000 claims abstract description 29
- 238000013528 artificial neural network Methods 0.000 claims abstract description 14
- 238000000034 method Methods 0.000 claims description 22
- 238000004364 calculation method Methods 0.000 claims description 12
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 4
- 238000003491 array Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 9
- 238000012545 processing Methods 0.000 abstract description 9
- 238000013473 artificial intelligence Methods 0.000 abstract description 4
- 230000001537 neural effect Effects 0.000 abstract description 2
- 238000012937 correction Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000005484 gravity Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000006386 memory function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明实施例涉及开源代码检测技术领域,公开了一种开源代码检测方法,所述方法包括:接收开源代码实体,并建立开源代码实体的神经网络模型;对所述神经网络模型进行训练;在完成对所述神经网络模型的训练后,接收待检测的混源代码实体;对所述混源代码实体进行预设处理,将处理后的数据输入到训练后的神经网络模型进行检索;根据检索结果判断所述混源代码实体与所述开源代码实体是否匹配。本发明中,利用静态特征与神经网络相结合的开源代码检测技术,利用人工智能技术使得误报率降低,且通过对神经模型进行训练,使检测成本随着训练的模型的逐步成熟而降低。
Description
技术领域
本发明实施例涉及开源代码检测技术领域,特别涉及一种开源代码检测方法、装置及计算机可读存储介质。
背景技术
开源代码涉及公开可用的计算机源代码,可由开发代码的程序员自由访问和使用。开源代码可以用于多种场景,例如:通过获得开源的单元测试代码,来节省编程和调试的时间和精力;将开源代码移植到用户没有足够经验或知识的场景;添加通用选项,如图形支持,打印等。
尽管开源代码有许多优点,开源代码也可能带来风险。使用开源代码涉及到许可证问题。此类许可都有可能会对使用开源代码开发的用户或用户项目产生特定限制或要求。只有知道要求,用户才可以决定是否可以接受它或遵守它的要求,承担风险并使用开源代码。
但是,也存在用户没有注意许可证问题。例如,公司员工将开源代码合并到项目中以后,在没有采取适当处理的情况下就离职,且没有通知团队其他成员,从而造成公司在不知情的情况下未遵守开源代码的相关使用许可,造成了风险。类似地,许多公司不清楚自己的产品到底包含了哪些开源代码。
因此,有必要检测并识别编程项目的源代码中是否包含开源代码,甚至需要确定使用了哪些开源项目的代码,以及使用了哪种许可证,以便使用开源代码的公司或者用户决定是否愿意承担风险并遵守这些条款,重写代码或以其他方式解决问题。
现有的开源代码检测方法往往都以字符匹配为主,其中,东南大学申请的发明专利“一种基于串匹配和特征匹配的开源代码检测方法”(CN109062792A),该申请中通过特征匹配的方式来缩小数据库的搜索空间,然后依据token串的方式,基于字符串匹配算法的思想,来匹配出最大公共子串,从而在应用于大规模软件开发项目的开源代码检测时,解决了匹配时间和内存消耗的问题。
然而,发明人发现现有技术中至少存在如下问题:(1)并不能解决误报率高的问题;token计算尤其是并发计算场景下CPU高消耗导致死机的问题,并不能真正提升检测效率。
发明内容
本发明实施方式的目的在于提供一种开源代码检测方法,使得开源代码的检测误报率低,准确率高,且检测效率高,成本低。
为解决上述技术问题,本发明的实施方式提供了一种公开了一种开源代码检测方法,所述方法包括:接收开源代码实体,并建立开源代码实体的神经网络模型;对所述神经网络模型进行训练;在完成对所述神经网络模型的训练后,接收待检测的混源代码实体;对所述混源代码实体进行预设处理,将处理后的数据输入到训练后的神经网络模型进行检索;根据检索结果判断所述混源代码实体与所述开源代码实体是否匹配。
优选地,所述方法还包括步骤:根据所述混源代码实体与所述开源代码实体的匹配结果,输出并显示所述混源代码的检索报告。
优选地,所述检索报告至少显示下述信息的一种:
混源代码的实体信息,该实体信息至少包括文件路径、文件名称和匹配概率;与混源代码匹配的开源代码所对应的开源项目信息,该开源项目信息至少包括软件名称、协议类型及当前版本;混源代码与开源代码的横向对比窗口;误报按钮,以供用户在匹配结果出现误报时进行人工标记。
优选地,所述建立开源代码实体的神经网络模型的步骤包括:将开源代码实体按行进行分割;为分割后的每行代码确定至少一个第一静态特征;为确定的所述至少一个静态特征中的每个静态特征生成对应的第一安全散列算法(Secure Hash Algorithm,SHA)散列值;将所述至少一个第一静态特征、对应的第一SHA散列值、开源代码实体组成N*M*J数组存入神经网络模型库;以所述N*M*J数组作为参数建立所述神经网络模型,并将所述神经网络模型储存于所述神经网络模型库中以备调用。
优选地,所述对所述神经网络模型进行训练的步骤包括:获取代码训练样本数据;将所述代码训练样本数据对神经网络模型进行训练,并根据训练结果不断更新所述神经网络模型的网络结构和参数数值。
优选地,所述方法还包括步骤:接收用户对输出的匹配结果的人工标记,根据所述人工标记更新训练后的神经网络模型。
优选地,所述接收用户对输出的匹配结果的人工标记,根据所述人工标记更新训练后的神经网络模型的步骤还包括:根据所述人工标记,更新所述神经网络模型库的N*M*J数组。
优选地,所述对所述混源代码实体进行预设处理,将处理后的数据输入到训练后的神经网络模型进行检索的步骤包括:将所述混源代码实体按行进行分割;为分割后的每行代码确定至少一个第二静态特征;为确定的所述至少一个第二静态特征中的每个静态特征生成对应的第二SHA散列值;将所述第二SHA散列值输入到所述神经网络模型进行计算;得出所述至少一个第二静态特征的输出概率。
本发明的实施方式还提供了一种开源代码检测装置,包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述的开源代码检测方法的步骤。
本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述开源代码检测方法的步骤。
本发明实施方式相对于现有技术而言,利用静态特征与神经网络相结合的开源代码检测技术,利用人工智能技术使得误报率降低,且通过对神经模型进行训练,使检测成本随着训练的模型的逐步成熟而降低。
另外,通过对开源代码的检测报告加入人工标记,使得本发明实施方式相比现有技术,具备了纠错能力,能够在对开源代码检测过程中,出现误报的情况及时进行纠错处理,以提高神经网络的学习能力,提高开源代码检测的准确性。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是根据本发明第一实施方式的开源代码检测方法的流程示意图;
图2是根据本发明第一实施方式的开源代码检测结果所输出的检索报告的示意图;
图3是根据本发明第二实施方式的开源代码检测方法的流程示意图;
图4是根据本发明第二实施方式的开源代码检测结果所输出的检索报告的示意图;
图5是根据本发明第三实施方式的开源代码检测装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
本发明的第一实施方式涉及一种开源代码检测方法,本实施方式的核心在于,通过建立开源代码的神经网络模型,且对神经网络模型进行训练,将处理过的混源代码输入到神经网络模型进行检索,从而判断混源代码中是否含有开源代码,本实施方式利用静态特征与神经网络相结合的开源代码检测技术,利用人工智能技术降低误报率,检测成本随着训练的模型的逐步成熟而降低。下面对本实施方式的开源代码检测方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
本实施方式中的开源代码检测方法的流程示意图如图1所示,该方法应用于开源代码检测装置。在本实施方式中,根据不同的需求,图1所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。
步骤101:接收开源代码实体,并建立开源代码实体的神经网络模型。
具体地,本实施方式中通过以下方式建立开源代码实体的神经网络模型:
首先,开源代码检测装置将开源代码实体按行进行分割,为分割后的每行代码按照关键字或者关键符号确定至少一个第一静态特征。具体地,可以是一个或者一组静态特征。
本实施方式中,静态特征一般为保留字、运算符、控制符、数据类型符和自定义名称及其组合等,如下代码实体在进行按行分割时,以提取第二行代码的部分静态特征为例:
表一
上述表一中,public为一个静态特征。public static或者public static final等为静态特征组合。
其次,为确定的所述至少一个静态特征中的每个静态特征生成对应的第一安全散列算法(Secure Hash Algorithm,SHA)散列值。
本实施方式中每个不同的静态特征或者静态特征组合对应一个唯一的SHA散列值,如上述表一所示的“SHA”。SHA散列值具有不可逆的安全性,重复机率低。例如:10000台机器,每秒并发生成10000个散列,则需要大概15万年后才会出现重复的散列值。相比于现有技术中,token序列主要由随机数和序列两部分组成,结合后再进行shuffle,一个token的生成需要进行多次计算(至少三次),每次计算均需要消耗CPU资源,如果是大并发的计算会导致机器宕机,甚至是影响数据安全性,token也不能够在一个全局环境下保证唯一,只能在特定场景范围、或上下文中保证唯一。因此,本实施方式中,SHA散列值的生成只需要一次计算,相比现有技术中采用token序列的串匹配检测技术,降低了CPU资源消耗,提升了开源代码的检测效率。
再次,将所述至少一个第一静态特征、对应的第一SHA散列值、开源代码实体组成N*M*J数组存入神经网络模型库。
具体地,本实施方式中,N*M*J数组中,N代表静态特征信息,如本实施方式中的第一静态特征,第二静态特征(步骤104中所述)等。M代表散列信息,例如SHA散列值。J代表代码实体信息,例如,开源代码实体或者混源代码实体等。本实施方式中,神经网络模型库用于存储神经网络模型以及输入输出数据等。
最后,以所述N*M*J数组作为参数建立所述神经网络模型,并将所述神经网络模型储存于所述神经网络模型库中以备调用。
神经网络模型属于比较成熟的网络模型,结构较为复杂,本实施方式中不再赘述。本实施方式中主要描述涉及开源代码检测中输入输出的人工神经网络(multiple neuralnetworks,MNN)的相关结构及原理。
本实施方式中,MNN主要有三个功能组成:
第一,输入特征功能:将输入的N*M*J数组转换为MNN内部特征数据,可以命名为MNN数组,本实施方式中,为MNN数组是一个高阶数组。
第二,更新记忆功能:当使用新的输入,将会更新MNN数组信息。
第三,输出功能:更新完MNN数组信息后,再次面对同样的输入时,MNN将根据更新后的MNN数组信息给出新的输出。这样,本实施方式中,可以避免静态特征匹配下,同一静态特征总是给出误报的情况。
步骤102:对所述神经网络模型进行训练。
具体地,用户输入代码训练样本,开源代码检测装置将代码训练样本输入到神经网络模型中,不断地对神经网络模型进行训练,并根据训练结果不断更新所述神经网络的网络结构和参数数值。其中,所述神经网络的网络结构和参数数值在步骤101中已经介绍,此处不再详述。本实施方式中,开发人员可以建立样本训练数据库,存储大量已知检测结果的混源代码实体,作为代码训练样本数据。
由此,经过大量的训练,检测误报率将会持续降低。且因为MNN的更新记忆功能,不会出现同一静态特征多次误报的情况。
步骤103:在完成对所述神经网络模型的训练后,接收待检测的混源代码实体。
具体地,当用户需要检测编程项目的源代码中是否含有开源代码时,则需要检测的源代码即为混源代码实体。
步骤104:对所述混源代码实体进行预设处理,将处理后的数据输入到训练后的神经网络模型进行检索。
具体地,本实施方式中通过以下方式对混源代码进行预设处理:
首先,将所述混源代码实体按行进行分割。
其次,为分割后的每行代码按照关键字或者关键符号确定至少一个第二静态特征。具体地,可以是一个或者一组静态特征。
再次,为确定的所述至少一个第二静态特征中的每个静态特征生成对应的第二SHA散列值。
其中,对于静态特征,散列值的定义在上述步骤101中已经有详细描述,此处不再赘述。
进一步地,将所述第二SHA散列值输入到所述神经网络模型进行计算,根据计算结果判断所述混源代码实体与所述开源代码实体是否匹配。
本实施方式中,将所述第二SHA散列值输入到所述神经网络模型进行计算,计算出第二静态特征的输出概率。根据输出概率判断所述混源代码实体与所述开源代码实体是否匹配。
具体地,本实施方式中通过下述公式一及公式二计算神经网络模型中静态特征的输出概率:
首先,根据公式一计算代码检测过程中,静态特征组匹配时所需内存的大小。
mi=G(mi,I(x),m) (公式一)
其中,m代表内存大小初始值。G为泛化计算公式的符号,主要是通过计算数据边界,获得数据的最大体积。I(x):特征转换公式,x是需要转换到神经网络的特征数据(例如,本实施方式中的N*M*J数组以及静态特征等)。mi为最新计算所需内存大小,i表示更新后的索引。
在上述公式mi=G(mi,I(x),m)中,m表示内存初始的大小,mi表示按照最新输入计算出来的内存大小。这样,随着输入的不断更新,会动态计算所需内存大小。
本实施方式中,由于静态特征组匹配时,静态特征无法一次分析完,因此,分配到足够的内存,将特征匹配放到内存里计算,可以减少输入输出(IO),提高计算效率。
其次,分配公式一中所得的内存,以供神经网络模型在该内存中根据公式二计算静态特征的概率。
o=O(I(x),m) (公式二)
其中,o:输出当前特征分析结果,m:公式一计算所得的内存大小,I(x):特征转换公式,x是需要转换到神经网络的特征数据(例如,本实施方式中的N*M*J数组以及静态特征等),O:特征分析的公式。
其中,本实施例中o代表输出当前特征分析结果,该分析结果为概率值,例如10%,50%等。根据需要也可以是概率结果。
对于上述计算单一输出概率的例子,本实施方式中为了方便描述,定义为第二静态特征的第一概率。必须说明的是,当出现较为复杂的代码实体,或者遇到换行等情况时,上述单一概率不能反映真实的匹配度,此时需要计算出第二静态特征的第二概率,甚至是第三概率的情况。根据第一概率,第二概率,甚至是第三概率综合判断所述混源代码实体与所述开源代码实体是否匹配。
对于公式二o=O(I(x),m),可以设置一个超参数k,代表支持事件的个数。
当k=1时,o1=O1(x,m)=argmaxi=1,…,NsO(I(x),mi)
而当k=2时,o2=O2(x,m)=argmaxi=1,…,NsO([I(x),mo1],mi)
而当k=3时,o3=O3(x,m)=argmaxi=1,…,NsO([I(x),mo2],mi)
…
以此类推,根据输入I(x)从记忆单元中选择出与I(x)最相关的记忆事实。
以上公式中,o1指第一概率结果,o2值第二概率结果,o3值第三概率结果。一般情况下,只需要一个超参数k等于1即可,即输出第一概率值。在代码实体比较复杂的情况下,我们可能需要输出第一概率值,第二概率值,此时k=2即可,甚至是需要第三概率的情况下,k=3,用户根据实际需要自行设置即可,本实施方式中不做详述。
当出现第一概率exp(1),第二概率exp(1),第三概率exp(3)时,可以通过权重来计算根据哪个概率值决定最终的输出概率。
第一概率的权重为:exp(1)/(exp(1)+exp(2)+exp(3))
第二概率的权重为:exp(2)/(exp(1)+exp(2)+exp(3))
第三概率的权重为:exp(3)/(exp(1)+exp(2)+exp(3))
上述三个值较大的值对应的概率即为最终决定匹配程度的输出概率,例如,第一概率对应的比重最大,则根据第一概率判断所述混源代码实体与所述开源代码实体是否匹配,第一概率为输出概率。同理,第二概率对应的比重最大,则根据第二概率判断所述混源代码实体与所述开源代码实体是否匹配,第二概率为输出概率。第三概率对应的比重最大,则根据第三概率判断所述混源代码实体与所述开源代码实体是否匹配,第三概率为输出概率。
步骤105:根据检索结果判断所述混源代码实体与所述开源代码实体是否匹配,且输出并显示所述混源代码的检索报告。
具体地,将混源代码实体中静态特征对应的SHA散列值输入到经过训练的神经网络模型后,根据所述混源代码实体与所述开源代码实体的匹配结果,输出并显示所述混源代码的检索报告。
本实施方式中,如图2所示为本实施方式中的开源代码检测结果所输出的检索报告的示意图。
该检索报告可以显示混源代码的实体信息,该实体信息至少包括文件路径、文件名称和匹配概率。
本实施方式中,该匹配概率代表了混源代码文件与开源代码文件的匹配程度。该匹配概率可以是上述实施方式中的输出概率,用户根据该检索报告,可以看到混源代码中每行或者每段代码与开源代码匹配的路径,匹配程度是多少。根据需要,该匹配概率还可以是根据混源代码的第二静态特征对应的多个输出概率最终综合统计出的混源代码与开源代码匹配的一个整体概率值。
该检索报告还可以显示与混源代码匹配的开源代码所对应的开源项目信息,该开源项目信息至少包括软件名称、协议类型及当前版本。
该检索报告还可以显示混源代码与开源代码的横向对比窗口,以便编程人员清晰直观地对比分析。
通过上述实施方式,公司或者个人可以确定使用了哪些开源项目的代码,以及使用了哪种许可证,以便使用开源代码的公司或者用户决定是否愿意承担风险并遵守这些条款,重写代码或以其他方式解决问题,规避风险。
与现有技术相比,本发明实施方式,利用静态特征与神经网络相结合的开源代码检测技术,利用人工智能技术降低误报率,检测成本随着训练的模型的逐步成熟而降低。
本发明的第二实施方式涉及一种开源代码的检测方法。第二实施方式是第一施方式的进一步改进,主要改进之处在于:对开源代码检测过程中,出现误报的情况及时进行纠错处理,以提高神经网络的学习能力,提高开源代码检测的准确性。
本实施方式中的开源代码检测方法如图3所示,具体包括:
步骤S301:接收开源代码实体,并建立开源代码实体的神经网络模型。
步骤S302:对所述神经网络模型进行训练。
步骤S303:在完成对所述神经网络模型的训练后,接收待检测的混源代码实体。
步骤S304:对所述混源代码实体进行预设处理,将处理后的数据输入到训练后的神经网络模型进行检索。
步骤S305:根据检索结果判断所述混源代码实体与所述开源代码实体是否匹配,且输出并显示所述混源代码的检索报告。
步骤S301至步骤S305分别与第一实施方式中步骤S101至步骤S105大致相同,为避免重复,在此不再一一赘述。
步骤S306:接收用户对输出的匹配结果的人工标记,根据所述人工标记更新训练后的神经网络模型。
其中,图4为本实施方式中的开源代码检测结果所输出的检索报告的示意图。
如图4所示,该检索报告除了可以显示混源代码的实体信息,与混源代码匹配的开源代码所对应的开源项目信息,混源代码与开源代码的横向对比窗口等信息外,该检索报告还可以根据需要显示误报按钮。当用户对检索报告进行分析,发现匹配结果有误报时,用户可以点击误报按钮进行人工标记。
例如,“年龄为30岁”的第一种编写方法:
public static final int Age=30;
但是碰到编写风格不同的程序员,有可能会出现如下的第二种编写方法:
public static final/
int Age=30;
上述写法中出现的换行,这样我们在按行进行代码分割时,第一种会出现静态特征组合public static final int,这样算出来的静态特征组合,定义一个整数类型常量的概率最大是100%,此处第一概率是100%。而对于第二种情况,按行进行代码分割后,出现静态特征组合public static final,只能确定要创建一个public静态常量,但是:布尔常量、字符串常量、小数常量、整数常量和字符常量,概率都是20%。此处第一概率为:20%。这样概率就降低了。以上例子仅仅是一行代码的准确率降低,实际检测中如果每行的准确率降低就会导致整个混源代码进行误报。
本实施方式中,为解决以上问题,用户对于这种换行场景造成的误报可以进行人工标记来纠错,让神经网络模型记住换行这种情况,避免再出现类似的误报。
具体地,本实施方式中,根据所述人工标记,更新所述神经网络模型库的N*M*J数组。进一步地,神经网络模型根据更新的N*M*J数组信息更新MNN原始数组数据。这样,再次面对同样的输入时,MNN将根据更新后的MNN数组信息给出新的输出。
下面通过公式详述一下本实施方式中神经网络模型的纠错能力。
本实施方式中,通过如下公式一及公式二计算神经网络模型中静态特征的输出:
mi=G(mi,I(x),m) (公式一)
o=O(I(x),m) (公式二)
必须说明的是,对于公式二o=O(I(x),m),可以设置一个超参数k。其中,k代表事件的个数。
当k=1时,o1=O1(x,m)=argmaxi=1,…,NsO(I(x),mi)
而当k=2时,o2=O2(x,m)=argmaxi=1,…,NsO([I(x),mo1],mi)
对于以上换行匹配的情况,可以设置k=2,人工干预,这样计算出换行匹配的可能性,匹配概率增加到100%。
本实施方式中,k作为一个超参数,可以是人工干预模型的一个自定义参数。经过神经网络模型正常的分析后,一旦发现误报,通过手动调整k值,解决误报的问题。
当然以上纠错行为也可以应用于训练数据中,这样神经网络模型更加准确。由此通过大量的训练,检测误报率将持续降低,不会出现同一特征多次误报的情况。
这样,本实施方式中,可以避免同一静态特征总是给出误报的情况,具有很好的纠错能力。
与现有技术相比,本发明实施方式,在开源代码检测过程中,当出现误报的情况及时进行纠错处理,以提高神经网络的学习能力,提高开源代码检测的准确性。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本发明第三实施方式涉及一种开源代码检测装置,如图5所示,包括至少一个处理器501;以及,与至少一个处理器501通信连接的存储器502;其中,存储器502存储有可被至少一个处理器501执行的指令,指令被至少一个处理器501执行,以使至少一个处理器501能够执行上述的开源代码检测方法的步骤。
其中,处理器501和存储器502采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器501和存储器502的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器501处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器501。
处理器501负责管理总线和通常的处理,还可以提供各种功能,包括定时、外围接口、电压调节、电源管理以及其他控制功能。而存储器502可以被用于存储处理器501在执行操作时所使用的数据。
本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述开源代码检测方法的步骤。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (9)
1.一种开源代码检测方法,其特征在于,所述方法包括:
接收开源代码实体,并建立开源代码实体的神经网络模型;
对所述神经网络模型进行训练;
在完成对所述神经网络模型的训练后,接收待检测的混源代码实体;
将所述混源代码实体按行进行分割,并为分割后的每行代码确定至少一个第二静态特征;
为确定的所述至少一个第二静态特征中的每个静态特征生成对应的第二SHA散列值;
将所述第二SHA散列值输入到所述神经网络模型进行计算,得出所述至少一个第二静态特征的输出概率;
根据所述输出概率判断所述混源代码实体与所述开源代码实体是否匹配。
2.根据权利要求1所述的开源代码检测方法,其特征在于,所述方法还包括步骤:
根据所述混源代码实体与所述开源代码实体的匹配结果,输出并显示所述混源代码的检索报告。
3.根据权利要求2所述的开源代码检测方法,其特征在于,所述检索报告至少显示下述信息中的一种:
混源代码的实体信息,该实体信息至少包括文件路径、文件名称和匹配概率;
与混源代码匹配的开源代码所对应的开源项目信息,该开源项目信息至少包括软件名称、协议类型及当前版本;
混源代码与开源代码的横向对比窗口;
误报按钮,以供用户在匹配结果出现误报时进行人工标记。
4.根据权利要求2所述的开源代码检测方法,其特征在于,所述建立开源代码实体的神经网络模型的步骤包括:
将开源代码实体按行进行分割;
为分割后的每行代码确定至少一个第一静态特征;
为确定的所述至少一个第一静态特征中的每个静态特征生成对应的第一安全散列算法(Secure Hash Algorithm,SHA)散列值;
将所述至少一个第一静态特征、对应的第一SHA散列值、开源代码实体组成N*M*J数组存入神经网络模型库;
以所述N*M*J数组作为参数建立所述神经网络模型,并将所述神经网络模型储存于所述神经网络模型库中以备调用。
5.根据权利要求4所述的开源代码检测方法,其特征在于,所述对所述神经网络模型进行训练的步骤包括:
获取代码训练样本数据;
使用所述代码训练样本数据对神经网络模型进行训练,并根据训练结果不断更新所述神经网络模型的网络结构和参数数值。
6.根据权利要求4所述的开源代码检测方法,其特征在于,所述方法还包括步骤:
接收用户对输出的匹配结果的人工标记,根据所述人工标记更新训练后的神经网络模型。
7.根据权利要求6所述的开源代码检测方法,其特征在于,所述接收用户对输出的匹配结果的人工标记,根据所述人工标记更新训练后的神经网络模型的步骤包括:
根据所述人工标记,更新所述神经网络模型库的N*M*J数组。
8.一种开源代码检测装置,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至7中任一所述的开源代码检测方法的步骤。
9.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一所述的开源代码检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911035273.9A CN110990256B (zh) | 2019-10-29 | 2019-10-29 | 开源代码检测方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911035273.9A CN110990256B (zh) | 2019-10-29 | 2019-10-29 | 开源代码检测方法、装置及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110990256A CN110990256A (zh) | 2020-04-10 |
CN110990256B true CN110990256B (zh) | 2023-09-05 |
Family
ID=70082593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911035273.9A Active CN110990256B (zh) | 2019-10-29 | 2019-10-29 | 开源代码检测方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110990256B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948261A (zh) * | 2021-03-29 | 2021-06-11 | 建信金融科技有限责任公司 | 针对代码检测结果的审计方法和装置 |
CN113849185A (zh) * | 2021-09-26 | 2021-12-28 | 中国工商银行股份有限公司 | 程序管控方法、程序管控装置、电子设备以及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015192212A1 (en) * | 2014-06-17 | 2015-12-23 | Maluuba Inc. | Server and method for classifying entities of a query |
CN106294164A (zh) * | 2016-08-15 | 2017-01-04 | 中国银行股份有限公司 | 一种代码检查方法及装置 |
CN108664269A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于深度学习的特征依恋代码异味检测方法 |
CN108664237A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于启发式和神经网络的非api成员推荐方法 |
WO2018218259A1 (en) * | 2017-10-19 | 2018-11-29 | Pure Storage, Inc. | Ensuring reproducibility in an artificial intelligence infrastructure |
CN109062792A (zh) * | 2018-07-21 | 2018-12-21 | 东南大学 | 一种基于串匹配和特征匹配的开源代码检测方法 |
CN109063421A (zh) * | 2018-06-28 | 2018-12-21 | 东南大学 | 一种开源许可证合规性分析与冲突性检测方法 |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9436463B2 (en) * | 2015-01-12 | 2016-09-06 | WhiteSource Ltd. | System and method for checking open source usage |
US20180150742A1 (en) * | 2016-11-28 | 2018-05-31 | Microsoft Technology Licensing, Llc. | Source code bug prediction |
-
2019
- 2019-10-29 CN CN201911035273.9A patent/CN110990256B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015192212A1 (en) * | 2014-06-17 | 2015-12-23 | Maluuba Inc. | Server and method for classifying entities of a query |
CN106294164A (zh) * | 2016-08-15 | 2017-01-04 | 中国银行股份有限公司 | 一种代码检查方法及装置 |
WO2018218259A1 (en) * | 2017-10-19 | 2018-11-29 | Pure Storage, Inc. | Ensuring reproducibility in an artificial intelligence infrastructure |
CN108664269A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于深度学习的特征依恋代码异味检测方法 |
CN108664237A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于启发式和神经网络的非api成员推荐方法 |
CN109063421A (zh) * | 2018-06-28 | 2018-12-21 | 东南大学 | 一种开源许可证合规性分析与冲突性检测方法 |
CN109062792A (zh) * | 2018-07-21 | 2018-12-21 | 东南大学 | 一种基于串匹配和特征匹配的开源代码检测方法 |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
Non-Patent Citations (1)
Title |
---|
林婵 ; 李俊杰 ; 饶飞 ; 罗平 ; .基于索引的分布式代码克隆检测.信息安全研究.2016,(03),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN110990256A (zh) | 2020-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11416268B2 (en) | Aggregate features for machine learning | |
EP4195112A1 (en) | Systems and methods for enriching modeling tools and infrastructure with semantics | |
CN108595341B (zh) | 测试用例自动生成方法及系统 | |
US8181163B2 (en) | Program synthesis and debugging using machine learning techniques | |
AU2015347304B2 (en) | Testing insecure computing environments using random data sets generated from characterizations of real data sets | |
Campi et al. | The scenario approach: A tool at the service of data-driven decision making | |
CN110990256B (zh) | 开源代码检测方法、装置及计算机可读存储介质 | |
CN113762502B (zh) | 神经网络模型的训练方法及装置 | |
CN107590254A (zh) | 具有合并处理方法的大数据支撑平台 | |
Konur et al. | kPWorkbench: A software suit for membrane systems | |
CN113807728A (zh) | 基于神经网络的绩效考核方法、装置、设备及存储介质 | |
Balogh et al. | Time evolution of the hierarchical networks between PubMed MeSH terms | |
Bateman et al. | The The Supervised Learning Workshop: A New, Interactive Approach to Understanding Supervised Learning Algorithms | |
Ilkhani et al. | Extraction test cases by using data mining; reducing the cost of testing | |
Srivastava et al. | NetSeekR: a network analysis pipeline for RNA-Seq time series data | |
CN117521063A (zh) | 基于残差神经网络并结合迁移学习的恶意软件检测方法及装置 | |
CN117472431A (zh) | 代码注释生成方法、装置、计算机设备、存储介质和产品 | |
CN117312979A (zh) | 对象分类方法、分类模型训练方法及电子设备 | |
WO2020227525A1 (en) | Visit prediction | |
Danuso et al. | SEMoLa: A simple and easy modelling language | |
CN116304251A (zh) | 标签处理方法、装置、计算机设备和存储介质 | |
Zhao | User manual for povmap | |
CN114610648A (zh) | 一种测试方法、装置及设备 | |
CN114579398A (zh) | 一种日志的存储方法、装置、设备及存储介质 | |
CN111858386A (zh) | 数据测试方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |