CN105229601A - 软件构建优化 - Google Patents
软件构建优化 Download PDFInfo
- Publication number
- CN105229601A CN105229601A CN201480015696.3A CN201480015696A CN105229601A CN 105229601 A CN105229601 A CN 105229601A CN 201480015696 A CN201480015696 A CN 201480015696A CN 105229601 A CN105229601 A CN 105229601A
- Authority
- CN
- China
- Prior art keywords
- data
- structure process
- input
- access operation
- file
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
一种用于优化软件构建的方法,包括收集表示由在构建进程(108)的第一执行期间实现的数据访问操作集获得的构建进程的输入的第一数据,该数据访问操作集包括文件访问操作和非文件访问操作。嵌入在构建进程内的重定向例程捕捉输入。将第一输入与表示结合构建进程的第二执行获得的输入的第二数据作比较。如果第一和第二数据不匹配,则第二数据被记录在数据存储中,并且由构建进程的第二执行生成的输出数据也被存储。如果第一和第二数据匹配,则由构建进程的第一执行生成的输出数据被用作构建进程的第二执行的输出。
Description
背景
计算机通过处理从软件源代码导出的指令集来实现任务。源代码通常由软件开发者使用一种或多种编程语言来编写。大部分编程语言具有源代码编译器以将源代码编译成计算机可读的二进制数据文件或二进制文件。
软件构建是为软件应用创建二进制文件的过程。在软件开发期间周期性地完成构建以提供二进制文件来支持软件开发团队的进一步工作。软件构建涉及执行除编译器之外的许多构建工具以处理软件应用的源代码文件和其他输入数据。构建工具的执行通常是时间密集的,因为一些软件开发项目可涉及具有复杂依赖性结构的数千甚至数十万的源代码文件。
概述
各方法、系统和计算机程序产品涉及优化软件构建。将表示构建进程的输入的数据与表示构建进程的先前执行的输入的数据作比较。当数据匹配发生时,由先前执行生成的输出数据被用于优化软件构建。
根据本公开的一个方面,收集表示由在构建进程的第一执行期间实现的数据访问操作所获得的输入的数据。该输入经由嵌入在构建进程中的重定向例程来捕捉,该重定向例程用于在构建进程的文件和非文件访问操作的援引之际执行。将所收集的数据与表示结合构建构成的第二执行所获得的输入的数据作比较以确定由第一执行生成的输出数据是否可用于构建优化。
提供概述以便以简化形式介绍将在以下详细描述中进一步描述的一些概念的选集。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
附图简要说明
为更完全地理解本公开,参考以下详细描述和附图,在附图中,相同的参考标号可被用来标识附图中相同的元素。
图1是根据一个实施例的被配置成用于软件构建的优化的示例性系统的框图。
图2是根据一个实施例的用于软件构建的优化的示例性计算机实现的方法的流程图。
图3是根据用于所公开的方法和系统或其一个或多个组件或方面的实现的一个实施例的计算环境的框图。
尽管所公开的系统和方法易于具有各种形式的实施例,但在附图中示出了(并在下文描述了)各具体实施例,其中要理解,本公开旨在是说明性的,而不将本发明限于本文所描述和示出的各具体实施例。
详细描述
描述了用于软件构建(诸如源代码构建)的优化的方法、系统和计算机程序产品。优化通过使用由源代码构建的构建进程的先前执行生成的输出数据来达成。如果对构建进程的输入与先前执行没有改变,则对先前输出数据的这一使用可能是恰适的。仅涉及构建进程的一部分的增量式构建可因而被实现以优化源代码构建。此类优化可导致更高效的构建,其中构建的输出或结果更快地变为可用。通过依赖于先前构建结果以避免对构建进程的不必要的执行来提供优化的类型可以被称为构建“记忆化”或构建进程的“裁剪”。
构建可以作为取输入集并且产生输出集的事件图或进程序列来被跟踪。使用表示在构建的每一级、阶段或事件处的输入的数据,可以作出是要执行该进程还是替代地使用先前高速缓存的、存档的、或以其他方式存储的输出结果的决策。伴随每一新的构建,如果对构建进程的输入与该构建进程的先前执行是相同的,则存档的数据被复制或者被使用来替代运行(或继续执行)该构建进程。使用此类存档的数据可导致构建速度上升至多约60%。
所公开的各实施例收集表示输入的数据,并且实现与表示构建进程的先前执行的输入的数据的比较。输入经由嵌入在构建进程中的重定向例程来捕捉。重定向例程在构建进程的执行期间实现的每一数据访问操作的援引之际被执行。重定向例程可以使得所公开的各实施例能够实现被配置成记录由在构建进程执行期间实现的数据访问操作收集的输入的指令。在一些实施例中,将构建进程的援引与构建进程的身份(例如,构建进程以及到其的所有输入的标识符)作比较。如果构建进程不匹配构建进程的任何先前执行的身份,则该构建进程被执行,身份被记录,并且任何输出被存储。
重定向例程可以被自动插入到由根构建进程或顶部构建进程所援引的子进程中。可因而针对要么直接被援引要么作为构建的一部分被间接调用的每一构建进程来收集指示输入的数据。所公开的实施例的重定向例程和其他方面可允许结合先前存在的构建系统来达成优化。所公开的实施例不限于特定类型的构建系统。所公开的实施例的优化器和/或其他组件可以与各种不同的构建系统集成。
所公开的实施例被配置成捕捉由在构建进程的执行期间实现的数据访问操作(例如函数调用)获得的各种类型的输入。数据访问操作包括文件访问操作和非文件访问操作。所公开的实施例被配置成捕捉由这两种类型的数据访问操作获得的输入。所公开的实施例因而不限于将源代码与构建进程的其他文件输入作比较。相反,构建进程的其他输入也可被比较,包括例如指示构建进程在其中执行的计算或构建环境的变量或参数。所公开的实施例可以捕捉经由构建进程的非文件访问操作获得的输入,尽管此类输入具有可变性质、源和其他特性。
所公开的实施例的与先前构建结果的比较不限于确定输入文件(诸如源代码文件)是否被改变。所公开的实施例因而解决了从非文件源获得数据的构建进程的数据访问操作可以改变构建进程的输出的可能性。通过将此类数据包括在比较中,是否要执行特定构建进程的决策可因而变得更准确。
所公开的实施例可被配置成解决由对来自非文件访问操作的数据的比较所引起的挑战。尽管收集表示非文件访问操作的输入的数据可指示更准确且有用的比较,但此类数据的使用也可导致对构建进程的不必要的执行。例如,一些环境变量(诸如文件夹或文件路径)或其它数据位置可以指示用户名或被指派给计算机的名称。尽管此类变量可以改变构建进程的输出,但对构建进程的先前执行的输出的使用可能仍然是恰当的。所公开的实施例可被配置成通过生成例如一个或多个输入的机器不可知的或机器无关的表示来解决此类环境变量。此类机器无关的表示则可以与来自先前构建的此类输入的经类似转换的表示作比较。
对此类机器无关的表示的使用可允许在比较中考虑环境变量而不会过分地限制对先前输出的使用。例如,来自先前构建的输出数据可因而被多个开发者使用。开发者团队的构建可因而对输出数据的公共高速缓存作出贡献并且稍后使用该公共高速缓存,对其的输入不再指示具体的开发者或从中生成输出数据的机器。所公开的实施例可因而被配置成通过允许任何数目的开发者利用来自先前构建的高速缓存的数据来支持用于给定软件产品的多开发者环境。
在一些实施例中,配置文件或其他配置数据被访问以确定是否要试图优化特定构建进程。优化可以结合时间密集的构建进程而变得尤其有用。相反,一些构建进程可以如此快地执行以使得复制来自构建进程的先前执行的存档结果的过程可以花费与构建进程的执行时间一样长的时间或者甚至更长的时间。可以依赖于配置数据而将这些和其他构建进程排除,诸如并非确定性地行为表现的那些进程。确定性进程被认为是每次给予该进程相同的输入集就生成相同输出的那些进程。然而,一些非确定性进程可以由所公开的实施例来优化。例如,在一些情形中,不显著的和/或非实质性的某些类型的输出差可以被忽略,包括例如时间戳和全局唯一标识符(GUID)。
尽管在本文中对各个构建进程或工具进行引用,但所公开的实施例不限于任何特定类型的构建、构建进程、或构建工具。例如,除源代码构建之外的构建可以由所公开的实施例优化。例如,执行例如二进制文件的转换的构建可以被优化。所公开的实施例提供的构建优化不限于特定构建引擎或构建框架。所公开的实施例不限于任何特定操作系统、环境、平台、或计算基础结构。经由所公开的实施例处理的软件产品的性质可改变。例如,软件产品不必涉及完全或完整的软件应用,诸如发布以进行生产的集成软件构建。相反,软件产品可涉及软件应用或系统的分支或其他组件。所公开的实施例可用于构建各种各类型的软件产品,它们不限于任何特定的操作系统、操作或计算环境或平台、或源代码语言。
所公开的实施例不限于特定类型的构建或构建上下文。由所公开的实施例收集的数据事实上可比较指示构建或构建上下文的类型的数据以更准确地确定是否要使用先前构建的输出。
图1描绘了其中构建待开发的一个或多个软件产品的环境100。环境100是可包括一个或多个计算机或计算系统(例如在客户端-服务器布置中配置)的计算环境。在这一实施例中,环境100包括被配置成根据存储在源代码储存库104中的源代码来构建多个二进制文件或二进制执行件的构建系统102。源代码储存库104可以与构建系统102集成到任何期望的程度。例如,源代码储存库104不必是如图所示的构建系统102的组件。在一些情形中,构建系统102从一个或多个源控制服务获得源代码文件。源代码可以结合任何类型的源控制系统或框架来开发。源代码可以用任何一种或多种语言来编写。
构建系统102或其任何组件可包括计算机或计算系统,它们的示例在以下结合图3来描述。计算机或计算系统可以与任何一个或多个本地储存库或数据存储集成到任何期望的程度。计算机或计算系统可包括由构建系统102的一个或多个引擎、工具、模块或其他单元的指令来配置的一个或多个处理器或处理系统。
构建系统102包括具有多个构建工具的构建引擎106,构建工具被配置成编译并且以其他方式处理源代码和其他输入数据以生成和打包二进制执行件。构建工具可涉及各种不同的功能,包括例如源代码编译、资源编译、链接、和资源生成。任何构建引擎、软件、工具和/或基础结构可在构建系统102中使用。在一个示例中,构建系统102利用MSBuild构建平台(来自微软公司),该平台可经由Visual集成开发环境可用或与其结合。也可使用其他构建系统和/或集成开发环境。例如,构建系统102可以经由云或其他联网计算布置来提供或支持,诸如在美国专利公开No.2013/0055253(“Cloud-basedBuildService(基于云的构建服务)”)中所描述的基于云的系统,该专利通过援引全部纳入于此。
经由执行多个构建进程108来提供构建工具。每一构建进程108可以提供一个或多个构建工具。每一构建进程108可包括要在构建期间运行的可执行程序或者可以由该可执行程序来提供。构建进程108的示例包括原生代码编译器(例如cl.exe)、链接器(例如link.exe)、汇编器(例如ml.exe和ml64.exe)、模型生成进程(例如instancetool.exe)、构建引擎(例如msbuild.exe)、托管代码的编译器(例如csc.exe)、资源生成器(例如rsgen.exe)以及资源编译器(例如cvtres.exe)。可以由构建进程108提供更多、更少或替换的构建工具。构建可因而涉及执行任何数目的此类构建进程108。构建进程108可基于环境100的各种特性来变化,该特性包括例如操作系统、源代码语言、以及环境100的处理器或处理系统的各种特性,诸如处理器架构(例如32位或64位架构)。构建进程的以上提及的示例中的一者或多者被配置成用于在运行操作系统之一并且处理用例如C++或C#编程语言编写的源代码的环境中操作。其他构建进程可用于提供用于其他环境的此类工具。
构建进程108中的一些可以被其他构建进程108调用(call)或援引(invoke)。例如,编译进程csc.exe通常作为进程msbuild.exe的派生或子进程来被调用。构建进程108可因而根据如图1所示的树或其他依赖性图来执行。构建的根或顶级进程可以调用任何数目的子进程,每一子进程可进而调用其他子进程。依赖性图可因而具有任何级数。构建可具有任何数目的根或顶级构建进程。依赖性图可以在构建之间变动。例如,在一些情形中,构建进程可以在一个构建中在其自身上执行,而在另一构建中作为一子进程来执行。所公开的实施例不限于构建进程108的特定布置,并且被配置成实现自动传播通过该布置以支持每一级处的优化的记录算法,如下所述。
每一构建进程108包括用于获得输入的数据访问操作。输入提供要由构建进程108处理的数据。每一构建进程108的相应指令可指定各种类型的任何数目的数据访问操作。数据访问操作可包括或涉及在执行构建进程108以获得输入数据期间被援引的应用编程接口(API)操作或例程。例如,在环境中涉及获得输入文件的一个API操作是OpenFileAPI。涉及获得非文件输入数据的一个API操作是用于获得当前用户或其他环境变量的GetEnvironmentVariable或者用于从注册表进行读取的RegOpenKeyEx。构建进程108可援引非API操作以访问要被处理的数据,诸如从输入管线进行读取或者访问配置数据。
由构建进程108援引的API或其他数据访问操作可被配置成获得不同类型的输入数据。一些数据访问操作是被配置成获得一个或多个输入文件的文件访问操作。输入文件可以是源代码储存库104中的源代码文件110,但也可获得其他类型的输入文件,诸如二进制执行件和资源文件。输入文件可包括用任何类型的语言、结构或框架来布置的任何类型的数据。输入的位置因而可以变动。例如,一些输入可以位于注册表中。
由构建进程108援引的一些数据访问操作是非文件访问操作。非文件访问操作被配置成获得非文件输入数据,例如,在表格中而非文件中提供的数据。在图1的实施例中,此类非文件输入数据包括表示环境100的一个或多个参数112的数据、表示构建系统102的一个或多个配置参数114的数据、以及呈现给构建引擎106的数据,例如作为经由构建系统102的命令行116或其他用户界面或者由环境100以其他方式呈现的自变量。环境100的参数112可以指示环境100的各种特性,包括例如环境100的计算机或计算系统的网络位置。构建系统102的配置参数114可涉及针对特定类型的构建(例如调试构建或发布构建)来定制构建系统102的操作。命令行116可用于指定用于构建进程108中的一者或多者的任何自变量或其他参数。自变量可以结合命令来指定以发起构建,发起构建进程108中的一者或多者的执行,和/或配置构建、构建引擎106和/或构建进程的一个或多个方面。在一些情形中,配置参数114中的一者或多者经由命令行116来指定,但也可用各种其他方式来指定或设立。
可以经由构建进程108的非文件访问操作来获得更多、更少或替换类型的非文件输入数据。例如,非文件数据可指示用户名。非文件输入数据还可或替换地包括表示文件名称或文件夹路径、目录、或在环境100内或者相对于环境100的其他存储位置的数据。例如,非文件输入数据可表示源代码储存库104的文件路径118和/或目录120,但也可指定其他存储位置。
非文件访问操作可被配置成获得用于构建进程108的各种类型的输入数据。输入数据可包括一个或多个变量、参数、代码、或其他数据元素。数据元素的布置、格式、或其他特性可以变动。例如,数据元素可以被编码。配置参数114可包括表示构建上下文、构建类型、或构建的开发阶段(例如调试构建或发布构建)的一个或多个代码。
构建进程108由构建引擎106的执行生成用于软件产品的多个二进制文件121。在这一示例中,二进制文件121被存储在环境100的构建储存库122中。构建的结果可包括除二进制文件121之外的输出数据。
构建的输出数据可基于由文件访问操作或非文件访问操作获得的输入而变动。由这些操作获得的输入因而由构建系统102的优化器124来收集和处理以支持在将来构建中对过去或先前输出数据的可能的重新使用。在这一实施例中,优化器124被配置为构建系统102的分立组件,但它也可与构建系统102的一个或多个其他组件或单元(例如,包括构建引擎106)集成到任何期望程度。
优化器124用于执行用于每一构建进程108的构建优化器指令。构建优化器指令被配置成引导表示在构建进程108的执行期间实现的数据访问操作获得的输入的数据集合。构建优化器指令被进一步配置成引导此类数据与表示结合构建进程108的后继执行获得的输入的数据的比较。优化器124被配置成利用重定向工具126,重定向工具126被配置成将挂钩或其他重定向例程嵌入或纳入到每一构建进程108中以供在构建进程108内的每一数据访问操作的援引之际被执行。每一次构建进程108试图获得输入(例如经由文件访问操作或经由非文件访问操作),重定向工具126实现重定向例程以允许输入被优化器124捕捉。
在一些实施例中,重定向工具126可以使用来自微软公司的Detours软件工具。Detours软件工具包括用于植入在运行操作系统之一的计算机或计算系统上的各种函数的库。Detours软件工具可以通过重写目标函数映像来截取函数。Detours软件工具可用于挂钩文件访问和非文件访问API以及其他操作以跟踪函数做了什么。Detours软件工具可以提供一种用于在构建进程108和操作系统之间插入优化器124的集合功能的技术。其他软件工具可用于实现重定向工具126,包括例如可从微软公司获得的并且在http://research.microsoft.com/en-us/projects/drawbridge/以及http://www.microsoft.com/en-us/windows/enterprise/products-and-technologies/virtuali zation/app-v.aspx处描述的Drawbridge和其他虚拟化工具。关于在构建期间使用跟踪工具(诸如Detours软件工具)的进一步细节在美国专利No.7721272(“TrackingFileAccessPatternsDuringaSoftwareBuild(在软件构建期间跟踪文件访问模式)”)以及美国专利公开No.2012/0260240(“SoftwareBuildOptimization(软件构建优化)”)中阐述,这些专利通过援引被整体纳入于此。
优化器124可包括或访问被配置成生成或确定所捕捉的输入的标识码或其他标识符的一个或多个单元、指令、或模块。该标识符接着可用于更高效地执行与在构建进程108的先前执行期间获得的输入数据的比较。在图1的实施例中,优化器124包括散列计算器128以确定用于每一个相应的所捕捉的输入的散列码。散列码基于输入的内容数据来生成。例如,文件的整体内容被读取并且被馈送进入散列计算器128。如果内容数据在构建进程108的执行之间改变,则这些改变被反映在不同散列码中。
各种不同的散列算法可以被散列计算器128使用。在一些实施例中,SHA-1散列算法被使用。其他实施例可以使用MD5散列算法。
每一输入的标识码可对应于散列码或者散列码与其他数据的组合。例如,散列码可以与文件路径数据相组合以形成每一文件输入的标识符。其他类型的数据可以与散列码相组合。
散列计算器128也可用于生成散列码以用作每一构建进程108的标识符。优化器124可以使用此类标识符以更高效地确定构建进程108中的特定的一个是否先前已经被执行并且因而已经记录有用于支持比较的输入数据(以及所存储的输出数据),如下所述。
替换地或附加地,优化器124可依赖于文件系统工具130来确定所捕捉的输入的标识符。在一些情形中,文件系统工具130被提供为环境100的文件系统和/或操作系统的组件。文件系统工具130被配置成生成唯一地标识存储在文件系统内的文件的每一版本的版本化串。优化器124可以访问文件系统以基于版本化串来确定标识符,并且接着在与先前执行的标识符的比较中使用该标识符。在一些情形中,文件系统工具130可以是或者包括文件系统或操作系统的日志特征,诸如操作系统的NTFS文件系统的日志工具。此类日志工具为每一文件提供唯一序列号(USN)。在一些实施例中,文件系统可以提供USN以及每一文件的散列或其他标识符。
由文件系统工具130生成的USN或其他标识符可以与散列计算器128相组合来使用。例如,优化器124可检查以确定输入的USN值是否已经改变,并且如果USN不匹配先前USN值中的一者则仅计算散列码。可以访问将USN值映射到散列码的数据库或其他表,它们的示例在下文描述。
在一些实施例中,确定每一所捕捉的输入的标识符。替换地,确定每一文件输入的标识符,尽管非文件输入数据可以由其他数据来表示,诸如非文件输入数据本身或表示非文件输入数据的其他元数据。
确定标识符可包括在例如散列码的计算之前对输入数据的转换或预处理。在图1的实施例中,优化器124包括用于确定一个或多个输入的机器不可知的或机器无关的表示的转换器132。机器无关的表示接着可以由散列计算器128或其他码确定模块、单元或指令来处理。在其中输入数据表示诸如路径名称之类的环境变量的非文件输入示例中,转换器132被配置作为或者包括路径转换器,该路径转换器用于移除路径中对环境100的计算机或机器特定的那部分,从而保留路径名称中对于构建系统102的每一安装而言通用的那些部分。转换器132可被配置作为或者包括其他类型的转换器或其他规范化单元,它们涉及概括、泛化、或以其他方式规范化其他环境变量或构建配置参数。此类规范化也可用于移除输出数据的非确定性方面,包括如下所述的随机化。数据转换可因而与上述基于路径的示例有所变化。其他示例转换可涉及用户名、机器名称、构建版本(例如如果构建版本被自动增量)、以及临时文件名(其可以由机器/援引不可知的记号来替换)的移除。
机器无关的表示可有助于支持其中多个用户并且因而多个计算机正在发起软件产品的构建的开发团队。在没有输入数据到机器无关的表示的转换的情况下,构建进程108的当前执行的输入数据与构建进程108的先前执行的输入数据的比较将指示该输入数据是不同的。构建进程108接着将会被执行,而不管输入数据中的非实质性差异。相反,在具有输入数据的转换的情况下,构建可因而经由所公开的实施例被优化,而不管构建系统102或环境100的哪个开发者(或计算机或机器)或实例发起该构建。机器无关的表示数据以及由优化器124记录和存储的其他数据可以被提供给可由整个开发团队访问并且与整个开发团队处于通信的联网数据存储。
在图1的实施例中,优化器124包括控制单元或控制器134,其用于实现比较和后继决策逻辑以结合对执行构建进程108的后继请求来确定是否要重新运行构建进程。重定向工具126可包括对控制器134的函数调用或其他引用以引导控制器134处理在构建进程108的执行期间捕捉的输入数据。替换地或附加地,控制器134的比较和/或决策逻辑被纳入重定向工具126的代码中或者由重定向工具126的代码处置。无论用哪一种方式,比较和决策逻辑结合对构建进程108的执行的请求来实现。该请求可以是用户发起的或者自动发起的(例如经由对构建内涉及的任何构建进程的调用或其他引用,诸如在另一构建进程内)。
控制器134还可被配置成一旦构建进程108的输入已知则获得构建进程108的输入数据而不依赖于重定向工具126。给定构建进程108的标识符,控制器134可以基于先前为构建进程108记录的数据来确定用于比较的输入。在其他实施例中,优化器124的任何其他单元、模块或指令可用于在构建进程108的输入已知时确定和获得构建进程108的输入。
控制器134将表示经由重定向工具126捕捉的输入的标识码、标识符、或其他数据(例如,当前输入标识符数据)与表示结合构建进程108的一个或多个先前执行获得的输入的数据(例如过去输入标识符数据)进行比较。如果当前输入标识符数据不匹配过去输入标识符数据中的任何实例,则构建进程108被执行。由构建进程108基于当前输入集所生成的所得输出数据被存档、高速缓存、或以其他方式被存储以供在构建进程的将来执行中可能的重新使用。此类存储可以除构建储存库122中的存储之外作为构建进程108的输出。控制器134还引导记录器136将当前输入标识符数据记录在数据存储138中。当前输入标识符数据可以与构建进程108的散列码或其他标识符相关联地存储。构建进程108的标识符可以用作对过去输入标识符数据的索引。
输出数据也可由控制器134和/或记录器136存储在数据存储138中。例如,输出数据可以与当前输入标识符数据相关联地被存储在表中。替换地,输出数据被存档在与数据存储138分开的数据存储中,诸如构建储存库122。输出数据可包括除二进制执行件或二进制文件之外的数据。例如,构建进程108可以生成返回码、输出流、以及其他类型的输出数据。此类非文件输出可以被存储在作为当前执行的元数据的构建进程的当前执行的身份记录内的数据存储138的数据库中。
如果当前输入标识符数据匹配过去输入标识符数据的实例,则由构建进程的先前执行生成的输出数据(即响应于匹配过去输入标识符数据)被用作构建进程108和构建的输出以代替重新运行或重新执行或者以其他方式继续构建进程的执行。在图1的实施例中,控制器134可以访问其中存档或以其他方式存储有过去输出数据的数据存储138或其他数据存储以获得过去输出数据。过去输出数据接着可以由控制器134复制到构建储存库122中的恰适位置(例如,构建进程108原本在执行期间会将输出数据存储到其中的位置)。
数据存储138可以是环境100中用于构建系统102的特定实例的本地数据存储。例如,数据存储138可包括被配置成供构建系统102访问的数据库,但也可使用其他配置、数据结构和布置。例如,可以使用非数据库存储,包括例如紧邻源代码和/或非数据库系统(诸如WindowsAzureTM表存储系统)的本地存储。构建进程108的标识符(例如散列码)及其输入可以作为元数据被存储在数据库中。此类元数据可因而与输出数据(例如二进制执行件和返回码)分开存储。在其他实施例中,元数据和输出数据被存储在公共数据存储中。优化器124的记录器136或其他组件可包括或利用来自微软公司的SQL数据库管理系统,但也可使用其他数据库管理系统。例如,可以使用来自微软公司的SQLAzureTM数据库管理系统,但也可使用其他数据库管理系统或数据存储架构。也可替换地使用除WindowsAzureTM托管服务之外的托管服务。
为了支持与多个开发者或多个构建机器的过去输入标识符数据的比较,数据存储138的数据库可以经由因特网或其他网络连接142被复制到云数据存储140或其他联网数据存储。复制可以由优化器124的记录器136或其他组件来引导或实现。替换地,数据存储138可以被配置成用于自动化复制。云数据存储140可以使用WindowsAzureTM托管服务,但是也可使用其他服务。
为了支持构建进程108的多级的输入数据的捕捉和比较,重定向工具126或其他重定向工具指令被注入到由构建进程108在构建进程108的执行期间调用的每一子进程中。优化器124的模块、单元或其他指令可因而被递归地实现以覆盖构建进程108的树或依赖性图群。重定向工具指令可以被添加到树的根或顶级节点(例如在初始的预构建配置期间),并且用于在其中援引的每一子进程中进行复制。
记录器136可被配置成聚集构建进程108的每一树的输入标识符数据以使得比较可以是集体比较。比较其标识符数据的输入可因而对应于在树中被援引的个体构建进程108的所有外部输入的联合。输入标识符数据的聚集可包括排除任何中间或非外部输入。例如,树中的构建进程108中的一者的输出可以构成构建进程108中的另一者的输入。此类共享输入/输出数据可以从聚集中被排除。在其中外部输入之一在树的执行期间被修改的情形中,记录器136可被配置成捕捉此类输入的初始状态并且忽略经修改的状态。在这些以及其他情形中,记录器136可以捕捉指示树的构建进程108按其来执行的次序(或粗略次序)的数据。
在一些实施例中,构建系统102被配置成使得上述优化仅针对构建进程108中的一些来实现。仅构建进程108的树的根或顶级节点的子集可适用于优化。例如,因为一个树的根可对应于另一较大树的仅仅一个节点或部分,所以中间或部分优化可涉及较小的树而非整个较大的树。其他部分优化可以以被认为(例如在执行时间方面)足够昂贵的构建进程108为目标以保证优化技术的应用。例如,某些类型的编译和链接进程可能足够得时间密集以保证上述存档和后继比较。另一方面,开发者可以选择不优化具有相对较快执行时间的其他构建进程108。例如,主要涉及文件复制操作的一些构建进程108可能比优化例程(也可涉及文件复制)更快地执行。这些构建进程108可以由配置列表144从用于可能优化的处理中排除。例如,配置列表144可以在可扩展标记语言(XML)文档中阐明被排除的进程。可以使用其他数据结构或文件。配置列表144可替换地或附加地标识要被包括的构建进程。配置列表144中的条目可以基于先前构建中收集的历史或经验数据。
配置列表144可以由优化器124在操作期间访问。例如,优化器124可咨询配置列表144以确定是否要检查数据存储138(或数据存储140)以确定是否已经存储了用于当前构建进程108的数据。作为结果,树内的子进程可以从处理中被排除。替换地或附加地,重定向工具126或其他重定向或优化器指令可被配置成在将重定向指令注入子进程中之前咨询配置列表144。
配置列表144也可用于排除非确定性进程。例如,将随机化引入构建输出数据中的进程可以被排除。配置列表144可依赖于或纳入关于一个构建进程所引入的随机化可如何导致对来自其他构建进程的输出的进一步随机化的专家知识或其他信息。在一替换实施例中,所公开的实施例可包括一个或多个规范化工具以移除输入转换中的此类随机化和/或经由输出的规范化。其他类型的构建进程也可被排除,包括例如利用并未很好适用于以上引用的重定向技术的输入/输出管道等的那些类型的构建进程。
图2描绘了用于优化源代码构建的一示例性方法200。该方法是计算机实现的。例如,图1所示的构建系统102的一个或多个计算机可被配置成实现该方法或其一部分。每一动作的实现可通过由构建系统102的处理器和/或另一处理器或处理系统执行的相应计算机可读指令来指导。可以在方法中包括更多、更少或替换的动作。例如,方法200不必包括确定构建进程(例如,图1的构建进程108之一)是否被排除。
方法200可开始于涉及接收要发起软件产品的构建或要执行构建进程的请求的一个或多个动作。例如,用户可以访问由构建系统102(图1)生成的用户界面以提交该请求。替换地,该方法可以由一事件自动地发起或触发,诸如一个或多个源代码文件的录入。该方法不必由用户请求来发起。例如,该方法可以由服务或其他计算系统发起。在一些实施例中,以下描述的多个动作可以在构建的发起之前被实现。例如,对CreateProcess进程的援引可以被重定向以实现方法200的一个或多个动作,包括例如以下结合注入重定向例程代码、排除分析、和构建进程的标识来描述的动作。
在图2的实施例中,方法200开始于动作202,其中重定向例程代码或指令被注入或以其他方式被纳入到构建进程中。该构建进程可以是构建进程树的根或顶级节点。在其他情形中,根构建进程已经用重定向例程代码来配置。一旦重定向指令存在于根节点中,方法200的实现可以针对任何数目的构建进程树被重复。
在动作204中,作出关于当前构建进程是否要从记忆化或优化中排除的确定。该确定可基于配置数据来作出,该配置数据诸如经由配置列表144(图1)提供的数据。动作204在一些情形中可以不被实现,例如在树的根节点中。即便当前进程被排除,由当前构建进程援引的一个或多个子进程可能不被排除。所以排除当前进程可涉及继续方法200的执行以便以下结合动作218所描述的递归功能被实现以处理(例如,注入重定向代码、实现比较等)任何子进程。
如果当前构建进程不被排除或者以其他方式经受优化,则在动作206中可以确定该构建进程的标识符。该标识符可以是基于构建进程的内容(例如二进制数据)在动作208中生成的散列或其他标识码。动作208可以在构建的发起之前被实现。该散列或其他标识符可用作预检以确定当前构建进程是否已经被执行并且因而任何过去构建输出数据是否可供用于重新使用。
在一些情形中,动作206可替换地或附加地实现另一预检以确定任何过去构建输出数据是否可供使用。在图2的实施例中,动作206包括访问或标识要由该构建进程处理的源代码文件分支或其他集合。软件产品的分支可以经由构建的命令行或其他输入自变量或配置参数来指定。对分支的标识可用于确定该构建进程中的任一者是否已经被执行。在一些实施例中,预检可用于避免一个或多个构建进程的散列算法的实现。例如,一旦预检指示该分支要被处理,则该方法可继续至用于在该构建中被援引的所有构建进程的记录模式。在一替换实施例中,如果例如不同分支包含类似代码,则动作206可被配置成共同考虑两个或更多个分支。在一些情形中,所公开的实施例可因而跨多个分支被应用。
对于已知(例如先前执行的)构建进程,在动作210中可以确定和获得该构建进程的数据访问操作的输入。在构建进程的第一执行期间,输入可能由于例如由当前构建进程援引的子进程中实现的多个数据访问操作或者因为当前构建进程最近才启动而尚不可知。
在决策框212中,当前构建进程的标识符接着可以与存储在数据库中的数据或其他经记录的数据(诸如数据存储138)作比较以确定是否有来自构建进程的一个或多个过去执行的任何数据可用。如果构建进程正被第一次执行,则数据将需要被记录。替换地或附加地,决策框212可确定是否已经为正被处理的分支或其他源代码集记录了任何数据。
如果还需要为任一构建进程记录数据,则控制传递至动作214,其中当前构建进程被执行并且为可能的后继使用存储输出。输出数据可以被本地地存储在例如数据存储(诸如数据存储138(图1))和/或远程数据存储(诸如云数据存储140(图1))中。在构建进程的执行期间,构建进程的输入经由重定向例程来捕捉,如上所述。用于获得输入的数据访问操作的性质可以变动,如上所述。文件和非文件访问操作的输入都被捕捉。指示每一所捕捉的输入的数据接着可以如上所述地被处理以生成要在后继比较中使用的标识符。例如,在一些情形中,散列或其他标识码被计算或确定,如上所述。此类计算可以在动作216中的转换之后,动作216中的转换用于生成输入数据的机器无关的表示,如上所述。
当子进程在构建进程的执行期间被援引时,方法200可以根据动作218被递归地实现。对于在构建进程的执行期间被援引或以其他方式被调用的每一子进程,结合动作202重定向指令被注入或纳入到该子进程中。重定向指令包括用于此类自动化纳入的指令。重定向指令可因而支持仅将代码添加到树的根或顶级节点来处理构建进程的整个依赖性图或树。随着针对树的每一级实现方法200,在动作220中针对每一子进程和构建进程聚集输入数据的输入标识符。构建进程的输入标识符可因而表示构建进程和由其援引的任何子进程的共同输入集。在其他情形中,一个或多个子进程不是确定性的或者以其他方式被排除,在这种情形中,共同输入集不覆盖每一个子进程。
如果已经针对构建进程和源代码的特定分支记录了数据,则控制传递至动作222,其中收集构建进程的输入的标识符数据。输入集合可包括经由重定向工具的数据捕捉,如上所述。替换地,输入可以通过确定哪些输入被构建进程使用来获得。在一些情形中,已经结合动作210来作出该确定。该确定可包括数据库查询以标识构建进程的输入。一旦收集或以其他方式获得了输入数据,则在动作224中可以实现至输入数据的机器无关的表示的转换,并且在动作226中确定散列码或其他标识符。在一些情形中,从具体(例如本地)表示到机器无关的表示的转换可以针对构建进程的当前执行来实现。可以在过去输入数据上实现相反方向上的另一转换(例如从通用路径到具体、本地路径)以支持例如寻找当前执行的输入文件。
接着,在动作228中访问数据库(诸如数据存储138(图1))以支持标识符与构建进程的先前执行的标识符的比较。替换地或附加地,动作228包括从远程或联网数据存储(诸如云数据存储140(图1))获得数据。此类数据可包括从由例如其他用户或构建机器发起的对构建进程的附加执行所生成的输出数据。来自联网数据存储的数据可以被同步、预填充(例如在构建的发起之前)、或者以其他方式被纳入到数据存储138中以供比较中使用。在一些情形中,此类同步或纳入可以更早地被实现,包括例如在构建的发起之前或者作为方法200的初始步骤。可以查询数据库以确定是否存在匹配该标识符的记录或条目。如果找到匹配,则决策框230将控制传递至动作214以供执行构建进程并且记录输入标识符,如上所述。输入标识符(包括例如散列码)可能已经结合动作226被确定。如果找到匹配,则控制传递至动作232,其中由构建进程的先前执行生成的输出数据被用作构建进程的当前执行的输出。因为先前执行的输入匹配当前执行的输入,所以先前输出可以被使用以代替重新运行或重新执行或以其他方式继续构建进程的执行。先前输出可以匹配在构建进程被允许执行的情况下原本会被生成的输出。在一些实施例中,可以提供一进程以为构建进程的当前执行生成退出码。该退出码可模仿构建进程的相匹配的先前执行的退出码,并且可以满足来自调用当前进程的父进程的预期。
方法200可包括涉及记录未被找到的那些文件(尽管试图访问此类文件)的指示的一个或多个动作。例如,如果动作228中试图访问所记录的标识符数据失败,则通过动作214中对构建进程的执行而在稍后创建的记录可包括某些文件未被找到或不可访问的指示。
该方法的动作的顺序可以与所示的示例有所不同。例如,在一些实施例中,在发起构建的执行之前为构建进程、源代码文件或其他输入实现散列算法。此类散列码的预计算可以改善优化器的性能。在一些实施例中,预计算可以作为同步规程的一部分来实现,在该同步规程中,例如,从本地储存库检索源代码、二进制执行件、或其他输入。该同步规程可替换地或附加地包括从联网数据存储(诸如云数据存储140(图1))检索数据以更新或提供本地存储的数据。
参考图3,示例性计算环境300可被用来实现上述方法和/或系统的一个或多个方面或元素。计算环境300可以由环境100(图1)或其一个或多个元件来使用或被合并到其中或者与其相对应。例如,计算环境300可用于实现构建系统102(图1)、构建引擎106、优化器124、或构建系统102的其他组件。计算环境300可被用作或包括为上述元素或系统组件中的任一个的客户端、网络服务器、应用服务器、或者数据库管理系统或其他数据存储管理器。计算环境300可被用来实现参考图2描述的动作中的一者或多者。
计算环境300包括具有计算机310形式的通用计算设备。计算机310的组件可包括但不限于:处理单元320、系统存储器330以及将包括系统存储器在内的各种系统组件耦合到处理单元320的系统总线321。系统总线321可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。作为示例而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也称为夹层(Mezzanine)总线)。计算机310的单元、组件和其他硬件可以与所显示的示例不同。
计算机310通常包括各种被配置来存储指令和其他数据的计算机可读存储介质。这样的计算机可读存储介质可以是可由计算机310访问的任何可用介质并且包括易失性和非易失性介质、可移动和不可移动介质两者。这样的计算机可读存储介质可包括与通信介质区分开的计算机存储介质。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或能用于存储所需信息且可以由计算机310访问的任何其他介质。
系统存储器330包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)331和随机存取存储器(RAM)332。包含诸如在启动期间帮助在计算机310内的元件之间传输信息的基本例程的基本输入/输出系统333(BIOS)通常存储在ROM331中。RAM332通常包含处理单元320可立即访问和/或当前正在操作的数据和/或程序模块。作为示例而非限制,图3例示出了操作系统334、应用程序335、其它程序模块336和程序数据337。例如,应用程序335中的一个或多个可涉及实现构建系统102、构建引擎106、优化器124、和/或上述系统和方法的任何指令集的一个或多个模块或其他组件。在这一或另一示例中,上述存储器或数据存储设备中的任何一个或多个指令集可被存储为程序数据337。
操作系统334、应用程序335、其他程序模块336以及程序数据337中的任何一个或多个可被存储在片上系统(SOC)上或经由SOC来实现。上述模块中的任一个可经由一个或多个SOC设备来实现。上述模块被集成到SOC或其他设备的程度可以变化。
计算机310也可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图3示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器341,从可移动、非易失性磁盘352中读取或向其写入的磁盘驱动器351,以及从诸如CDROM或其他光学介质等可移动、非易失性光盘356中读取或向其写入的光盘驱动器355。可以在示例性操作环境中使用的其他可移动/不可移动、易失性/非易失性计算机存储介质包括,但不限于,盒式磁带、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器341通常通过诸如接口340之类的不可移动存储器接口连接到系统总线321,并且磁盘驱动器351和光盘驱动器355通常通过诸如接口350之类的可移动存储器接口连接到系统总线321。
上文讨论并在图3中示出的驱动器及其相关联的计算机存储介质为计算机310提供了对计算机可读指令、数据结构、程序模块和其他数据的存储。例如,示出硬盘驱动器341储存操作系统344、应用程序345、其它程序模块346和程序数据347。这些组件可以与操作系统334、应用程序335、其他程序模块336,以及程序数据337相同,也可以不同。在此操作系统344、应用程序345、其它程序模块346以及程序数据347被给予了不同的编号,以至少说明它们是不同的副本。在一些情形中,用户可以通过输入设备,诸如键盘362和定点设备361(通常指的是鼠标、跟踪球或触摸垫)向计算机310输入命令和信息。其他输入设备(未显示)可包括话筒(例如,用于语音控制)、触摸屏(例如,用于基于触摸的手势和其他移动)、测距传感器或其他相机(例如,用于手势和其他移动)、操纵杆、游戏垫、卫星碟和扫描仪。这些以及其它输入设备通常通过耦合到系统总线的用户输入接口360连接到处理单元320,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)之类的其它接口和总线结构来连接。在一些情形中,监视器391或其他类型的显示设备也经由诸如视频接口390之类的接口连接至系统总线321。除了监视器以外,计算机还可包括诸如打印机396和扬声器397之类的其它外围输出设备,它们可通过输出外围接口395来连接。
计算机310可使用到一个或多个远程计算机(诸如,远程计算机380)的逻辑连接而在联网环境中操作。远程计算机380可以是个人计算机、服务器、路由器、网络PC、对等设备或其他常见网络节点,且通常包括上文相对于计算机310描述的许多或所有元件,但在图3中只示出存储器存储设备381。逻辑连接包括局域网(LAN)371和广域网(WAN)373,但也可以包括其他网络。此类联网环境在办公室、企业范围的计算机网络、内联网和因特网中是常见的。
当在LAN联网环境中使用时,计算机310通过网络接口或适配器370连接到LAN371。当在WAN联网环境中使用时,计算机310通常包括调制解调器372或用于通过诸如因特网等WAN373建立通信的其它手段。调制解调器372可以是内置的或外置的,可经由用户输入接口360或其它适当的机制连接到系统总线321。在联网环境中,相关于计算机310所示的程序模块或其部分可被存储在远程存储器存储设备中。图3示出了远程应用程序385驻留在存储器设备381上。所示的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其它手段。
图3的计算环境300只是合适的计算环境的一个示例,并且不旨在对此处的技术的使用范围或功能提出任何限制。也不应该将计算环境300解释为对示例性操作环境300中示出的任一组件或其组合有任何依赖性或要求。
此处所描述的技术可用各种其他通用或专用计算系统环境或配置来操作。适合与此处的技术一起使用的公知的计算系统、环境和/或配置的示例包括,但不限于,个人计算机、服务器计算机(包括服务器-客户端体系架构)、手持式或膝上型设备、移动电话或设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型机、大型计算机、包含上述系统或设备中的任一个的分布式计算机环境等。
本文的技术可在诸如程序模块等由计算机执行的计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。本文的技术也可以在任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。
尽管已经参考具体示例描述了本发明,其中这些示例旨在仅仅是说明性的而非本发明的限制,但本领域普通技术人员将明白,可以对所公开的实施例作出改变、添加和/或删除而不背离本发明的精神和范围。
上述描述只是出于清楚理解的目的给出的,并且不应从中理解出不必要的限制,因为本发明的范围内的修改对本领域普通技术人员而言是显而易见的。
Claims (10)
1.一种用于优化软件构建的计算机实现的方法,所述计算机实现的方法包括:
收集表示所述软件构建的构建进程的多个输入的第一数据,所述多个输入由在所述构建进程的第一执行期间实现的数据访问操作集获得,所述数据访问操作集包括文件访问操作和非文件访问操作,其中收集所述第一数据包括经由嵌入到所述构建进程内的重定向例程来捕捉所述多个输入,所述重定向例程用于在所述文件和非文件访问操作的援引之际执行;
将所述第一数据与第二数据作比较,所述第二数据表示结合对所述构建进程的第二执行的请求获得的多个输入;
如果所述第一数据和所述第二数据不匹配,则将所述第二数据记录在数据存储中并且存储由所述构建进程的第二执行生成的输出数据;以及
如果所述第一数据和所述第二数据匹配,则将所述构建进程的第一执行生成的输出数据用作所述构建进程的第二执行的输出以替代继续所述构建进程的第二执行。
2.如权利要求1所述的计算机实现的方法,其特征在于,所述数据访问操作集包括涉及获得所述软件构建在其中执行的计算环境的变量的非文件访问操作。
3.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括将由所述构建进程的第一执行生成的输出数据存储在联网数据存储中。
4.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括访问联网数据存储以获得由所述构建进程的第三执行生成的输出数据。
5.如权利要求1所述的计算机实现的方法,其特征在于,所述数据访问操作集包括涉及确定经由所述构建进程的命令行援引中的自变量来指定的软件构建配置参数的非文件访问操作。
6.如权利要求1所述的计算机实现的方法,其特征在于,收集所述第一数据包括确定所述多个输入中的每一输入的标识码。
7.如权利要求6所述的计算机实现的方法,其特征在于,确定所述标识码包括基于每一输入的内容数据来计算散列码。
8.如权利要求1所述的计算机实现的方法,其特征在于,
收集所述第一数据包括生成所述多个输入中的一个输入的机器无关的表示;以及
所述数据存储包括与被配置成发起所述软件构建的多个计算机处于通信的联网数据存储。
9.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括:
将所述重定向例程注入到在所述构建进程的执行期间由所述构建进程调用的子进程中以递归地如所述构建进程那样对所述子进程实现如权利要求1所述的计算机实现的方法;以及
聚集所述子进程和所述构建进程的第一数据。
10.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括确定所述构建进程的配置数据是否指示所述构建进程要从收集和比较所述第一数据中被排除。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/841,241 US9286043B2 (en) | 2013-03-15 | 2013-03-15 | Software build optimization |
US13/841,241 | 2013-03-15 | ||
PCT/US2014/026941 WO2014152093A1 (en) | 2013-03-15 | 2014-03-14 | Optimization of a software build |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105229601A true CN105229601A (zh) | 2016-01-06 |
Family
ID=50628978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480015696.3A Pending CN105229601A (zh) | 2013-03-15 | 2014-03-14 | 软件构建优化 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9286043B2 (zh) |
EP (1) | EP2972811A1 (zh) |
CN (1) | CN105229601A (zh) |
WO (1) | WO2014152093A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045657A (zh) * | 2018-10-15 | 2020-04-21 | 华为技术有限公司 | 程序代码的运行方法和运行装置以及编译方法和编译装置 |
TWI822973B (zh) * | 2020-03-09 | 2023-11-21 | 系微股份有限公司 | 建構bios的資訊處理系統及資訊處理方法 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8458661B2 (en) | 2006-03-31 | 2013-06-04 | Ebay Inc. | Distributed parallel build system |
WO2015138498A1 (en) * | 2014-03-11 | 2015-09-17 | Citrix Systems, Inc. | Computer-implemented methods and systems for determining application matching status |
US10061577B2 (en) * | 2014-10-14 | 2018-08-28 | Electric Cloud, Inc. | System and method for optimizing job scheduling within program builds |
US9665849B2 (en) | 2015-02-26 | 2017-05-30 | Red Hat, Inc. | Employing dependency graph in software build projects |
US9965271B2 (en) | 2015-04-28 | 2018-05-08 | Microsoft Technology Licensing, Llc | Projection of build and design-time inputs and outputs between different build environments |
US9489182B1 (en) * | 2015-11-20 | 2016-11-08 | Semmle Limited | Transparent process interception |
US10671510B1 (en) * | 2016-06-24 | 2020-06-02 | Intuit, Inc. | Techniques for evaluating collected build metrics during a software build process |
US10698733B1 (en) * | 2016-09-02 | 2020-06-30 | Intuit Inc. | Integrated system to distribute and execute complex applications |
US10223099B2 (en) * | 2016-12-21 | 2019-03-05 | Palantir Technologies Inc. | Systems and methods for peer-to-peer build sharing |
US10282175B2 (en) * | 2017-01-24 | 2019-05-07 | Salesforce.Com, Inc. | Methods and systems for performing a partial build |
US10235163B2 (en) * | 2017-06-16 | 2019-03-19 | Red Hat, Inc. | Coordinating software builds for different computer architectures |
CN107608690B (zh) * | 2017-08-09 | 2021-12-10 | 华为技术有限公司 | 配置管理的方法及装置 |
US10616338B1 (en) * | 2017-09-25 | 2020-04-07 | Amazon Technologies, Inc. | Partitioning data according to relative differences indicated by a cover tree |
US11200150B2 (en) * | 2020-01-13 | 2021-12-14 | EMC IP Holding Company LLC | Multi-tenanted build system with visualization of dynamic build progress |
US11809897B2 (en) * | 2020-11-30 | 2023-11-07 | Red Hat, Inc. | Chained triggering of builds in continuous integration environments |
US20240045786A1 (en) * | 2022-08-04 | 2024-02-08 | Airbiquity Inc. | Build system supporting code audits, code verification, and software forensics |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5748961A (en) * | 1993-07-12 | 1998-05-05 | Digital Equipment Corporation | Efficient method and apparatus for compiling and linking modules of computer code in a large software system |
US6487713B1 (en) * | 1999-09-24 | 2002-11-26 | Phoenix Technologies Ltd. | Software development system that presents a logical view of project components, facilitates their selection, and signals missing links prior to compilation |
US20120079447A1 (en) * | 2010-09-23 | 2012-03-29 | Microsoft Corporation | Software build analysis |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0501613A3 (en) * | 1991-02-28 | 1993-09-01 | Hewlett-Packard Company | Heterogeneous software configuration management apparatus |
US5500881A (en) * | 1993-07-12 | 1996-03-19 | Digital Equipment Corporation | Language scoping for modular, flexible, concise, configuration descriptions |
US6298476B1 (en) | 1995-12-04 | 2001-10-02 | International Business Machines Corporation | Object oriented software build framework mechanism |
BR9902725A (pt) | 1999-07-13 | 2001-03-06 | Coppe Ufrj | Processo de formação, memorização e reuso, em tempo de execução, de sequências de instruções dinâmicas em computadores |
US6922827B2 (en) * | 2002-02-22 | 2005-07-26 | Bea Systems, Inc. | Iterative software development environment with prioritized build rules |
US7493622B2 (en) * | 2003-08-12 | 2009-02-17 | Hewlett-Packard Development Company, L.P. | Use of thread-local storage to propagate application context in Java 2 enterprise edition (J2EE) applications |
US20060036834A1 (en) | 2004-08-13 | 2006-02-16 | Subramaniam Maiyuran | Trace reuse |
US7171337B2 (en) * | 2005-06-21 | 2007-01-30 | Microsoft Corpoartion | Event-based automated diagnosis of known problems |
US7721272B2 (en) | 2005-12-12 | 2010-05-18 | Microsoft Corporation | Tracking file access patterns during a software build |
US8312447B2 (en) | 2008-09-25 | 2012-11-13 | Microsoft Corporation | Managing updates using compiler and linker information |
US8627286B2 (en) | 2010-03-26 | 2014-01-07 | Oracle International Corporation | Fully declarative build system for build optimization |
US8635607B2 (en) | 2011-08-30 | 2014-01-21 | Microsoft Corporation | Cloud-based build service |
-
2013
- 2013-03-15 US US13/841,241 patent/US9286043B2/en not_active Expired - Fee Related
-
2014
- 2014-03-14 EP EP14720815.1A patent/EP2972811A1/en not_active Withdrawn
- 2014-03-14 CN CN201480015696.3A patent/CN105229601A/zh active Pending
- 2014-03-14 WO PCT/US2014/026941 patent/WO2014152093A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5748961A (en) * | 1993-07-12 | 1998-05-05 | Digital Equipment Corporation | Efficient method and apparatus for compiling and linking modules of computer code in a large software system |
US6487713B1 (en) * | 1999-09-24 | 2002-11-26 | Phoenix Technologies Ltd. | Software development system that presents a logical view of project components, facilitates their selection, and signals missing links prior to compilation |
US20120079447A1 (en) * | 2010-09-23 | 2012-03-29 | Microsoft Corporation | Software build analysis |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045657A (zh) * | 2018-10-15 | 2020-04-21 | 华为技术有限公司 | 程序代码的运行方法和运行装置以及编译方法和编译装置 |
CN111045657B (zh) * | 2018-10-15 | 2021-08-13 | 华为技术有限公司 | 程序代码的运行方法和运行装置以及编译方法和编译装置 |
TWI822973B (zh) * | 2020-03-09 | 2023-11-21 | 系微股份有限公司 | 建構bios的資訊處理系統及資訊處理方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2014152093A1 (en) | 2014-09-25 |
US20140282450A1 (en) | 2014-09-18 |
US9286043B2 (en) | 2016-03-15 |
EP2972811A1 (en) | 2016-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105229601A (zh) | 软件构建优化 | |
CN102855131B (zh) | 用于软件配置管理的装置和方法 | |
US9390124B2 (en) | Version control system using commit manifest database tables | |
Bajracharya et al. | Sourcerer: An infrastructure for large-scale collection and analysis of open-source code | |
CN100478944C (zh) | 自动任务生成器的方法和系统 | |
US8010578B2 (en) | Method of refactoring a running database system | |
Zanjani et al. | Impact analysis of change requests on source code based on interaction and commit histories | |
EP3674918B1 (en) | Column lineage and metadata propagation | |
JP5542859B2 (ja) | ログ管理装置、ログ蓄積方法、ログ検索方法、およびプログラム | |
CN102902529A (zh) | 变换的上下文知晓数据源管理 | |
US20150339355A1 (en) | Application coherency manager | |
Ba et al. | Uncertain version control in open collaborative editing of tree-structured documents | |
Muddu et al. | CPDP: A robust technique for plagiarism detection in source code | |
Yadav | Spark Cookbook | |
Maymala | PostgreSQL for data architects | |
US11693834B2 (en) | Model generation service for data retrieval | |
US20170109331A1 (en) | Managing changes to a document in a revision control system | |
Gupta | Neo4j Essentials | |
Jamil | Designing integrated computational biology pipelines visually | |
Luczak-Rösch et al. | Svont–version control of owl ontologies on the concept level | |
Antony et al. | Professional Hadoop | |
Lefeuvre et al. | Fingerprinting and Building Large Reproducible Datasets | |
Khoshdel Nikkhoo | The impact of near-duplicate documents on information retrieval evaluation | |
Danielsson et al. | My media favorites on any device: A study about the development and evaluation of a partly cloud-based and partly on-premise solution based on microsoft platform | |
Narayanan | Data Validation using Great Expectations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160106 |
|
WD01 | Invention patent application deemed withdrawn after publication |