库一致性检查器的制作方法

文档序号:6426297阅读:181来源:国知局
专利名称:库一致性检查器的制作方法
技术领域
本发明涉及计算机领域,尤其涉及计算机领域中的库的管理。
背景技术
使用许多计算机编程系统,例程库可被分布并且由许多不同的程序员使用。库可包含可在许多不同设置中重用的许多操作。例如,一组库可生成用户界面组件,执行与文件有关的操作,或执行网络通信。程序员可使用库来创建许多不同类型的应用。库(有时被称为部件)可随时间演化和改变,并且可为不同的硬件平台或不同的应用形成库的不同变体。

发明内容
库管理系统可比较编程库之间的合约,以标识库之间的并集、交集及差集。管理系统可带有合约分析器,该合约分析器可从现有的库提取合约定义以形成库合约。库合约可作为编程环境内的第一类项来管理,并且可被用作比较库的现有版本与新版本的参考。库管理系统可使用两个或多个相交的库来创建引用库,以供程序员编写应用程序以及其他用途。提供本发明内容以便以简化形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。


在附图中,图1是示出网络设置中代码开发环境的实施例的图示。图2是示出维恩(Verm)图的示例实施例的图示,该维恩图示出库覆盖。图3是示出一致性检查器的使用场景的示例性实施例的图示。图4是示出用于对库进行准备以供分析的方法的实施例的流程图。图5是示出用于将应用程序与库作比较的方法的实施例的流程图。图6是示出用于将库与主合约定义作比较的方法的实施例的流程图。
具体实施例方式例程库的合约可作为库族内的“第一类”项来管理。一致性检查器可执行实际库与库合约之间的、以及不同合约组之间的各种比较。合约可作为“第一类”项来管理,其中可在库的生存期期间定义并控制合约定义,并且其中合约可被用作与库作比较的主定义。在许多编程环境中,库可包含可由程序员用于开发应用程序的可重用例程。例如, 可为台式或服务器计算机开发强调执行速度的例程库,而可为可针对能量效率来开发例程的便携式设备开发第二个库。这两种库可实现相同的合约集,并且可被用于在两个不同的平台上开发应用程序。库的合约可为该库中的每一例程定义输入和输出参数。在代码管理系统内,合约可被登记并作为第一类项来管理。第一类项可被认为是其他编程操作可针对它来发生的标准。在一典型的实施例中,可在库内编写例程的实现之前定义库的一组合约。在编码之前可协商合约定义并达成一致,并且一致性检查器可验证所编码的库符合合约定义。一致性检查器可允许若干不同的使用场景。在带有两个或多个版本的库的实施例中,可使用一致性检查器来标识两个库之间的交集。该交集对标识两个库所共有的例程子集是有用的,使得当程序被限制于该交集时,该程序可与两个不同的库兼容。在另一使用场景中,两个版本的库的并集可由一致性检查器来标识。两个版本的交集可标识例程的全集,可在标识新例程时使用该全集以确保新例程的名称先前在任何库中没有被定义。在又一使用场景中,一致性检查器可确定第一个库与第二个库之间的差集。在某些情况下,库管理系统可尝试迫使不存在差集——诸如在实现被假设成精确地符合给定合约的库时。在其他情况下,库管理系统可能想要迫使库支持现有合约的超集。在该情况下, 差集可以是“定制”或专用于其他库的额外例程。差集可由程序员分析以确定例如从其应用程序移除哪些调用,使得该应用程序被移植到另一库。本说明书通篇中,在所有附图的描述中,相似的附图标记表示相同的元素。在将元素称为被“连接”或“耦合”时,这些元素可以直接连接或耦合在一起,或者也可以存在一个或多个中间元素。相反,在将元素称为被“直接连接”或“直接耦合”时,不存在中间元素。本发明主题可被具体化为设备、系统、方法、和/或计算机程序产品。因此,本发明主题的部分或全部可以用硬件和/或软件(包括固件、常驻软件、微码、状态机、门阵列等) 来具体化。此外,本发明主题可以采用其上嵌入有供指令执行系统使用或结合其使用的计算机可使用或计算机可读的程序代码的计算机可使用或计算机可读的存储介质上的计算机程序产品的形式。在本文的上下文中,计算机可使用或计算机可读介质可以是可包含、存储、通信、传播、或传输程序以供指令执行系统、装置或设备使用或结合其使用的任何介质。计算机可使用或计算机可读介质可以是,例如,但不限于,电、磁、光、电磁、红外、 或半导体系统、装置、设备或传播介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由指令执行系统访问的任何其它介质。注意,计算机可使用或计算机可读介质可以是其上打印有程序的纸张或其它合适的介质,因为程序可以经由例如对纸张或其它介质的光学扫描而电子地捕获,随后如有必要被编译、解释,或以其它合适的方式处理,并随后存储在计算机存储器中。通信介质通常以诸如载波或其他传输机制的已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任意信息传送介质。术语“已调制数据信号”可以被定义为其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,如有线网络或直接线连接,以及如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。当本发明主题在计算机可执行指令的一般上下文中具体化时,该实施例可以包括由一个或多个系统、计算机、或其它设备执行的程序模块。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可以按需在各个实施例中进行组合或分布。图1是示出具有库的一致性检查器的系统的实施例100的图示。实施例100是其中可开发、测试以及部署可执行代码的网络环境的简化示例。图1的图示出了系统的各个功能组件。在某些情况下,组件可以是硬件组件、软件组件、或硬件和软件的组合。某些组件可以是应用层软件,而其他组件可以是操作系统层组件。在某些情况下,一个组件到另一个组件的连接可以是紧密连接,其中两个或更多个组件在单个硬件平台上操作。在其它情况下,连接可以通过跨长距离的网络连接来形成。各实施例可以使用不同的硬件、软件、以及互连体系结构来实现所描述的功能。实施例100是其中可开发可执行代码的网络环境的示例。可执行代码可按任何类型的编程语言来编写以及编译或解释,以创建机器可读代码,该机器可读代码有时被称为 “二进制代码”或“可执行代码”。贯穿本说明书和权利要求书,对术语“代码”的引用可以是对任何类型的软件的引用并且可在“代码”之前加上修饰,诸如“源代码”、“已编译代码”、 “中间代码”以及“可执行代码”。术语“源代码”可被用于指代处于其原始编写形式的计算机软件。在许多情况下, “源代码”可以是人类可读形式,并且可由程序员使用编辑器应用程序来编辑以及操纵。源代码的示例可使用诸如BASIC、C、COBAL、FORTRAN或大量其他计算机语言和其他版本的语言中的任一个等语言来编写。在许多情况下,源代码可被编译成某种形式的已编译代码。在一种类型的已编译代码中,已编译代码可由处理器或低级别的解释器执行。在另一种类型的已编译代码中, 源代码可被编译成中间语言,该中间语言可在运行时被进一步编译成机器可读的可执行格式。这一已编译代码可被称为“中间代码”,并且可以是已编译代码的子集或具体实例。中间代码可以是或可以不是人类可读的。在某些编程环境中,工具可用于操纵和分析中间代码。术语“可执行代码”可以是可由处理器直接执行的编程代码。在某些情况下,人类程序员可直接编写可执行代码。然而,使用解释器或编辑器从源代码创建可执行代码可能更常见。编程环境可具有可帮助程序员或程序员团队从源代码创建计算机应用程序的各种工具。应用程序可以是执行功能的任何形式的软件。在某些情况下,应用程序可以非常大、包含成数百万行代码、并且可在多个交互设备上操作。在其他情况下,应用程序可以是在具有非常有限的计算能力的设备上操作的小的、单功能的可执行应用程序。在编程环境内的工具可包括编辑器、编译器和调试器、以及代码管理系统。代码管理系统可允许程序员将代码登入(check in)中央数据库中以存储并共享代码,以及登出 (check out)代码以对代码作出改变和更新。在许多实施例中,这些工具可允许大型程序员团队一起工作以开发应用程序。程序员可使用例程库来存储可在许多不同的应用程序中重用的例程。例如,一组程序员可编写执行公共功能集,诸如访问中央数据库,的应用程序集。程序员可创建数据库访问例程库,该数据库访问例程库在各应用程序之间或在致力于同一应用程序的不同组之内共享。在某些实施例中,软件制造者或联盟可创建执行一组公共操作的库,并且可向可能正编写许多不同的应用程序的程序员发布这些库。当程序员使用库时,该程序员可从应用程序创建对库中的例程的调用。对于库中的每一例程,如果传递任何数据,则合约可定义要传递给例程的数据以及要从例程返回的数据。数据可使用数据类型来定义,该数据类型可以是原语数据类型,诸如布尔值、整数、实数、串或其他原语数据类型,或可以是可使用原语数据类型来定义的复杂数据类型。在代码开发过程期间的某一时刻,可将程序员的应用程序链接到库。按当应用程序被执行时可调用库中的例程、该例程进而将被执行的这种方式,该链接来将程序员的代码连接到库。取决于实施例,该链接可发生在运行时、编译时、或在运行时和编译时两者。当与库的链接发生在编译时的时候,某些实施例可创建包括库中所调用的例程的单个可执行代码。在其他实施例中,该链接可标识可在执行期间被调用的可执行例程的库, 从而创建可在执行期间存在并被调用的两个或多个文件。在这一实施例中,应用程序可执行代码可以比单个可执行代码小得多,因为库例程可被存储在分开的文件中。当与库的链接发生在运行时的时候,某些实施例可将应用程序表示成中间代码。 运行时链接器可分析应用程序以确定哪些例程被调用,并且可在运行时将应用程序代码链接到可用的库。该运行时链接场景可允许使用一个版本的库来设计、测试以及发布应用程序,但不同版本的库在运行时可用。在一个这样的场景中,程序员可针对为服务器计算机所设计的库的版本来创建应用程序。库可包含为执行速度目的而设计的例程。相同的应用程序可以用在便携式、电池供电设备上,并且原始库可以用为最小电耗目的而设计的库来替换。库可具有定义例程的相同合约,但例程的实现可以不同。库对于不同硬件平台可具有不同版本。例如,库的一个版本可被编写成与台式计算机一起操作,以及第二个版本可被编写成与蜂窝电话一起操作。这两个版本可实现相同的合约,但例程本身可以不同,以便可按不同方式访问底层硬件。库还可由于库随时间的演变而具有不同版本。为了管理库,一致性检查器可将各个库相对于彼此作比较。在许多实施例中,一致性检查器可执行各种基于集合的运算,该运算可包括诸如并集、差集、交集以及其他运算。一致性检查器可分析由库实现的合约。合约可定义库中例程的接口,其中该接口可以是可向其他可执行例程展示的例程集的一部分。在许多编程语言中,该接口可包括用于调用该例程的数据类型以及从该例程返回的数据类型。一致性检查器可以不分析例程的实现。例如,一致性检查器可将两个库作比较为第一硬件平台设计的一个库,以及为第二硬件平台设计的第二个库。这两个库可包括完全不同例程,但可实现相同合约。在某些使用场景中,一致性检查器可使用主合约定义,该主合约定义可以是仅包含合约的库。一致性检查器可使用这一库来将主合约定义与各库作比较,以便确定对主合约定义遵从性。若干使用场景可在本说明书的稍后部分描述。—致性检查器可将两个或多个库作比较以确保彼此兼容。在这一操作中,可分析来自每一库的共享相同名称的例程,以便确定当被调用时这些例程是否接受相同的数据类型并且返回相同的数据类型。当存在不同时,这些例程可能不是可互换的。兼容性分析可确定例程的一个版本与另一版本向前或向后兼容。例如,例程的第一版本可具有由数据类型定义的输入参数集。相同例程的第二版本可具有输入参数超集, 其中额外参数是可任选参数。在这种情况下,第一版本可能不与第二版本向后兼容,但第二版本可与第一版本向前兼容。在某些实施例中,兼容性分析可检查例程的一个版本是否可接受更大或更小范围的输入、或可产生更大或更小范围的输出。在该示例中,使用库的第一版本来编写的程序当与库的第二版本一起使用时可正确地操作。然而,针对第二版本编写的程序可能不能与第一版本一起正确地操作。在某些实施例中,一致性检查器可将应用程序与库或与主合约定义作比较。在这一实施例中,一致性检查器可分析应用程序以标识对库中的例程的每一调用。可在库中定义该例程的合约。可使用这一系统来检查应用程序与不同的库的兼容性。例如,可将针对库的较老版本编写的应用程序与库的新版本作比较以确保兼容性。在另一示例中,可将为新的库编写的应用程序与较老的库作比较。这一比较可标记不与较老的库向后兼容的调用,并且程序员可据此修改应用程序。在又一示例中,可将应用程序与库的两个不同版本作比较,其中一个库可被配置成在一个硬件平台上操作,以及另一个库可被配置成在第二硬件平台上操作。可使用该比较来验证应用程序可与这两个库兼容,并且随后可将应用程序部署在这两个硬件平台上。一致性检查器可将两个或多个库作比较以确定所有例程的并集。这一分析的结果可包括所有所分析的库中的每一例程的合约。并集运算的一个使用场景可以是枚举两个或多个库中的所有现有例程。程序员可根据并集运算的结果来选择对新的库中的例程重命名,以便防止与预先存在的例程冲突。一致性检查器可将两个或多个库作比较以确定库的交集。程序员可使用该交集来标识两个库所共有的那些例程。受限于使用由交集运算标识的例程的应用程序可使用任一库来操作。交集在管理开发库的两个开发团队中可能是有用的。例如,第一开发团队可能正开发为手持式设备设计的第一个库。第一个库可具有专用于手持式设备的特定例程,诸如使用专用输入机制的用户界面操作。第二开发团队可能正开发为服务器计算机设计的第二个库,并且第二个库可具有不包括第一个库中所包括的用户界面操作的不同的例程集。在该示例中,比较例程可生成两个库之间的交集以标识共有例程,并且使得能够编写使用任一库来运行的应用程序。在接收到两个开发组织之间的批准和同意之后,可改变共有例程。然而,专用于任一库的例程可独立于另一开发团队来管理。设备102可表示程序员用于开发应用程序的编程开发站。设备102可表示典型的计算机设备,诸如具有硬件组件104和软件组件106的台式计算机或服务器计算机。在一些实施例中,设备102可以是膝上型计算机、上网本计算机、平板计算机、移动电话、手持式个人数字助理、游戏控制台、网络设备、或任何其它计算设备。为设备102示出的体系结构可代表具有硬件和软件组件的典型的体系结构 ’然而,其它体系结构可用于实现分布式数据库系统的一些或全部。硬件组件104可以包括处理器108、随机存取存储器110、以及非易失性存储112。 硬件组件104还可以包括网络接口 114和用户界面116。软件组件106可包括操作系统118,包括代码开发环境120等各种应用可在操作系统上执行。代码开发环境120是用于编写、编译以及调试源代码的系统的示例。在其他实施例中,在代码开发环境120中列出的一个或多个组件可由同一设备102上或不同设备上的另一软件组件来提供。代码开发环境120可包括程序员可在其中编写源代码的代码编辑器122、以及编译器IM和链接器126。在许多实施例中,代码开发环境120可包括用于执行已编译代码的虚拟化操作系统或其他环境。在许多代码开发环境中,可将代码编辑器122与编译器124以及链接器1 集成。在这样的环境中,程序员能够使用编辑器窗口来编写代码,并且随后使用该同一应用程序来编译以及链接该代码。某些这样的环境可具有可扩展的调试工具,该可扩展的调试工具可允许程序员在编辑器窗口内执行代码以步进通过该代码、检查参数值以及执行其他功能。一致性检查器1 可以是代码开发环境120的分析与应用程序或库相关联的合约的组件。可使用一致性检查器1 对两个、三个或多个库针对彼此或针对应用程序来进行比较和分析,或使用主合约定义来执行分析。一致性检查器1 可能能够分析应用程序代码并且基于与不同的库的比较来注释应用程序代码。一致性检查器1 还可分析两个或多个库以确保兼容性、标识交集、确定差集、以及可用于管理库开发和部署的其他分析。在某些实施例中,可将一致性检查器128与代码开发环境120集成。在这些实施例中,一致性检查器1 可生成可用于注释应用程序代码并可在代码编辑器122中显示的标志或出错消息。在其他实施例中,一致性检查器1 可以是独立应用程序。合约生成器130可以是分析现有的库并从该库中提取合约信息的应用程序或函数。可使用合约生成器130来从现有库中定义主合约定义。例如,库的第一版本可连同该库的主合约定义一起发布。合约生成器130可分析该库以保持例程的合约定义部分,但可剥离或移除例程的剩余部分,从而产生可仅包含合约定义的库文件。在某些实施例中可使用合约生成器130来对库进行准备以供使用一致性检查器 1 进行分析。在这一实施例中,合约生成器130可分析库以保持合约定义并移除所有其他信息。所得的只有合约的文件可由一致性检查器1 来分析。在某些实施例中,一致性检查器1 可使用源代码、中间代码或可执行代码来执行分析。在某些情况下,可使用反编译器132来将代码从可执行代码反编译成中间代码、或将代码从中间代码反编译成源代码以供分析。许多代码开发环境120可具有代码数据库接口 134。代码数据库接口 134可与本地或远程代码库交互以登入或登出代码、共享各库和其他例程、以及其他功能。
设备102可具有可管理本地代码数据库138的代码库管理器136。在带有网络可访问代码数据库服务器162的某些实施例中,代码库管理器136可与代码数据库服务器162 通信,以便对存储在本地代码数据库138中的代码进行下载、上传以及同步。本地代码数据库138可包括主合约定义140、源代码库142、已编译代码库411、以及各种其他已编译代码146。存储在本地代码数据库138中的代码可以是程序员使用代码开发环境120来开发的代码。在某些实施例中,本地代码数据库138可具有与代码数据库服务器162同步的一组或多组代码。可使用代码开发环境120来生成可在设备102上执行的已编译代码148和各种应用程序150。在某些实施例中,各种运行时组件152可在运行时与中间代码一起使用以创建运行时可执行代码158。运行时组件152可包括运行时编译器IM和运行时链接器156。 在这些实施例中,已编译代码148或应用程序150可以是在运行时可被进一步编译和链接的中间代码。可将设备102与网络160连接,该网络160可具有代码数据库服务器162、以及其他设备。网络160可以是局域网、广域网、因特网或各网络的组合。代码数据库服务器162可具有与设备102的硬件组件104相似的硬件平台182,代码管理器164和代码数据库166可在该硬件平台182上操作。代码管理器164可包括分析库、应用程序以及其他代码的各种例程。代码管理器 164可包括一致性检查器168、合约生成器170以及反编译器172。代码管理器164可具有与代码开发环境120中所示的某些相同例程。在这些实施例中,例程可被远程地执行。例如,设备102可将命令发送给代码数据库服务器162上的代码管理器164,以便针对两个或多个库、应用程序或主合约定义来执行一致性检查器168。代码数据库166可包含许多与本地代码数据库138相同的元素,包括主合约定义 174、应用程序176、源代码库178以及已编译库180。各种客户机设备184可以执行由程序员使用设备102来创建的应用程序。客户机设备184可包括运行时组件188和各种应用程序190,并且可在硬件平台186上执行。在许多程序员可联合地开发可执行代码的网络环境中,可能存在与设备102相似的若干开发者设备192。开发者设备192可包括硬件平台194、代码开发环境196、本地代码书数据库197以及各种运行时组件198。开发者设备192可按与设备102相似的方式与代码数据库服务器162进行交互。图2是示出若干库的覆盖的实施例200的图示。实施例200是可示出致性检查器的若干使用场景的维恩图。实施例200的图示示出包括台式计算机的库202、游戏控制台的库204、移动设备的库206的库集合。各库的区域示出了库内执行各种功能的例程。在各库之间是交集208、210以及212。在三个库之间是交集214。这些交集可表示在两个或多个库中找到的那些例程。在两个或多个库中找到的例程可共享相同合约或相同合约的一部分。当应用程序仅调用多个库所共有的例程时,如果例程的合约符合每一库,则应用程序可与任一库一起操作。例如,库设计者可能希望使程序员能够开发可在台式计算机和游戏控制台两者上执行的应用程序。库设计者可使用一致性检查器来标识交集208和该交集内的例程,并且生成表示该交集的新的只有合约的库。程序员可针对这一只有合约的库来编写其程序,并且能够在这两个环境的任一个中运行其程序。在另一示例中,希望开发可使用数据库202、204和206中的任一个的程序员可将例程调用限制于仅在交集214中的那些例程。在这一情况下,可通过仅使用适当的库来执行应用程序,来将应用程序移植到这些平台的一个或多个。图3是示出一致性检查器的使用场景的实施例300的图示。实施例300示出如何将合约定义与运行时库作比较以确保该库符合该合约定义。合约定义302可包含例程集的合约的主定义。主定义可包括作为来自两个或多个库的合约的并集的例程超集,可包括两个或多个库的交集,或可具有合约的某些其他集合。例程库304可表示可相对于主合约定义302来分析的库。在一个使用场景中,例程库304可被证实以符合实施例300中的主合约定义302。合约定义302被编译成中间代码306以生成已编译合约定义308。类似地,例程库 304被编译成中间代码306以生成已编译例程库310。一致性检查器312可分析已编译合约定义308以及已编译例程库310以生成结果314。在某些实施例中,一致性检查器312可使用中间代码306来分析例程。这些实施例可允许输入库或合约定义以不同的编程语言来表达,但可被检查以符合相同的合约,尽管中间代码可能不同。这一使用场景的示例可以是以BASIC编写的、且为游戏控制台平台设计的库的一个版本,其中库的第二版本可以用C+编写并且为移动平台设计。这两个库可在中间代码中被分析并且发现它们彼此兼容,尽管这些库是以不同的编程语言来表达的。结果314可标识合约定义302与例程库304的交集的那些例程、及其差集的那些例程。差集可被检查以确定两个源的合约是否完全相同、一个是否可实现另一个的子集或超集、是否仅存在共有子集、或合约是否完全独立。图4是示出用于准备对库的分析的方法的实施例400的流程图。实施例400是可将库或应用程序置于供一致性检查器分析的状态的方法的简化示例。其它实施例可以使用不同顺序的、附加的或更少的步骤以及不同的名称或术语来实现类似的功能。在一些实施方式中,各种操作或一组操作可以按同步或异步的方式与其它操作并行执行。在此选择的这些步骤被挑选来以简化的形式示出操作的一些原理。在某些实施例中,一致性检查器可使用可执行代码、中间代码或源代码来检查库、 合约定义以及应用程序。某些实施例能够分析处于各种状态中的一种或多种状态的代码。在框402,可接收用于分析的第一个库。在框404,可接收第二个库或应用程序。在许多实施例中,主合约定义可使用与库相同的句法、语言和方式来定义,除了主合约定义可能不包含例程的底层方法或过程以外。在这些实施例中,主合约定义可被当作出于准备和分析的目的的任何其他的库。类似地,应用程序可使用与库相同的工具和过程来准备和分析。出于准备和分析的目的,在库上执行的过程也可在应用程序或代码的其他集合上执行。在框406,可确定比较格式。该比较格式可以是一致性检查器可执行分析的格式。 在一致性检查器能够分析各种格式的代码(诸如可执行代码、中间代码或源代码)的实施例中,在框406可确定合适的比较格式。在框408,可分析每一库或应用程序。在框408,对于每一库,如果在框410中库已经是比较格式,则该过程可返回框408。如果在框410中库不是比较格式并且该格式在框 412中可通过编译来创建,则在框414可将库编译成比较格式。如果在框412中库不能被编译成该格式,则在框416中库可被反编译以实现比较合格式。在框408的过程之后,在框418库已经准备好供分析。图5是示出用于将应用程序与库作比较的方法的实施例500的流程图示。实施例 500是可将应用程序与库作比较以标识符合或不符合该库的例程调用、并且随后为程序员注释该应用程序的方法的简化示例。其它实施例可以使用不同顺序的、附加的或更少的步骤以及不同的名称或术语来实现类似的功能。在一些实施方式中,各种操作或一组操作可以按同步或异步的方式与其它操作并行执行。在此选择的这些步骤被挑选来以简化的形式示出操作的一些原理。实施例500可表示可在代码开发环境内执行的方法,其中可将应用程序与库作比较。由于库可就像应用程序一样使用其他库,因此也可使用实施例500的过程来将库与另一库合约定义作比较。在框502,可接收库,以及在框504,可接收应用程序。在框506,可扫描应用程序以标识来自该应用程序的、对库中例程的引用。例程可以是从库中展示的任何东西。例如, 对于过程语言,例程可以仅是可被调用的函数,但对于面向对象的语言,例程可以包括诸如对象创建、基类引用、字段访问、方法调用等各种概念。以任何编程语言编写的所有这些引用可被模型化为库中带有如应用程序所定义的具体输入以及如库所定义的输出的“例程”。 在框508中,可分析每一引用。在框508,对于每一引用,传递给库例程的数据类型可在框510中被标识,以及从库例程接收的数据类型可在框512中被标识。在框514,可定位库例程,以及在框516,可从库中提取例程的合约。在框518,可将库的合约与来自应用程序的引用作比较。在框520,如果合约满足引用,则该过程可返回框 508。在框520,如果合约不满足引用,则在框5 可将该引用标记为出错,并且在框526 可以用比较发现来对该引用进行注释。可将注释呈现在调试器、编辑器或其他输出中,使得程序员可检查并且纠正应用程序代码。图6是示出用于将库与主合约定义作比较的方法的实施例600的流程图。实施例 600示出带有某些与实施例500相同的操作的另一比较算法。其它实施例可以使用不同顺序的、附加的或更少的步骤以及不同的名称或术语来实现类似的功能。在一些实施方式中,各种操作或一组操作可以按同步或异步的方式与其它操作并行执行。在此选择的这些步骤被挑选来以简化的形式示出操作的一些原理。在框602,可接收主合约定义,以及在框604,可接收库。在框606,对于库中的每一例程,在框608可提取由例程接收的输入参数,以及在框610可提取由例程返回的输出参数。在框612,可提取与例程相关的任何元数据。在框 614,可使用传递给例程的参数和所返回的参数以及任何元数据来定义例程的合约。
在某些实施例中,框606至614的操作可由合约生成器来执行。在框616,可将主合约定义中的例程与库中的例程进行匹配。框616中的匹配可产生三组例程两者共有的那些例程、主合约定义中找到的并且在库中未找到的那些例程、以及在库中找到的但不在主合约定义中的那些例程。共有例程可被认为是库之间的交集,而其他组可被认为是库之间的差集。在框618可分析共有例程以确定合约是否匹配。在框618,对于匹配的每一例程, 如果在框620输入参数不匹配,则在框622可标记不匹配的输入参数。如果在框6 输出参数不匹配,则在框6 可标记不匹配的输出参数。在框628,可分析在主合约定义中找到的但不在库中的例程。在框628,对于每一例程,在框630可将该例程标记为未实现的。在框632,可分析在库中找到的但不在主合约定义中的例程。在框632,对于每一例程,在框634可将该例程标记为额外的,或在某些场景中忽略该例程。在框636,可用各种发现来对库进行注释,并且在框638可生成报告。实施例500和600的方法表示一致性检查器可用于将两个不同的代码集作比较的两种不同方法。以上对本发明主题的描述是出于说明和描述的目的而提出的。它不旨在穷举本主题或将本主题限于所公开的精确形式,且鉴于以上教导其它修改和变形都是可能的。选择并描述实施方式来最好地解释本发明的原理及其实践应用,从而使本领域的其它技术人员能够在各种实施方式和各种适于所构想的特定用途的修改中最好地利用本发明。所附权利要求书旨在包括除受现有技术所限的范围之外的其它替换实施方式。
权利要求
1.一种在计算机处理器上执行的方法,所述方法包括接收第一组例程002),所述第一组例程中的所述例程中的每一个包括合约以及实现;接收第二组例程004),所述第二组例程中的所述例程中的每一个包括合约; 将所述第一组例程与所述第二组例程作比较G10),以便对所述例程执行至少一个集合运算,所述集合运算通过比较所述合约来执行。
2.如权利要求1所述的方法,其特征在于,所述集合运算包括含有下列各项的组中的至少一项差集; 交集;以及并集。
3.如权利要求1所述的方法,其特征在于,所述第一组例程是被编译的。
4.如权利要求3所述的方法,其特征在于,所述第一组例程被编译成中间语言。
5.如权利要求1所述的方法,其特征在于,所述第二组例程中的所述例程的每一个还包括实现。
6.如权利要求5所述的方法,其特征在于,所述第一组例程中的第一例程实现第一接口并且以第一语言来编写;以及所述第二组例程中的第二例程实现第一接口并且以第二语言来编写。
7.如权利要求5所述的方法,其特征在于,还包括生成所述第一组例程与所述第二组例程之间的交集,所述交集包括一组共有例程。
8.如权利要求7所述的方法,其特征在于,还包括 反编译所述共有例程组以定义共有例程的主集。
9.如权利要求1所述的方法,其特征在于,所述方法用于验证主接口定义,所述主接口定义是所述第二组例程。
10.如权利要求1所述的方法,其特征在于,还包括接收第三组例程,所述第三组例程中的所述例程中的每一个包括合约以及实现;以及对所述第一组例程、所述第二组例程以及所述第三组例程执行所述集合运算。
11.一种系统,包括 处理器(108);一致性检查器(1 ),用于接收第一组例程002),所述第一组例程中的所述例程中的每一个包括合约以及实现;接收第二组例程004),所述第二组例程中的所述例程中的每一个包括合约; 将所述第一组例程与所述第二组例程作比较(410),以便基于所述合约来标识所述第一组例程与所述第二组例程之间的交集。
12.如权利要求11所述的系统,其特征在于,还包括接收源代码并将所述源代码编译成中间代码的编译器,所述第一组例程以所述源代码来定义。
13.如权利要求12所述的系统,其特征在于,还包括接收所述中间代码并将所述中间代码反编译成所述源代码的反编译器,所述反编译器进一步对所述第一组例程与所述第二组例程的所述交集执行所述反编译。
14.如权利要求13所述的系统,其特征在于,还包括显示所述第一组例程与所述第二组例程的第一部分的用户界面。
15.如权利要求14所述的系统,其特征在于,所述第一部分是所述第一组例程与所述第二组例程的差集,所述差集由所述界面来确定。
全文摘要
本发明公开了库一致性检查器。库管理系统可比较编程库之间的合约,以标识库之间的并集、交集及差集。管理系统可带有合约分析器,该合约分析器可从现有的库中移除合约定义以形成库合约。库合约可作为编程环境内的第一类项来管理,并且可被用作比较库的现有版本与新版本的参考。库管理系统可使用两个或多个相交的库来创建引用库,以供程序员编写应用程序以及其他用途。
文档编号G06F9/45GK102270128SQ201110159919
公开日2011年12月7日 申请日期2011年6月3日 优先权日2010年6月7日
发明者F·佩斯彻-盖里, R·克里希纳斯瓦米, R·拜尔斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1