用于半监督漏洞模式修订的方法、系统及存储介质与流程

文档序号:31868923发布日期:2022-10-21 17:54阅读:44来源:国知局
用于半监督漏洞模式修订的方法、系统及存储介质与流程

1.本公开内容中讨论的实施方式涉及半监督漏洞模式修订。


背景技术:

2.软件开发者论坛提供了与开发软件程序例如修复软件程序中的错误 (也称为漏洞或错误)相关的自然语言描述和代码片段的丰富的混合知 识库。软件开发工具可以被配置成执行机器分析操作以对论坛的帖子进 行分析,从而识别哪些帖子可能与纠正特定错误相关。
3.本公开内容中要求保护的主题不限于解决任何不足或仅在诸如上述 那些环境的环境中操作的实施方式。相反,提供该背景技术仅用于示出 可以实践本公开内容中描述的一些实施方式的一个示例技术领域。


技术实现要素:

4.操作可以包括从一个或更多个网站获得多个帖子(post),每个帖子 包括源代码的包含对应错误的相应有漏洞片段(buggy snippet)。操作还 可以包括从多个帖子生成多个漏洞模式(bug pattern),其中,每个相应 漏洞模式与相应有漏洞片段对应并且指示对应漏洞场景,对应漏洞场景 导致与相应漏洞模式对应的相应有漏洞片段的对应错误。操作还可以包 括针对相应漏洞模式确定相似性,以及基于相似性确定来选择多个漏洞 模式中的第一漏洞模式以供修订。此外,操作可以包括获得作为第一漏 洞模式的修订版本的经修订漏洞模式。
5.实施方式的目的和优点将至少通过权利要求书中特别指出的元素、 特征以及组合来实现和完成。
6.前面的总体描述和下面的详细描述均作为示例给出,并且是说明性 的而不是对所要求保护的本发明的限制。
附图说明
7.将通过使用附图以附加的明确性和细节来描述和说明示例实施方式, 在附图中:
8.图1a是表示与半监督漏洞模式修订相关的示例环境的图;
9.图1b示出了可以包括在图1a的漏洞模式库中的示例错误类型的示 例漏洞模式;
10.图2示出了可以用于生成漏洞模式的示例计算系统的框图;
11.图3是获得经修订漏洞模式的示例方法的流程图;
12.图4是自动生成漏洞模式的示例方法的流程图;
13.图5是确定与不同的漏洞模式类型相关联的出现率的示例方法的流 程图;
14.图6是确定与不同的未访问漏洞模式相关联的相异性得分的示例方 法的流程图;以及
15.图7是基于经修订漏洞模式聚集帖子的示例方法的流程图。
具体实施方式
16.软件开发者论坛可以包括帖子,在帖子中,用户可以发布与代码中 的错误(也称为“漏洞”)相关的问题并且其他用户可以发布关于如何纠 正错误的答案。此外,问题帖子可以包括源代码的包含错误的代码片段 (称为“有漏洞片段”)。有漏洞片段可以包括可能导致错误发生的对应 源代码的不同条件或特征。
17.一些自动化开发工具已经被配置成从有漏洞片段生成漏洞模式。漏 洞模式可以包括有漏洞片段的通用版本,其包括可能导致有漏洞片段中 所包括的不同类型错误的不同模式的场景(称为“漏洞场景”)。例如, 漏洞场景可以包括对应源代码的可能导致在对应软件程序中出现的相应 类型的漏洞的不同条件或特征。漏洞模式可以与对应漏洞场景相关,这 是因为相应漏洞模式可以包括创建可以与漏洞模式对应的漏洞场景的不 同条件或特征的编程元素和/或关系。
18.在这些或其他实施方式中,可以将漏洞模式与正在开发并且包括错 误的源代码(称为“被测代码”)进行比较以识别哪些漏洞模式可以对应 于被测代码中的哪些错误。在一些实施方式中,开发工具可以使用与被 测代码中的错误对应的漏洞模式来识别或生成针对错误的修复(也称为
ꢀ“
补丁”)。例如,对应于与被测代码中的特定错误对应的特定漏洞模式 的补丁可以被识别为针对该特定错误的潜在修复。
19.本公开内容中描述的一些实施方式涉及基于开发者论坛内的帖子来 生成和/或改进漏洞模式的库(称为“漏洞模式库”)的方法和系统。特别 地,操作可以包括通过半监督处理来改进自动生成的漏洞模式,在所述 半监督处理中,计算系统智能地选择帖子和对应的漏洞模式以供人类开 发者修订。对漏洞模式被“修订”的引用可以包括对漏洞模式的部分进 行更改或完全重写漏洞模式。如下文进一步详细讨论的,计算系统可以 被配置成以减少由人类开发者进行的工作中的冗余和/或增加已经经过修 订的不同类型的漏洞模式的多样性的方式来选择不同的帖子及对应的漏 洞模式。
20.智能选择可以使得计算系统能够生成比以其他方式实现的漏洞模式 库更有用且更精确的漏洞模式库。例如,由于开发者论坛上与不同错误 类型中的每种错误类型相关的大量帖子(例如,数百至数千个),人类不 可能能够对每个对应的漏洞模式进行改进和修订。这样,根据本公开内 容的一个或更多个实施方式,软件开发的技术领域可以通过以计算系统 能够更好地编译漏洞模式库的方式配置计算系统来改进。另外,在一些 实施方式中,系统可以通过对可以用于识别对应补丁的漏洞模式进行改 进来促进软件程序的开发。
21.参照附图来说明本公开内容的实施方式。
22.图1a是表示根据本公开内容中描述的至少一个实施方式布置的与 漏洞模式的半监督修订相关的示例环境100的图。环境100可以包括网 络110、系统120、网站130和漏洞模式库150。
23.网络110可以包括被配置成用于在环境100的任何部件(例如,系 统120与网站130)之间传送信号的任何通信网络。网络110可以是有线 的或无线的。网络110可以具有多种配置,包括星形配置、令牌环配置 或其他合适的配置。此外,网络110可以包括局域网(lan)、广域网(wan) (例如因特网)和/或多个装置可以通过其通信的其他互联数据路径。在 一些实施方式中,网络110可以包括对等网络。网络110还可以耦接至 或包括电信网络的能够以各种不同的通信协议传送数据的部分。
24.在一些实施方式中,网络110包括或被配置成包括通信网络、通信网络、通信网络、通信网络、 无线保真(wi-fi)通信网络、zigbee通信网络、homeplug通信网络、 电力线通信网络、消息队列遥测传输(mqtt)通信网络、mqtt-传感 器(mqtt-s)通信网络、受限应用协议(coap)通信网络、表述性状 态传输应用协议接口(rest api)通信网络、可扩展消息传递和到场协 议(xmpp)通信网络、蜂窝通信网络、任何类似的通信网络或其任何组 合以用于发送和接收数据。在网络110中传送的数据可以包括经由以下 传送的数据:短消息服务(sms)、多媒体消息服务(mms)、超文本传 输协议(http)、直接数据连接、无线应用协议(wap)、电子邮件、智 能能源规范(sep)、echonet lite、openadr、或者可以通过系统120、 网站130、云服务器通信或网关实现的任何其他协议。
25.网站130可以包括因特网上的任何可用网站。可替选地或附加地, 在一些实施方式中,网站130可以包括内部储存库或资源,例如内部内 联网站点上的文档集合。例如,在一些实施方式中,网站130可以包括 用户可以发布问题并且其他用户可以发布答案的讨论论坛。例如,一个 用户可以发布包括软件程序的源代码的包含错误的有漏洞片段的问题。 附加地或可替选地,另一用户可以发布答案,该答案可以包括源代码的 示例片段,所述示例片段可以是针对问题帖子的有漏洞片段中的错误的 补丁。在这些和其他实施方式中,多个用户可以针对问题发布答案和/或 一个用户可以发布多个答案。在一些实施方式中,发布问题的用户可以 在解决用户经历的错误时选择一个答案。
26.在一些实施方式中,网站130的用户可以对用户所发布的不同答案 进行投票。虽然图1a描绘了单个网站130,但是在一些实施方式中可以 存在多个网站130。在一些实施方式中,网站130可以包括多个页面或多 个帖子,例如帖子140a、帖子140b、帖子140c和帖子140d(统称为 帖子140)。虽然网站130被描绘为具有四个帖子140,但是在一些实施 方式中,网站130可以包括数百个帖子140、数千个帖子140、数十万个 帖子140或任何数目的帖子140。此外,虽然帖子140被描绘为与单个网 站130相关联,但是在一些实施方式中,一些帖子140可以与第一网站 相关联,并且其他帖子140可以与第二网站相关联。例如,帖子140a和 帖子140b可以与网站130相关联,而帖子140c和帖子140d可以与不 同的网站相关联。
27.在这些和其他实施方式中,帖子140可以均与相同的软件程序相关 联。附加地或可替选地,两个或更多个帖子140可以与不同的软件程序 相关联。附加地或可替选地,每个帖子140可以与不同的软件程序相关 联。例如,帖子140a可以与软件程序142a相关、帖子140b可以与软 件程序142b相关、帖子140c可以与软件程序142c相关并且帖子140d 可以与软件程序142d相关(统称为软件程序142)。在一些实施方式中, 对软件程序142的引用可以包括对软件程序的代码行的引用。例如,软 件程序142a可以包括较大软件程序中的多行,并且可以不包括较大软件 程序中的每一行。在一些实施方式中,软件程序142可以是较大软件程 序中的包括错误的代码行。因此,对软件程序142的引用不限于整个程 序。在这些和其他实施方式中,软件程序142可以各自彼此不同。例如, 软件程序142可以各自具有不同的目的、具有不同的作者、以不同的编 程语言编写或者包括不同的错误类型。
28.在一些实施方式中,软件程序142可以与不同的问题相关联。例如, 网站130的用户可以在网站130上创建帖子140a。作为帖子140a的一 部分,用户可以添加软件程序142a
并且可以询问与软件程序142a相关 联的问题。例如,用户可能在编写软件程序142a时经历了错误。为了获 得帮助,用户可以将软件程序142a的有漏洞片段作为帖子140a的一部 分发布到网站130。用户可以写问题来向网站130的其他用户询问用户如 何可以补救错误和/或向其他用户询问是什么导致了软件程序142a中的 错误。
29.在一些实施方式中,软件程序142a可以包括错误144a,软件程序 142b可以包括错误144b,软件程序142c可以包括错误144c,并且软 件程序142d可以包括错误144d(统称为错误144)。在一些实施方式中, 错误144中的每个错误可以是彼此不同的错误。例如,错误144a可以是 运行时错误,错误144b可以是逻辑错误,错误144c可以是编译错误, 并且错误144d可以是不同于错误144a的运行时错误。可替选地或附加 地,在一些实施方式中,错误144中的一个或更多个错误可以是相同的 错误、可以是相关的错误和/或可以是类似的错误。例如,在一些实施方 式中,错误144a可以是c++编程语言中的索引越界(index out of bounds) 错误,而错误144c可以是java编程语言中的索引越界错误。在该示例 中,错误144a和错误144c可以是类似的误差。在一些实施方式中,即 使错误在不同的环境中被不同地显示和/或处理,错误144也可以被确定 为类似的错误。例如,即使行为的根本原因可能相同,即试图访问超出 其规定的索引边界的数组,在c++环境和java环境下的运行时间期间也 可以不同地显示和处理数组索引越界访问。
30.在一些实施方式中,一个或更多个帖子140可以包括补丁。例如, 帖子140a可以包括补丁146a,帖子140b可以包括补丁146b,并且帖 子140c可以包括补丁146c(统称为补丁146)。在一些实施方式中,一 个或更多个帖子140可以不包括相关联的补丁146。例如,帖子140d可 以不包括补丁。在一些实施方式中,补丁146可以指示如何补救对应的 错误144,例如,补丁146a可以对错误144a进行补救,使得在将补丁 146a应用于软件程序142a之后,软件程序142a不再具有错误144a。 在一些实施方式中,补丁146可以包括源代码的可以被应用于软件程序 142中的错误144的源的示例片段。在一些实施方式中,一个或更多个帖 子140可以包括多个补丁146。例如,帖子140b可以包括多个补丁146b。 在这些和其他实施方式中,网站130的不同用户可以对不同的补丁146b 进行排名或投票,使得一个补丁146b可以接收最积极的投票。在这些和 其他实施方式中,创建帖子140b的用户可以基于所选择的解决该用户的 问题的补丁来选择补丁146b之一作为所选择的补丁146b。
31.在一些实施方式中,帖子140可以包括问题。例如,软件程序142 可以被集成到由网站130的用户发布的问题中。例如,第一用户可能已 经编写了软件程序142a并且遇到了错误144a。然后,第一用户可以在 网站130上创建帖子140a作为问题帖子,帖子140a包括软件程序142a 的有问题片段、错误144a和错误144a的细节以及对其他人帮助解决错 误144a的请求。在这些和其他实施方式中,补丁146a可以包括针对第 一用户的问题的答案。例如,在这些和其他实施方式中,第二用户可以 发布该问题的答案,该答案包括作为补丁146a的示例代码片段,该示例 代码片段可以纠正包括在帖子140a中的有漏洞片段的错误。
32.系统120可以包括基于计算机的硬件系统,所述基于计算机的硬件 系统包括处理器、存储器和通信能力。系统120可以耦接至网络110以 与环境100的任何其他部件传送数据。系统120的一些示例可以包括移 动电话、智能电话、平板计算机、膝上型计算机、台式计算机、机顶盒、 虚拟现实装置或连接装置等。附加地或可替选地,系统120可以包括一 个或更多个基于处理器的计算系统。例如,系统120可以包括一个或更 多个硬件服务器或被配
置成用作服务器的其他基于处理器的计算装置。 系统120可以包括存储器和网络通信能力。在一些实施方式中,系统120 可以包括诸如以下参考图2描述的计算系统。附加地或可替选地,在一 些实施方式中,系统120可以包括被配置成执行和/或引导关于系统120 描述的操作的一个或更多个模块。
33.在一些实施方式中,系统120可以被配置成访问网站130以从网站 130获得帖子140。在一些实施方式中,系统120可以被配置成基于帖子 140来编译漏洞模式库150和/或修订漏洞模式库150。例如,系统120 可以被配置成基于包括在帖子140中的有漏洞片段来生成漏洞模式。
34.在一些实施方式中,漏洞模式的对应漏洞场景可以包括可能导致常 见类型的错误的常见场景。例如,一些示例场景可以包括不支持操作异 常、并发修改异常、类强制转换异常、非法参数异常等。
35.在一些实施方式中,可以根据基于特定软件语言的语法的特定域专 用语言(dsl)来格式化漏洞模式库150中的漏洞模式。例如,可以根 据基于类似java的语法的特定dsl来格式化可以提供与java相关的漏 洞场景的一个或更多个漏洞模式。在一些实施方式中,漏洞模式库150 可以包括根据与不同软件语言对应的不同dsl格式化的漏洞模式。在这 些或其他实施方式中,不同的漏洞模式可以对应于相同类型的漏洞但是 可以根据不同的dsl来格式化。附加地或可替选地,一些漏洞模式可以 特定于某些类型的软件语言并且因此仅可以根据它们可能涉及的软件语 言的相应dsl来格式化这样的漏洞模式。根据某些dsl来格式化漏洞模 式可以使得漏洞模式可以被构造为对应软件程序的源代码的通用代码片 段。
36.在这些或其他实施方式中,dsl的格式与对应软件语言的语法相比 可能有一些差异。例如,与对应的软件语言相比,在特定dsl中可以放 宽一些语法规则。例如,java dsl可以不具有java的一些严格形式,例 如方法中的语句的封装和/或类。
37.作为另一示例,特定dsl可以支持语义抽象,在语义抽象中,特定 语义抽象可以用于表示在相应漏洞模式的漏洞场景的上下文中以及在漏 洞的类型的上下文中相对于彼此在语义上等同的不同程序元素。换言之, 语义抽象对一系列程序元素进行编码,这一系列程序元素对于特定种类 的漏洞及其漏洞场景起等同的作用,但通常可能彼此不等同。
38.例如,图1b示出了针对不支持操作异常的示例漏洞模式160,其可 以是运行时异常漏洞。在漏洞模式160中,方法“add()”、“remove()”、
ꢀ“
clear()”、“addall()”和“removeall”均可以被视为语义等同物,因为 在不支持操作异常的上下文中,这些方法中的每一个均表示通过添加或 移除给定“list”的一个或更多个元素来对该“list”进行结构修改。然 而,一般而言,这些方法中的一些方法实际上在执行不同的或甚至相反 的操作,例如“add()”和“remove()”实际上在执行相反的操作,并且 因此可能不被认为是漏洞模式160的漏洞场景的上下文之外的语义等同 物。
39.附加地或可替选地,特定dsl可以支持通配符,通配符可以匹配可 能以一种或更多种方式不同的不同程序元素。例如,在图1b的漏洞模式 160中,方法“arrays.aslist()”的参数是通配符“*”,因为它可以表示 不同的程序元素,例如变量、新数组对象的创建或来自方法调用的返回。
40.在这些或其他实施方式中,特定dsl可以支持对值的数字约束。例 如,图1b示出了非法参数异常的示例漏洞模式166。漏洞模式166的方 法“wait()”的参数是数值,其中如
果该值小于0,则可能发生非法参数 异常。为了表示该场景,用数字约束“negative”来指定方法“wait()
”ꢀ
的参数。
41.如上所述,图1b示出了可以包括在漏洞模式库150中并且可以根据 java dsl配置的针对一些示例类型的错误的一些示例漏洞模式。例如, 图1b示出了针对不支持操作异常的示例漏洞模式160、针对并发修改异 常的示例漏洞模式162、针对类强制转换异常的示例漏洞模式164以及针 对非法参数异常的示例漏洞模式166,每个均可以是与java代码相关联 的错误。
42.在这些或其他实施方式中,系统120可以被配置成选择某些漏洞模 式以供(例如,人类开发者)修订。在一些实施方式中,对某些漏洞模 式的选择可以包括选择对应的帖子140以供审查(review)。附加地或可 替选地,对某些漏洞模式的选择可以包括建议某些漏洞模式以供修订和/ 或建议对应的帖子140以供审查(例如,以帮助促进修订过程)。
43.修订可以包括对漏洞模式进行改进,例如对抽象化进行改进以更好 地泛化对应的漏洞场景等。如上所述,修订可以包括人类对自动生成的 漏洞模式的部分的更改或对漏洞模式的完全重写。此外,选择过程可以 使得人类参与的量可以被减少。例如,选择过程可以基于不同类型的漏 洞模式的流行度确定,其中,相比于较不流行的漏洞模式,可以选择更 流行的漏洞模式以供修订。因此,最有可能用于帮助修复软件程序的漏 洞模式可以被给予比不太常见的漏洞模式高的优先级以供修订。在一些 实施方式中,流行度确定可以基于与对应于相应漏洞模式的帖子140相 关联的用户投票。
44.附加地或可替选地,选择过程可以基于针对漏洞模式确定的相似性。 例如,如进一步详细公开的,在一些实施方式中,可以基于多少个漏洞 模式与相同漏洞场景相关(例如,基于多少个漏洞模式是相同或相似的) 来确定不同漏洞模式类型的出现率。例如,被确定为相对于彼此满足相 似性阈值的一组漏洞模式可以被视为具有相同漏洞模式类型。此外,可 以对与相同漏洞模式类型对应的漏洞模式的数量进行计数以确定对应漏 洞模式的相应出现率。在一些实施方式中,相比于与相对低的出现率对 应的漏洞模式,可以选择与相对高的出现率对应的漏洞模式以供修订。 在一些实施方式中,系统120可以被配置成使用下面关于图5进一步详 细描述的一个或更多个操作来确定出现率。
45.作为另一实例,相似性可以用于改进被选择以供修订的不同漏洞模 式的多样性。例如,在一些实施方式中,系统120可以被配置成确定经 修订漏洞模式与帖子140的一个或更多个有漏洞片段之间的相似性。在 这些或其他实施方式中,用作这样的相似性分析的一部分的有漏洞片段 可以对应于尚未被(例如,人类开发者)修订或审查的帖子140和/或漏 洞模式。在这些或其他实施方式中,系统120可以被配置成确定经修订 漏洞模式与尚未被(例如,人类开发者)修订或审查的一个或更多个其 他漏洞模式之间的相似性。尚未被修订或审查的帖子或漏洞模式可以分 别被称为“未访问帖子”或“未访问漏洞模式”。在这些或其他实施方式 中,相对于经修订漏洞模式满足相似性阈值的未访问帖子(及其对应的 漏洞模式)或未访问漏洞模式可以与经修订漏洞模式一起被分组到集群 中。在这些或其他实施方式中,与集群相关联的未访问漏洞模式(例如, 被直接添加至集群的未访问漏洞模式或与添加至集群的未访问帖子对应 的漏洞模式)可以被移除而不考虑进行修订。此外,添加至集群的未访 问帖子可以被移除而不考虑作为供审查的选择。这样,可以减少审查和 修订中的冗余。在一些实施方式中,系统120可以被配置成使用以下关 于图7进一步详细描
述的一个或更多个操作来识别集群。
46.附加地或可替选地,相似性确定可以指示哪些未访问漏洞模式可能 与经修订漏洞模式最不同。在这些或其他实施方式中,系统120可以被 配置成基于相应相似性是否满足相异性阈值来确定选择哪些未访问漏洞 模式以供潜在修订,其中,可以确定未访问漏洞模式与一个或更多个经 修订漏洞模式中的每一个之间的相应相似性。这样,系统120可以被配 置成选择范围广泛的不同类型的不同漏洞模式以提高包括在漏洞模式库 150中的经修订漏洞模式的多样性。在一些实施方式中,系统120可以被 配置成使用以下关于图6进一步详细描述的一个或更多个操作来确定相 异性。
47.系统120还可以被配置成获得经修订漏洞模式并将它们包括在漏洞 模式库150中。因此,包括在漏洞模式库150中的漏洞模式可以比先前 已经包括的漏洞模式有所改进。此外,通过智能地选择建议哪些漏洞模 式及相关联的帖子140以供修订和审查,系统120可以被配置成提高漏 洞模式库150的生成过程的效率。此外,智能选择可以使得包括在漏洞 模式库150中的漏洞模式的数量可以被减少,这可以提高漏洞模式库的 存储效率并且释放计算和存储资源。
48.在不脱离本公开内容的范围的情况下,可以对图1a进行修改、添加 或省略。例如,环境100可以包括比本公开内容中示出和描述的元素更 多或更少的元素。例如,在一些实施方式中,系统120以及相对于系统120 讨论的操作可以由单个装置执行或者被分布在不同的系统上。在这些和 其他实施方式中,环境100可以包括网络110以及可以经由网络110通 信地耦接的一个或更多个系统(包括系统120和网站130)。
49.图2示出了根据本公开内容的至少一个实施方式的可以用于生成漏 洞模式的示例计算系统202的框图。在一些实施方式中,计算系统202 可以被配置成实现或引导与图1a的系统120相关联的一个或更多个操作。 计算系统202可以包括处理器250、存储器252和数据存储装置254。处 理器250、存储器252和数据存储装置254可以通信地耦接。
50.通常,处理器250可以包括任何适当的专用或通用计算机、计算实 体或者包括各种计算机硬件或软件模块的处理装置,并且可以被配置成 执行存储在任何适用的计算机可读存储介质上的指令。例如,处理器250 可以包括微处理器、微控制器、数字信号处理器(dsp)、专用集成电路 (asic)、现场可编程门阵列(fpga)或者被配置成解译和/或执行程序 指令和/或对数据进行处理的任何其他数字或模拟电路。尽管在图2中被 示出为单个处理器,但是处理器250可以包括任何数量的处理器,其被 配置成单独地或共同地执行或引导本公开内容中描述的任何数量的操作 的执行。此外,一个或更多个处理器可以存在于一个或更多个不同的电 子装置例如不同的服务器上。
51.在一些实施方式中,处理器250可以被配置成:解译和/或执行存储 在存储器252、数据存储装置254或者存储器252和数据存储装置254 中的程序指令,和/或对存储在存储器252、数据存储装置254或者存储 器252和数据存储装置254中的数据进行处理。在一些实施方式中,处 理器250可以从数据存储装置254获取程序指令并且将程序指令加载到 存储器252中。在程序指令被加载到存储器252中之后,处理器250可 以执行程序指令。
52.例如,在一些实施方式中,与漏洞模式生成和漏洞模式修订相关的 一个或更多个模块可以作为程序指令被包括在数据存储装置254中。处 理器250可以从数据存储装置254获取模块的程序指令,并且可以将模 块的程序指令加载到存储器252中。在模块的程序指
令被加载到存储器 252中之后,处理器250可以执行程序指令,使得计算系统202可以按照 指令的指示来实现与模块相关联的操作(例如,执行操作和/或引起操作 的执行)。
53.存储器252和数据存储装置254可以包括用于携载计算机可执行指 令或数据结构或者在其上存储有计算机可执行指令或数据结构的计算机 可读存储介质。这样的计算机可读存储介质可以包括可以由通用或专用计 算机例如处理器250访问的任何可用介质。作为示例而非限制,这样的计 算机可读存储介质可以包括有形的或非暂态的计算机可读存储介质,包括 随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存 储器(eeprom)、致密盘只读存储器(cd-rom)、或其他光盘存储装置、 磁盘存储装置或其他磁存储装置、闪存装置(例如,固态存储装置)、或 者可以用于存储计算机可执行指令形式的特定程序代码或数据结构并且 可以由通用或专用计算机访问的任何其他存储介质。以上的组合也可以被 包括在计算机可读存储介质的范围内。计算机可执行指令可以包括例如 被配置成使处理器250执行某一操作或一组操作的指令和数据。
54.在不脱离本公开内容的范围的情况下,可以对计算系统202进行修 改、添加或省略。例如,在一些实施方式中,计算系统202可以包括可 能未明确示出或描述的任何数量的其他部件。
55.图3是根据本公开内容中描述的至少一个实施方式的获得经修订漏 洞模式的示例方法300的流程图。方法300可以由任何合适的系统、设 备或装置来执行。作为示例,图1a的系统120或图2的计算系统202(例 如,在一些实施方式中,按照一个或更多个模块的指示)可以执行与方 法300相关联的一个或更多个操作。尽管用离散的块示出,但是取决于 特定的实现方式,与方法300的一个或更多个块相关联的步骤和操作可 以被划分为另外的块、被组合成更少的块或者被排除。
56.在块302处,可以获得与软件程序中的漏洞相关的帖子。可以从任 何合适的网站或储存库获得帖子。此外,在一些实施方式中,帖子可以 包括问题帖子及对应的答案帖子。附加地或可替选地,问题帖子可以包 括可能包含对应错误的有漏洞片段。此外,一个或更多个答案帖子可以 包括示例片段,所述示例片段可以是修复答案帖子分别对应的问题帖子 中的有漏洞片段的错误的补丁。
57.在块304处,可以获得与所获得的帖子相关联的漏洞模式。如上所 述,漏洞模式可以是相应有漏洞片段的泛化版本,并且可以包括创建对 应漏洞场景的不同条件或特征的编程元素和/或关系。在一些实施方式中, 可以自动生成漏洞模式。在一些实施方式中,可以通过执行下面详细描 述的图4的一个或更多个操作来生成自动生成的漏洞模式。在这些或其 他实施方式中,所获得的漏洞模式可以包括已经经过修订(例如,由人 类开发者)的一个或更多个经修订漏洞模式。
58.附加地或可替选地,所获得的漏洞模式可以包括已经被分组在一起 的漏洞模式的一个或更多个集群。在这些或其他实施方式中,每个集群 可以包括经修订漏洞模式以及相对于经修订漏洞模式满足相似性阈值的 一个或更多个自动生成的漏洞模式。在一些实施方式中,可以通过执行 下面详细描述的图7的一个或更多个操作来确定集群。
59.在块306处,可以针对不同的漏洞模式确定相似性。例如,在一些 实施方式中,可以在一个或更多个相应的自动生成的漏洞模式中的每一 个与一个或更多个其他自动生成的漏洞模式中的每一个之间进行相似性 确定。在一些实施方式中,这样的相似性确定可以
被用于确定不同漏洞 模式类型的出现率。此外,这样的相似性确定可以被称为“出现相似性 确定”,这是因为相似性确定可以被用于确定出现率。在这些或其他实施 方式中,可以使用以下进一步详细描述的图5的一个或更多个操作来确 定相似性和出现率。
60.另外,在实施方式中,可以在经修订漏洞模式与一个或更多个未访 问漏洞模式(例如,尚未被选择以供审核的自动生成的漏洞模式)中的 每一个之间进行相似性确定。附加地或可替选地,如上所述以及如以下 进一步详细描述的,在一些实施方式中,相似性确定可以被用于确定哪 些未访问漏洞模式相对于经修订漏洞模式满足相异性阈值,如下面详细 讨论的。用于确定哪些未访问漏洞模式满足相异性阈值的相似性确定可 以被称为“相异性确定”。在一些实施方式中,可以使用图6的一个或更 多个操作来确定相异性确定。
61.在块308处,可以选择一个或更多个未访问漏洞模式以供修订。附 加地或可替选地,可以通过选择未访问漏洞模式的对应帖子以供审查来 选择未访问漏洞模式以供修订。在一些实施方式中,可以基于在块306 处进行的相似性确定来选择所选漏洞模式。例如,如上所述,可以进行 出现相似性确定以针对不同漏洞模式类型确定相应出现率。在这些或其 他实施方式中,可以选择具有最高出现率的未访问漏洞模式以供修订。 例如,可以基于未访问漏洞模式各自的出现率对未访问漏洞模式进行排 名,其中,出现率越大,排名越高。根据出现率排名最高的未访问漏洞 模式可以被赋予比排名较低的未访问漏洞模式高的权重以供选择。
62.附加地或可替选地,可以选择满足出现率阈值的漏洞模式以供修订。 例如,可以选择出现率高于特定数字的漏洞模式以供修订。
63.在这些或其他实施方式中,可以使用相异性确定来选择所选漏洞模 式。例如,如相异性确定所指示的,可以选择被确定为与经修订漏洞模 式最相异的未访问漏洞模式以供修订。例如,可以基于未访问漏洞模式 与经修订漏洞模式的相应相异性对未访问漏洞模式进行排名,其中,相 异性越大,排名越高。根据相异性排名最高的未访问漏洞模式可以被赋 予比排名较低的未访问漏洞模式高的权重以供选择。
64.在这些或其他实施方式中,可以选择满足相异性阈值的未访问漏洞 模式以供修订。例如,可以针对每个未访问漏洞模式确定相异性得分, 并且可以选择具有满足相异性阈值的相异性得分的漏洞模式。
65.在一些实施方式中,可以使用出现率和相异性确定的组合来选择一 个或更多个未访问漏洞模式。例如,可以选择满足出现率阈值和相异性 阈值两者的未访问漏洞模式以供修订。
66.在这些或其他实施方式中,可以基于漏洞模式的集群来选择所选漏 洞模式。例如,如上所述,集群可以包括已经被确定为与对应的经修订 漏洞模式相同或相似的未访问漏洞模式以及相关联的未访问帖子。这样, 修订包括在集群中的未访问漏洞模式可能导致所执行的工作的冗余。因 此,在一些实施方式中,可以考虑选择与集群不关联的未访问漏洞模式 以供修订。这样,可以响应于与相应集群相关联的漏洞模式和/或其相关 联的帖子被包括在集群中而将其从选择中移除。在一些实施方式中,在 被选择以供修订之后,可以对所选漏洞模式进行修订,使得可以获得所 选漏洞模式的修订版本。
67.本领域技术人员将理解,对于本文中公开的这些和其他处理、操作 和方法,可以以不同的顺序实现所执行的功能和/或操作。此外,所概述 的功能和操作仅作为示例提供,
并且在不偏离所公开的实施方式的本质 的情况下,一些功能和操作可以是可选的、可以被组合成较少的功能和 操作或者可以被扩展成另外的功能和操作。在一些实施方式中,方法300 可以包括另外的块或更少的块。
68.图4是根据本公开内容中描述的至少一个实施方式的自动生成漏洞 模式的示例方法400的流程图。方法400可以由任何合适的系统、设备 或装置来执行。作为示例,图1a的系统120或图2的计算系统202(例 如,在一些实施方式中,按照一个或更多个模块的指示)可以执行与方 法400相关联的一个或更多个操作。尽管用离散的块示出,但是取决于 特定的实现方式,与方法400的一个或更多个块相关联的步骤和操作可 以被划分为另外的块、被组合成更少的块或者被排除。在一些实施方式 中,可以基于在图3的块302处获得的一个或更多个帖子,针对图3的 块304来执行方法400的一个或更多个操作。
69.在块402处,可以从帖子中的问题帖子中获得有漏洞片段“q”。在 这些或其他实施方式中,可以从与问题帖子对应的答案帖子中获得示例 片段“a”。示例片段“a”可以是针对有漏洞片段“q”的补丁。
70.在一些实施方式中,可以从与问题帖子对应的多个答案帖子中选择 用于获得示例片段“a”的答案帖子。在这些或其他实施方式中,可以响 应于答案帖子被指示为针对问题帖子的错误的可接受解决方案而选择答 案帖子。例如,问题帖子的作者可以将答案帖子标记为可接受解决方案。 附加地或可替选地,可以基于与不同的答案帖子相关联的用户投票来选 择答案帖子。例如,所选择的答案帖子可以相比于与问题帖子对应的其 他答案帖子具有最高数目的用户投票。
71.在块404处,可以针对“q”生成第一抽象程序图(apg)(被称为
ꢀ“qapg”)。在一些实施方式中,可以通过获得“q”的抽象语法树来生成 第一抽象程序图。此外,可以通过对应抽象语法树的简化、类型推断(也 称为“具体化”)和抽象的过程将抽象语法树修改成第一抽象程序图。
72.例如,作为简化的一部分,可以对抽象语法树进行解析和压缩以使 树紧凑且可读。在一些实施方式中,对抽象语法树进行解析和压缩可以 包括将抽象语法树的多个节点组合成所得的抽象树表示中的单个节点。 例如,抽象语法树可以包括针对软件程序中的每个令牌的节点。例如, 源代码中的语句“int a;”可以在抽象语法树中表示为一系列节点,包括 语句节点、表达式节点、变量节点等。作为简化的一部分,可以将抽象 语法树中的与源代码中的语句“int a;”相关联的节点解析并压缩成抽象 树表示中的单个节点,即“declare(int,a)”节点。对源代码进行解析可以 包括将源代码中的语句划分成构造(construct)、类型(即,变量类型) 和变量名。例如,构造可以包括源代码中的语句的函数。对于上面的
ꢀ“
declare(int,a)”节点,构造可以是“declare”,类型可以是“int”,并且 变量名可以是“a”。构造可以包括:循环,例如“for”、“for-each”、“while”; 条件,例如“if”;声明和构造函数;方法,例如“delete”和“insert
”ꢀ
等。类型可以包括“整数”(“int”)、浮点数(“float”)、字符串、布尔、 集合等。
73.在类型推断期间,可以推断变量的数据类型。类型推断可以包括基 于变量在源代码中的使用来确定该变量的推断类型。例如,在循环例如
ꢀ“
for”循环中使用的变量可以被推断为整数,即使该变量在软件程序、 抽象语法树和/或压缩抽象语法树中没有被明确地定义为整数。作为附加 示例,源代码中的语句可以包括“if(flag)”。变量“flag”的数据类
型可 以不在源代码中标识;然而,基于变量“flag”在“if”语句中的使用, 可以推断出“flag”是“布尔”类型的变量。因此,语句“if(flag)”可以 在树表示中被转换成“根”节点、附加的“declare(boolean,flag)”节 点和“if(flag)”节点。类似地,类型推断可以涉及推断方法范围或调用 者以及推断变量值。在类型推断期间,可以向抽象树表示添加在抽象语 法树中可能不存在的节点。
74.在抽象期间,不同的构造可以被泛化成单个构造。在这些和其他实 施方式中,可以对变量的数据类型进行抽象。在抽象期间,主要数据类 型例如整数、浮点数、字符、字符串和布尔可以保持而不进行抽象。一 些数据类型可以包括特定于应用的类型和/或用户定义的类型。这些数据 类型可以被转换成通用类型变量。可替选地或附加地,在抽象期间,可 以对标识符名称进行抽象。例如,第一变量名称“list”可以被抽象为名 称“$v1”,并且第二变量名称“s”可以被抽象为“$v2”。可替选地或附 加地,在抽象期间,可以对构造进行泛化。例如,可以将“for”、“for-each
”ꢀ
和“while”均抽象为“loop”构造。附加地或可替选地,在抽象期间, 可以对重复的子树进行抽象和重构。
75.关于抽象语法树的简化、类型推断和抽象的过程的其他细节可以在 于2019年8月23日提交的美国专利申请第16/550,069号中找到,并且 通过引用整体并入本公开内容。此外,可以使用除上述技术之外的任何 其他适用技术生成第一抽象程序图。
76.附加地或可替选地,在块404处,可以针对“a”生成第二抽象程序 图(被称为“a
apg”)。在一些实施方式中,可以以与生成第一抽象程序 图类似的方式生成第二抽象程序图。
77.在块406处,可以将第一抽象程序图和第二抽象程序图对齐。附加地 或可替选地,可以执行对齐以确定第一抽象程序图与第二抽象程序图之间 的交叠。例如,所述对齐可以标识第一抽象程序图和第二抽象程序图的哪 些节点彼此交叠。可以使用任何合适的技术来执行对齐。例如,在一些实 施方式中,可以基于确定第一抽象程序图与第二抽象程序图之间的树编辑 距离来进行对齐。
78.树编辑距离可以是不同树(例如,第一抽象程序图与第二抽象程序 图之间)的相似性和/或相异性的程度的表示。例如,可以计算树编辑距 离。基于树编辑距离,确定第一抽象程序图与第二抽象程序图之间的对 齐,例如,可以确定第一抽象程序图的哪些节点对应于第二抽象程序图 的哪些节点。可以基于将两个树中的一个树转换成另一个树所需的操作 的最小数量来确定树编辑距离。在这些和其他实施方式中,操作可以包 括删除操作(例如,在第一树包括第二树所缺少的节点的情况下)、添加 操作(例如,在第一树缺少第二树所包括的节点的情况下)和匹配操作 (在第一树上的节点在内容方面与第二树上的节点匹配但这两个节点的 上下文可能不一定完全匹配的情况下)以及其他操作。
79.在块408处,可以基于第一抽象程序图与第二抽象程序图之间的对 齐来修剪有漏洞片段“q”。例如,可以将有漏洞片段“q”的与第一抽 象程序图“q
apg”中的如下节点不对应的代码行移除:所述节点与第二 抽象程序图“a
apg”的相应节点交叠(例如,匹配)。
80.在块410处,可以对经修剪的有漏洞片段“q”进行修改以提高经修 剪的有漏洞片段“q”的上下文完整性。例如,一个或更多个变量声明可 能从经修剪的有漏洞片段“q”中丢失(例如,在修剪期间被移除)。在 一些实施方式中,可以添加一个或更多个丢失的变量声明。在这些或其 他实施方式中,经修剪的有漏洞片段“q”可能在语法上不完整。例如, 经修
剪的有漏洞片段“q”可能在语法上缺少完整的程序构造,例如缺少 针对现有try块的catch块。在一些实施方式中,可以执行操作以使这样 的程序构造完整。
81.在块412处,可以将经修改的片段用作与在块402处获得的包括有 漏洞片段“q”的问题帖子以及相应答案帖子对应的漏洞模式。在一些实 施方式中,可以针对任何数目的帖子以迭代方式执行方法400,从而获得 任何数目的漏洞模式。
82.本领域技术人员将理解,对于本文中公开的这些和其他处理、操作 和方法,可以以不同的顺序实现所执行的功能和/或操作。此外,所概述 的功能和操作仅作为示例提供,并且在不偏离所公开的实施方式的本质 的情况下,一些功能和操作可以是可选的、可以被组合成较少的功能和 操作或者可以被扩展成另外的功能和操作。在一些实施方式中,方法400 可以包括另外的块或更少的块。
83.图5是根据本公开内容中描述的至少一个实施方式的确定与不同漏 洞模式类型相关联的出现率的示例方法500的流程图。方法500可以由 任何合适的系统、设备或装置来执行。作为示例,图1a的系统120或图 2的计算系统202(例如,在一些实施方式中,按照一个或更多个模块的 指示)可以执行与方法500相关联的一个或更多个操作。尽管用离散的 块示出,但是取决于特定的实现方式,与方法500的一个或更多个块相 关联的步骤和操作可以被划分为另外的块、被组合成更少的块或者被排 除。在一些实施方式中,可以基于在图3的块302和304处获得的一个 或更多个帖子和漏洞模式,关于图3的块306和块308执行方法500的 一个或更多个操作。
84.方法500可以包括块502,在块502处可以获得一个或更多个网站的 不同帖子。在一些实施方式中,帖子可以包括问题帖子和对应的答案帖 子。在这些或其他实施方式中,可以针对对应帖子获得相应漏洞模式。 在方法500的上下文中,对漏洞模式可能对应的“帖子”的引用可以包 括问题帖子以及与问题帖子对应的一个或更多个答案帖子,其中问题帖 子包括用于生成对应漏洞模式的有漏洞片段。
85.在块504处,可以从所获得的帖子中选择第一帖子“s1”。在块506 处,可以选择第二帖子“s2”。
86.在块508处,可以确定“s1”和“s2”是否具有相同的漏洞模式类 型。例如,可以获得与“s1”相关联的第一漏洞模式,并且可以获得与
ꢀ“
s2”相关联的第二漏洞模式。在这些和其他实施方式中,可以针对第 一漏洞模式获得第一抽象程序图,并且可以针对第二漏洞模式获得第二 抽象程序图。在一些实施方式中,可以以与以上关于图4的块404所描 述的方式类似的方式获得第一抽象程序图和第二抽象程序图。
87.在这些或其他实施方式中,可以将第一抽象程序图和第二抽象程序 图进行比较,以确定第一漏洞模式和第二漏洞模式是否满足出现相似性 阈值。在一些实施方式中,响应于第一抽象程序图和第二抽象程序图是 同构的,可以确定第一漏洞模式和第二漏洞模式满足出现相似性阈值。 附加地或可替选地,响应于第一抽象程序图作为第二抽象程序图的子图 被第二抽象程序图包含,或者反之,响应于第二抽象程序图作为第一抽 象程序图的子图被第一抽象程序图包含,可以确定第一漏洞模式和第二 漏洞模式满足出现相似性阈值。
88.响应于第一漏洞模式和第二漏洞模式满足出现相似性阈值,可以确 定第一漏洞模式和第二漏洞模式具有相同的漏洞模式类型。反之,响应 于第一漏洞模式和第二漏洞模
式不满足出现相似性阈值,可以确定第一 漏洞模式和第二漏洞模式不具有相同的漏洞模式类型。
89.响应于第一漏洞模式和第二漏洞模式具有相同的漏洞模式类型,方 法500可以从块508进行至块510。在块510处,可以针对“s1”更新支 持确定。在一些实施方式中,支持确定可以是关于具有被确定为与对应 于“s1”的第一漏洞模式类型相同的漏洞模式的帖子的数量的计数(tally)。 例如,响应于在块508处确定第二漏洞模式和第一漏洞模式具有相同的 类型,可以使支持确定递增“1”。在一些实施方式中,支持确定可以用 作第一漏洞模式的出现率。在块510之后,方法500可以返回至块506, 在块506处,可以选择尚未与第一帖子“s1”比较的另一帖子。
90.返回至块508,响应于第一漏洞模式和第二漏洞模式不具有相同的漏 洞模式类型,方法500可以从块508进行至块506。在从块508返回至块 506后,可以选择尚未与第一帖子“s1”比较的另一帖子。
91.在一些实施方式中,可以重复操作506、508和510中的一个或更多 个,直至已经将每个帖子与第一帖子“s1”进行了比较,以确定第一帖 子“s1”的支持,并且因此确定第一漏洞模式的漏洞模式类型的对应出 现率。附加地或可替选地,可以针对可以被选择为第一帖子“s1”并且 可以与任何数量的其他帖子进行比较的任何数量的其他帖子重复方法 500以进行其他支持确定及随后的出现率确定。
92.本领域技术人员将理解,对于本文中公开的这些和其他处理、操作 和方法,可以以不同的顺序实现所执行的功能和/或操作。此外,所概述 的功能和操作仅作为示例提供,并且在不偏离所公开的实施方式的本质 的情况下,一些功能和操作可以是可选的、可以被组合成较少的功能和 操作或者可以被扩展成另外的功能和操作。在一些实施方式中,方法500 可以包括另外的块或更少的块。此外,方法500仅作为用于确定漏洞模 式类型的出现率的示例技术给出。然而,在本公开内容的范围内可以使 用任何数量的其他技术。
93.图6是根据本公开内容中所描述的至少一个实施方式的确定与不同 的未访问漏洞模式相关联的相异性得分的示例方法600的流程图。方法 600可以由任何合适的系统、设备或装置来执行。作为示例,图1a的系 统120或图2的计算系统202(例如,在一些实施方式中,按照一个或更 多个模块的指示)可以执行与方法600相关联的一个或更多个操作。尽 管用离散的块示出,但是取决于特定的实现方式,与方法600的一个或 更多个块相关联的步骤和操作可以被划分为另外的块、被组合成更少的 块或者被排除。在一些实施方式中,可以基于在图3的块302和304处 获得的一个或更多个帖子和漏洞模式,关于图3的块306和块308执行 方法600的一个或更多个操作。
94.方法600可以包括块602,在块602处可以获得未访问帖子“s”。未 访问帖子可以是尚未关于选择以供审查或以供对应漏洞模式的修订进行 分析的帖子。在一些实施方式中,未访问帖子可以包括问题帖子和对应 的答案帖子。
95.在块604处,可以选择未访问集群“c”。在一些实施方式中,基于 尚未相对于其他帖子和/或对应漏洞模式对集群“c”进行分析以用于相 异性确定,集群“c”可以被称为“未访问的”。集群“c”可以是已经 与经修订漏洞模式“p
revised”成组的未访问帖子和/或对应漏洞模式的集群, 如以下关于图7进一步详细描述的。
96.在块606处,可以获得经修订漏洞模式“p
revised”。在这些或其他实 施方式中,响应
于与所选择的集群“c”对应,可以获得经修订漏洞模式
ꢀ“
p
revised”。
97.在块608处,可以针对所选择的帖子“s”获得自动生成的漏洞模式
ꢀ“
p
approx”。在一些实施方式中,如以上所描述的,可以使用图4的方法400 中的一个或更多个操作获得漏洞模式“p
approx”。
98.在块610处,可以针对经修订漏洞模式“p
revised”获得第一抽象程序 图,并且针对漏洞模式“p
approx”获得第二抽象程序图。在一些实施方式 中,可以以与以上关于图4的块404所描述的方式类似的方式获得第一 抽象程序图和第二抽象程序图。
99.在块612处,可以确定经修订漏洞模式“p
revised”与漏洞模式“p
approx
”ꢀ
之间的相似性得分。在这些或其他实施方式中,可以基于第一抽象程序 图和第二抽象程序图来确定相似性得分。
100.例如,可以将第一抽象程序图和第二抽象程序图对齐以确定第一抽 象程序图和第二抽象程序图的交叠节点。在一些实施方式中,可以以与 以上关于图4的块406所描述的方式类似的方式来执行交叠节点的对齐 及随后的确定。在这些或其他实施方式中,可以基于交叠节点来确定相 似性得分。
101.例如,在一些实施方式中,可以针对第一抽象程序图和第二抽象程序 图的一个或更多个交叠节点确定相应的相似性得分。在一些实施方式中, 可以在各交叠节点之间确定相应的相似性得分。相应的相似性得分可以指 示对应的所识别的交叠节点之间的相似度。在一些实施方式中,可以对相 应的相似性得分进行加权。
102.在一些实施方式中,可以基于多个因子来计算相应的相似性得分。 例如,相应的相似性得分可以基于构造相似性、类型相似性和变量使用 关系相似性等其他因子。在一些实施方式中,在抽象树表示中的交叠节 点包括相同的构造的情况下,可能存在构造相似性。例如,在两个交叠 节点都是“declare”构造的情况下,可能存在构造相似性。如以上所讨 论的,构造可以包括“declare”、“constructor”、“loop”、“method”、“if
”ꢀ
等。在一些实施方式中,可以响应于确定存在构造相似性而确定类型相 似性。在这些和其他实施方式中,在抽象树表示中的交叠节点包括相同 的构造和相同的类型的情况下,可能存在类型相似性。例如,在两个交 叠节点都是“declare”构造并且包括“整数”类型的情况下,可能存在 类型相似性。如以上所讨论的,类型可以包括“布尔”、“集合”、“字符 串”、“整数”、“浮点”等。在一些实施方式中,可以响应于确定存在构 造相似性和类型相似性而确定变量使用相似性。在这些和其他实施方式 中,当在两个交叠节点中以类似方式使用变量时,可能存在变量使用相 似性。例如,当在软件程序代码片段的抽象树表示和模式两者中的循环 和移除方法中使用变量时,可能存在变量使用相似性。在一些实施方式 中,可以使用jaccard指数来确定变量使用相似性。
103.在一些实施方式中,相应的相似性得分可以被计算为:相似性得分= (weighta×
构造相似性)+(weightb×
类型相似性)+(weightc×
变量使 用关系相似性)。在这些和其他实施方式中,构造相似性可以是具有匹配 构造的交叠节点的数量。在这些和其他实施方式中,类型相似性可以是 具有匹配构造和匹配类型两者的交叠节点的数量。在这些和其他实施方 式中,变量使用关系相似性可以是在相同或相似情况下使用变量的实例 的数量。可替选地或附加地,在一些实施方式中,变量使用关系相似性 可以被测量为jaccard指数j,如以上所讨论的,jaccard指数j可以被确 定为在软件程序的代码片段中使用变量的位置
数v
sp
与在模式中使用模 式中的匹配节点中出现的对应变量的位置数v
p
的交集的大小除以并集的 大小,在一些实施方式中,不 同的因子可以具有不同的权重。例如,与构造相似性相关联的weighta可以为0.5,与类型相似性相关联的weightb可以为2.0,并且与变量使用 关系相似性相关联的weightc可以为1.0。
104.在这些或其他实施方式中,可以确定总相似性得分。总相似性得分可 以是交叠节点相似性得分的总计。例如,在一些实施方式中,总相似性得 分可以是交叠节点相似性得分的平均值。作为另一示例,总相似性得分可 以是交叠节点相似性得分的原始总和或被归一化到特定范围(例如,从“0
”ꢀ
到“1”)的原始总和。总相似性得分可以指示经修订漏洞模式“p
revised
”ꢀ
与漏洞模式“p
approx”之间的总体相似度。以上是作为计算交叠节点的相 应相似性得分的示例而给出的。然而,也可以使用用于确定相似度的任何 其他合适的技术。
105.在块614处,可以基于相似性得分确定距离“d”。在一些实施方式 中,距离“d”可以是相似性得分的倒数,并且因此可以指示经修订漏洞 模式“p
revised”与漏洞模式“p
approx”之间的相异性。在一些实施方式中, 距离“d”可以通过下式确定:“d=1-sim.score”。
106.在一些实施方式中,可以重复操作604、606、608、610、612和614 中的一个或更多个,直至已经将每个经修订漏洞模式与所选择的帖子“s
”ꢀ
的漏洞模式“p
approx”进行了比较,以确定所选择的帖子“s”与每个经 修订漏洞模式和对应的集群之间的相异性。在这些或其他实施方式中, 可以针对所选择的帖子“s”和所有经修订漏洞模式进行总相异性确定。 例如,在一些实施方式中,以任何其他合适的方式对所选择的帖子“s
”ꢀ
与相应经修订漏洞模式之间的相应距离进行求平均、求和或者组合以确 定总相异性确定。
107.在这些或其他实施方式中,可以针对多个未访问帖子重复方法600, 以针对多个未访问帖子中的每一个进行相异性确定。附加地或可替选地, 可以针对每个未访问帖子执行方法600。
108.本领域技术人员将理解,对于本文中公开的这些和其他处理、操作 和方法,可以以不同的顺序实现所执行的功能和/或操作。此外,所概述 的功能和操作仅作为示例提供,并且在不偏离所公开的实施方式的本质 的情况下,一些功能和操作可以是可选的、可以被组合成较少的功能和 操作或者可以被扩展成另外的功能和操作。在一些实施方式中,方法600 可以包括另外的块或更少的块。此外,方法600仅作为用于相异性确定 的示例技术给出。然而,在本公开内容的范围内可以使用任何数量的其 他技术。
109.图7是根据本公开内容中描述的至少一个实施方式的基于经修订漏 洞模式使帖子聚集的示例方法700的流程图。方法700可以由任何合适 的系统、设备或装置来执行。作为示例,图1a的系统120或图2的计算 系统202(例如,在一些实施方式中,按照一个或更多个模块的指示)可 以执行与方法700相关联的一个或更多个操作。尽管用离散的块示出, 但是取决于特定的实现方式,与方法700的一个或更多个块相关联的步 骤和操作可以被划分为另外的块、被组合成更少的块或者被排除。
110.方法700可以包括块702,在块702处,可以获得经修订漏洞模式
ꢀ“
p
revised”。在块704处,可以获得未访问帖子“s”。未访问帖子“s”可 以是尚未关于选择以供审查或以供对应漏洞模式的修订进行分析的帖子。 在一些实施方式中,未访问帖子可以包括问题帖子和
对应的答案帖子。 在这些或其他实施方式中,未访问帖子“s”可以包括有漏洞片段“q”。
111.在块706处,可以确定“q”和“p
revised”是否满足相似性阈值。例 如,可以针对“q”获得第一抽象程序图,并且可以针对“p
revised”获得 第二抽象程序图。在一些实施方式中,可以以与以上关于图4的块404 所描述的方式类似的方式获得第一抽象程序图和第二抽象程序图。
112.在这些或其他实施方式中,可以将第一抽象程序图和第二抽象程序 图进行比较以确定“q”和“p
revised”是否满足相似性阈值。在一些实施 方式中,响应于第一抽象程序图和第二抽象程序图是同构的,可以确定
ꢀ“
q”和“p
revised”满足相似性阈值。附加地或可替选地,响应于第二抽 象程序图作为第一抽象程序图的子图被第一抽象程序图包含,可以确定
ꢀ“
q”和“p
revised”满足相似性阈值。
113.响应于“q”和“p
revised”满足相似性阈值,方法700可以从块706 进行至块708。在块708处,可以将帖子“s”添加至与“p
revised”相关联 的集群。在块708之后,方法700可以返回至块704,在块704处,可以 选择尚未与“p
revised”比较的另一帖子。
114.返回至块706,响应于“q”和“p
revised”不满足相似性阈值,方法700 可以从块706返回至块704。在从块706返回至块704后,可以选择尚未 与“p
revised”比较的另一帖子。
115.在一些实施方式中,可以重复操作704、706和708中的一个或更多 个,直至已经将每个帖子与经修订漏洞模式“p
revised”进行了比较,以生 成与“p
revised”相关联的集群。附加地或可替选地,可以针对可以被选择 为“p
revised”并且可以与任何数目的其他帖子进行比较的任何数目的其他 经修订漏洞模式重复方法700以生成与相应的经修订漏洞模式对应的其 他集群。
116.本领域技术人员将理解,对于本文中公开的这些和其他处理、操作 和方法,可以以不同的顺序实现所执行的功能和/或操作。此外,所概述 的功能和操作仅作为示例提供,并且在不偏离所公开的实施方式的本质 的情况下,一些功能和操作可以是可选的、可以被组合成较少的功能和 操作或者可以被扩展成另外的功能和操作。在一些实施方式中,方法700 可以包括另外的块或更少的块。此外,方法700仅作为用于确定漏洞模 式类型的出现率的示例技术给出。然而,在本公开内容的范围内可以使 用任何数量的其他技术。例如,在一些实施方式中,不是使用与所选择 的帖子相关联的有漏洞片段,而是,操作可以包括获得与所选择的帖子 相关联的漏洞模式以及针对所获得的漏洞模式和经修订漏洞模式进行相 似性确定。
117.如上所述,本公开内容中描述的实施方式可以包括使用包括各种计 算机硬件或软件模块的专用或通用计算机(例如,图2的处理器250), 如以下更详细讨论的。此外,如上所述,本公开内容中描述的实施方式 可以利用用于携载计算机可执行指令或数据结构或者在其上存储有计算 机可执行指令或数据结构的计算机可读介质(例如,图2的存储器252 或数据存储装置254)来实现。
118.如本公开内容中所使用的,术语“模块”或“部件”可以指被配置 成执行模块或部件的动作的特定硬件实现和/或可以存储在计算系统的通 用硬件(例如,计算机可读介质、处理装置等)上和/或由计算系统的通 用硬件执行的软件对象或软件例程。在一些实施方式中,本公开内容中 描述的不同部件、模块、引擎和服务可以被实现为在计算系统上执行的 对象或进程(例如,作为单独的线程)。尽管本公开内容中描述的一些系 统和方法通常
被描述为以(存储在通用硬件上和/或由通用硬件执行的) 软件来实现,但是特定的硬件实现或者软件与特定硬件实现的组合也是 可能的并且是可预期的。在本说明书中,“计算实体”可以是如本公开内 容中先前限定的任何计算系统或者在计算系统上运行的任何模块或模块 的组合。
119.在本公开内容中并且特别是在所附权利要求(例如,所附权利要求 的主体)中使用的术语通常旨在作为“开放式”术语(例如,术语“包 括”应被解释为“包括但不限于”,术语“具有”应被解释为“至少具有”, 术语“包含”应被解释为“包含但不限于”等)。
120.另外地,如果意指所引入的权利要求叙述的具体数目,则在权利要 求中将明确地叙述这样的意图,并且在没有这样的叙述的情况下不存在 这样的意图。例如,为帮助理解,所附权利要求书可以包含介绍性短语
ꢀ“
至少一个”和“一个或更多个”的使用以引入权利要求叙述。然而, 即使在同一权利要求包括引入性短语“一个或更多个”或“至少一个
”ꢀ
以及不定冠词例如“一”或“一个”(例如,“一”和/或“一个”应被解 释为意指“至少一个”或“一个或更多个”)的情况下,对这样的短语的 使用也不应被解释为暗指通过不定冠词“一”或“一个”引入的权利要 求叙述将包含这样引入的权利要求叙述的任何特定权利要求限制为仅包 含一个这样的叙述的实施方式;这同样适用于使用定冠词来引入权利要 求叙述。
121.另外,即使明确地记载了所引入的权利要求叙述的具体数目,本领 域技术人员也将认识到,这样的叙述应被解释为至少意指所记载的数目 (例如,没有其他修饰语的“两个叙述”的无修饰叙述意指至少两个叙 述,或者两个或更多个叙述)。此外,在使用类似于“a、b和c等中的 至少一个”或“a、b和c等中的一个或更多个”的惯用语的那些情况下, 通常这样的构造旨在包括仅a、仅b、仅c、a和b一起、a和c一起、 b和c一起,或者a、b和c一起等。
122.此外,无论是在说明书、权利要求书中还是在附图中,呈现两个或 更多个替选术语的任何分隔词或短语都应被理解为考虑包括术语之一、 术语中的任一个或两个术语的可能性。例如,短语“a或b”应被理解 为包括“a”或“b”或“a和b”的可能性。即使有时可能使用术语“a 和/或b”来包括“a”或“b”或“a和b”的可能性,对短语“a或b
”ꢀ
的这种解释仍然适用。
123.本公开内容中记载的所有示例和条件语言旨在用于教导目的以帮助 读者理解本公开内容和发明人为了促进本领域的发展所贡献的构思,并 且应被解释为不限于这样的具体记载的示例和条件。尽管已经详细地描 述了本公开内容的实施方式,但是在不脱离本公开内容的精神和范围的 情况下可以对实施方式进行各种改变、替换和变更。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1