CN106537332A - 软件分析***和方法 - Google Patents

软件分析***和方法 Download PDF

Info

Publication number
CN106537332A
CN106537332A CN201580031456.7A CN201580031456A CN106537332A CN 106537332 A CN106537332 A CN 106537332A CN 201580031456 A CN201580031456 A CN 201580031456A CN 106537332 A CN106537332 A CN 106537332A
Authority
CN
China
Prior art keywords
product
file
design pattern
software
methods according
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.)
Pending
Application number
CN201580031456.7A
Other languages
English (en)
Inventor
R·T·卡巴克三世
B·D·加伊诺
N·R·什尼德曼
S·H·钱
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Charles Tucker Della Per Lab Corp
Charles Stark Draper Laboratory Inc
Original Assignee
Charles Tucker Della Per Lab Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Charles Tucker Della Per Lab Corp filed Critical Charles Tucker Della Per Lab Corp
Publication of CN106537332A publication Critical patent/CN106537332A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Library & Information Science (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

提供用于在软件中定位设计模式的***、方法和计算机程序产品。示例方法包括:访问具有与多个软件相对应的多个产物的数据库,以及通过自动分析与软件相关联的至少一个产物来标识用于软件文件中的至少一个软件文件的设计模式。附加的实施例还提供用于将用于软件的设计模式的标识符存储在数据库中。对于某些示例实施例,产物包括开发性的,其可以搜索表示设计模式(诸如缺陷、特征或修复)的字符串。附加的示例实施例还包括在软件文件中找到实现设计模式的程序片段。

Description

软件分析***和方法
相关申请
本申请要求于2014年6月13日提交的美国临时申请第62/012,127号的权益。上述申请的全部教导通过引用并入本文。
政府支持
本发明是在来自美国空军的授权号FA8750-14-C-0056和来自国防高级研究计划局的授权号FA8750-15-C-0242的政府支持下进行的。政府对本发明具有一定的权利。
背景技术
当今,软件开发、维护和修复是手动过程。软件供应商会计划、实施、记录、测试、部署和维护计算机程序。初始计划、实施、文档、测试和部署通常是不完整的,并且总是缺少所需的特征或包含缺陷。许多供应商都有生命周期维护计划来通过在软件成熟时推出迭代错误修复、安全补丁和功能增强来解决这些缺陷。
世界上部署了大量的软件代码,数十亿行,并且维护和错误修复花费大量的时间和金钱来解决。历史上,软件维护一直是专门的和反应性的(即,响应于错误报告、安全漏洞报告和用户对特征增强的请求)手动过程。
发明内容
本发明的实施例使软件开发、维护和修复生命周期的关键方面自动化,包括例如查找和修复程序缺陷,诸如错误(代码中的误差)、安全漏洞和协议缺失。本发明的示例实施例提供了可以利用包括公共可用的软件文件或专有软件在内的大量软件文件的***和方法。
根据本发明的一个实施例,一种用于标识设计模式的示例方法包括:访问具有用于多个文件中的每一个文件的多个产物的数据库,并且基于用于多个文件中的第一文件的多个产物中的至少一个产物来自动地标识设计模式。例如,文件可以是二进制代码格式、源代码格式或中间表示(IR)格式。
对于某些实施例,设计模式在第一文件中。对于其它示例实施例,设计模式可以涉及诸如项目中的文件之类的文件或代码片段之间的交互,因此,自动地标识设计模式还可以基于用于第二文件等的产物。
对于某些实施例,设计模式可以是缺陷、修复、特征、特征增强、或预先标识的程序片段。其它附加实施例可以位于多个产物中的至少一个产物中,诸如开发产物(developmental artifact)、表示缺陷的字符串、修复、特征、特征增强、或表示设计模式的预先标识的模式。用于示例实施例的产物可以是静态产物、动态产物、派生产物或元数据产物。
附加的示例实施例可以将用于设计模式的标识符存储在数据库中。例如,可以使用用于设计模式的标签,诸如使用从用于第一文件的多个产物中的至少一个产物获得的字符串。附加的实施例可以在第一文件中找到与设计模式相对应的程序片段。
根据本发明的一个实施例,一种用于标识设计模式的示例方法包括:访问具有与多个软件文件相对应的多个产物的数据库,以及通过自动分析与软件文件相关联的产物的至少一个产物来标识用于软件文件的至少一个软件文件的设计模式。示例方法的附加实施例还包括:将用于软件文件的软件模式的标识符存储在数据库中。
对于某些示例实施例,产物包括以下各项中的一项或多项:直接***代码注释、提交历史、文档文件、以及常见漏洞和暴露源条目。对于某些示例实施例,分析产物中的至少一个产物包括:在开发产物中搜索表示缺陷或修复的字符串。示例方法的附加的实施例还包括:在软件文件中找到实现设计模式的程序片段。对于某些示例实施例,通过在软件文件的中间表示中定位实现设计模式的代码来找到与设计模式相对应的程序片段。
对于附加的示例实施例,存储用于软件文件的设计模式的标识符包括:使用从用于软件文件的产物中的一个或多个产物获得的字符串来存储用于设计模式的标签。对于示例实施例,设计模式是缺陷、修复、特征或特征增强。
本发明的另一示例实施例是一种用于标识诸如缺陷之类的设计模式的方法,其包括:访问具有与软件文件相对应的产物的数据库,对产物进行聚类,以及基于一个或多个先前标识的设计模式从聚类来标识先前未标识的设计模式。对于某些示例实施例,设计模式是相同的,但是例如可以存在于另一文件中。对于某些示例实施例,示例方法还包括:标识与先前标识的缺陷相关联的一个或多个修复。
对于某些示例实施例,产物包括开发产物,并且示例方法还包括:基于产物中的字符(包括字母数字或特殊字符)、单词或短语的出现从开发产物中提取语义。对于某些示例实施例,聚类多个产物包括:使用自动编码器。附加的实施例还包括:提供用于多个产物的聚类的训练,其中,训练包括使用软件文件的第一版本和软件文件的第二版本之间的一个或多个差异。对于某些实施例,这些差异可以与诸如安全漏洞之类的缺陷或诸如补丁之类的修复相对应。对于某些实施例,这些差异可以与特征或特征增强相对应。对于其它实施例,每种类型的产物被聚类。对于示例实施例,类型包括调用图、控制流图、使用定义链、定义使用链、支配树、基本块、变量、常量、分支语义、以及协议。对于某些示例实施例,聚类可以基于多种类型的产物。
本发明的附加示例实施例是一种用于标识设计模式的***,其包括:具有与软件文件相对应的产物的一个或多个存储设备,其中,产物包括存储在存储设备上的产物;以及处理器,其被配置成通过自动分析与软件文件相关联的产物中的至少一个产物来标识用于软件文件中的至少一个软件文件的设计模式。示例***还可以具有被配置成在软件文件中找到实现设计模式的程序片段的处理器。
本发明的附加示例实施例是一种用于标识设计模式的***,其包括:具有多个产物的一个或多个存储设备;以及处理器,其被配置成聚类多个产物并且基于一个或多个先前标识的设计模式来从所述聚类中标识先前未标识的设计模式。对于某些示例性实施例,设计模式是缺陷、修复、特征、特征增强、或预先标识的模式。对于某些实施例,聚类包括使用机器学习或深度学习。
本发明的附加示例实施例是其上存储有可执行程序的非暂态计算机可读介质,其中,该程序指示处理设备来执行以下步骤:访问具有与软件文件相对应的产物的数据库,以及基于用于多个文件中的第一文件的多个产物中的至少一个产物来自动地标识设计模式。
本发明的附加的示例实施例是其上存储有可执行程序的非暂态计算机可读介质,其中,该程序指示处理设备来执行以下步骤:访问具有多个产物的数据库,对多个产物进行聚类,以及基于一个或多个先前标识的设计模式从所述聚类中标识先前未标识的设计模式。
附图说明
从如下附图中所图示的本发明的示例性实施例的以下更具体的描述中,上述内容将是清楚的,其中在不同的视图中相同的附图标记是指相同的部件。附图不一定按比例绘制,重点在于图示了本发明的实施例。
图1是图示了用于提供用于软件文件的语料库的方法的示例实施例的流程图。
图2是图示了根据本发明的实施例的用于从用于语料库的输入软件文件提取中间表示(IR)的示例处理的流程图。
图3是图示了根据本发明的实施例的用于软件文件的产物之间的分级关系的框图。
图4是图示了用于提供软件文件的产物的语料库的***的示例实施例的框图。
图5是图示了用于标识设计模式的方法的示例实施例的框图。
图6是图示了用于标识缺陷的方法的示例实施例的流程图。
图7是图示了根据本发明的实施例的用于标识设计模式的产物的聚类的框图。
图8是图示了用于使用语料库标识软件文件的方法的示例实施例的流程图。
图9是图示了用于标识程序片段的方法的示例实施例的流程图。
图10是图示了根据本发明实施例的使用语料库的***的框图。
具体实施方式
以下是本发明的示例实施例的描述。本文中所引用的任何专利或出版物的全部教导通过引用并入本文。
根据本公开的示例实施例的软件分析允许从现有软件文件中利用知识,该现有软件包括来自公众可获得的源的或者是专有软件的文件。然后,该知识可以应用于其它软件文件,包括修复缺陷,标识漏洞,标识协议缺陷、或建议代码改进。
本发明的示例实施例可以涉及软件分析的各个方面,包括创建,更新,维护或以其它方式提供软件文件的语料库和关于用于知识数据库的软件文件的相关产物。根据本发明的各方面,该语料库可以用于多种目的,包括自动地标识软件文件的更新版本,可用于软件文件的补丁,已知具有这些缺陷的文件中的缺陷,以及先前未知包含这些误差的文件中的已知缺陷。本发明的实施例还可以利用来自语料库的知识来解决这些问题。
图1是图示了根据本发明的实施例的用于语料库的输入软件文件的示例处理的流程图。第一图示的步骤是获得多个软件文件110。这些软件文件可以采用源代码格式,其通常是纯文本,或者采用二进制代码格式或一些其它格式。进一步地,对于本发明的某些示例实施例,源代码格式可以是可以被编译的任何计算机语言,包括Ada、C/C++、D、Erlang、Haskell、Java、Lua、Objective C/C++、PHP、Python和Ruby。对于某些附加示例实施例,还可以获得用于与本发明的实施例一起使用的解释语言,包括PERL和bash脚本。
所获得的软件文件不仅包括源代码或二进制文件,而且还可以包括与那些文件或对应软件项目相关联的任何文件。例如,软件文件还包括相关联的构建文件、构造文件、库、文档文件、提交日志、修订历史、bugzilla条目、通用漏洞和披露(CVE)条目、以及其它非结构化文本。
可以从多种源获得软件文件。例如,可以经由因特网通过网络接口从诸如GitHUB、SourceForge、BitBucket、GoogleCode、或通用漏洞和披露***之类的公众可获得的软件仓库(诸如由MITRE公司维护的公众可获得的软件仓库)来获得软件文件。通常,这些仓库包含文件和对文件所做改变的历史。还有,例如,可以提供统一资源定位符(URL)以指向可以从其获得文件的站点。软件文件还可以经由接口从专用网络获得、或从本地硬盘驱动器或其它存储设备本地获得。接口提供用于通信地耦合到源。
本发明的示例实施例可以获得可从源中获得的一些、大多数或所有文件。进一步地,一些示例实施例还自动获得文件,并且例如可以自动下载文件、整个软件项目(例如,修订历史、提交日志、源代码)、项目或程序的所有修订、目录中的所有文件、或可从源中获得的所有文件。一些实施例爬过整个存储库的每个修订以获得所有可用的软件文件。某些示例实施例获得用于语料库中的每个软件项目的整个源控制仓库,以便于自动获得项目的所有相关联的文件,包括获得每个软件文件修订。仓库的示例源控制***包括Git、Mercurial、Subversion、并发版本***、BitKeeper和Perforce。某些实施例还可以连续地或周期性地检查源以辨别源是否已经改变或更新,并且如果是,则可以仅从源获得改变或更新,或者也可以再次获得所有软件文件。许多源具有确定对源的改变的方法,诸如示例实施例可以用于从源获得更新的添加日期或改变日期字段。
本发明的某些示例实施例还可以单独获得库软件文件,该库软件文件可以由从仓库获得的源代码文件使用,以在仓库不包含库的情况下解决对这样的文件的需要。这些实施例中的某些实施例尝试获得可从任何公共源合理地获得或从软件供应商获得以包括在语料库中的任何库软件文件。附加地,某些实施例允许用户提供由软件文件使用的库或者标识所使用的库,以使可以获得它们。某些实施例刮除每个项目的软件文件以标识该项目所使用的库,以使如果需要,则可以获取并且安装它们。
根据本发明的示例方法中的下一步骤是确定用于多个软件文件120中的每一个软件文件的多个产物。软件产物可以描述软件文件的功能、架构或设计。产物类型的示例包括静态产物、动态产物、派生产物、以及元数据产物。
示例方法的最后一步是将用于多个软件文件中的每一个软件文件的多个产物存储在数据库130中。多个产物以它们可以被标识为与从中确定它们的特定软件文件相对应的这样的方式而被存储。该标识可以以任何公知的多种方式来进行,诸如由数据库模式表示的数据库中的字段、指针、存储位置、或者诸如文件名之类的任何其它标识符。可以类似地跟踪属于同一项目或构建的文件,以使可以维护该关系。
对于不同的实施例,数据库可以采取不同的形式,诸如图数据库、关系数据库或平面文件。一个优选实施例采用OrientDB,其是由Orient Technologies领导的OrientDB开方源项目提供的分布式图数据库。另一优选实施例采用Titan,其是为存储和查询分布在多机器群集上的图而优化的可扩展图数据库,以及Apache Cassandra存储后端。某些示例实施例还可以采用SciDB,其是来自范例4的还存储和操作图产物的阵列数据库。
通常可以从源代码文件、二进制文件或其它产物来确定静态产物、动态产物、派生产物、以及元数据产物。在下文提供这些类型的产物的示例。示例实施例可以确定用于源代码或二进制软件文件的这些产物中的一个或多个产物。某些实施例不确定用于特定类型的这些类型的产物中的每一类产物或产物中的每一个产物,而是可以确定产物类型的子集和/或类型内的产物的子集,和/或根本没有特定类型。
静态产物
软件文件的静态产物包括调用图、控制流图、使用定义链、定义使用链、支配树、基本块、变量、常量、分支语义、以及协议。
调用图(CG)是由函数调用的函数的有向图。CG表示高级程序结构并且被描绘为节点,其中,图的每个节点表示函数,并且节点之间的每个边缘是定向的并且示出了函数是否可以调用另一函数。
控制流图(CFG)是函数内部的基本块之间的控制流的有向图。CFG表示功能级程序结构。CFG中的每个节点表示基本块,节点之间的边缘是定向的,并且示出了流中的潜在路径。
使用定义链(UD)和定义使用链(DU)是在基本代码块中执行的输入(使用)、输出(定义)和操作的有向非循环图。例如,UD链是变量的使用和可以达到该使用而无需干预重新定义的该变量的所有定义。DU链是变量的定义和可以从该定义达到而无需干预重新定义的所有使用。这些链使得能够对所接受的输入类型、所生成的输出类型和在基本代码块内部执行的操作的基本代码块进行语义分析。
支配树(DT)是表示CFG中的哪些节点主导(处于路径中的)其它节点的矩阵。例如,如果从入口节点到第二节点的每个路径必须通过第一节点,则第一节点支配第二节点。DT以Pre(从前进)和Post(从后退)形式表达。当路径更改到CFG中的特定节点时,DT突出显示。
基本块是CFG的每个节点内部的指令和操作数。可以比较基本块,并且可以产生两个基本块之间的相似性度量。
变量是用于信息及其类型的存储单元,表示对于任何函数参数、局部变量或全局变量可以存储的信息的类型,并且包括默认值(如果可用的话)。它们可以提供关于程序的初始状态和基本约束,并且示出了类型或初始值的改变,其可能会影响程序行为。
常数是任何常数的类型和值,并且可以提供关于程序的初始状态和基本约束。它们可以示出了类型或初始值的改变,其可能会影响程序行为。
分支语义是if语句和循环内部的布尔估计。分支对执行它们的基本块的条件进行控制。
协议是协议、库、***调用和程序所使用的其它已知函数的名称和引用。
本发明的示例实施例可以从软件源代码文件的中间表示(IR)自动确定静态产物,诸如由公众可获得的LLVM(以前称为低级虚拟机)编译器基础架构项目提供的静态产物。LLVM IR是一种低级公共语言,其可以有效地表示高级语言,并且独立于指令集架构(ISA),诸如ARM、X86、X64、MIPS和PPC。可以使用用于不同计算机语言的不同LLVM编译器(也称为前端)来将源代码转换为公共LLVM IR。至少Ada、C/C++、D、Erlang、Haskell、Java、Lua、Objective C/C++、PHP、Pure、Python和Ruby的前端是公众可获得的。进一步地,可以容易地编程用于附加语言的前端。LLVM还有可用的优化器,以及可以将LLVM IR转换为用于多种不同ISA的机器语言的后端。附加的示例实施例可以从源代码文件来确定静态产物。
图2是图示了可以根据本发明的实施例利用的语料库的输入软件文件的附加示例处理的流程图。除了其它方面,示例实施例可以获得源代码205和二进制代码210软件文件。当LLVM编译器220可用于源代码文件205的语言时,用于该语言的LLVM编译器220可以用于将源代码翻译成LLVM IR 250。对于没有用可用LLVM编译器编译的语言,源代码205可以首先用用于该语言的任何支持的编译器215被编译成二进制文件230。然后,使用诸如Fracture之类的反编译器235来反编译二进制文件230,该反编译器是由DraperLaboratory提供的公众可获得的开放源反编译器。反编译器235将机器代码230翻译成LLVMIR 250。对于以二进制形式210获得的文件(其是机器代码230),使用反编译器235对它们进行反编译以获得LLVM IR250。示例实施例可以从LLVM IR提取与语言无关的产物和与ISA无关的产物。
本发明的示例实施例可以自动获得用于源代码软件文件中的每个源代码软件文件的IR。例如,示例实施例可以自动在仓库中搜索用于标准构建文件(诸如autocomf、cmake、automake或makefile或供应商指令)的项目。示例实施例可以通过监视构建过程并且将编译器调用转换为针对源代码的特定语言的LLVM前端调用来自动选择性地尝试使用这样的文件来构建项目。用于构建文件的选择过程可以逐步通过文件中的每个文件以确定哪个文件存在并且提供完成的构建或部分完成的构建。
附加的示例实施例可以在从仓库中自动获得文件、将文件转换为LLVM IR、和/或确定用于文件的产物中使用分布式计算机***。示例分布式***可以使用主计算机来推送项目并且构建到从属计算机进行处理。从属可以各自处理它们被分配的项目、版本、修订或构建,并且可以将源或二进制文件翻译为LLVM IR,和/或确定产物并且提供用于在语料库中存储的结果。某些示例实施例可以采用Hadoop,其是用于非常大的数据集的分布式存储和分布式处理的开放源软件框架。从源仓库获得文件也可以分布在一组机器之间。
根据示例性实施例,软件文件和LLVM IR还可以存储在语料库中,包括在分布式存储中。示例实施例还可以确定软件文件或LLVM IR代码已经存储在数据库中并且选择不再次存储文件。指针、图形数据库中的边缘或其它引用标识符可以用于将文件与特定项目、目录或其它文件集合相关联。
动态产物
动态产物表示程序行为,并且通过在诸如虚拟机、仿真器(例如,快速仿真器(“QEMU”)或管理程序之类的仪器化环境中运行软件来生成。动态产物包括***调用跟踪/库跟踪和执行跟踪。
***调用跟踪或库跟踪是执行***调用或库调用的顺序和频率。***调用是程序如何从操作***的内核中请求服务,该内核管理输入/输出请求。库调用是对软件库的调用,该软件库是可以重新用于开发软件程序和应用程序的编程代码的集合。
执行追踪是包括指令字节、堆栈帧、存储器使用(例如,驻留/工作集大小)、用户/内核时间和其它运行时间信息的每指令跟踪。
本发明的示例实施例可以产生虚拟环境,包括用于多种操作***,并且可以运行并且编译源代码和二进制文件。这些环境可以允许确定动态产物。例如,可以采用诸如Valgrind或Daikon之类的公众可获得的程序来提供关于程序的运行时间信息以用作产物。Valgrind是特别用于调试内存、检测内存泄漏和剖析的工具。Daikon是可以在代码中检测不变量的程序;不变量是在代码中的某些点处成立的条件。
其它实施例可以使用公众可获得的附加诊断和调试程序或实用程序,诸如strace和dtrace。Strace用于监视进程和内核之间的交互,包括***调用。Dtrace可以用于为***提供运行时间信息,包括所使用的内存量、CPU时间、特定函数调用、以及访问特定文件的进程。示例实施例还可以在程序的多个运行中跟踪执行跟踪(例如,使用Valgrind)。
附加的实施例可以通过KLEE引擎来运行LLVM IR。KLEE是符号虚拟机,其是公众可获得的开放源代码。KLEE符号地执行LLVM IR并且自动生成执行所有代码程序路径的测试。符号执行特别涉及分析代码以确定什么输入使得执行代码的每个部分。采用KLEE在发现功能正确性误差和行为不一致性方面非常有效,并且因此允许本发明的示例实施例快速标识类似代码中的差异(例如,跨修订)。
派生产物
派生产物表示复杂的高级程序行为并且提取这些行为的特点的属性和事实。派生产物包括程序特点、循环不变量、扩展类型信息、Z符号、以及标签转换***表示。
程序特点是关于从执行跟踪中导出的程序的事实。这些事实包括最小、最大和平均内存大小;执行时间;和堆栈深度。
循环不变量是在循环的所有迭代(或选定的迭代组)上维护的属性。循环不变量可以映射到分支语义以发现类似行为。
扩展类型信息包括关于类型的事实,包括变量可以保存的值的范围、与其它变量的关系、以及可以被抽象的其它特征。类型约束可以揭示关于代码的行为和特征。
Z符号基于Zermelo-Fraenkel集合理论。它提供了类型代数符号,从而使得能够比较基本块和忽略结构、顺序和类型的整个函数之间的度量。
标签转换***(LTS)表示是表示从程序抽象的高级状态的图***。图的节点是状态,并且边缘由转换中的相关联的动作来标记。
对于某些示例实施例,可以从其它产物、从包括使用上文针对动态产物所描述的程序的源代码文件、以及从LLVM IR来确定派生产物。
元数据产物
元数据产物表示程序上下文,并且包括与代码相关联的元数据。这些产物与计算机程序具有上下文关系。元数据产物包括文件名、版本号、文件的时间戳、哈希值、以及文件的位置,诸如属于特定目录或项目。元数据产物的子集可以被称为开发产物,其是与文件、程序或项目的开发过程有关的产物。开发产物可以包括直接***代码注释、提交历史、bugzilla条目、CVE条目、构建信息、配置脚本、以及文档文件,诸如README.*TODO.*。
示例实施例可以采用Doxygen,其是可公开获得的文档生成器。Doxygen可以从特别注释的源代码文件(即,直接***代码文档)生成用于程序员和/或最终用户的软件文档。
附加的实施例可以使用解析器,诸如另一语言识别(ANTLR)4生成的解析器工具,以产生抽象语法树(AST)以提取高级语言特征,其还可以用作产物。ANTLR4采用语法、语言的字符串的生成规则,并且生成可以构建和行走解析树的解析器。结果解析器发出各种类型、函数定义/调用、以及与程序结构有关的其它数据。用ANTLR4生成的解析器提取的低级属性包括复杂类型/结构、循环不变量/计数器(例如,来自用于每个范例的a)和结构化注释(例如,正式前/后条件语句)。因为文件名、行和列号信息存在于解析器和LLVM IR中,所以示例实施例可以将这个提取的数据映射到其在LLVM IR中的参照位置。
本发明的示例实施例可以通过从源软件文件提取字符串(诸如直接***注释)来自动确定一个或多个元数据产物。其它实施例从文件***或源控制***自动确定元数据产物。
分级产物间关系
图3是图示了根据本发明的实施例的用于软件文件的产物之间的分级关系的方框图。示例实施例可以维护并且利用这些分级产物间关系。进一步地,不同的实施例可以使用不同的模式和不同的分级关系。对于图3的示例实施例,产物层级的顶部是LTS产物310。每个LTS节点310可以映射到功能和特定可变状态的集合或子集。在LTS产物310下是CG产物320。每个CG节点320可以利用CFG产物330映射到特定函数,其边缘可以包含循环不变量和分支语义330。每个CFG节点330可以包含基本块和DT 340。在那些产物下面是变量、常数、UD/DU链和IR指令350。图3清楚地图示了产物可以从描述动态信息范围的LTS节点低到单独的IR指令而映射到分级结构的不同级别。这些分级关系可以由用于多种用途的示例实施例使用,包括诸如通过首先比较更靠近层级的顶部的产物(与更接近底部的产物相比较)来更有效地搜索匹配产物,以便取决于较高级产物是否是匹配而包括或排除与较高级产物相关联的较低级产物的整个集合。附加的实施例还可以在定位或建议修复代码中利用分级关系用于缺陷或特征增强,包括通过在层级中更高来定位具有匹配的更高级产物的缺陷的修复代码。
图4是图示了用于提供用于软件文件的产物的语料库的***的示例实施例的方框图。示例实施例可以具有能够与具有多个软件文件的源430进行通信的接口420。对于某些实施例,该接口420可以通信地耦合到本地源430,诸如本地硬盘驱动器或盘。在其它实施例中,接口420可以是用于通过公共或专用网络来获得文件的网络接口420。这些软件文件的公共源430的示例包括GitHUB、SourceForge、BitBucket、GoogleCode、或通用漏洞和披露***。私人源的示例包括公司的内部网络和存储在其上的文件,包括在共享网络驱动器和私人仓库中。该示例***还具有耦合到接口420以从源430获得多个软件文件的一个或多个处理器410。处理器410还可以用于确定用于多个软件文件中的每一个软件文件的多个产物。这些产物可以是静态产物、动态产物、派生产物和/或元数据产物。对于附加的实施例,处理器410还可以被配置成将软件文件中的每个软件文件转换成中间表示并且从中间表示中确定产物。
示例***还具有用于存储软件文件中的每一个软件文件的产物的一个或多个存储设备440a-440n,并且耦合到处理器410。这些存储设备440a-440n可以是硬盘驱动器、硬盘驱动器阵列、其它类型的存储设备和分布式存储,诸如通过采用Hadoop文件***(HDFS)上的Titan和Cassandra提供的。同样,示例***可以具有一个处理器410或者采用分布处理并且具有多于一个的处理器410。另外的实施例还提供了接口420和存储设备440a-440n之间的直接通信耦合。
图5是图示了用于定位设计模式的方法的示例实施例的方框图。设计模式的示例包括错误、修复、漏洞、安全补丁、协议、协议扩展、特征、以及特征增强。每个设计模式可以与在软件项目层级的各个级别处提取的产物(例如,规范、CG、CFG、定义使用链、指令序列、类型和常量)相关联。
示例方法提供访问具有与多个软件文件510相对应的多个产物的数据库。数据库可以是图数据库、关系数据库或平面文件。数据库可以位于本地,在专用网络上,或经由因特网或云而可用。一旦已经访问了数据库,则该方法可以基于用于多个文件520中的第一文件的多个产物中的至少一个产物来自动地标识设计模式。对于某些示例实施例,多个产物中的每一个产物可以是静态产物、动态产物、派生产物或元数据产物。其它实施例可以具有不同类型的产物的混合。进一步地,文件的格式不受限制,并且例如可以是二进制码格式、源代码格式或中间表示(IR)格式。
对于某些实施例,设计模式可以通过关键字搜索或开发产物的自然语言搜索来标识。例如,源代码文件的修订中的直接***代码注释可以标识所找到并且修复的缺陷。注释可以使用诸如缺陷、错误、误差、问题、缺点或毛刺(glitch)之类的词语。这些词语可以用于元数据的关键字搜索。提交日志还可以包括描述为什么应用新修订和补丁的文本,诸如解决缺陷或增强特征。进一步地,可以将训练和反馈应用于搜索以改进搜索努力。
附加的示例实施例可以从CVE源来搜索开发产物,其标识文本中的常见漏洞和误差,并且可以描述缺陷和可用修复(如果有的话)。此文本可以作为产物获得并且存储在数据库中。某些源还编码缺陷,以使代码可以用作关键字来定位哪个文件包含缺陷。附加地,可以在软件文件的标识中考虑和加权产物的源。例如,CVE源在标识缺陷方面可能比没有原产地或直接***注释的仓库更可靠。其它实施例可以使用诸如文件名和修订号之类的元数据产物来至少初步标识软件文件,并且基于匹配附加产物(诸如例如,CG或CFG)来确认该标识。
本发明的某些实施例执行示例方法,并且尝试标识一些、大多数或所有源代码和LLVM IR文件的设计模式。附加地,每当将文件添加到语料库时,某些实施例访问数据库并且尝试标识任何设计模式。某些实施例还可以标记所标识的设计模式以供稍后使用。
某些实施例还找到源代码或与也已经存储在数据库中的文件相关联的LLVM IR中的缺陷的位置。例如,开发产物可以指定源代码中缺陷存在的位置以及补丁中修复存在的位置。还有,可以分析源代码或LLVM IR,并且与具有缺陷和文件的较新修复版本的文件进行比较,以隔离差异并且辨别缺陷和修复所在的位置。对于某些实施例,在开发产物中标识的缺陷类型还可以用于缩小对代码中缺陷位置的搜索。附加的实施例还可以标识设计模式,诸如使用标签,并且将该标识符存储在该文件的数据库中。这允许数据库容易地搜索某些缺陷或缺陷的类型。这样的标签的示例包括从用于软件文件的开发产物或从源代码获得的字符串。这种相同的途径可以应用于标识特征和特征增强并且标记它们。
对于某些示例实施例,设计模式位于软件文件中。对于某些示例实施例,设计模式可以与文件之间的交互(诸如接口)有关。示例实施例可以通过将标识基于用于多个软件文件(诸如都属于软件项目的第一文件和第二文件)的产物来自动地标识设计模式。例如,表示设计模式(诸如接口不匹配误差)的预先标识的模式可以存储在数据库或允许来自第一文件和第二文件的产物用于标识对于这些文件来说存在接口误差的别处。示例实施例的示例设计模式包括缺陷、修复、特征、特征增强、或预先标识的程序片段。
对于某些示例实施例,该方法在产物中定位表示缺陷或修复的字符串。通常,这样的字符串(诸如错误、误差或缺陷)存在于开发产物中,以及关于修复的字符串以及在代码中可以找到的字符串。这些开发产物还可以具有表示特征或特征增强的字符串。
对于某些示例实施例,设计模式基于表示设计模式的预先标识的模式。这些预先标识的模式可以由用户创建,可以通过与本公开相关联的方法来预先标识,或者可以以某种其它方式来标识。这些预先标识的模式可以与缺陷、修复、特征、特征增强、或感兴趣的项目或其它显著性相对应。
图6是图示了用于定位缺陷的方法的示例实施例的流程图。该方法包括访问具有与多个软件文件相对应的多个软件产物的数据库610(诸如语料库)。然后,分析产物以从数据量中标识模式。例如,该分析可以包括:对多个产物620进行聚类。通过对数据进行聚类,可以找到未知包含已知缺陷的文件中的已知缺陷。因此,根据聚类,示例方法可以基于一个或多个先前标识的缺陷630来标识先前未标识的缺陷。
本发明的某些示例实施例可以对语料库采用机器学习。机器学习涉及通过从低级产物开始来捕获数据中的相关特征,然后建立更复杂的表示来学习数据的分级结构。某些示例实施例可以对语料库采用深度学习。深度学习是基于数据的学习表示的更广泛的机器学习方法族的子集。对于某些实施例,自动编码器可以用于聚类。
对于某些示例实施例,产物可以由一组自动编码器来处理,以自动发现未标记图的紧凑表示和文档产物。图产物包括可以以图形式表达的那些产物,诸如CG、CFG、UD链、DU链和DT。然后可以对图产物的紧凑表示进行聚类以发现软件设计模式。从对应的元数据产物提取的知识可以用于标记设计模式(例如,错误、修复、漏洞、安全补丁、协议、协议扩展、特征、以及特征增强)。
对于某些示例实施例,自动编码器是结构化稀疏自动编码器(SSAE),其可以将向量作为输入并且提取公共特征。对于某些实施例,为了自动发现程序的特征,首先以矩阵形式表达所提取的图形产物。许多所提取的产物可以表达为邻接矩阵,包括例如,CFG、UD链和DU链。可以在软件文件和项目层级的每个级别来学习结构特征。
图产物中节点的数目可以宽泛地变化;因此,可以提供中间产物作为深度学***均聚类系数和传递率。另一中间产物是图的荫度、图的密度的度量。具有许多边缘的图具有高荫度,并且具有高荫度的图具有密集子图。另一个中间产物是等差数,即,图是否具有瓶颈的数值度量。这些中间产物捕获用于机器学习方法的图的结构的不同方面。
机器学习,包括深度学习,例如,实施例可以采用使用从简单的自动编码器结构开始的多步骤过程来训练的算法,并且迭代地细化该途径以开发SSAE。SSAE还可以被训练以从中间产物中学习特征。自动编码器学习未标记数据的紧凑表示。它可以通过神经网络来建模,该神经网络由至少一个隐藏层组成并且具有相同数目个输入和输出,其学习身份函数的近似。自动编码器将输入信号脱水(dehydrate)(编码)为一组基本的描述性参数,并且对那些信号进行再水合(rehydrate)(解码)以重新创建原始信号。可以在训练期间自动选择描述性参数以优化对所有训练信号的再水合。脱水信号的基本性质提供了将信号分组成聚类的基础。
自动编码器可以通过将输入信号映射到较低维度特征空间来降低这些输入信号的维度。示例实施例然后可以对由自动编码器发现的特征空间中的代码执行聚类和分类。k均值算法对学习的特征进行聚类。k均值算法是一种迭代细化技术,其将特征分成k个聚类,其使得所得到的聚类均值最小化。可以基于所提取的主题的数目来选择聚类k的初始数目。因为k均值聚类的操作度量基于欧几里得距离,所以搜索潜在聚类的数目,从而为许多不同k的每一个k计算新结果是非常有效的。示例实施例可以使用在从其导出聚类特征的软件文件内最频繁出现的主题的标签来分类所得到的群集。
尽管特征向量是稀疏和紧凑的,但是可能难以仅通过检查特征向量来理解输入向量。因此,示例实施例可以利用与先前学习的权重参数相关联的先验。给定足够的语料库,对于“修复”代码应当例如出现参数空间中的模式。示例实施例可以使用由直到该点收集的数据集给出的先验信息将特定模式并入自动编码器中。特别地,当标签由***学习时,示例实施例可以将该信息并入自动编码器操作中。
示例实施例可以使用数据库管理(例如,联接、滤波)和分析操作(例如,奇异值分解(SVD)、双聚类)的混合。示例实施例的图理论(例如,谱聚类)和机器学习或深度学习算法都可以使用类似的算法基元以用于特征提取。SVD还可以用于对用于学习算法的输入数据进行去噪,并且使用较少的维度来近似数据,并且因此执行数据简化。
示例实施例可以通过包括经由文本分析的文档产物的无监督的语义标签生成来封装人随着时间的推移并且跨程序的代码状态的理解。文本分析的示例是隐含狄利克雷分配(LDA)。可以使用LDA和主题建模从文档产物中提取语义信息。这些途径是“词袋(bag-of-words)”技术,其查看词语或短语的出现,忽略顺序。例如,表示“科学计算”的袋子可以具有诸如“FFT”、“小波”、“sin”和“atan”的种子术语。示例实施例可以使用来自源的所提取的文档产物,诸如源注释、CG/CFG节点标签和提交消息,以通过计数术语的出现来填充“袋子”。所得到的固定仓直方图可以被馈送到受限玻尔兹曼机(RBM),其是适于文本应用的深度学习算法的实现方式。所提取的主题捕获与所提取的文档产物相关联的语义信息,并且可以用作经由自动编码器由图产物的无人监督学习形成的聚类的标签(例如,错误/修正、漏洞/补丁)。可以由附加示例实施例采用的其它形式的文本分析包括自然语言处理、词汇分析和预测分析。
从文档产物提取的主题标签可以提供标记信息以通知自动编码器的结构化。示例实施例可以基于学习过的主体、表示顺序软件模式(即,在软件修订之前/之后)的语义共性来查询语料库数据库的训练数据群体。这些模式可以捕获嵌入软件开发文件(诸如提交日志、改变日志和注释)中的改变,其随时间而与软件开发生命周期相关联。这些改变的关联提供了对与检测和修复相关的软件的演变的洞悉,诸如错误/修正、漏洞/安全补丁、以及特征/增强。该信息还可以用于理解和标记从产物语料库自动提取的知识。
图7示出了图示了根据本发明的实施例的用于标识设计模式的产物的聚类的方框图。可以在软件文件层级的每个级别(包括***、程序、功能和方框710)学习结构特征。可以针对聚类715分析诸如CG、CFG和DT之类的图产物。这些图产物可以变换成图不变量特征720。然后可以将这些图特征740提供为图分析模块760(诸如自动编码器)的输入,并且针对类似的设计模式来审查所得到的聚类,其被聚类在一起780。文本(诸如来自源代码文件或来自开发产物的一个或多个字符串)可以被映射到标签730。这些标签750可以诸如通过使用LDA或其它自然语言处理而由文本分析模块770来分析,并且标签可以与从其导出标签的对应发现的聚类780相关联。这些模块760,770可以以软件、硬件或其组合来实现。
图8示出了图示了用于使用语料库来标识软件的方法的示例实施例的流程图。该示例实施例获得软件文件810。该文件可以经由因特网、云或私人公司的服务器而从公共或私人源(诸如公共仓库)经由网络接口来获得。某些示例实施例还可以从本地源(诸如本地硬盘驱动器、便携式硬盘驱动器、或盘)获得软件文件。示例实施例可以从源获得单个文件或多个文件,并且可以诸如经由使用脚本语言或者通过用户交互手动地自动地这样做。示例方法然后可以确定用于软件文件的多个产物820,诸如本文中所描述的任何其它产物。示例方法然后可以访问数据库830,其存储用于多个参照软件文件中的每一个参照软件文件的多个参照产物。参照产物可以存储在语料库数据库中。对于某些示例性实施例,这些参照文件可以包括先前已经获得的并且其产物已经与用于某些实施例的软件文件一起存储在数据库中的软件文件。将针对所获得的软件文件确定的产物或其多个子集与存储在数据库中的参照产物或其多个子集进行比较840。示例实施例可以通过标识具有匹配多个产物的多个参照产物的参照软件文件来标识软件文件850。因为比较的产物和参照产物匹配,所以软件文件和参照软件文件被标识为是相同的文件。
然后,还可以比较附加的产物或代码部分以增加进行正确标识的置信水平。置信度可以是固定的或可调整的,并且可以基于广泛多种的标准,诸如匹配的产物的数目,哪些产物匹配,以及数目和哪些产物的组合。例如,可以对特定数据集及其观察进行这种调整。更进一步地,对于某些实施例,匹配可以包括模糊匹配,诸如具有小于100%匹配的百分比的可调设置,以具有所声明的匹配。
对于某些示例实施例,在匹配和标识过程中可以给予某些产物更多或更少的权重。例如,诸如指令是否与32位或64位处理器相关联之类的常见产物可以被给予零的权重或一些其它较小权重。一些产物在变换下可以是或多或少不变的,并且对于某些示例实施例,可以相应地调整用于这些产物的权重。例如,文件名或CG产物可以被认为在建立文件的身份方面是高信息性的,而某些产物(诸如LTS或DT)例如可以被认为是较少指示性的,并且对于某些示例性实施例和源给予较小的权重。附加的实施例可以给予产物的某些组合更大的权重,以在进行比较时标识匹配。例如,使得CFG和CG产物匹配可以在进行标识时比使得基本块产物和DT产物匹配给予更多的权重。同样,在进行文件的标识时,可以给予不匹配的某些产物更多或更少的权重。在标识过程中评估加权的附加的示例可以包括表达标识阈值,诸如以匹配产物的百分比或一些其它度量。附加的实施例可以更改标识阈值,包括基于诸如文件的源、文件的类型、时间戳(包括文件的日期、文件的大小、或者该文件的某些产物是否不能确定或以其它方式不可用)。
附加实施例可以通过将软件文件转换为诸如LLVM IR之类的中间表示,并且从中间表示确定多个产物中的至少一个产物来确定用于软件文件的多个产物中的一些产物。其它实施例可以通过从软件文件中提取字符串来确定多个产物中的一些产物,诸如源代码文件或文档文件。
示例实施例还可以包括通过分析与所标识的参照软件文件相关联的至少一个参照产物来确定是否存在软件文件的较新版本。例如,一旦已经标识了软件文件,就可以检查数据库以查看软件文件的较新修订是否可用,诸如通过检查对应的参照文件的修订号或时间戳,或者可以将参照文件标识为另一文件的旧版本的与数据库中的产物和文件相关联的标签。附加的示例实施例还可以自动提供软件文件的较新版本,包括给用户或公众或私人源。
某些附加实施例可以通过分析与所标识的参照软件文件相关联的至少一个参照产物来确定软件文件的补丁是否存在。例如,示例实施例可以检查与参照软件文件相关联的产物,并且确定文件存在补丁,包括尚未应用于软件文件的补丁。附加实施例可以自动地将补丁应用于软件文件或者提示用户他们是否想要应用补丁。
某些附加实施例可以针对某些实施例分析补丁以及软件文件(或者参照软件文件,因为它们匹配),以确定与软件文件中的缺陷的修复相对应的补丁的修复部分。该分析可以在针对某些实施例获得软件文件之前或之后发生。附加的实施例可以仅将补丁的修复部分应用于软件文件,包括自动地或提示用户他们是否应用补丁的修复部分。附加的实施例可以将补丁的修复部分提供给源以在源处应用该修复部分。进一步地,补丁和软件文件的分析可以包括将补丁和软件文件转换为中间表示,并且从中间表示确定多个产物中的至少一个产物。类似地,附加的实施例可以分析补丁和软件文件(或者参照软件文件,因为它们匹配),以确定与软件文件中的特征的改进或改变相对应的补丁的特征增强部分。附加的实施例可以仅将补丁的特征增强部分应用于软件文件,包括自动地或提示用户他们是否希望应用补丁的特征增强部分。
附加的示例实施例可以通过分析与所标识的参照软件文件相关联的至少一个参照产物来确定软件文件中是否存在缺陷。例如,参照软件文件可以具有将其标识为具有修复可用的缺陷的产物。附加的实施例可以自动修复软件文件中的缺陷,包括通过用源代码的修复块替换源代码的块、或用中间表示的修复块替换软件文件中的中间表示的块。附加的实施例可以通过用二进制补丁替换二进制的一部分来修复二进制文件中的缺陷。对于某些实施例,所修复的文件可以被发送到软件文件的源。附加的实施例可以提供修复代码以提供给软件文件的源,以便在那里修复文件。
图9是图示了用于标识代码的方法的示例实施例的流程图。该示例方法可以获得一个或多个软件文件910。对于软件文件,可以确定多个产物920。如果产物已经被确定的话,则某些实施例可以替代地获得产物,而非确定产物。可以访问存储多个参照产物的数据库930。参照产物是如本文中所描述的产物,并且可以与参照软件文件、参照设计模式或感兴趣的代码的其它块相对应。数据库可以存储在许多位置,诸如本地存储,或者存储在网络驱动器上,或者可以通过互联网或在云中访问,并且还可以分布在多个存储设备上。然后,可以通过将与程序片段相对应的多个产物和与该程序片段相对应的多个参照产物进行匹配来标识在一个或多个软件文件中或与它们(诸如接口错误)相关联的程序片段940。程序片段是文件、程序、基本块、功能或功能之间的接口的子部分。程序片段可以与单个指令一样小,或者与整个文件、程序、基本块、功能或接口一样大。所选择的部分可以足以以任何期望的置信度来标识程序片段,其对于某些实施例可以是可设置或可调整的,并且可以更改,诸如上文关于标识文件所描述的。
对于某些实施例,确定用于软件文件的产物包括将软件文件转换为中间表示,并且从中间表示确定至少一个产物。对于某些实施例,软件文件和参照软件文件各自采用源代码格式或各自采用二进制代码格式。对于附加的实施例,程序片段与软件文件中的缺陷相对应并且已经在数据库中被标识以与缺陷相对应。附加的实施例可以自动地修复软件文件中的缺陷或向用户提供一个或多个修复选项以修复缺陷。某些实施例可以订购修理选项,包括例如基于由用户选择的一个或多个先前修复选项或基于用于修复选项的成功可能性。
图10是图示了根据本发明的实施例的使用软件文件的数据库语料库的***的方框图。示例***包括可以与具有至少一个软件文件的源1010进行通信的接口1020。接口1020还通信地耦合到处理器1030。对于附加的实施例,接口1020还可以直接耦合到存储设备1040。该存储设备1040可以是广泛多种众所周知的存储设备或***,诸如网络或本地存储设备,诸如例如,单个硬盘驱动器或具有多个硬盘驱动器的分布式存储***。存储设备1040可以存储包括用于多个参照软件文件中的每一个参照软件文件的参照产物,并且可以通信地耦合到处理器1030。处理器1030可以被配置成使得从源1010获得软件文件。该软件文件的身份以及是否有该文件的更新版本可用,是否有补丁可用,或该文件是否包含缺陷或未增强特征都是示例***可以解决的问题的示例。处理器1030还被配置成确定软件文件的多个产物,访问存储设备1040中的参照产物,将用于软件文件的产物与存储在存储设备1040中的参照产物进行比较,并且通过标识具有与用于软件文件的比较的产物相对应的参照产物的参照软件文件来标识软件文件。
在示例***的附加的实施例中,处理器1030可以被配置成如果在文件的存储设备1040中可用,则自动向软件文件应用补丁。在另外的实施例中,处理器还可以被配置成分析所标识的补丁和软件文件以确定是否存在补丁的修复部分,其与软件文件中的缺陷的修复相对应,并且如果是,仅将补丁的修复部分应用于软件文件,或提示用户。
图10的框图还可以图示了根据本发明的实施例的使用数据库语料库的另一示例***。该另一个图示的示例***包括可以与具有一个或多个软件文件的源1010通信的接口1020。接口1020还通信地耦合到处理器1030。对于附加的实施例,接口1020还可以直接耦合到存储设备1040。该存储设备1040可以是广泛多种众所周知的存储设备或***,诸如网络或本地存储设备,诸如例如,单个硬盘驱动器或具有多个硬盘驱动器的分布式存储***。存储设备1040可以存储参照产物,并且可以通信地耦合到处理器1030。处理器1030可以被配置成使得获得一个或多个软件文件,以确定用于一个或多个软件文件的多个产物,访问存储多个参照产物的数据库,以及通过将与程序片段相对应的多个产物和与程序片段相对应的多个参照产物进行匹配来标识用于一个或多个软件文件的程序片段。对于某些示例实施例,在数据库中已经标识出程序片段以与缺陷相对应。这种缺陷的示例包括错误、安全漏洞和协议缺点。这些缺陷可以在一个或多个软件文件内,或者可以与软件文件之间的一个或多个接口有关。附加的实施例还可以使处理器被配置成自动修复一个或多个软件文件中的缺陷。对于某些示例实施例,在数据库中已经标识出程序片段以与特征相对应,并且某些实施例还可以自动地提供特征增强,包括采用源代码或二进制文件的补丁的形式。
修复
示例实施例支持用于自动修复的程序合成,包括通过替换CG节点(函数)、CFG节点(基本块)、特定指令、或特定变量和常数来实例化所选择的修复。这些元素(例如,函数、基本块、指令)可与具有兼容接口(即,相同数目个参数、类型和输出)的元件交换,并且可以通过将LLVM IR的缺陷块替换为LLVM IR的修复块来变换LLVM IR。
某些实施例还可以选择用函数调用和具有一个或多个基本块的函数调用来交换基本块。某些实施例可以修补源代码和二进制。当它们不存在时,附加实施例还可以创建用于交换的合适元素。高级产物(例如,LTS和Z谓词)可以用于导出用于软件补丁的兼容实现方式。示例实施例可以利用所提取的图表示的层级,首先将层级升序到修复模式的合适表示,然后(经由编译)层级降序到具体实现方式。产物的分级性质可以帮助形成修复代码。
示例实施例可以允许用户提交目标程序(源或二进制),并且示例实施例发现任何缺陷设计模式的存在。对于每个缺陷,可以向用户提供候选修复策略(即,修复设计模式)。用户可以选择要合成的修复和要修补的目标的策略。某些示例实施例还可以从用户选择中学习以最佳地排序未来的修复解决方案,并且修复策略也可以按排序的顺序来呈现给用户。某些实施例还可以自动运行,修复整个软件语料库(包括连续地、周期性地和/或在设计环境中)的缺陷或漏洞。
除了上文所讨论的实施例之外,本发明可以用于广泛多种用途。例如,在软件代码的编程期间可以使用示例实施例来辅助程序员,包括标识缺陷或建议代码重用。附加的示例实施例可以用于发现缺陷和漏洞并且可选地自动修复它们。另一其它示例实施例可以用于优化代码,包括标识未使用的代码、低效代码和用于替换效率较低的代码的建议代码。
示例实施例还可以用于风险管理和评估,包括关于在某些代码中可能存在什么漏洞。附加的实施例还可以用在设计认证过程中,包括提供软件文件没有已知缺陷(诸如错误、安全漏洞和协议缺陷)的证明。
本发明的又一其它附加的示例实施例包括:代码重用发现器(找到已经在代码库中执行相同事情的代码)、代码质量测量、对代码翻译器的文本描述、库生成器、测试案例生成器、代码数据分离器、代码映射和探索工具、现有代码的自动架构生成、架构改进建议器、错误/误差估计器、无用代码发现、代码特征映射、自动补丁审阅器、代码改进决策工具(特征列表到最小改变的映射)、对现有设计工具(例如,企业架构师)的扩展、备选实现建议器、代码探索和学习工具(例如,用于教学)、***级代码许可证足迹、以及企业软件使用映射。
应当理解,上文所描述的示例实施例可以以许多不同的方式来实现。在一些实例中,本文中所描述的各种方法和机器可以各自由具有中央处理器、存储器、盘或其它大容量存储装置、(多个)通信接口、(多个)输入/输出(I/O)设备和其它***设备的物理、虚拟或混合通用计算机来实现。通用计算机被变换成执行上文所描述的方法的机器,例如,通过将软件指令加载到数据处理器中,然后使指令的执行来执行本文中所述的功能。软件指令还可以被模块化,诸如具有用于摄取文件以形成语料库的摄取模块、用于确定用于语料库的文件的产物和/或待被标识或分析用于设计模式的文件的分析模块、图分析模块、以及用于执行机器学习的文本分析模块、用于标识文件或设计模式的标识模块、以及用于修复代码或提供更新或修复的文件的修复模块。对于某些示例性实施例,这些模块可以组合或分离成附加模块。
如本领域中已知的,这样的计算机可以包含***总线,其中,总线是用于在计算机或处理***的组件之间进行数据传送的一组硬件线。总线或多个总线基本上是连接计算机***的不同元件(例如,处理器、磁盘存储装置、存储器、输入/输出端口、网络端口等)的共享管道,其使得能够在元件之间传送信息。一个或多个中央处理器单元附接到***总线并且提供计算机指令的执行。还附接到***总线的通常是用于将各种输入和输出设备(例如,键盘、鼠标、显示器、打印机、扬声器等)连接到计算机的I/O设备接口。(多个)网络接口允许计算机连接到附接到网络的各种其它设备。存储器为用于实现实施例的计算机软件指令和数据提供易失性存储。磁盘或其它大容量存储为用于实现例如本文中所描述的各种进程的计算机软件指令和数据提供非易失性存储。
因此,实施例通常可以在硬件、固件、软件或其任何组合中实现。更进一步地,示例实施例可以完全或部分地驻留在云上,并且可以经由因特网或其它网络架构来访问。
在某些实施例中,本文中所描述的进程、设备和过程构成计算机程序产品,包括提供用于***的软件指令的至少一部分的非暂态计算机可读介质,例如,可移除存储介质,诸如一个或多个DVD-ROM、CD-ROM、磁盘、磁带等。这样的计算机程序产品可以通过本领域中公知的任何合适的软件安装进程来安装。在另一实施例中,软件指令的至少一部分也可以通过电缆、通信和/或无线连接来下载。
进一步地、固件、软件、例程或指令在本文中可以被描述为执行数据处理器的某些动作和/或功能。然而,应当理解,本文中所包含的这种描述仅仅是为了方便,并且这种动作实际上由计算设备,处理器,控制器、或执行固件、软件、例程、指令等的其它设备来产生。
还应当理解,流程图、方框图和网络图可以包括不同地布置或者不同地表示的更多或更少的元件。但是还应当理解,某些实现方式可以规定方框和网络图以及图示了实施例的执行的方框和网络图的数目以特定方式来实现。
因此,另外的实施例还可以在多种计算机体系结构、物理、虚拟、云计算机和/或其某种组合中实现,并且因此,本文中所描述的数据处理器仅用于说明的目的,而不是作为实施例的限制。
尽管已经参照本发明的示例实施例具体示出并且描述了本发明,但是本领域技术人员应当理解,在不背离所附权利要求所涵盖的本发明的范围的情况下,可以在其中进行形式和细节上的各种改变。

Claims (48)

1.一种用于标识设计模式的方法,包括:
访问具有用于多个文件中的每一个文件的多个产物的数据库;和
基于用于所述多个文件中的第一文件的所述多个产物中的至少一个产物来自动地标识设计模式。
2.根据权利要求1所述的方法,其中,所述设计模式在所述第一文件中。
3.根据权利要求1所述的方法,其中,自动地标识所述设计模式还包括:将所述设计模式的所述标识还基于用于所述多个文件中的第二文件的所述多个产物中的至少一个产物,其中,所述第一文件和所述第二文件都属于项目。
4.根据权利要求3所述的方法,其中,自动地标识所述设计模式包括:将用于所述第一文件的所述多个产物中的所述至少一个产物和用于所述第二文件的所述多个产物中的所述至少一个产物匹配到表示所述设计模式的预先标识的模式。
5.根据权利要求4所述的方法,其中,所述设计模式涉及所述第一文件和所述第二文件之间的接口。
6.根据权利要求1所述的方法,其中,所述设计模式是缺陷或修复。
7.根据权利要求1所述的方法,其中,所述设计模式是特征或特征增强。
8.根据权利要求1所述的方法,其中,所述设计模式是预先标识的程序片段。
9.根据权利要求1所述的方法,其中,基于所述多个产物中的所述至少一个产物自动地标识所述设计模式包括:在所述多个产物中的所述至少一个产物中定位表示缺陷或修复的字符串。
10.根据权利要求9所述的方法,其中,所述多个产物中的所述至少一个产物是开发产物。
11.根据权利要求1所述的方法,其中,基于所述多个产物中的所述至少一个产物自动地标识所述设计模式包括:在所述多个产物中的所述至少一个产物中定位表示特征或特征增强的字符串。
12.根据权利要求11所述的方法,其中,所述多个产物中的所述至少一个产物是开发产物。
13.根据权利要求1所述的方法,其中,基于所述多个产物中的所述至少一个产物自动地标识所述设计模式包括:将所述多个产物中的所述至少一个产物与表示所述设计模式的预先标识的模式进行匹配。
14.根据权利要求1所述的方法,其中,所述多个产物中的所述至少一个产物各自是静态产物。
15.根据权利要求1所述的方法,其中,所述多个产物中的所述至少一个产物各自是动态产物。
16.根据权利要求1所述的方法,其中,所述多个产物中的所述至少一个产物各自是导出的产物。
17.根据权利要求1所述的方法,其中,所述多个产物中的所述至少一个产物各自是元数据产物。
18.根据权利要求1所述的方法,还包括:在所述数据库中存储用于所述设计模式的标识符。
19.根据权利要求18所述的方法,其中,存储用于所述设计模式的标识符包括:使用从用于所述第一文件的所述多个产物中的至少一个产物而获得的字符串来存储用于所述设计模式的标签。
20.根据权利要求2所述的方法,还包括在所述第一文件中找到与所述设计模式相对应的程序片段。
21.根据权利要求20所述的方法,其中,所述第一文件是二进制代码格式。
22.根据权利要求20所述的方法,其中,所述第一文件是源代码格式。
23.根据权利要求20所述的方法,其中,所述第一文件是中间表示(IR)格式。
24.一种用于标识设计模式的方法,包括:
访问具有多个产物的数据库;
聚类所述多个产物;和
基于一个或多个先前标识的设计模式从所述聚类中标识先前未标识的设计模式。
25.根据权利要求24所述的方法,其中,所述先前未标识的设计模式、以及所述一个或多个先前标识的设计模式是相同的设计模式。
26.根据权利要求24所述的方法,其中,所述先前标识的设计模式是缺陷。
27.根据权利要求26所述的方法,还包括:标识与所述先前标识的缺陷相关联的一个或多个修复。
28.根据权利要求24所述的方法,其中,所述多个产物包括多个开发产物,并且还包括:基于字符、词语或短语在所述开发产物中的出现而从与所述聚类的多个产物相对应的所述多个开发产物中提取语义。
29.根据权利要求24所述的方法,其中,聚类所述多个产物包括:使用机器学习。
30.根据权利要求24所述的方法,其中,聚类所述多个产物包括:使用深度学习。
31.根据权利要求24所述的方法,其中,聚类所述多个产物包括:使用自动编码器。
32.根据权利要求24所述的方法,还包括:提供用于所述多个产物的所述聚类的训练,其中,所述训练包括使用软件文件的第一版本和所述软件文件的第二版本之间的一个或多个差异。
33.根据权利要求32所述的方法,其中,所述一个或多个差异与缺陷或修复相对应。
34.根据权利要求33所述的方法,其中,所述缺陷是安全漏洞,或所述修复是补丁。
35.根据权利要求32所述的方法,其中,所述一个或多个差异与特征或特征增强相对应。
36.一种用于标识设计模式的***,包括:
一个或多个存储设备,具有用于多个文件中的每一个文件的多个产物;和
处理器,被配置成基于用于所述多个文件中的第一文件的所述多个产物中的至少一个产物来自动地标识设计模式。
37.根据权利要求36所述的***,还包括:所述处理器还被配置成在所述第一文件中找到实现所述设计模式的程序片段。
38.根据权利要求36所述的***,其中,自动地标识所述设计模式还包括:将所述设计模式的所述标识还基于用于所述多个文件中第二文件的所述多个产物中的至少一个产物,其中,所述第一文件和所述第二文件都属于项目。
39.根据权利要求36所述的***,其中,所述设计模式是缺陷或修复。
40.根据权利要求36所述的***,其中,所述设计模式是特征或特征增强。
41.根据权利要求36所述的***,其中,所述设计模式是预先标识的程序片段。
42.一种用于标识设计模式的***,包括:
一个或多个存储设备,具有多个产物;和
处理器,被配置成聚类所述多个产物,并且基于一个或多个先前标识的设计模式来从所述聚类中标识先前未标识的设计模式。
43.根据权利要求42所述的***,其中,所述先前标识的设计模式是缺陷。
44.根据权利要求42所述的***,还包括:标识与所述先前标识的缺陷相关联的一个或多个修复。
45.根据权利要求42所述的***,其中,聚类所述多个产物包括:使用机器学习。
46.根据权利要求42所述的***,其中,聚类所述多个产物包括:使用深度学习。
47.一种其上存储有可执行程序的非暂态计算机可读介质,其中,所述程序指示处理设备执行以下步骤:
访问具有用于多个文件中的每一个文件的多个产物的数据库;和
基于用于所述多个文件中的第一文件的所述多个产物中的至少一个产物来自动地标识设计模式。
48.一种其上存储有可执行程序的非暂态计算机可读介质,其中,所述程序指示处理设备执行以下步骤:
访问具有多个产物的数据库;
聚类所述多个产物;和
基于一个或多个先前标识的设计模式来从所述聚类中标识先前未标识的设计模式。
CN201580031456.7A 2014-06-13 2015-06-10 软件分析***和方法 Pending CN106537332A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462012127P 2014-06-13 2014-06-13
US62/012,127 2014-06-13
PCT/US2015/035131 WO2015191731A1 (en) 2014-06-13 2015-06-10 Systems and methods for software analytics

Publications (1)

Publication Number Publication Date
CN106537332A true CN106537332A (zh) 2017-03-22

Family

ID=53484176

Family Applications (3)

Application Number Title Priority Date Filing Date
CN201580031458.6A Pending CN106663003A (zh) 2014-06-13 2015-06-10 用于软件分析的***和方法
CN201580031457.1A Pending CN106537333A (zh) 2014-06-13 2015-06-10 用于软件产物的数据库的***和方法
CN201580031456.7A Pending CN106537332A (zh) 2014-06-13 2015-06-10 软件分析***和方法

Family Applications Before (2)

Application Number Title Priority Date Filing Date
CN201580031458.6A Pending CN106663003A (zh) 2014-06-13 2015-06-10 用于软件分析的***和方法
CN201580031457.1A Pending CN106537333A (zh) 2014-06-13 2015-06-10 用于软件产物的数据库的***和方法

Country Status (6)

Country Link
US (3) US20150363196A1 (zh)
EP (3) EP3155512A1 (zh)
JP (3) JP2017517821A (zh)
CN (3) CN106663003A (zh)
CA (3) CA2949251C (zh)
WO (3) WO2015191746A1 (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108920152A (zh) * 2018-05-25 2018-11-30 郑州云海信息技术有限公司 一种在bugzilla中增加自定义属性的方法
CN109408114A (zh) * 2018-08-20 2019-03-01 哈尔滨工业大学 一种程序错误自动修正方法、装置、电子设备及存储介质
CN109947460A (zh) * 2017-12-21 2019-06-28 鼎捷软件股份有限公司 程序连结方法及程序连结***
CN110162963A (zh) * 2019-04-26 2019-08-23 肖银皓 一种识别过权应用程序的方法
CN110221933A (zh) * 2019-05-05 2019-09-10 北京百度网讯科技有限公司 代码缺陷辅助修复方法及***
CN110990021A (zh) * 2019-11-28 2020-04-10 杭州迪普科技股份有限公司 软件运行方法、装置、主控板及框式设备
CN112346722A (zh) * 2020-11-11 2021-02-09 苏州大学 一种实现编译型嵌入式Python的方法
CN113407442A (zh) * 2021-05-27 2021-09-17 杭州电子科技大学 一种基于模式的Python代码内存泄漏检测方法
WO2024055737A1 (en) * 2022-09-14 2024-03-21 International Business Machines Corporation Transforming an application into a microservice architecture

Families Citing this family (118)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10430180B2 (en) * 2010-05-26 2019-10-01 Automation Anywhere, Inc. System and method for resilient automation upgrade
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
KR101694783B1 (ko) * 2014-11-28 2017-01-10 주식회사 파수닷컴 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
US9275347B1 (en) * 2015-10-09 2016-03-01 AlpacaDB, Inc. Online content classifier which updates a classification score based on a count of labeled data classified by machine deep learning
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
WO2017126786A1 (ko) * 2016-01-19 2017-07-27 삼성전자 주식회사 악성 코드 분석을 위한 전자 장치 및 이의 방법
KR102582580B1 (ko) * 2016-01-19 2023-09-26 삼성전자주식회사 악성 코드 분석을 위한 전자 장치 및 이의 방법
US10192000B2 (en) * 2016-01-29 2019-01-29 Walmart Apollo, Llc System and method for distributed system to store and visualize large graph databases
US11593342B2 (en) 2016-02-01 2023-02-28 Smartshift Technologies, Inc. Systems and methods for database orientation transformation
US10331495B2 (en) * 2016-02-05 2019-06-25 Sas Institute Inc. Generation of directed acyclic graphs from task routines
US10650046B2 (en) 2016-02-05 2020-05-12 Sas Institute Inc. Many task computing with distributed file system
US10642896B2 (en) 2016-02-05 2020-05-05 Sas Institute Inc. Handling of data sets during execution of task routines of multiple languages
US10795935B2 (en) 2016-02-05 2020-10-06 Sas Institute Inc. Automated generation of job flow definitions
US10650045B2 (en) 2016-02-05 2020-05-12 Sas Institute Inc. Staged training of neural networks for improved time series prediction performance
KR101824583B1 (ko) * 2016-02-24 2018-02-01 국방과학연구소 커널 자료구조 특성에 기반한 악성코드 탐지 시스템 및 그의 제어 방법
US9836454B2 (en) 2016-03-31 2017-12-05 International Business Machines Corporation System, method, and recording medium for regular rule learning
WO2017196381A1 (en) * 2016-05-12 2017-11-16 Synopsys, Inc. Systems and methods for model-based analysis of software
US10585655B2 (en) 2016-05-25 2020-03-10 Smartshift Technologies, Inc. Systems and methods for automated retrofitting of customized code objects
RU2676405C2 (ru) * 2016-07-19 2018-12-28 Федеральное государственное автономное образовательное учреждение высшего образования "Санкт-Петербургский государственный университет аэрокосмического приборостроения" Способ автоматизированного проектирования производства и эксплуатации прикладного программного обеспечения и система для его осуществления
US10089103B2 (en) 2016-08-03 2018-10-02 Smartshift Technologies, Inc. Systems and methods for transformation of reporting schema
US10248919B2 (en) * 2016-09-21 2019-04-02 Red Hat Israel, Ltd. Task assignment using machine learning and information retrieval
US9749349B1 (en) 2016-09-23 2017-08-29 OPSWAT, Inc. Computer security vulnerability assessment
US10768979B2 (en) * 2016-09-23 2020-09-08 Apple Inc. Peer-to-peer distributed computing system for heterogeneous device types
US11522901B2 (en) 2016-09-23 2022-12-06 OPSWAT, Inc. Computer security vulnerability assessment
WO2018063840A1 (en) 2016-09-28 2018-04-05 D5A1 Llc; Learning coach for machine learning system
KR101937933B1 (ko) 2016-11-08 2019-01-14 한국전자통신연구원 오픈 소스 소프트웨어 패키지의 안전성 정량화 장치, 최적화 장치 및 최적화 방법
US11205103B2 (en) 2016-12-09 2021-12-21 The Research Foundation for the State University Semisupervised autoencoder for sentiment analysis
US10261763B2 (en) 2016-12-13 2019-04-16 Palantir Technologies Inc. Extensible data transformation authoring and validation system
US10325340B2 (en) 2017-01-06 2019-06-18 Google Llc Executing computational graphs on graphics processing units
DE102018100730A1 (de) * 2017-01-13 2018-07-19 Evghenii GABUROV Ausführung von Berechnungsgraphen
US10585780B2 (en) 2017-03-24 2020-03-10 Microsoft Technology Licensing, Llc Enhancing software development using bug data
US11288592B2 (en) 2017-03-24 2022-03-29 Microsoft Technology Licensing, Llc Bug categorization and team boundary inference via automated bug detection
EP3602316A4 (en) 2017-03-24 2020-12-30 D5A1 Llc LEARNING COACH FOR AUTOMATIC LEARNING SYSTEM
US10754640B2 (en) * 2017-03-24 2020-08-25 Microsoft Technology Licensing, Llc Engineering system robustness using bug data
US10101971B1 (en) * 2017-03-29 2018-10-16 International Business Machines Corporation Hardware device based software verification
EP3635636A4 (en) 2017-06-05 2021-03-24 D5A1 Llc ASYNCHRONOUS AGENTS WITH LEARNING COACHES AND STRUCTURALLY MODIFIED DEEP NEURAL NETWORKS WITHOUT PERFORMANCE LOSS
KR102006242B1 (ko) * 2017-09-29 2019-08-06 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
US10635813B2 (en) 2017-10-06 2020-04-28 Sophos Limited Methods and apparatus for using machine learning on multiple file fragments to identify malware
US10545740B2 (en) * 2017-10-25 2020-01-28 Saudi Arabian Oil Company Distributed agent to collect input and output data along with source code for scientific kernels of single-process and distributed systems
US10866877B2 (en) 2017-11-13 2020-12-15 The Charles Stark Draper Laboratory, Inc. Automated repair of bugs and security vulnerabilities in software
US10372438B2 (en) 2017-11-17 2019-08-06 International Business Machines Corporation Cognitive installation of software updates based on user context
US10834118B2 (en) * 2017-12-11 2020-11-10 International Business Machines Corporation Ambiguity resolution system and method for security information retrieval
US10659477B2 (en) * 2017-12-19 2020-05-19 The Boeing Company Method and system for vehicle cyber-attack event detection
US10489270B2 (en) * 2018-01-21 2019-11-26 Microsoft Technology Licensing, Llc. Time-weighted risky code prediction
WO2019145912A1 (en) 2018-01-26 2019-08-01 Sophos Limited Methods and apparatus for detection of malicious documents using machine learning
US11321612B2 (en) 2018-01-30 2022-05-03 D5Ai Llc Self-organizing partially ordered networks and soft-tying learned parameters, such as connection weights
US11941491B2 (en) 2018-01-31 2024-03-26 Sophos Limited Methods and apparatus for identifying an impact of a portion of a file on machine learning classification of malicious content
US10528343B2 (en) 2018-02-06 2020-01-07 Smartshift Technologies, Inc. Systems and methods for code analysis heat map interfaces
US10698674B2 (en) 2018-02-06 2020-06-30 Smartshift Technologies, Inc. Systems and methods for entry point-based code analysis and transformation
US10740075B2 (en) * 2018-02-06 2020-08-11 Smartshift Technologies, Inc. Systems and methods for code clustering analysis and transformation
US10452367B2 (en) * 2018-02-07 2019-10-22 Microsoft Technology Licensing, Llc Variable analysis using code context
US11270205B2 (en) 2018-02-28 2022-03-08 Sophos Limited Methods and apparatus for identifying the shared importance of multiple nodes within a machine learning model for multiple tasks
US11455566B2 (en) * 2018-03-16 2022-09-27 International Business Machines Corporation Classifying code as introducing a bug or not introducing a bug to train a bug detection algorithm
US10671511B2 (en) 2018-06-20 2020-06-02 Hcl Technologies Limited Automated bug fixing
US10628282B2 (en) 2018-06-28 2020-04-21 International Business Machines Corporation Generating semantic flow graphs representing computer programs
DE102018213053A1 (de) * 2018-08-03 2020-02-06 Continental Teves Ag & Co. Ohg Verfahren zum Analysieren von Quelltexten
US10503632B1 (en) * 2018-09-28 2019-12-10 Amazon Technologies, Inc. Impact analysis for software testing
US11093241B2 (en) * 2018-10-05 2021-08-17 Red Hat, Inc. Outlier software component remediation
US11947668B2 (en) 2018-10-12 2024-04-02 Sophos Limited Methods and apparatus for preserving information between layers within a neural network
CN109522192B (zh) * 2018-10-17 2020-08-04 北京航空航天大学 一种基于知识图谱和复杂网络组合的预测方法
CN109960506B (zh) * 2018-12-03 2023-05-02 复旦大学 一种基于结构感知的代码注释生成方法
US10803182B2 (en) * 2018-12-03 2020-10-13 Bank Of America Corporation Threat intelligence forest for distributed software libraries
GB201821248D0 (en) 2018-12-27 2019-02-13 Palantir Technologies Inc Data pipeline management system and method
US20220083320A1 (en) * 2019-01-09 2022-03-17 Hewlett-Packard Development Company, L.P. Maintenance of computing devices
US11574052B2 (en) 2019-01-31 2023-02-07 Sophos Limited Methods and apparatus for using machine learning to detect potentially malicious obfuscated scripts
WO2020170091A1 (en) * 2019-02-19 2020-08-27 Craymer Iii Loring G Method and system for using subroutine graphs for formal language processing
US11188454B2 (en) * 2019-03-25 2021-11-30 International Business Machines Corporation Reduced memory neural network training
WO2020194000A1 (en) 2019-03-28 2020-10-01 Validata Holdings Limited Method of detecting and removing defects
US11074055B2 (en) * 2019-06-14 2021-07-27 International Business Machines Corporation Identification of components used in software binaries through approximate concrete execution
US11205004B2 (en) 2019-06-17 2021-12-21 Baidu Usa Llc Vulnerability driven hybrid test system for application programs
US10782941B1 (en) 2019-06-20 2020-09-22 Fujitsu Limited Refinement of repair patterns for static analysis violations in software programs
WO2021002849A1 (en) * 2019-07-02 2021-01-07 Hewlett-Packard Development Company, L.P. Computer readable program code change impact estimations
CN110427316B (zh) * 2019-07-04 2023-02-14 沈阳航空航天大学 基于访问行为感知的嵌入式软件缺陷修复方法
CN110442527B (zh) * 2019-08-16 2023-07-18 扬州大学 面向bug报告的自动化修复方法
US11397817B2 (en) * 2019-08-22 2022-07-26 Denso Corporation Binary patch reconciliation and instrumentation system
US11042467B2 (en) * 2019-08-23 2021-06-22 Fujitsu Limited Automated searching and identification of software patches
US11650905B2 (en) 2019-09-05 2023-05-16 International Business Machines Corporation Testing source code changes
CN110688198B (zh) * 2019-09-24 2021-03-02 网易(杭州)网络有限公司 ***调用方法、装置和电子设备
US11853196B1 (en) 2019-09-27 2023-12-26 Allstate Insurance Company Artificial intelligence driven testing
US11176015B2 (en) 2019-11-26 2021-11-16 Optum Technology, Inc. Log message analysis and machine-learning based systems and methods for predicting computer software process failures
US11055077B2 (en) 2019-12-09 2021-07-06 Bank Of America Corporation Deterministic software code decompiler system
US20210192314A1 (en) * 2019-12-18 2021-06-24 Nvidia Corporation Api for recurrent neural networks
CN111221731B (zh) * 2020-01-03 2021-10-15 华东师范大学 一种快速获取到达程序指定点测试用例的方法
CN111258905B (zh) * 2020-01-19 2023-05-23 中信银行股份有限公司 缺陷定位方法、装置和电子设备及计算机可读存储介质
US11194702B2 (en) * 2020-01-27 2021-12-07 Red Hat, Inc. History based build cache for program builds
US11307828B2 (en) 2020-02-05 2022-04-19 Hatha Systems, LLC System and method for creating a process flow diagram which incorporates knowledge of business rules
US11620454B2 (en) 2020-02-05 2023-04-04 Hatha Systems, LLC System and method for determining and representing a lineage of business terms and associated business rules within a software application
US11836166B2 (en) 2020-02-05 2023-12-05 Hatha Systems, LLC System and method for determining and representing a lineage of business terms across multiple software applications
US11288043B2 (en) 2020-02-05 2022-03-29 Hatha Systems, LLC System and method for creating a process flow diagram which incorporates knowledge of the technical implementations of flow nodes
US11348049B2 (en) 2020-02-05 2022-05-31 Hatha Systems, LLC System and method for creating a process flow diagram which incorporates knowledge of business terms
US11113048B1 (en) * 2020-02-26 2021-09-07 Accenture Global Solutions Limited Utilizing artificial intelligence and machine learning models to reverse engineer an application from application artifacts
US11354108B2 (en) * 2020-03-02 2022-06-07 International Business Machines Corporation Assisting dependency migration
JP7508838B2 (ja) 2020-03-31 2024-07-02 日本電気株式会社 部分抽出装置、部分抽出方法およびプログラム
CN113672929A (zh) * 2020-05-14 2021-11-19 阿波罗智联(北京)科技有限公司 漏洞特征获取方法、装置及电子设备
US11443082B2 (en) * 2020-05-27 2022-09-13 Accenture Global Solutions Limited Utilizing deep learning and natural language processing to convert a technical architecture diagram into an interactive technical architecture diagram
US11379207B2 (en) 2020-08-21 2022-07-05 Red Hat, Inc. Rapid bug identification in container images
US11422925B2 (en) * 2020-09-22 2022-08-23 Sap Se Vendor assisted customer individualized testing
US11610000B2 (en) 2020-10-07 2023-03-21 Bank Of America Corporation System and method for identifying unpermitted data in source code
US20230153459A1 (en) * 2020-11-10 2023-05-18 Veracode, Inc. Deidentifying code for cross-organization remediation knowledge
CN112463424B (zh) * 2020-11-13 2023-06-02 扬州大学 一种基于图的端到端程序修复方法
US11403090B2 (en) 2020-12-08 2022-08-02 Alibaba Group Holding Limited Method and system for compiler optimization based on artificial intelligence
US11765193B2 (en) * 2020-12-30 2023-09-19 International Business Machines Corporation Contextual embeddings for improving static analyzer output
US11461219B2 (en) 2021-02-02 2022-10-04 Red Hat, Inc. Prioritizing software bug mitigation for software on multiple systems
US11934531B2 (en) 2021-02-25 2024-03-19 Bank Of America Corporation System and method for automatically identifying software vulnerabilities using named entity recognition
US11740895B2 (en) * 2021-03-31 2023-08-29 Fujitsu Limited Generation of software program repair explanations
US12010129B2 (en) 2021-04-23 2024-06-11 Sophos Limited Methods and apparatus for using machine learning to classify malicious infrastructure
CN113590167B (zh) * 2021-07-09 2023-03-24 四川大学 一种面向对象程序中条件语句缺陷补丁生成与验证方法
CN113535577B (zh) * 2021-07-26 2022-07-19 工银科技有限公司 基于知识图谱的应用测试方法、装置、电子设备和介质
CN113626817B (zh) * 2021-08-25 2024-06-25 北京邮电大学 恶意代码家族分类方法
US11704226B2 (en) * 2021-09-23 2023-07-18 Intel Corporation Methods, systems, articles of manufacture and apparatus to detect code defects
US20230153226A1 (en) * 2021-11-12 2023-05-18 Microsoft Technology Licensing, Llc System and Method for Identifying Performance Bottlenecks
WO2023101574A1 (en) * 2021-12-03 2023-06-08 Limited Liability Company Solar Security Method and system for static analysis of binary executable code
US20230176837A1 (en) * 2021-12-07 2023-06-08 Dell Products L.P. Automated generation of additional versions of microservices
US12007878B2 (en) 2022-04-05 2024-06-11 Fmr Llc Testing and deploying targeted versions of application libraries within a software application
US11874762B2 (en) * 2022-06-14 2024-01-16 Hewlett Packard Enterprise Development Lp Context-based test suite generation as a service
WO2024069772A1 (ja) * 2022-09-27 2024-04-04 日本電信電話株式会社 解析装置、解析方法および解析プログラム
WO2024118799A1 (en) * 2022-11-29 2024-06-06 Guardant Health, Inc. Methods and systems for secure software delivery
CN117170673B (zh) * 2023-08-03 2024-05-17 浙江大学 面向二进制代码文本注释自动化生成方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110004499A1 (en) * 2009-07-02 2011-01-06 International Business Machines Corporation Traceability Management for Aligning Solution Artifacts With Business Goals in a Service Oriented Architecture Environment
US20110125748A1 (en) * 2009-11-15 2011-05-26 Solera Networks, Inc. Method and Apparatus for Real Time Identification and Recording of Artifacts
US20130322430A1 (en) * 2012-05-29 2013-12-05 Alcatel Lucent Canada, Inc. Diameter routing agent load balancing

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6195792B1 (en) * 1998-02-19 2001-02-27 Nortel Networks Limited Software upgrades by conversion automation
JP3603718B2 (ja) * 2000-02-01 2004-12-22 日本電気株式会社 メイク情報解析によるプロジェクト内容解析方法及びそのシステム並びに情報記録媒体
JP2001265580A (ja) * 2000-03-16 2001-09-28 Nec Eng Ltd レビュー支援システム及びそれに用いるレビュー支援方法
US6751794B1 (en) * 2000-05-25 2004-06-15 Everdream Corporation Intelligent patch checker
JP2002007121A (ja) * 2000-06-26 2002-01-11 Nec Corp ソースファイル変更履歴管理方法、装置およびプログラムを記録した記録媒体
JP4987180B2 (ja) * 2000-08-14 2012-07-25 株式会社東芝 サーバコンピュータ、ソフトウェア更新方法、記憶媒体
US7047518B2 (en) * 2000-10-04 2006-05-16 Bea Systems, Inc. System for software application development and modeling
US8522196B1 (en) * 2001-10-25 2013-08-27 The Mathworks, Inc. Traceability in a modeling environment
US7069547B2 (en) * 2001-10-30 2006-06-27 International Business Machines Corporation Method, system, and program for utilizing impact analysis metadata of program statements in a development environment
US8171549B2 (en) * 2004-04-26 2012-05-01 Cybersoft, Inc. Apparatus, methods and articles of manufacture for intercepting, examining and controlling code, data, files and their transfer
US10162618B2 (en) * 2004-12-03 2018-12-25 International Business Machines Corporation Method and apparatus for creation of customized install packages for installation of software
US7451435B2 (en) * 2004-12-07 2008-11-11 Microsoft Corporation Self-describing artifacts and application abstractions
US20060236319A1 (en) * 2005-04-15 2006-10-19 Microsoft Corporation Version control system
US7484199B2 (en) * 2006-05-16 2009-01-27 International Business Machines Corporation Buffer insertion to reduce wirelength in VLSI circuits
US20090037870A1 (en) * 2007-07-31 2009-02-05 Lucinio Santos-Gomez Capturing realflows and practiced processes in an IT governance system
US20090070746A1 (en) * 2007-09-07 2009-03-12 Dinakar Dhurjati Method for test suite reduction through system call coverage criterion
US8015232B2 (en) * 2007-10-11 2011-09-06 Roaming Keyboards Llc Thin terminal computer architecture utilizing roaming keyboard files
US8468498B2 (en) * 2008-03-04 2013-06-18 Apple Inc. Build system redirect
US20100058474A1 (en) * 2008-08-29 2010-03-04 Avg Technologies Cz, S.R.O. System and method for the detection of malware
JP2010117897A (ja) * 2008-11-13 2010-05-27 Hitachi Software Eng Co Ltd プログラム静的解析システム
US20100287534A1 (en) * 2009-05-07 2010-11-11 Microsoft Corporation Test case analysis and clustering
JP5207007B2 (ja) * 2009-05-12 2013-06-12 日本電気株式会社 モデル検証システム、モデル検証方法および記録媒体
US20110314331A1 (en) * 2009-10-29 2011-12-22 Cybernet Systems Corporation Automated test and repair method and apparatus applicable to complex, distributed systems
US8495584B2 (en) * 2010-03-10 2013-07-23 International Business Machines Corporation Automated desktop benchmarking
US8381175B2 (en) * 2010-03-16 2013-02-19 Microsoft Corporation Low-level code rewriter verification
JP2012104074A (ja) * 2010-11-15 2012-05-31 Hitachi Ltd パッチ管理方法、パッチ管理プログラム、および、パッチ管理装置
US8726231B2 (en) * 2011-02-02 2014-05-13 Microsoft Corporation Support for heterogeneous database artifacts in a single project
US8533676B2 (en) * 2011-12-29 2013-09-10 Unisys Corporation Single development test environment
CN102156832B (zh) * 2011-03-25 2012-09-05 天津大学 一种Firefox扩展的安全缺陷检测方法
US20120272204A1 (en) * 2011-04-21 2012-10-25 Microsoft Corporation Uninterruptible upgrade for a build service engine
US8612936B2 (en) * 2011-06-02 2013-12-17 Sonatype, Inc. System and method for recommending software artifacts
JP2013003664A (ja) * 2011-06-13 2013-01-07 Sony Corp 情報処理装置および方法
US8935286B1 (en) * 2011-06-16 2015-01-13 The Boeing Company Interactive system for managing parts and information for parts
WO2012172687A1 (ja) * 2011-06-17 2012-12-20 株式会社日立製作所 プログラム可視化装置
US8856725B1 (en) * 2011-08-23 2014-10-07 Amazon Technologies, Inc. Automated source code and development personnel reputation system
US8726264B1 (en) * 2011-11-02 2014-05-13 Amazon Technologies, Inc. Architecture for incremental deployment
US9210098B2 (en) * 2012-02-13 2015-12-08 International Business Machines Corporation Enhanced command selection in a networked computing environment
US8495598B2 (en) * 2012-05-01 2013-07-23 Concurix Corporation Control flow graph operating system configuration
US9141916B1 (en) * 2012-06-29 2015-09-22 Google Inc. Using embedding functions with a deep network
US9298453B2 (en) * 2012-07-03 2016-03-29 Microsoft Technology Licensing, Llc Source code analytics platform using program analysis and information retrieval
US10102212B2 (en) * 2012-09-07 2018-10-16 Red Hat, Inc. Remote artifact repository
US9830452B2 (en) * 2012-11-30 2017-11-28 Beijing Qihoo Technology Company Limited Scanning device, cloud management device, method and system for checking and killing malicious programs
US9020945B1 (en) * 2013-01-25 2015-04-28 Humana Inc. User categorization system and method
US8930914B2 (en) * 2013-02-07 2015-01-06 International Business Machines Corporation System and method for documenting application executions
US20140258977A1 (en) * 2013-03-06 2014-09-11 International Business Machines Corporation Method and system for selecting software components based on a degree of coherence
US20140282373A1 (en) * 2013-03-15 2014-09-18 Trinity Millennium Group, Inc. Automated business rule harvesting with abstract syntax tree transformation
JP5994693B2 (ja) * 2013-03-18 2016-09-21 富士通株式会社 情報処理装置、情報処理方法、及び情報処理プログラム
JP6321325B2 (ja) * 2013-04-03 2018-05-09 ルネサスエレクトロニクス株式会社 情報処理装置および情報処理方法
US9519859B2 (en) * 2013-09-06 2016-12-13 Microsoft Technology Licensing, Llc Deep structured semantic model produced using click-through data
CN103744788B (zh) * 2014-01-22 2016-08-31 扬州大学 基于多源软件数据分析的特征定位方法
US9110737B1 (en) * 2014-05-30 2015-08-18 Semmle Limited Extracting source code

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110004499A1 (en) * 2009-07-02 2011-01-06 International Business Machines Corporation Traceability Management for Aligning Solution Artifacts With Business Goals in a Service Oriented Architecture Environment
US20110125748A1 (en) * 2009-11-15 2011-05-26 Solera Networks, Inc. Method and Apparatus for Real Time Identification and Recording of Artifacts
US20130322430A1 (en) * 2012-05-29 2013-12-05 Alcatel Lucent Canada, Inc. Diameter routing agent load balancing

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109947460A (zh) * 2017-12-21 2019-06-28 鼎捷软件股份有限公司 程序连结方法及程序连结***
CN108920152A (zh) * 2018-05-25 2018-11-30 郑州云海信息技术有限公司 一种在bugzilla中增加自定义属性的方法
CN108920152B (zh) * 2018-05-25 2021-07-23 郑州云海信息技术有限公司 一种在bugzilla中增加自定义属性的方法
CN109408114A (zh) * 2018-08-20 2019-03-01 哈尔滨工业大学 一种程序错误自动修正方法、装置、电子设备及存储介质
CN109408114B (zh) * 2018-08-20 2021-06-22 哈尔滨工业大学 一种程序错误自动修正方法、装置、电子设备及存储介质
CN110162963A (zh) * 2019-04-26 2019-08-23 肖银皓 一种识别过权应用程序的方法
CN110162963B (zh) * 2019-04-26 2021-07-06 佛山市微风科技有限公司 一种识别过权应用程序的方法
CN110221933A (zh) * 2019-05-05 2019-09-10 北京百度网讯科技有限公司 代码缺陷辅助修复方法及***
CN110990021A (zh) * 2019-11-28 2020-04-10 杭州迪普科技股份有限公司 软件运行方法、装置、主控板及框式设备
CN112346722A (zh) * 2020-11-11 2021-02-09 苏州大学 一种实现编译型嵌入式Python的方法
CN113407442A (zh) * 2021-05-27 2021-09-17 杭州电子科技大学 一种基于模式的Python代码内存泄漏检测方法
WO2024055737A1 (en) * 2022-09-14 2024-03-21 International Business Machines Corporation Transforming an application into a microservice architecture

Also Published As

Publication number Publication date
WO2015191731A8 (en) 2016-03-03
CA2949251C (en) 2019-05-07
WO2015191737A1 (en) 2015-12-17
JP2017520842A (ja) 2017-07-27
JP2017517821A (ja) 2017-06-29
WO2015191746A8 (en) 2016-02-04
CA2949251A1 (en) 2015-12-17
US20150363197A1 (en) 2015-12-17
CN106537333A (zh) 2017-03-22
US20150363196A1 (en) 2015-12-17
JP2017519300A (ja) 2017-07-13
CN106663003A (zh) 2017-05-10
CA2949248A1 (en) 2015-12-17
EP3155513A1 (en) 2017-04-19
EP3155514A1 (en) 2017-04-19
WO2015191731A1 (en) 2015-12-17
WO2015191746A1 (en) 2015-12-17
US20150363294A1 (en) 2015-12-17
CA2949244A1 (en) 2015-12-17
EP3155512A1 (en) 2017-04-19

Similar Documents

Publication Publication Date Title
CN106537332A (zh) 软件分析***和方法
Koyuncu et al. Fixminer: Mining relevant fix patterns for automated program repair
Rolim et al. Learning syntactic program transformations from examples
Watson et al. On learning meaningful assert statements for unit test cases
US7340475B2 (en) Evaluating dynamic expressions in a modeling application
Devlin et al. Semantic code repair using neuro-symbolic transformation networks
CN108446540A (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与***
Meng et al. Improving fault localization and program repair with deep semantic features and transferred knowledge
CN103955429B (zh) 确定回归测试范围的方法及装置
Zhang et al. A survey on large language models for software engineering
GB2575496A (en) Runtime analysis
CN117195233A (zh) 面向开源软件供应链的物料清单sbom+分析方法及装置
US20230385037A1 (en) Method and system for automated discovery of artificial intelligence (ai)/ machine learning (ml) assets in an enterprise
Wu Open source software evolution and its dynamics
CN109408592B (zh) 一种决策型分布式数据库***中ai的特征工程知识库及其实现方法
Noda et al. Sirius: Static program repair with dependence graph-based systematic edit patterns
Mou et al. Visual life sciences workflow design using distributed and heterogeneous resources
Le et al. Refixar: Multi-version reasoning for automated repair of regression errors
Qi et al. Dynamically relative position encoding-based transformer for automatic code edit
Wille et al. Identifying variability in object-oriented code using model-based code mining
Romanov et al. Representing programs with dependency and function call graphs for learning hierarchical embeddings
Szalontai et al. Localizing and idiomatizing nonidiomatic python code with deep learning
Biringa et al. Automated user experience testing through multi-dimensional performance impact analysis
Kadosh et al. PragFormer: Data-driven Parallel Source Code Classification with Transformers
Fraternali et al. Almost rerere: An approach for automating conflict resolution from similar resolved conflicts

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170322