用于软件产品的动态过程的制作方法
未命名
09-11
阅读:71
评论:0

1.本发明涉及一种用于改变软件产品的功能而不更改软件产品本身的方法、计算机化系统和计算机程序产品。
背景技术:
2.当提供软件应用、服务或其他产品时的挑战之一是如何允许具有稍微不同需要的多个客户/用户使用相同的产品。在简单的情况下,这可以通过使一些特征可配置来实现,所述特征诸如url、何时运行备份、最大用户数量等。
3.静态软件库是一种封装功能的方式,使得功能可以容易地被包括在产品中,并从产品内的其他代码被调用(invoke)。库由开发者在产品正在被构建时使用,并且此后功能是静态的。
4.软件框架是特殊种类的库,其中通过使用诸如多态性(polymorphism)和动态绑定之类的面向对象的技术,与普通的库相比,调用以另一种方式工作。在该框架中,该框架调用产品代码。典型的应用是用户接口事件的处理——当对象被点击时,“onclick”方法被调用,但是这取决于产品开发者通过超控(override)由该框架提供的功能来定义“onclick”应该做什么。
5.然而,传统的框架,就像库一样,是由开发者在产品正在被构建时使用的,并且此后功能是静态的。
6.脚本化(scripting)是一种允许客户/用户定义业务逻辑/工作流动作的方法,这些业务逻辑/工作流动作要由产品在预定义的触发点处调用。脚本可以以许多不同的方式来定义和存储,例如,作为单独的脚本文件(如对于power shell),或者通过产品本身中的嵌入式脚本文件(如对于excel)。除了脚本语言中可能相当广泛的特征之外,脚本通常还有权访问产品中的预定义的操作或数据集。脚本通常由解释器来运行。然而,脚本仅可以访问产品中的预定义的操作或数据集,即,由产品开发者显式地暴露的操作或数据变量集,并且因此其功能在开发之后是静态的。
7.然而,考虑到提供用户工作流和数据管理的快速和灵活的适配、以及软件产品功能的定制,这些现有解决方案中没有一个是令人满意的。因此,存在对改进的解决方案的需要。
技术实现要素:
8.本发明的目的是消除或至少最小化上面讨论的问题。这是通过根据所附独立权利要求的用于改变软件产品的功能而不更改软件产品本身的方法、计算机化系统和计算机程序产品来实现的。
9.根据本发明的一方面,提供了一种用于在运行时改变正在执行的软件产品的功能的方法,该方法包括在系统的存储器中提供可执行软件产品,其中可执行软件产品是使用面向对象的编程语言生成的。可执行软件产品包括:至少一个第一编程接口;至少一个触发
点,指示用于调用与相应触发点相关联的一个或多个检测到的动态过程的软件代码中的位置;触发点检测器,被配置成检测被包括在可执行软件产品中的一个或多个触发点;以及改变检测器,被配置成在运行时检测存储在存储器中的任何动态过程源代码的任何添加、删除或改变。可执行软件产品进一步包括:运行时编译器、运行时链接器和运行时加载器,它们被配置成在运行时、即在可执行软件产品的执行期间编译、链接和加载动态过程源代码。该方法进一步包括在存储器中提供被设计成在可执行软件产品中引入功能的改变的至少一个动态过程的动态过程源代码,其中每个动态过程的动态过程源代码包括至少一个第二编程接口,其中至少一个第二编程接口中的每一个符合(comply with)至少一个第一编程接口之一。该方法进一步包括通过使用被包括在该系统中或通信地连接到该系统的系统加载器来加载可执行软件产品,从而在动态运行时环境中创建执行程序,并且在运行时、即在可执行软件产品的执行期间执行以下方法步骤:
[0010]-使用改变检测器来检测存储器中的动态过程源代码的任何添加、删除或改变;
[0011]-使用运行时编译器来编译动态过程源代码的选择;以及
[0012]-使用运行时链接器来链接经编译的动态过程;
[0013]-由触发点检测器来检测被包括在可执行软件产品中的一个或多个触发点;
[0014]-响应于对一个或多个触发点的检测,从存储器中调用与每个检测到的触发点相关联的一个或多个动态过程;以及
[0015]-使用运行时加载器来加载或执行正在执行的软件产品内的一个或多个所调用的动态过程。
[0016]
合适地,由此使得能够更改软件产品(这里被称为正在执行的软件产品)的功能而不更改软件产品本身,这是由于更改软件产品的动态过程执行起来好像它们是正在执行的软件产品的一部分。通过使用动态过程,由此使得能够在源代码级别上使用软件产品中的所有操作、类和/或数据变量,从而在每个客户/用户级别上实现适配,同时仍然使用相同的产品,即不改变产品的二进制代码。由此,实现了用户工作流和数据管理的快速和灵活的适配、以及软件产品功能的定制。
[0017]
在一些实施例中,该方法进一步包括:在与每个检测到的触发点相关联的一个或多个动态过程中的最后一个已经被执行之后,由被包括在该系统中并且通信地连接到存储器的处理器将控制返回到正在执行的软件产品。
[0018]
应当注意的是,动态过程源代码可以在可执行软件产品的执行之前和/或在可执行软件产品的执行期间被提供在存储器中。
[0019]
可选地,合适的方法步骤可以被重复地执行,如详细描述中进一步描述的。
[0020]
在一个或多个实施例中,可执行软件产品在开发期间通过以下方式来生成:由外部编译器将软件产品源代码编译成二进制或中间代码;以及由外部链接器将二进制或中间代码链接到可执行软件产品中。
[0021]
根据本发明的另一方面,提供了一种用于在运行时改变正在执行的软件产品的功能的计算机化系统。该系统包括被配置成存储可执行软件产品的存储器,其中可执行软件产品是使用面向对象的编程语言生成的。可执行软件产品包括:至少一个第一编程接口;至少一个触发点,指示用于调用与相应触发点相关联的一个或多个检测到的动态过程的软件代码中的位置;触发点检测器,被配置成检测被包括在可执行软件产品中的一个或多个触
发点;以及改变检测器,被配置成在运行时检测存储在存储器中的任何动态过程源代码的任何添加、删除或改变。可执行软件产品进一步包括:运行时编译器、运行时链接器和运行时加载器,它们被配置成在运行时、即在可执行软件产品的执行期间编译、链接和加载动态过程源代码。存储器进一步被配置成存储被设计成在可执行软件产品中引入功能的改变的至少一个动态过程的动态过程源代码,其中每个动态过程的动态过程源代码包括至少一个第二编程接口,其中至少一个第二编程接口中的每一个符合至少一个第一编程接口之一。该系统进一步包括或者通信地连接到系统加载器,该系统加载器被配置成通过将可执行软件产品加载到存储器中来在动态运行时环境中创建执行程序。改变检测器被配置成在运行时、即在可执行软件产品的执行期间检测存储器中的动态过程源代码的任何添加、删除或改变。运行时编译器被配置成在运行时编译所包括的动态过程源代码的选择。运行时链接器被配置成在运行时链接经编译的动态过程。触发点检测器被配置成在运行时检测被包括在可执行软件产品中的一个或多个触发点。该系统进一步被配置成在运行时并且响应于对一个或多个触发点的检测,从存储器中调用与每个检测到的触发点相关联的一个或多个动态过程;并且运行时加载器被配置成在运行时加载或执行正在执行的软件产品内的一个或多个所调用的动态过程。
[0022]
在一个或多个实施例中,该系统进一步包括通信地连接到存储器的处理器,处理器被配置成:在与每个检测到的触发点相关联的一个或多个动态过程中的最后一个已经被执行之后,将控制返回到正在执行的软件产品。
[0023]
该系统可以被配置成重复地执行合适的方法步骤,如在详细描述中进一步描述的。
[0024]
存储器可以被配置成在运行时、即在可执行软件产品的执行期间接收或检索以及存储至少一个动态过程的动态过程源代码。
[0025]
该系统可以进一步通信地连接到外部编译器,该外部编译器被配置成将软件产品源代码编译成二进制或中间代码,并且该系统可以通信地连接到外部链接器,该外部链接器被配置成在开发期间将二进制或中间代码链接到可执行软件产品中,从而生成可执行软件产品。
[0026]
根据又一方面,提供了一种可加载到通信地连接到处理单元的非易失性数据载体中的计算机程序,该计算机程序包括软件,该软件用于当该程序在处理单元上运行时执行根据本文中呈现的任何实施例的方法。
[0027]
根据仍另一方面,提供了一种包含上面描述的计算机程序的非易失性数据载体。
[0028]
本文中描述的与本发明的方面之一相关的所有优点同等地适用于其他方面中的每一个。
附图说明
[0029]
现在将参考所附的附图来更详细地描述本发明,在附图中:
[0030]
图1示意性地公开了根据本发明的一个或多个实施例的计算机化系统;
[0031]
图2是运行时环境中的软件产品的开发和执行的示意性视图,包括根据本发明的一个或多个实施例的动态过程的使用;
[0032]
图3是根据本发明的一个或多个实施例的方法的流程图。
[0033]
所有的图都是示意性的,不一定按比例绘制,并且总体上仅示出了为了阐明相应实施例所必需的部分,而其他部分可以被省略或仅仅被暗示。在多个附图中出现的任何参考数字遍及附图指代相同的对象或特征,除非另有指示。
具体实施方式
[0034]
导言
[0035]
考虑如下复杂的情况:其中业务逻辑本身(即,软件产品中的逻辑流/工作流和算法)需要在每个客户/用户级别上被采用——仍然使用相同的产品,即不改变产品的二进制代码。对于在背景技术部分中列出的先前解决方案,存在如下共同的问题:即,软件产品功能在开发之后是静态的。为了在每个客户/用户级别上实现适配——仍然使用相同的产品,即不改变产品的二进制代码,发明人已经认识到该解决方案需要使得客户/用户能够在开发阶段之后的时间点处动态地更改功能。
[0036]
例如,传统的框架,就像库一样,由开发者在产品正在被构建时使用,并且不会为客户/用户提供任何改变功能的方式,而脚本仅可以访问产品中的预定义的操作或数据集,即,由产品开发者显式地暴露的操作或数据变量集。
[0037]
涉及提供更动态方法的问题的其他解决方案是过滤技术、动态库、以及存储过程(stored procedure)。然而,考虑到提供用户工作流和数据管理的快速和灵活的适配、以及软件产品功能的定制,这些解决方案中没有一个是令人满意的。
[0038]
由例如iis流水线(pipeline)使用的过滤技术提供了要“被插入”并与产品一起工作的自定义逻辑。在iis流水线的情况下,产品是web服务,并且过滤器对传入数据进行变换,但是相同的基本技术可以应用于其他情形中,以动态地更改功能。但是,即使在iis流水线的情况下的过滤器是使用与产品本身相同的语言(例如,c#)定义的,并且是在运行时编译的,但它基本上具有与关于产品的脚本相同的角色,即,它不能够在源代码级别上访问产品中的内部操作或数据变量。即使iis本身被认为是产品,也是如此。即使过滤器(从iis供应商的视角)是由客户开发的,但却是由iis(产品)动态地编译的,过滤器也不是在iis内执行的,而是作为外部程序组件执行的。
[0039]
在专利文献us 2015/0370552 a1中找到了旨在向产品添加定制而不改变原始源代码的相关技术的另一个示例,该专利文献公开了一种通过确定是否针对源代码的编程式单元定义了至少一个定制来修改该编程式单元的执行行为的计算机实现方法。在us 2015/0370552 a1中,“执行平台”经由执行流水线来执行定制软件,针对每个编程式单元或代码块来检查任何定制是否已经相对于编程式单元被定义或者被附接,并且在此之后执行该代码块。换句话说,对定制的检测由单独的“执行平台”在执行可执行软件产品的每个顺序可执行块之前执行,即,不是在运行时执行,也不是通过执行软件产品本身来执行。此外,us 2015/0370552 a1的解决方案具有如下缺点:原始源代码和定制的合并需要访问原始源代码。
[0040]
这与在正在执行的软件产品内(即,在运行时在软件产品的执行期间)被执行并且因此有权在源代码级别上访问产品中的内部操作、类和/或数据变量的动态过程相反。换句话说,根据本文中的实施例,使得动态过程能够执行,就好像它们是正在执行的软件产品的一部分并且已经与之链接,由此所述动态过程被提供了对与正在执行的软件产品本身相同
的内部操作、类和/或数据变量的访问。在动态过程的源代码中,使用了软件产品的源代码中给出的内部操作、类和/或数据变量的名称、引用或符号。在本发明的实施例中,如本文中所描述的,软件产品在开发阶段中已经被适配成包括触发点,例如源代码中的预设位置,在该预设位置处,可执行代码可以在执行期间被更改,该触发点在可执行软件产品的执行期间、即在运行时触发检测到的动态进程(process)的执行。仅出于说明性目的,触发点可以例如与链接进行比较,链接被引入源代码中一次并保持静态,但是其中链接或触发点所关联的内容、函数(function)、动态进程等可以在任何时间处被更改。有利的是,如本文中描述的,这意味着开发者不需要有权访问软件产品的原始源代码或其副本。另外的显著优点是,可执行软件产品的执行不必在每次引入新的定制时开始,这是由于运行时编译器、链接器和加载器被配置成编译、链接和加载与特定触发点相关联的任何动态进程的软件代码,该触发点已经被定义为软件产品的一部分。此外,任何数量的链接可以有利地同时与相同的触发点相关联,从而使得能够针对不同的用户、通常是针对使用软件产品的相同运行时实例的不同客户进行单独的定制。
[0041]
动态库(或动态链接库dll)是可以由产品动态地加载的库,并且因此可以用于动态地改变整个产品所提供的功能。动态库提供了去往可以由产品调用的操作集的接口。关键是,即使在产品被创建时该接口本身必须对于产品是已知的,那些操作的实现也可以动态地改变。典型的应用是适配器或驱动器,例如打印机驱动器,其中打印命令对于不同的打印机被不同地实现。然而,正如脚本和过滤器一样,动态库不会在源代码级别上访问产品中的操作或数据变量(如果没有被设计为动态过程的话)。
[0042]
存储过程是由数据库引擎用来封装对数据库中的数据和作为参量(argument)传递的数据进行操作的逻辑的方法。典型的用途是重用复杂查询以及维护应用级别一致性。存储过程可以由客户动态地定义,即,它们不是数据库的一部分,并且即使在与使用数据库的产品(软件产品/软件应用)捆绑(bundle)在一起时,通常也可由客户来访问。因此,存储过程可以被认为是一种改变产品的功能而不改变产品本身的技术。然而,就像脚本和过滤器一样,存储过程不会在源代码级别上访问应用产品中的操作或数据变量。
[0043]
发明人已经认识到,根据本文中呈现的实施例,使用动态过程,上面的问题得到解决或者至少得到改善。通过使用动态过程,使得能够在源代码级别上使用软件产品中的所有操作、类和/或数据变量,从而在每个客户/用户级别上实现适配——仍然使用相同的产品,即不改变产品的二进制代码。
[0044]
动态过程在本文中被定义为如下方法:该方法允许业务逻辑/工作流等以如下这种方式被动态地定义和嵌入到软件产品/软件应用中,使得它被给予在源代码级别上对软件产品/软件应用中的操作和数据变量的访问权,而不改变实际的产品,如本文中的实施例中所描述的。
[0045]
对于动态过程的关键在于:它们是以与产品本身相同的原生语言来定义的,并且由产品本身在运行时动态地编译。然后,它们在与产品本身相同的进程和存储器内执行,并且由此被给予在源代码级别上对产品中的操作和数据变量的访问权。
[0046]
由于被编译,动态过程将与原生代码一样快地执行。并且由于编译仅当产品被初始化或动态过程被修改时完成,因此性能开销是可忽略的。
[0047]
换句话说,动态过程(dp)是软件子例程,该软件子例程定义了一条逻辑,通常是一
些定制的特定工作流。动态过程的接口符合它应在其中被使用的软件产品——主机——所定义的接口之一,典型地通过从接口定义继承。
[0048]
可以是主机应用或主机设备的主机在本文中被定义为用户的软件产品实例,或者如果作为服务来提供,则被定义为用户的“账户”。
[0049]
动态过程是使用与主机相同的编程语言来定义(编程)的,所述编程语言例如但不限于c#。根据本文中呈现的实施例,动态过程由主机本身在运行时动态地编译,并且以如下这种方式被集成在主机运行时环境中,使得它被给予对与主机本身相同的进程和存储器的访问权。动态过程在主机所定义的触发点处由主机来调用。一旦动态过程被调用,它就有权在源代码级别上访问对于软件产品可用的所有操作、类和/或变量。
[0050]
动态过程的使用包括自动化工作流机制和数据验证两者。此外,动态过程可以单个地(individually)针对不同的客户来整合(consolidate)并集中(centralize)逻辑,这在传统上需要在应用中实现。作为非限制性示例,特定软件产品的业务逻辑或工作流规则可以包括如下规则:该规则控制如果软件产品实例的用户发送了电子邮件并且收件人电子邮件地址无效,则电子邮件被发送到收集电子邮件地址。该规则在软件产品的源代码中实现。假设软件产品的用户对应用与电子邮件的自动发送相关的第二规则感兴趣。即使地址列表在存储器或数据库中可用,这种功能的控制也是在软件产品的核心(即源代码)中实现的,并且因此不可经由sql脚本来访问,该sql脚本在技术上没有被使得能够调取(call)软件产品的核心中的功能。根据来自用户的请求,产品所有者在传统上具有两个选项:1)扩展原始软件产品以包括新功能,或者2)针对该用户以及要求了相同适配的任何其他用户来开发软件产品的客户特定版本。选项1)的缺点是软件产品将接连地增长以包括所有用户请求的添加,并且从一个版本发布到下一个版本发布的产品周期将增加。随着软件产品增长,软件产品也将更难以概述和维护。选项2)的缺点是版本数量将增加,从而使产品维护成为难题。具有单个标准软件产品的优点也丧失了。使用动态过程,另外的选项3)显现了,其允许产品所有者将标准产品保持完整,作为单个版本,并且使用动态过程来实现所需的功能改变,如本文中的实施例中所描述的。
[0051]
业务逻辑/工作流与产品核心的这种分离简化了用户工作流和数据管理的配置和适配,并且允许高度定制的功能。这也将允许对个体客户工作流需要的更灵活且更快速的适配,因为这可以在不改变产品或不分发产品的新版本的情况下完成。
[0052]
用例示例
[0053]
软件产品的客户/用户可以是对软件系统功能和数据访问的特定适配和配置感兴趣的任何方或组织。
[0054]
在下文中,健康护理行业被用作示例,并且典型的客户然后将是所描述的对患者的所登记定量或定性数据感兴趣的任何组织,并且可以是公共或私有健康护理、学术研究项目、生命科学行业研究项目、公共/私有登记处、定性登记处、生物银行、健康权威机构等。
[0055]
典型地,客户/用户将使用具有数据库的产品,并且业务逻辑被表示为工作流功能或任何种类的与如下相关的功能:诸如访问登记步数、体重、心电图度量、肺活量度量、血压、患者的疼痛感知程度等、或者访问编辑患者电话号码。
[0056]
功能的执行意味着动态过程成为主函数,该主函数控制调取程序中的其他函数,还包括拒绝用户调取一个或若干个函数的可能性。
[0057]
示例1)动态过程可以用于自动地触发与要进行即将到来的膝盖手术的患者相关的工作流中的下一个步骤,例如,直到患者已经确认了手术日期,才将为患者图示患者的待办事项列表。动态过程用于当客户希望将应用应用于他们的特定工作流需要时节省时间和金钱。
[0058]
示例2)用于活动规划的产品具有一些内置的业务逻辑,以用于应对不同的活动类型。例如,“反复出现的(recurring)活动”不会在已经过去的日期发布。这种业务逻辑典型地在产品的“应用层”实现,而不是在数据库中实现。
[0059]
假设存在需要修改或重新定义示例1中描述的工作流的客户。不管哪种方法,工作流定义然后都必须访问应用层,以利用内置的业务逻辑。
[0060]
要注意的是,业务逻辑通常构成产品的核心,并且在该示例中,通过直接访问产品数据库级别来绕过业务逻辑需要业务逻辑被重新实现,这与起初(in the first place)使用该产品的原因是矛盾的。
[0061]
通过使用动态过程,这种客户特定的要求可以在不需要改变应用核心或数据库管理系统的情况下完成。
[0062]
动态过程不需要是客户特定的。相反,用于标准化计算的这种算法(例如,诸如bmi、pasi和dlqi之类的医学得分)非常适合被封装为动态过程。
[0063]
但是要注意的是,只因为计算是标准化的,并不意味着它从成为产品本身的一部分而受益。这将导致包括针对所有客户的所有计算,这将使产品变得不必要地大。此外,“标准化”不一定意味着它是以同样的方式完成的。bmi计算可能例如在如何检索输入数据或者是否也应计算标准差等方面是不同的。
[0064]
除了触发那些动态过程的用户具有的访问权限之外,动态过程还可以被授予其他访问权限。这可能看起来是潜在的安全性漏洞,但是请记住,定义动态过程的不是个体用户,而是客户(即,起初被授予用户访问权限的相同组织)。动态过程可以被用作生命线,即,一种用于允许关键但通常不被允许的操作的方式。例如,从用户通常无权访问的数据来聚集统计信息。动态过程也可以用于针对注入攻击进行保护,在注入攻击中,用户经由客户端程序向服务器发送(恶意)数据以调用不想要的行为。
[0065]
首先,动态过程由主机(即,服务器)调用,而不是由客户端直接调用。其次,传递给动态过程的参数已经是(源代码级别上的)普通数据。这与例如存储过程相反,在存储过程中,包含命令和数据两者的sql命令被解析,这允许打开被解析为命令的(恶意)数据。
[0066]
系统架构
[0067]
现在将结合图1和图2来描述系统架构。
[0068]
图1示出了用于在运行时改变正在执行的软件产品230的功能的计算机化系统100的示意性视图。图2是运行时环境中的软件产品的开发和执行的示意性视图。产品开发阶段在本文中被标示为200,并且产品执行阶段被标示为220。如图2中所示,导致生成可执行软件产品210的步骤和功能是产品开发阶段200的一部分,而可执行软件产品210的加载222以及在运行时——即,在动态运行时环境230内的可执行软件产品210的执行期间——所执行的所有步骤和功能是产品执行阶段220的一部分。
[0069]
系统100包括被配置成存储可执行软件产品210的存储器120,其中可执行软件产品210是使用面向对象的编程语言生成的。可执行软件产品210包括至少一个第一编程接口
211;至少一个触发点212,其指示用于调用与相应触发点212相关联的一个或多个检测到的动态过程的软件代码中的位置;以及触发点检测器213,其被配置成检测被包括在可执行软件产品210中的一个或多个触发点212。可执行软件产品210进一步包括:改变检测器214,其被配置成在运行时检测存储在存储器120中的任何动态过程源代码240的任何添加、删除或改变;以及运行时编译器215、运行时链接器216和运行时加载器217,它们被配置成在运行时、即在可执行软件产品210的执行期间编译、链接和加载动态过程源代码。存储器120进一步被配置成存储被设计成在可执行软件产品210中引入功能的改变的至少一个动态过程的动态过程源代码240,其中每个动态过程的动态过程源代码240包括至少一个第二编程接口,其中至少一个第二编程接口中的每一个符合至少一个第一编程接口之一。
[0070]
该系统进一步包括或者通信地连接到系统加载器140,该系统加载器被配置成通过将可执行软件产品210加载到存储器120中从而在动态运行时环境230中创建执行程序232。
[0071]
改变检测器214被配置成在运行时、即在可执行软件产品210的执行期间检测存储器120中的动态过程源代码240的任何添加、删除或改变。
[0072]
运行时编译器215被配置成在运行时编译动态过程源代码的选择,并且运行时链接器216被配置成在运行时链接经编译的动态过程。
[0073]
改变检测器214可以被配置成通过将存储器120中的动态过程源代码240(即,先前编译和链接的动态过程源代码240)与存储在对于系统100可访问的储存库中的对应动态过程源代码进行比较,来在运行时检测这种添加、删除或改变。存储在储存库中的动态过程源代码可以由开发者更改,该开发者被使得能够通过合适的接口将添加、删除和/或改变引入到存储在储存库中的动态过程源代码。在这些实施例中,改变检测器214被配置成:如果该比较示出了在存储器120中的动态过程源代码240与存储在储存库中的动态过程源代码之间存在差异,则检测到存在对动态过程源代码240的添加、删除或改变。通过以上面的方式或任何其他合适的方式检测对动态过程源代码240的任何这种添加、删除或改变,改变检测器214进一步使得做出用于编译和链接的动态过程源代码240的选择。
[0074]
该选择可以例如包括存储在动态源代码储存库中的所有动态过程、只有已经被更改的所存储的动态过程、或已经被更改的所存储的动态过程和取决于被更改的动态过程之一的任何所存储的动态过程。
[0075]
因此,用于由运行时编译器215编译并由运行时链接器216链接的动态过程源代码240的选择基于对动态过程源代码240的任何添加、删除或改变的检测,并且是响应于该检测而执行的。因此,系统100可以进而被配置成:响应于改变检测器215检测到动态过程源代码240的至少一个添加、删除或改变,在运行时执行从动态过程源代码储存库中选择动态过程源代码以用于编译和链接。系统100可以被配置成针对编译和链接来选择存储在储存库中的所有动态过程、只有已经被更改的所存储的动态过程、或已经被更改的所存储的动态过程和取决于被更改的动态过程之一的任何所存储的动态过程,这取决于应用了哪些选择规则。由于对动态过程源代码的任何添加、删除或改变的检测引起用于编译和链接的动态过程源代码240的选择,并且进一步引起对动态过程源代码选择的编译和链接,因此改变检测器214也可以被称为编译触发器。
[0076]
触发点检测器213被配置成在运行时检测被包括在可执行软件产品210中的一个
或多个触发点。系统100进而被配置成:在运行时并且响应于对一个或多个触发点的检测,从存储器120中调用与每个检测到的触发点相关联的一个或多个动态过程。
[0077]
此后,运行时加载器217被配置成在运行时加载或执行正在执行的软件产品内的一个或多个所调用的动态过程。换句话说,运行时加载器217被配置成:在动态运行时环境230中,在运行时加载或执行执行程序232内的一个或多个所调用的动态过程。由于被包括在可执行软件产品210中的一个或多个触发点的检测引起与每个检测到的触发点相关联的一个或多个动态过程的执行,因此触发点检测器213也可以被称为执行触发器。
[0078]
任何数量的动态过程可以有利地同时与相同的触发点相关联。系统100可以被配置成:在运行时并且响应于对一个或多个触发点的检测,取决于对于系统100可访问的至少一个规则(例如,存储在存储器120中的规则)从存储器120中调用与每个检测到的触发点相关联的一个或多个动态过程,其中所述至少一个规则支配了(govern)与某个触发点相关联的动态过程中的哪些要被调用。作为非限制性示例,多个客户端中的每一个可以使用软件产品的公共实例,其中关于哪些动态过程与哪个客户端相关联的信息被存储在存储器中。由此,使得能够针对每个客户端来定制软件产品实例。此外,在这种情况下,改变检测器214仅需要检测与特定客户端相关联的动态过程源代码240中的任何添加、删除或改变,从而使得如本文中描述的改变检测和后续处理在计算上不太昂贵。
[0079]
系统100可以进一步包括通信地连接到存储器120的处理器110,处理器110被配置成:在与每个检测到的触发点相关联的一个或多个动态过程中的最后一个已经被执行之后,将控制返回到正在执行的软件产品。
[0080]
存储器120可以进一步被配置成在运行时、即在可执行软件产品210的执行期间存储至少一个动态过程的动态过程源代码240。
[0081]
该计算机化系统可以进一步通信地连接到外部编译器,该外部编译器被配置成将软件产品源代码202编译204成二进制或中间代码206,其中系统100进一步通信地连接到外部链接器,该外部链接器被配置成在开发期间将二进制或中间代码206链接208到可执行软件产品210中,从而生成可执行软件产品230。如图2中所示,由外部编译器进行的编译204和由外部链接器进行的链接208是在导致生成可执行软件产品210的产品开发阶段200期间执行的,即,不是在运行时执行的。
[0082]
方法实施例
[0083]
现在将结合图3来描述一个或多个方法实施例。
[0084]
图3示出了用于改变软件产品(软件程序、软件应用)的功能而不改变软件产品本身的方法的流程图,该方法也可以被称为使用动态过程的方法,该方法包括:
[0085]
在步骤310中:在系统100的存储器120中提供可执行软件产品210,其中可执行软件产品210是使用面向对象的编程语言生成的。
[0086]
可执行软件产品210包括:
[0087]-至少一个第一编程接口211;
[0088]-至少一个触发点212,指示用于调用与相应触发点212相关联的一个或多个检测到的动态过程的软件代码中的位置;
[0089]-触发点检测器213,被配置成检测被包括在可执行软件产品210中的一个或多个触发点212;
[0090]-改变检测器214,被配置成在运行时检测存储在存储器120中的任何动态过程源代码240的任何添加、删除或改变;以及
[0091]-运行时编译器215、运行时链接器216和运行时加载器217,它们被配置成在运行时、即在可执行软件产品210的执行期间编译、链接和加载动态过程源代码。
[0092]
在根据图3的方法开始之前,可执行软件产品230典型地在开发期间通过以下方式来生成:由通信地连接到系统100的外部编译器将软件产品源代码202编译204成二进制或中间代码206;以及由外部链接器将二进制或中间代码206链接208到可执行软件产品210中。
[0093]
在一个或多个实施例中,软件产品可以在开发期间被设计成允许通过以下方式来托管动态过程:在动态运行时环境中,通过使用面向对象的编程语言来提供软件产品;针对每个潜在的动态过程在源代码中定义编程接口的规范;在软件产品源代码中插入一个或多个动态过程触发点(下文中称为触发点),即软件产品源代码中的一个或多个点,其中存储在存储器120中的动态过程的选择要被调用;以及插入功能以在运行时检测新的、被删除的或被改变的动态过程源代码,例如以改变检测器214的形式。在这些实施例中,在开发期间设计软件产品以允许托管动态过程可以进一步包括将功能插入到软件产品源代码中,以在运行时编译和链接动态过程源代码,例如以运行时编译器215和运行时链接器216的形式,考虑到动态过程源代码可以包含对数据的引用、以及由正在执行的软件产品本身提供的操作。为了实现这一点,正在执行的软件产品本身中的符号、即数据变量和操作的地址被作为输入传递到运行时编译器和运行时链接器。在这些实施例中,在开发期间设计软件产品以允许托管动态过程可以进一步包括将功能插入到软件产品源代码中,以在运行时加载经编译和链接的动态过程源代码,例如以运行时加载器217的形式。在这些实施例中,运行时编译器215、运行时链接器216和运行时加载器中的任何或全部换句话说是可执行软件产品210本身的一部分,并且由此被配置成在可执行软件产品的执行期间(即,在运行时)操作。
[0094]
软件产品典型地作为单独的实例被安装在用户设备上,或者由服务提供商作为服务(软件即服务saas)集中地托管。具有其上安装了软件产品实例的用户设备的用户、或者具有访问saas的账户等的用户可以是例如对适配或定制软件产品以供他们相应的客户群(customer base)使用感兴趣的公司或组织。相应用户设备或账户的一个或多个用户可能例如需要采用软件产品来遵从定制的和/或特定的要求。为了满足这种需要,在开发期间设计软件产品可以进一步包括接收或定义针对软件产品的特定定制的要求或规则,以及评估该要求是否可以由软件产品中已经提供的动态过程来满足。这在技术上受到被设计到软件产品中的接口和触发点的限制,但是也必须考虑到产品的范围(scope)被评估。例如,我们假定软件产品被设计成处理由用户填写的电子表格,并且包括动态过程触发点,该触发点在用户提交电子表格时被调用。这可以用于调用如下动态过程:该动态过程向用户发送确认电子邮件(“感谢您的回答”)。然而,相同的软件产品可能不具有在用户注销时被调用的触发点。因此,触发用于发送针对注销的电子邮件确认(“感谢您的访问”)的动态过程在此时是不可能的。如果确定了针对定制的要求可以由软件产品中提供的动态过程来满足,则在开发期间设计软件产品可以进一步包括响应于被满足的要求来生成一个或多个动态过程。在生成之后,典型地以本领域已知的方式来测试一个或多个动态过程。
[0095]
在步骤320中:在存储器120中提供被设计成在可执行软件产品210中引入功能的
改变的至少一个动态过程的动态过程源代码240,其中每个动态过程的动态过程源代码240包括至少一个第二编程接口,其中至少一个第二编程接口中的每一个符合至少一个第一编程接口之
[0096]
如图3中所指示,可以在步骤330中创建执行程序之前,与步骤330中创建执行程序并行地,和/或在步骤330中创建执行程序之后、即在运行时,在步骤320中提供动态过程源代码,该动态过程源代码可以指示要添加的一个或多个动态过程、或先前存储的动态过程的移除或更改。由此,当本发明的方法开始时,动态过程源代码可以存在于存储器120中。替代地或组合地,动态过程源代码可以在可执行软件产品210的执行期间在存储器120中被接收或检索,例如从在系统100外部并通信地连接到系统100的存储设备130被接收或检索。替代地或组合地,移除或更改动态过程源代码的指令可以在可执行软件产品210的执行期间在存储器120中被接收或检索,例如从外部存储设备130被接收或检索,由此对应于该更改指令的动态过程源代码的移除或更改由处理器110响应于接收到该指令而被执行。这种新的动态过程源代码和/或用于移除和/或更改的指令可以响应于用户(例如开发者)经由连接到外部存储设备130的输入设备提供输入而被生成。外部存储设备130还可以被配置成:响应于来自用户的经由输入设备的输入,向存储器120发送新的动态过程源代码和/或用于移除和/或更改指指令。
[0097]
在步骤330中:通过使用被包括在系统100中或通信地连接到系统100的系统加载器来加载可执行软件产品210,从而在动态运行时环境230中创建执行程序232。
[0098]
该方法继续步骤340至390,这些步骤在运行时被执行,即在可执行软件产品210的执行期间被执行,包括:
[0099]
在步骤340中:使用改变检测器来检测存储器120中的动态过程源代码240的任何添加、删除或改变。
[0100]
步骤340可以进一步包括由改变检测器214通过将存储器120中的动态过程源代码240(即,先前编译和链接的动态过程源代码240)与存储在对于系统100可访问的储存库中的对应动态过程源代码进行比较,来在运行时检测任何添加、删除或改变。存储在储存库中的动态过程源代码可以由开发者更改,该开发者被使得能够通过合适的接口将添加、删除和/或改变引入到存储在储存库中的动态过程源代码。在这些实施例中,步骤340可以进一步包括:如果该比较示出了在存储器120中的动态过程源代码240与存储在储存库中的动态过程源代码之间存在差异,则检测到存在对动态过程源代码240的添加、删除或改变。
[0101]
以上面的方式或任何其他合适的方式检测对动态过程源代码240的任何这种添加、删除或改变进一步使得做出用于编译和链接的动态过程源代码240的选择。因此,用于在步骤350和360中由运行时编译器215编译和由运行时链接器216链接的动态过程源代码240的选择基于对动态过程源代码240的任何添加、删除或改变的检测,并且是响应于该检测而执行的。
[0102]
在步骤350中:使用运行时编译器215来编译检测到的动态过程源代码240的选择。
[0103]
步骤350可以进一步包括如下方法步骤或者在其之前有如下方法步骤:响应于改变检测器215检测到动态过程源代码240的至少一个添加、删除或改变,由系统100从动态过程源代码储存库中选择动态过程源代码以用于编译和链接。
[0104]
该选择例如可以包括从存储在动态过程源代码储存库中的动态过程中选择所有
存储的动态过程、只有已经被更改的所存储的动态过程、或已经被更改的所存储的动态过程和取决于被更改的动态过程之一的任何所存储的动态过程,这取决于应用了哪个选择规则。
[0105]
在步骤360中:使用运行时链接器216来链接经编译的动态过程。
[0106]
在步骤370中:由触发点检测器213来检测被包括在可执行软件产品210中的一个或多个触发点。
[0107]
在一个或多个实施例中,触发点检测器213可以被配置成通过以下方式来检测触发点:检测软件程序源代码中的第一编程接口211,并且确定将检测到的第一编程接口211与存储器120中的一个或多个所存储的动态过程进行映射,该一个或多个所存储的动态过程具有与检测到的第一编程接口相匹配的第二编程接口。
[0108]
在步骤380中:响应于对一个或多个触发点的检测,从存储器120中调用与每个检测到的触发点相关联的一个或多个动态过程。
[0109]
在步骤390中:使用运行时加载器217来加载或执行正在执行的软件产品内的一个或多个所调用的动态过程。
[0110]
换句话说,步骤390包括使用运行时加载器217在动态运行时环境230中加载或执行执行程序232内的一个或多个所调用的动态过程。
[0111]
在一个或多个实施例中,执行一个或多个动态过程包括在源代码级别上访问主机或正在执行的软件产品232(本文中也称为执行程序232)中的数据和操作。
[0112]
在一个或多个实施例中,该方法可以进一步包括:
[0113]
在可选步骤400中:在与每个检测到的触发点相关联的一个或多个动态过程中的最后一个已经被执行之后,由被包括在系统100中并且通信地连接到存储器120的处理器110将控制返回到正在执行的软件产品或执行程序232。
[0114]
在可选步骤410中:终止对主机的检查。
[0115]
如果可选步骤410被执行,并且确定了主机被终止,则该方法结束。
[0116]
在一些实施例中,如果可选步骤410被执行,并且确定了主机没有被终止,则该方法返回到步骤370以寻找另一个触发点。在其他实施例中,如果可选步骤410被执行,并且确定了主机没有被终止,则该方法返回到步骤340,以寻找动态过程源代码的改变。
[0117]
换句话说,在一个或多个实施例中,步骤340至390或步骤370至390以及可选地还有步骤400和410结合这些替代方案中的任何一个可以被重复执行。
[0118]
由此,主机可以保持执行,直到触发点被达到并且调用序列被重复,或者直到主机被终止。
[0119]
另外的实施例
[0120]
在一个或多个实施例中,该系统可以被配置成执行本文中呈现的任何或所有相关方法步骤和功能。
[0121]
上面参考图3描述的所有方法/过程步骤以及步骤的任何子序列可以借助于经编程的处理器来控制。此外,尽管上面参考附图描述的本发明的实施例包括处理器以及在至少一个处理器中执行的过程,但是本发明因此也扩展到计算机程序,特别是载体上或载体中的计算机程序,该计算机程序被适配用于将本发明投入实践。该程序可以是以源代码、目标代码、源代码和目标代码的中间代码的形式,诸如以部分编译的形式,或者以适用于在根
据本发明的过程的实现中使用的任何其他形式。该程序可以要么是操作系统的一部分,要么是单独的应用。载体可以是能够携带该程序的任何实体或器件。例如,载体可以包括存储介质,诸如闪速存储器、rom(只读存储器),例如dvd(数字视频/多功能盘)、cd(压缩盘)或半导体rom、eprom(可擦除可编程只读存储器)、eeprom(电可擦除可编程只读存储器)或磁性记录介质,例如软盘或硬盘。此外,载体可以是可传输的载体,诸如电信号或光学信号,该信号可以经由电缆或光缆或通过无线电或通过其他部件来传送。当该程序体现在可以由线缆或其他设备或部件直接传送的信号中时,载体可以由这种线缆或设备或部件构成。替代地,载体可以是其中嵌入了该程序的集成电路,该集成电路被适配用于执行相关过程、或者用于在相关过程的执行中使用。
[0122]
在一些实施例中,提供了一种可加载到通信地连接到处理单元的非易失性数据载体中的计算机程序,该计算机程序包括软件,该软件用于当该程序在处理单元上运行时执行根据本文中呈现的任何方法实施例的方法。在一些实施例中,提供了一种包含该计算机程序的非易失性数据载体。
[0123]
附加地,本领域技术人员在实践所要求保护的发明时,通过研究附图、公开内容和所附权利要求,可以理解和实现对所公开的实施例的变化。在权利要求中,词语“包括”不排除其他元件或步骤,并且不定冠词“一(a或an)”不排除多个。在权利要求中,词语“或”不应被解释为排他性的“或”(有时称为“xor”)。相反地,诸如“a或b”之类的表达覆盖了“a而不是b”、“b而不是a”以及“a和b”的所有情况,除非另有指示。某些措施被列举在相互不同的从属权利要求中的单纯事实并不指示这些措施的组合不能够被有利地使用。
[0124]
权利要求中的任何参考符号不应被解释为限制范围。
[0125]
还要注意的是,来自本文中描述的各种设备或方法实施例的特征可以自由地组合,除非明确声明这种组合将是不合适的。
技术特征:
1.一种用于在运行时改变正在执行的软件产品的功能的计算机化方法,所述方法包括:a.在系统(100)的存储器(120)中提供可执行软件产品(210),其中所述可执行软件产品(210)是使用面向对象的编程语言生成的,所述可执行软件产品(210)包括:i)至少一个第一编程接口(211);ii)至少一个触发点(212),指示用于调用与相应触发点(212)相关联的一个或多个检测到的动态过程的软件代码中的位置;iii)改变检测器(214),被配置成在运行时检测存储在存储器(120)中的任何动态过程源代码(240)的任何添加、删除或改变;以及iv)触发点检测器(213),被配置成检测被包括在所述可执行软件产品(210)中的一个或多个触发点(212);v)运行时编译器(215)、运行时链接器(216)和运行时加载器(217),它们被配置成在运行时、即在所述可执行软件产品(210)的执行期间编译、链接和加载动态过程源代码;b.在存储器(120)中提供被设计成在所述可执行软件产品(210)中引入功能的改变的至少一个动态过程的动态过程源代码(240),其中每个动态过程的动态过程源代码(240)包括至少一个第二编程接口,其中所述至少一个第二编程接口中的每一个符合所述至少一个第一编程接口之一;c.通过使用被包括在系统(100)中或通信地连接到系统(100)的系统加载器来加载所述可执行软件产品(210),从而在动态运行时环境(230)中创建执行程序(232);以及在运行时,即在所述可执行软件产品(210)的执行期间:d.使用改变检测器来检测存储器(120)中的动态过程源代码(240)的任何添加、删除或改变;e.使用运行时编译器(215)来编译动态过程源代码的选择;以及f.使用运行时链接器(216)来链接经编译的动态过程;g.由触发点检测器(213)来检测被包括在所述可执行软件产品(210)中的一个或多个触发点;h.响应于对一个或多个触发点的检测,从存储器(120)中调用与每个检测到的触发点相关联的一个或多个动态过程;以及i.使用运行时加载器(217)来加载或执行所述执行程序(232)内的一个或多个所调用的动态过程。2.根据权利要求1所述的方法,进一步包括:在与每个检测到的触发点相关联的一个或多个动态过程中的最后一个已经被执行之后,由被包括在系统(100)中并且通信地连接到存储器(120)的处理器(110)将控制返回到所述执行程序(232)。3.根据权利要求1或2所述的方法,其中权利要求1的方法步骤d至i、可选地权利要求1的步骤b以及可选地权利要求2的方法步骤被重复地执行。4.根据前述权利要求中任一项所述的方法,其中步骤b在步骤c之前、与步骤c并行地、或者在步骤c之后执行。5.根据权利要求1所述的方法,其中所述可执行软件产品(230)是在开发期间通过以下方式生成的:
由通信地连接到系统(100)的外部编译器将软件产品源代码(202)编译(204)成二进制或中间代码(206);以及由外部链接器将所述二进制或中间代码(206)链接(208)到可执行软件产品(210)中。6.一种用于在运行时改变正在执行的软件产品(230)的功能的计算机化系统(100),所述系统(100)包括:存储器(120),被配置成存储可执行软件产品(210),其中所述可执行软件产品(210)是使用面向对象的编程语言生成的,所述可执行软件产品(210)包括:i)至少一个第一编程接口(211);ii)至少一个触发点(212),指示用于调用与相应触发点(212)相关联的一个或多个检测到的动态过程的软件代码中的位置;iii)改变检测器(214),被配置成在运行时检测存储在存储器(120)中的任何动态过程源代码(240)的任何添加、删除或改变;iv)触发点检测器(213),被配置成检测被包括在所述可执行软件产品(210)中的一个或多个触发点(212);v)运行时编译器(215)、运行时链接器(216)和运行时加载器(217),它们被配置成在运行时、即在所述可执行软件产品(210)的执行期间编译、链接和加载动态过程源代码(240);其中存储器(120)进一步被配置成存储被设计成在所述可执行软件产品(210)中引入功能的改变的至少一个动态过程的动态过程源代码(240),其中每个动态过程的动态过程源代码(240)包括至少一个第二编程接口,其中所述至少一个第二编程接口中的每一个符合所述至少一个第一编程接口之一;其中所述系统进一步包括或者通信地连接到系统加载器(140),所述系统加载器(140)被配置成通过将所述可执行软件产品(210)加载到存储器(120)中来在动态运行时环境(230)中创建执行程序(232);其中所述改变检测器(214)被配置成在运行时、即在所述可执行软件产品(210)的执行期间检测存储器(120)中的动态过程源代码(240)的任何添加、删除或改变;其中所述运行时编译器(215)被配置成在运行时编译动态过程源代码的选择;以及其中所述运行时链接器(216)被配置成在运行时链接经编译的动态过程;其中所述触发点检测器(213)被配置成在运行时检测被包括在所述可执行软件产品(210)中的一个或多个触发点;其中所述系统(100)被配置成:在运行时并且响应于对一个或多个触发点的检测,从存储器(120)中调用与每个检测到的触发点相关联的一个或多个动态过程;以及其中所述运行时加载器(217)被配置成在运行时加载或执行所述执行程序(232)内的一个或多个所调用的动态过程。7.根据权利要求6所述的计算机化系统(100),进一步包括通信地连接到存储器(120)的处理器(110),处理器(110)被配置成:在与每个检测到的触发点相关联的一个或多个动态过程中的最后一个已经被执行之后,将控制返回到所述执行程序(232)。8.根据权利要求6或7中任一项所述的计算机化系统(100),其中存储器(120)进一步被配置成在运行时、即在所述可执行软件产品(210)的执行期间存储至少一个动态过程的动态过程源代码(240)。
9.根据权利要求6至8中任一项所述的计算机化系统(100),其中所述系统(100)通信地连接到外部编译器,所述外部编译器被配置成将软件产品源代码(202)编译(204)成二进制或中间代码(206),其中所述系统(100)进一步通信地连接到外部链接器,所述外部链接器被配置成在开发期间将所述二进制或中间代码(206)链接(208)到可执行软件产品(210)中,从而生成所述可执行软件产品(230)。10.一种可加载到通信地连接到处理单元的非易失性数据载体中的计算机程序,所述计算机程序包括软件,所述软件用于当所述程序在所述处理单元上运行时执行根据权利要求1至5中任一项所述的方法。11.一种包含前述权利要求的计算机程序的非易失性数据载体。
技术总结
提供了一种通过使用动态过程在运行时改变正在执行的软件产品的功能的方法。进一步提供了对应的计算机化系统、计算机程序以及包含该计算机程序的非易失性数据载体。该计算机程序的非易失性数据载体。该计算机程序的非易失性数据载体。
技术研发人员:B
受保护的技术使用者:艾迪医疗公司
技术研发日:2021.11.11
技术公布日:2023/9/9
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种应用于硼同位素分离的气体提纯工艺的制作方法 下一篇:一种膀胱造瘘管夹持器