CN102880493B - 一种构件间动态依赖关系的自动分析方法 - Google Patents
一种构件间动态依赖关系的自动分析方法 Download PDFInfo
- Publication number
- CN102880493B CN102880493B CN201210362752.3A CN201210362752A CN102880493B CN 102880493 B CN102880493 B CN 102880493B CN 201210362752 A CN201210362752 A CN 201210362752A CN 102880493 B CN102880493 B CN 102880493B
- Authority
- CN
- China
- Prior art keywords
- dynamic dependency
- state
- dynamic
- program
- automat
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 238000004458 analytical method Methods 0.000 claims abstract description 27
- 230000003068 static effect Effects 0.000 claims abstract description 16
- 238000012546 transfer Methods 0.000 claims description 23
- 238000010276 construction Methods 0.000 claims description 7
- 238000004422 calculation algorithm Methods 0.000 claims description 2
- 238000003780 insertion Methods 0.000 claims description 2
- 230000037431 insertion Effects 0.000 claims description 2
- 238000000605 extraction Methods 0.000 abstract description 5
- 238000011161 development Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000005206 flow analysis Methods 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种构件间动态依赖关系的自动分析方法,该方法在程序运行时,能自动计算程序在当前执行环境下精确的动态依赖关系。该方法,在程序运行前,通过静态分析的方法构建程序的动态依赖自动机。当程序运行时,其对应的动态依赖自动机自动运行,同时根据当前的执行情况自适应地更新程序的动态依赖关系。该方法的所有工作都是自动完成,与已有的方法相比,在开发效率和正确性上有了很大的提高。利用此项方法,开发了Java构件间动态依赖关系的自动抽取工具——DDET。DDET对Java字节码直接进行分析和操作,对于任意一个支持动态更新的Java构件系统,运行时可自动获得其精确的依赖关系。
Description
技术领域
本发明属于计算机应用领域,具体是一种构件间动态依赖关系的自动分析方法。
背景技术
软件环境和用户需求总是不断变化的,而这些变化在软件初始设计时,或者很难预测,或者虽然可预测但处理起来成本很大,不适合在当前版本的系统完成。因此越来越需要对已经上线的旧版本的软件系统进行动态更新,即在不停止当前正在运行的系统的前提下对系统进行更新或版本升级,以适应新的环境,满足用户新的需求[1]。动态更新不仅要保证更新前后和更新过程中系统的一致性,而且在保证一致性的同时,我们希望动态更新可以尽快完成,从而减少由于动态更新造成的系统某些服务不可用的时间。
目前可以保障动态更新过程中系统一致性的模型主要有三种:Quiescence、Tranquillity、Version-consistency。它们中的软件系统都是由构件及构件间的依赖关系组成。Quiescence的方法只考虑由系统架构确定的构件间的静态依赖关系,这将导致要更新的构件及其相关联的构件在动态更新中长时间不可用,造成系统较大的破坏性。与静态依赖不同,动态依赖关系是运行系统中正在执行的事务的发起者构件及与其相关联的构件在运行时刻不断变化的依赖(或调用)关系。事务是指构件在一定时间内完成的一系列动作的执行。后两种模型使用事务运行时的动态依赖关系,在保证一致性的同时,可以减少动态更新的时间。动态依赖关系的准确性严重影响了动态更新进行的最佳时机和完成动态更新所需的时间。错误的动态依赖关系可能会破坏动态更新的正确性。
对于动态依赖关系的计算,文献“Yves Vandewoude. Dynamicallyupdating component-oriented systems. PhD thesis,Katholieke Universiteit Leuven, 2007.”提出在程序运行前,由构件的开发人员针对每个程序手工编写一个事务状态机,计算其中每个状态的动态依赖信息,并且在业务逻辑中加入状态转移信息,这样程序在运行时刻可以提供关于自身的动态依赖关系。显然,这种方法给构件的开发人员增加了很多额外的负担,尤其当程序结构比较复杂,与周围构件的调用关系也较复杂时,要手工分析出每个状态的依赖关系并编写出状态机,不仅耗费大量的时间,而且正确性也很难保证。针对这一不足,文献“夏晨,曹春,陶先平. 一个用于动态更新一致性保障的状态机抽取方法.计算机科学, 2010,37(11):151-155.”提出一种通过静态分析自动抽取事务状态机的方法。它通过分析程序源代码的控制结构及构件间的交互端口,自动生成事务的状态机,并自动计算出每个状态的依赖关系。这种方法虽然在开发效率上有了很大的提高,但由于其只采用静态分析的方法,得到的依赖关系在某些位置是不精确的,甚至是错误的,尤其是那些可能多次执行,或者是可由多条路径到达的位置,例如循环结构、分支汇合点。
发明内容
发明目的:针对上述现有技术存在的问题和不足,本发明的目的是提供一种构件间动态依赖关系的自动分析方法,能自动获得程序在当前执行环境下精确的动态依赖关系,不仅提高了开发效率和正确性,而且提高了动态依赖信息的精确度。
技术方案:为实现上述发明目的,本发明采用的技术方案为一种构件间动态依赖关系的自动分析方法,包括如下步骤:
1) 静态分析阶段,构建程序的动态依赖自动机;
2) 静态分析阶段,计算动态依赖自动机中的动态依赖关系的Future信息,所述动态依赖关系包括Future信息和Past信息,其中Future信息是指程序在当前执行环境下,将来可能使用的构件集合,Past信息则指其过去使用过的构件集合;
3) 静态分析阶段,将已经分析出的动态依赖自动机和驱动动态依赖自动机正确自动运行的触发信息插入原程序(这里的“原程序”指修改以前的程序)中;
4) 动态分析阶段,当程序运行时,其对应的动态依赖自动机在触发信息的驱动下自动运行,同时自适应地获得当前执行环境下的动态依赖关系。
所述步骤1) 中构建程序的动态依赖自动机的具体步骤为:
1.1) 构建程序的控制流图(CFG);
1.2) 在程序的CFG上,采用深度优先的搜索算法(DFS),从程序的入口节点开始,递归地分析每个节点;同时,初始化动态依赖自动机的初始状态作为当前状态,此处的状态是指程序在一个代码块中稳定不变的动态依赖关系。
遇到可能引起程序的动态依赖关系发生变化的节点,则执行以下步骤:
1.2.1) 动态依赖自动机生成一个新状态,表示该节点执行后的动态依赖关系,并将当前状态、对应事件和新状态用转移关系连接,并将新状态作为当前状态;
1.2.2)在原程序该节点后插入包含该事件信息的触发状态跳转的语句,从而实现动态依赖自动机中状态间的跳转和其正确自动运行。
直到遍历CFG上所有可能路径上的每个节点。这样,程序的动态依赖自动机构建完成,步骤3中驱动动态依赖自动机自动运行的触发信息也插入完毕。
上述步骤1.2中的可能引起程序的动态依赖关系发生变化的节点,也称事件,包括4种类型:
①程序开始;
②调用外部构件,使用构件提供的服务;
③分支和循环;
④程序结束。
经步骤1构建的动态依赖自动机中,每个状态将来使用的构件集合,即动态依赖关系中的Future信息,可通过分析程序从当前状态到结束状态所有可能的路径,其使用的构件集合即为当前状态精确的Future信息。因此,上述步骤2中计算动态依赖自动机中的动态依赖关系的Future信息具体步骤为:
2.1)对动态依赖自动机中的每个转移,将转移之前的状态的动态依赖关系的Future信息更新为转移之前状态的动态依赖关系、触发转移的事件使用的构件与转移之后的状态的动态依赖关系的Future信息三者的并集;
2.2)重复2.1)的步骤,直到所有状态的动态依赖关系的Future信息不发生变化为止,此时得到了包含动态依赖关系的Future信息的动态依赖自动机。
对于步骤2)得到的动态依赖自动机,步骤3)将其插入到原程序的注释中,不仅方便查找,减少了程序运行时查找其对应动态依赖自动机的开销,同时也不会改变原程序的结构。
程序开始运行时,其对应的动态依赖自动机自动运行,同时根据输入的事件信息自适应地更新程序当前执行环境的动态依赖关系。上述步骤4执行的具体步骤是:
4.1)程序运行时,其对应的动态依赖自动机从初始状态开始运行,同时初始化此时的动态依赖关系中的Past信息为空.
4.2)每执行步骤3)插入的触发信息,则触发程序自适应地从当前状态转移到下一状态,同时更新程序当前的动态依赖关系。自适应更新执行的具体步骤为:4.2.1)新状态的动态依赖关系中的Future信息为搜索包含Future信息的动态依赖自动机,根据当前状态找到经该触发信息转移到的下一状态,该下一状态的内容即为新状态的Future信息;
4.2.2)新状态的动态依赖关系中的Past信息更新为当前状态的Past信息与触发状态转移的事件使用的构件的并集。
有益效果:本发明提出的构件间动态依赖关系的自动分析方法,可以在程序运行过程中自动获得当前精确的动态依赖关系。在程序运行前,通过静态分析的方法构建程序的动态依赖自动机。当程序运行时,其对应的动态依赖自动机自动运行,同时根据当前的执行环境自适应地更新程序的动态依赖关系。此项技术的所有工作都是自动完成,与已有的方法相比,在开发效率和正确性上有了很大的提高。利用上述方法,开发了Java构件间动态依赖关系的自动抽取工具——DDET。DDET对Java字节码直接进行分析和操作,对于任意一个支持动态更新的Java构件系统,运行时可自动获得其精确的动态依赖关系。
附图说明
图1为构件间动态依赖关系的自动分析方法流程图;
图2 为DDET的流程图;
图3 为动态依赖自动机实例图;
图4为 包含动态依赖关系的Future信息的动态依赖自动机实例图;
图5为 动态运行时获得程序精确的动态依赖关系实例图。
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
本发明的发明内容部分所述的技术方案的流程图如图1所示,利用上述方法,开发了Java构件间动态依赖关系的自动抽取工具——DDET(DynamicDependences Extracting Tool,动态依赖抽取工具)。DDET对Java字节码直接进行分析和修改,它的输入可以是包含字节码文件的jar,war,ear包,也可以是单个字节码文件。DDET使用的字节码操纵工具是ASM(ASM是本领域技术人员熟知的工具,主页地址:http://asm.ow2.org/)。DDET的系统框架如附图2所示。
DDET首先判断输入的字节码文件是否包含需要分析的事务方法,对于每个需要分析的事务方法逐一进行静态分析。静态分析的具体过程为:
首先,使用ASM工具对事务进行控制流分析,得到该事务的控制流图。通过控制流分析,可以很容易的知道每个节点的后继节点。在此基础上构建事务的动态依赖自动机,并在构建过程中将事务的事件信息插入到相应的字节码序列中。此处的事件是指,可能引起事务的动态依赖关系发生改变的字节码 (包括程序开始,调用外部构件的方法,分支、循环,程序结束)。
然后,静态计算动态依赖自动机中每个状态将来使用的构件集合future,并将计算出的每个状态的Future信息以及每个状态的转移关系,通过ASM工具写入原字节码文件该事务的Transaction注释中。
最后,当事务执行时,事务的动态依赖自动机自动运行,同时根据当前输入的事件信息和当前的动态依赖关系,自适应地更新下一时刻的动态依赖关系。
我们以一个简单的Java EJB程序为例进行说明。Java程序如下,左边是其源程序,右边是类中的事务方法Example(实例)对应的字节码序列。
事务使用的构件集合通过分析程序中的EJB依赖注入很容易获得:。可能引起事务的依赖关系发生改变的事件通过分析方法Example可得,事件集合如表1所示。
表1 影响事务动态依赖关系的事件
事务从初始状态开始,遍历事务所有可能的执行路径,每遇到一个事件,则生成一个新状态,同时事务由当前状态转移到新状态,由此构建事务的动态依赖自动机,事务方法Example的动态依赖自动机如附图3所示,其中圆圈代表状态,箭头上的文字表示事件信息,箭头与其两端对应的状态组成一个转移。动态依赖自动机中每个状态将来要使用的构件集合Future,可以通过静态分析从当前状态到事务结束状态所有可能的路径获得。具体实现时可通过对每个转移执行更新过程:转移之前状态的Future ,触发转移的事件使用的构件与转移之后的状态的Future三者的并集来更新转移之前状态的Future,直到所有状态的Future不发生变化为止。此时我们得到了包含Future信息的动态依赖自动机,见附图4。附图4中每个状态旁第一行构件集合即为计算出的该状态将来要使用的构件集合Future。
当事务开始运行时,动态依赖自动机从初始状态开始运行,同时初始化当前状态的Past集合为空。根据事务实际执行的路径和输入的事件信息可以确定当前状态程序精确的动态依赖关系,包括Future信息和Past信息,见附图5。附图5中实线表示事务实际执行的路径,其中每个状态的精确的动态依赖关系已计算出,第一行构件集合表示该状态的Future信息,第二行的构件集合为Past信息。附图5中虚线标出的部分表示程序可能执行,但还未在本次执行中执行的路径。
Claims (4)
1.一种构件间动态依赖关系的自动分析方法,其特征在于包括如下步骤:
1)静态分析阶段,构建程序的动态依赖自动机,所述动态依赖自动机包括状态,事件和转移,其中状态指程序在一个代码块中稳定不变的动态依赖关系,事件指可能引起程序的动态依赖关系发生变化的节点,转移是指当事件发生时,程序从一个状态转移到新的状态;具体步骤如下:
1.1)构建程序的控制流图;
1.2)在程序的控制流图上,采用深度优先的搜索算法,从程序的入口节点开始,递归地分析每个节点;同时,初始化动态依赖自动机的初始状态作为当前状态;分析节点的具体步骤如下:
1.2.1)动态依赖自动机生成一个新状态,表示该节点执行后的动态依赖关系,并将当前状态、对应事件和新状态用转移关系连接,并将新状态作为当前状态;
1.2.2)在原程序该节点后插入包含该事件信息的触发状态跳转的语句;
2)静态分析阶段,计算动态依赖自动机中的动态依赖关系的Future信息,所述动态依赖关系包括Future信息和Past信息,其中Future信息是指程序在当前执行环境下,将来可能使用的构件集合,Past信息则指其过去使用过的构件集合;具体步骤如下:
2.1)对动态依赖自动机中的每个转移,将转移之前的状态的动态依赖关系的Future信息更新为转移之前状态的动态依赖关系的Future信息、触发转移的事件使用的构件与转移之后的状态的动态依赖关系的Future信息三者的并集;
2.2)重复2.1)的步骤,直到所有状态的动态依赖关系的Future信息不发生变化为止,此时得到了包含动态依赖关系的Future信息的动态依赖自动机;
3)静态分析阶段,将已经分析出的动态依赖自动机和驱动动态依赖自动机正确自动运行的触发信息插入原程序中;
4)动态分析阶段,当程序运行时,其对应的动态依赖自动机在触发信息的驱动下自动运行,同时自适应地获得当前执行环境下的动态依赖关系。
2.根据权利要求1所述的一种构件间动态依赖关系的自动分析方法,其特征在于所述步骤3)的具体步骤为:
3.1)在原程序的注释中插入所述步骤2)得到的动态依赖自动机。
3.根据权利要求1所述的一种构件间动态依赖关系的自动分析方法,其特征在于所述步骤4)的具体步骤为:
4.1)程序运行时,其对应的动态依赖自动机从初始状态开始运行,同时初始化此时的动态依赖关系中的Past信息为空;
4.2)每执行步骤3)插入的触发信息,则触发程序自适应地从当前状态转移到下一状态,同时更新程序当前的动态依赖关系。
4.根据权利要求3所述的一种构件间动态依赖关系的自动分析方法,其特征在于所述步骤4.2)中执行更新的具体步骤为:
4.2.1)新状态的动态依赖关系中的Future信息为搜索包含Future信息的动态依赖自动机,根据当前状态找到经该触发信息转移到的下一状态,该下一状态的内容即为新状态的Future信息;
4.2.2)新状态的动态依赖关系中的Past信息更新为当前状态的Past信息与触发状态转移的事件使用的构件的并集。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362752.3A CN102880493B (zh) | 2012-09-25 | 2012-09-25 | 一种构件间动态依赖关系的自动分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362752.3A CN102880493B (zh) | 2012-09-25 | 2012-09-25 | 一种构件间动态依赖关系的自动分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102880493A CN102880493A (zh) | 2013-01-16 |
CN102880493B true CN102880493B (zh) | 2015-04-08 |
Family
ID=47481832
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210362752.3A Active CN102880493B (zh) | 2012-09-25 | 2012-09-25 | 一种构件间动态依赖关系的自动分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102880493B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063220B (zh) * | 2014-06-25 | 2017-04-12 | 清华大学 | 基于文件的Linux基础软件依赖关系分析方法 |
CN105786715B (zh) * | 2016-04-08 | 2018-08-31 | 南京大学 | 一种程序静态自动分析方法 |
CN108415709B (zh) * | 2018-02-12 | 2022-01-28 | 北京梆梆安全科技有限公司 | 一种基于有限状态机加固源代码的方法及装置 |
CN108460253B (zh) * | 2018-02-12 | 2021-11-19 | 北京梆梆安全科技有限公司 | 基于顺序、符号执行和单点逻辑的源代码加固方法及装置 |
CN108416191B (zh) * | 2018-02-12 | 2021-11-19 | 北京梆梆安全科技有限公司 | 基于不透明谓词和有限状态机加固源代码的方法及装置 |
CN110032394B (zh) * | 2019-04-12 | 2022-05-31 | 深圳市腾讯信息技术有限公司 | 一种无源码文件的分析方法、装置和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162428A (zh) * | 2007-11-22 | 2008-04-16 | 上海交通大学 | 软件动态演化中构件运行时状态的获取和转换方法 |
CN101739339A (zh) * | 2009-12-29 | 2010-06-16 | 北京航空航天大学 | 一种基于程序动态依赖关系的软件故障定位方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5940619A (en) * | 1996-10-25 | 1999-08-17 | Digital Equipment Corporation | Dynamic fine-grained dependency analysis for a functional language |
KR100672894B1 (ko) * | 2004-12-21 | 2007-01-22 | 한국전자통신연구원 | 제품 계열 아키텍처의 표현 및 검증 장치와 그 방법 |
US8412744B2 (en) * | 2010-06-23 | 2013-04-02 | Microsoft Corporation | Visualization of runtime analysis across dynamic boundaries |
-
2012
- 2012-09-25 CN CN201210362752.3A patent/CN102880493B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162428A (zh) * | 2007-11-22 | 2008-04-16 | 上海交通大学 | 软件动态演化中构件运行时状态的获取和转换方法 |
CN101739339A (zh) * | 2009-12-29 | 2010-06-16 | 北京航空航天大学 | 一种基于程序动态依赖关系的软件故障定位方法 |
Non-Patent Citations (2)
Title |
---|
"Dependence management for dynamic reconfiguration of component-based distributed systems";Xuejun Chen;《IEEE》;20020927;第279-284页 * |
"一种面向动态软件系统结构的在线演化方法";余萍等;《软件学报》;20060630;第17卷(第06期);第1360-1371页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102880493A (zh) | 2013-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102880493B (zh) | 一种构件间动态依赖关系的自动分析方法 | |
US9483284B2 (en) | Version compatibility determination | |
CN106909510B (zh) | 一种获取测试用例的方法以及服务器 | |
US9170788B2 (en) | Analysis of dynamic elements in bounded time | |
CN110990019B (zh) | 一种Java类分析方法、装置、存储介质及电子设备 | |
US9329846B1 (en) | Cooperative program code transformation | |
US7849394B2 (en) | Linked code generation report | |
KR100555116B1 (ko) | 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 | |
EP1918812A1 (en) | A software development system | |
US8621429B2 (en) | Software development support apparatus, function extension method and storage medium for storing function extension program | |
US20090049080A1 (en) | Relationship management for data modeling in an integrated development environment | |
CN108399086B (zh) | 一种微件管理方法、服务器和计算机可读存储介质 | |
CN110109671B (zh) | 一种webpack标签尺寸样式转换方法及装置 | |
CN110209395B (zh) | 一种将sql嵌入高级语言的方法、设备及介质 | |
CN109032631A (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
CN109947432A (zh) | 汇编程序处理方法及相关装置 | |
CN109542444B (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
US20080066061A1 (en) | Method and Data Processing System for Solving Resource Conflicts in Assembler Programs | |
Zwaan et al. | Incremental type-checking for free: Using scope graphs to derive incremental type-checkers | |
CN110209565B (zh) | 一种元数据模型调试方法及其装置 | |
CN110362317B (zh) | 一种代码转换方法、装置和存储介质 | |
CN110058849A (zh) | 流程图的生成方法、装置、计算机设备以及存储介质 | |
US8136094B2 (en) | Relationship management for data modeling in an integrated development environment | |
EP2885712B1 (en) | Imperative attribution for elements in managed runtimes | |
EP2037374A1 (en) | Method for translating a graphical workflow in a textual description |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200715 Address after: No. 41-1, Qianfo Shandong Road, Lixia District, Jinan City, Shandong Province Patentee after: SHANDONG CIVIC SE COMMERCIAL MIDDLEWARE Co.,Ltd. Address before: Xianlin Campus of Nanjing University No. 163 Qixia Xianlin Avenue District of Nanjing City, Jiangsu province 210046 box 603 Department of computer Patentee before: NANJING University |