CN101604262A - 一种获得程序模块间调用关系的方法及装置 - Google Patents
一种获得程序模块间调用关系的方法及装置 Download PDFInfo
- Publication number
- CN101604262A CN101604262A CNA2009101585149A CN200910158514A CN101604262A CN 101604262 A CN101604262 A CN 101604262A CN A2009101585149 A CNA2009101585149 A CN A2009101585149A CN 200910158514 A CN200910158514 A CN 200910158514A CN 101604262 A CN101604262 A CN 101604262A
- Authority
- CN
- China
- Prior art keywords
- shell
- character
- allocating object
- sign
- call relation
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种获得程序模块间调用关系的方法,用于提高获得调用关系的效率。所述方法包括:获得shell,并记录获得的shell的标识;将shell中的字符与预设的关键字进行匹配,在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后;根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。本申请还公开了用于实现所述方法的装置。
Description
技术领域
本申请涉及计算机领域,特别是涉及获得程序模块间调用关系的方法及装置。
背景技术
信息作为现代企业的宝贵资源,占据着越来越重要的地位,已经成为现代企业科学管理的基础,正确决策的前提,有效调控的手段。能否拥有及时、准确、全面的信息已经成为衡量一个企业是否具有发展潜力的一个重要指标。随着这种需求的不断增加,数据仓库的应用在企业中得到普及。其中,数据抽取、转换和加载过程(Extract Transform Load,ETL)是建立数据仓库的重要环节。
ETL过程主要完成以下几项任务:1、数据抽取:从各种不同结构和形态的数据源中提取数据,如从ERP、CRM和财务管理等方面的数据源中提取数据。2、数据转换:根据企业的特定规则,对抽取的数据进行转换,为统计、分析等特定业务服务。3、数据清洗:企业的数据往往存在着大量的质量问题,从简单的数据格式的不一致、数据输入错误、数据不完整到相对较复杂的数据不一致性等问题。显然数据的质量将直接影响基于这些数据的信息服务的质量。数据清洗的目标是通过各种措施从准确性、无冗余、符合应用的需求等方面提高数据的质量。4、数据加载:将抽取、转换及清洗过的数据正确的加载到数据仓库中,并且对数据处理的过程进行监督和管理,以保证整个ETL过程的准确和高效率。
ETL过程通过shell(为UNIX或LINUX操作系统中的功能模块,程序代码的载体)之间的相互调用、存储过程(procedure)之间的相互调用、以及shell对存储过程的调用来实现。获得shell和存储过程的调用关系,是设计和维护ETL过程架构的重要环节。目前获得shell和存储过程的调用关系均是由人工实现,工作量较大,效率较低,并且容易出错。
发明内容
本申请实施例提供一种获得程序模块间调用关系的方法及装置,用于提高获得调用关系的效率。
一种获得程序模块间调用关系的方法,包括以下步骤:
获得第一shell,并记录获得的第一shell的标识;
将第一shell中的字符与预设的关键字进行匹配,在匹配成功时,获得匹配成功的字符位置之前的字符,其中该获得的字符在与匹配成功的字符位置最近的符号之后;
根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。
一种用于获得程序模块间调用关系的装置,包括:
读取模块,用于获得shell,并记录获得的shell的标识;
匹配模块,用于将shell中的字符与预设的关键字进行匹配;
提取模块,用于在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后;
关系模块,用于根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。
本中请实施例通过将shell中的字符与预设的关键字进行匹配来确定shell是否有调用对象,当有调用对象时,通过读取匹配成功的字符之前的字符来获得调用对象的标识,并进一步建立shell与调用对象之间的调用关系。从而实现了自动获得调用关系,提高了效率和减少了错误率,同时节省了大量人力资源。
附图说明
图1为本申请实施例中装置的主要结构图;
图2为本申请实施例中装置的详细结构图;
图3为本申请实施例中获得调用关系的主要方法流程图;
图4为本申请实施例中获得调用关系的详细方法流程图。
具体实施方式
现有技术通过专门的词法分析工具(lex/yacc)对函数的词法进行分析,来获得函数之间的调用关系。由于多个函数再加上内部的逻辑控制才能封装成一个shell或存储过程,因此,采用词法分析无法获得shell和存储过程之间的调用关系。为解决该问题,本申请实施例通过关键字的匹配来确定shell和存储过程之间的调用关系。
本申请实施例利用计算机读取shell中的字符,并将shell中的字符与预设的关键字进行匹配,在匹配成功的情况下,确定该shell调用了其它shell或存储过程,若未匹配成功,则说明该shell未调用其它对象。以及在匹配成功的情况下获得调用对象(即shell或存储过程),并建立shell与调用对象之间的调用关系。重复该过程,可以利用计算机获得所有shell和存储过程之间的调用关系,基本不会有遗漏,准确性较高,并且提高了获得调用关系的效率。
本申请实施例中字符包括字母、数字和符号。符号为除字母和数字以外的字符,如“/”、“-”和空格等。
参见图1,本实施例中用于获得程序模块间调用关系的装置包括读取模块101、匹配模块102、提取模块103和关系模块104。
读取模块101用于获得shell,并记录获得的shell的标识。其中,shell通常由文本文件保存,获得shell就是打开shell的文本文件并将其中的程序代码读到内存。由于shell可以调用存储过程,但是存储过程不能调用shell,所以本实施例读取模块101需要先获得shell,而获取存储过程不是必须的过程。
匹配模块102用于将shell中的字符与预设的关键字进行匹配。其中,关键字包括用于表示shell的第一关键字和用于表示存储过程的第二关键字。第一关键字如“.sh”,“.sh”为shell标识的后缀。第二关键字如“.exec”,“.exec”为存储过程的标识的后缀。匹配模块102在匹配成功时触发提取模块103动作,否则说明该shell没有调用其它的shell或存储过程,对该shell的调用关系的分析结束。可进一步触发读取模块101获得下一个shell。匹配模块102可以用关键字依次与shell中的字符进行比较。或者,由于本实施例中的关键字为后缀,通常出现在段落的末尾,因此匹配模块102也可以用关键字与shell中每段的最后几个字符进行比较,以减少匹配次数,缩短匹配过程。
提取模块103用于在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后。shell中的字符按照通常的书写和阅读顺序(如从左到右及从上到下)进行排列。获得的字符在匹配成功的字符之前,是指按照书写和阅读的顺序,在位置上,获得的字符在匹配成功的字符之前。同理,获得的字符在与匹配成功的字符最近的符号之后,是指按照书写和阅读的顺序,在位置上,获得的字符在与匹配成功的字符最近的符号之后。本申请所说的字符和符号的含义并不完全相同,符号特指“+”和“/”等,符号包括在字符之中。例如,一段shell内的程序代码如:get“c://aaa/bbb/ccc.sh”。关键字为.sh,则在匹配成功的字符之前的字符有get“c://aaa/bbb/ccc,与匹配成功的字符最近的符号为最右边的“/”,在“/”之后的字符即为ccc,该ccc就是调用的shell的标识,c://aaa/bbb/为调用的shell的路径。
关系模块104用于根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。具体的,将获得的字符作为调用对象的标识建立与shell的标识的对应关系,以建立shell与调用对象之间的调用关系。其中,调用对象包括shell和存储过程。如果是通过第一关键字确定的调用对象,则该调用对象为shell;如果是通过第二关键字确定的调用对象,则该调用对象为存储过程。
所述装置还可以包括存储模块105,参见图2所示,存储模块105用于保存shell和存储过程等,即保存shell和存储过程的文本文件等。
读取模块101可以一次从存储模块105中获得一个shell,由匹配模块102和提取模块103等进行后续操作,然后读取模块101再获得下一个shell,直到获得所有的shell,这样可以获得所有的shell与其调用对象之间的关系。读取模块101可以从存储模块105保存的目录文件中获得所有shell的标识和对应的文本文件的存储路径,并根据shell的标识和对应的文本文件的存储路径获得shell。当调用对象为存储过程时,读取模块101还可以依据调用对象的标识获得存储过程,即将存储过程的文本文件中的字符读到内存。然后匹配模块102将存储过程中的字符与第二关键字进行匹配,判断该存储过程是否调用其它的存储过程,即是否有调用对象。如果有,匹配模块102触发提取模块103获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后;关系模块104将获得的字符作为调用对象的标识建立与存储过程的标识的对应关系,以建立存储过程与调用对象之间的调用关系。通过以上过程可以获得所有的shell与其调用对象的调用关系,以及获得存储过程与其调用对象的调用关系,在调用关系中调用者为父节点,调用对象为子节点,相当于获得了多个仅包括一个父结点和一个子节点的树结构。在上述调用关系中,可能存在这种情况,一个调用关系为A调用B(可表示为A->B),另一个调用关系为B调用C(可表示为B->C),这两个调用关系可合并为一个调用关系流,则得到A->B->C,以便更清楚的了解各shell和存储过程之间的调用关系。其中,调用关系流包括一个根节点到其所有叶子节点之间的调用关系。
为了获得较佳的调用关系流,所述装置还包括合并模块106,用于在关系模块104建立多个调用关系后,将调用关系中的调用对象作为子节点,调用对象的调用者作为父节点,将一个调用关系中的父节点与另一个调用关系中的子节点进行比较,在比较一致的情况下,合并两个调用关系为一个调用关系流。如果比较不一致,则检查是否有未参加比较的调用关系,如果有则继续比较,否则结束流程。
读取模块101也可以不获得所有的shell,只需依据shell列表中的最外层shell的标识,获得最外层的shell。最外层的shell是指在调用关系中不被其它对象调用的shell,即调用关系或调用关系流中的根结点。提取模块103在获得调用对象的标识后,可触发读取模块101,由读取模块101依据调用对象的标识获得shell或者存储过程,匹配模块102重复将shell或者存储过程中的字符与预设的关键字进行匹配的步骤。循环执行获得shell或存储过程、匹配、提取和建立调用关系的过程,直到不再有调用对象。此时,关系模块104可获得一个最外层shell下的所有调用对象,包括多层调用关系中的调用对象,得到一个树状的调用关系流。读取模块101可从shell列表中的shell标识获得下一个最外层的shell,继续循环上述过程,直到获得所有最外层的shell的所有调用对象。这样,关系模块104得到以最外层的shell为根节点的多个树状的调用关系流。由于多个shell可以调用同一个shell,为了减少数据的冗余,合并模块106再次将一个调用关系中的父节点与另一个调用关系中的子节点进行比较,以便将多个树状的调用关系流合并为森林。
本实施例中关系模块104和合并模块106得到的调用关系和调用关系流可以以文件形式存在存储模块105中。
所述装置还包括计时模块107,用于周期性触发读取模块101,以便开始获得调用关系。该周期为预先设置,可设得较长,如1个月。
所述装置可以位于一台计算机内,或者所述装置中的各模块位于不同的计算机内,由多个计算机协作完成所述装置的功能。
通过以上描述了解了用于获得调用关系的装置的结构和功能,下面通过流程来介绍获得调用关系的方法。
参见图3,本实施例中获得程序模块间调用关系的主要方法流程如下:
步骤301:获得shell,并记录获得的shell的标识。
步骤302:将shell中的字符与预设的关键字进行匹配。
步骤303:在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后。
步骤304:根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。具体的,将获得的字符作为调用对象的标识建立与shell的标识的对应关系,以建立shell与调用对象之间的调用关系。
步骤305:在匹配失败时,结束本次流程。可进一步检查是否有未分析的shell,如果有,则获得该shell,重复步骤301-305,否则说明已获得所有shell的调用关系,结束流程。
下面以获得最外层的shell为例详细介绍获得调用关系的实现过程。
参见图4,本实施例中获得程序模块间调用关系的详细方法流程如下:
步骤401:从shell列表中读取一个shell标识及对应的路径。可将shell标识及对应的路径保存到某个文件中(如文件A),文件A可以是临时文件,在执行步骤409后释放文件A。
步骤402:依据shell的路径和标识获得最外层的shell。
步骤403:将shell中的字符与预设的关键字进行匹配。
步骤404:在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后。获得的字符作为调用对象的标识可存于文件A中。继续步骤406。同时,依据关键字确定匹配成功的字符为shell的标识或为存储过程的标识,若为shell的标识,则继续步骤402,shell的路径可依据shell的标识从目录文件中获得。若为存储过程的标识,则继续步骤407。其中,从目录文件中获得shell的路径只是一种实现方式,也可以从调用者中获得其调用对象的路径,该路径为调用命令(如get)与标识之间的字符。
步骤405:所有字符均匹配失败时,检查shell列表中是否有未读取的shell标识及对应的路径,若有,则继续步骤401,否则继续步骤409。
步骤406:将获得的字符作为调用对象的标识建立与调用者的标识的对应关系,以建立调用者与调用对象之间的调用关系。此步骤可以在每次执行时获得一个调用关系流,如A->B和B->C,或者在重复执行步骤401之前的多次执行时获得一个调用关系流,如A->B->C。
步骤407:依据存储过程的标识和从目录文件中获得的路径,获得存储过程。
步骤408:将存储过程中的字符与预设的第二关键字进行匹配。继续步骤404或405。
经过上述流程的多次循环,可获得多个调用关系。尤其是在多次执行步骤401后,得到多个调用关系流。则需要继续步骤409。
步骤409:将一个调用关系中的父节点与另一个调用关系中的子节点进行比较,在比较一致的情况下合并两个调用关系为一个调用关系流。通过此步骤也可以将多个树状的调用关系流合并为森林,即获得了关于所有shell和存储过程的调用关系。
用于实现本申请实施例的软件可以存储于软盘、硬盘、光盘和闪存等存储介质。
本申请实施例通过将shell中的字符与预设的关键字进行匹配来确定shell是否有调用对象,当有调用对象时,通过读取匹配成功的字符之前的字符来获得调用对象的标识,并进一步建立shell与调用对象之间的调用关系。从而实现了自动获得调用关系,提高了效率和减少了错误率,同时节省了大量人力资源。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若对本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (14)
1、一种获得程序模块间调用关系的方法,其特征在于,包括以下步骤:
获得第一shell,并记录获得的第一shell的标识;
将第一shell中的字符与预设的关键字进行匹配,在匹配成功时,获得匹配成功的字符位置之前的字符,其中该获得的字符在与匹配成功的字符位置最近的符号之后;
根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。
2、如权利要求1所述的方法,其特征在于,根据获得的字符确定调用对象并建立调用对象与shell之间的调用关系的步骤包括:将获得的字符作为调用对象的标识建立与第一shell的标识的对应关系,以建立第一shell与调用对象之间的调用关系。
3、如权利要求1所述的方法,其特征在于,所述获得的第一shell,是最外层shell;获得最外层shell的步骤包括:依据shell列表中记录的的最外层shell的标识,获得最外层的shell。
4、如权利要求1所述的方法,其特征在于,所述关键字包括用于表示shell的第一关键字和用于表示存储过程的第二关键字;相应的,调用对象包括shell和存储过程。
5、如权利要求4所述的方法,其特征在于,当调用对象为shell时,所述方法还包括步骤:依据调用对象的标识获得第二shell,并重复将shell中的字符与预设的关键字进行匹配。
6、如权利要求4所述的方法,其特征在于,当调用对象为存储过程时,所述方法还包括步骤:依据调用对象的标识获得存储过程,将存储过程中的字符与第二关键字进行匹配,在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后;将获得的字符作为调用对象的标识建立与存储过程的标识的对应关系,以建立存储过程与调用对象之间的调用关系。
7、如权利要求1所述的方法,其特征在于,建立多个调用关系后,将调用关系中的调用对象作为子节点,调用调用对象的调用者作为父节点,将一个调用关系中的父节点与另一个调用关系中的子节点进行比较,在比较一致的情况下,合并两个调用关系为一个调用关系流。
8、一种用于获得程序模块间调用关系的装置,其特征在于,包括:
读取模块,用于获得shell,并记录获得的shell的标识;
匹配模块,用于将shell中的字符与预设的关键字进行匹配;
提取模块,用于在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后;
关系模块,用于根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。
9、如权利要求8所述的装置,其特征在于,关系模块,用于将获得的字符作为调用对象的标识建立与shell的标识的对应关系,以建立shell与调用对象之间的调用关系。
10、如权利要求8所述的装置,其特征在于,所述获得的第一shell,是最外层shell;读取模块依据shell列表中记录的的最外层shell的标识,获得最外层的shell。
11、如权利要求8所述的装置,其特征在于,关键字包括用于表示shell的第一关键字和用于表示存储过程的第二关键字;相应的,调用对象包括shell和存储过程。
12、如权利要求11所述的装置,其特征在于,当调用对象为shell时,读取模块依据调用对象的标识获得shell;匹配模块重复将shell中的字符与预设的关键字进行匹配的步骤。
13、如权利要求11所述的装置,其特征在于,当调用对象为存储过程时,读取模块依据调用对象的标识获得存储过程;匹配模块将存储过程中的字符与第二关键字进行匹配;提取模块在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后;关系模块将获得的字符作为调用对象的标识建立与存储过程的标识的对应关系,以建立存储过程与调用对象之间的调用关系。
14、如权利要求8所述的装置,其特征在于,还包括:
合并模块,用于在关系模块建立多个调用关系后,将调用关系中的调用对象作为子节点,调用调用对象的调用者作为父节点,将一个调用关系中的父节点与另一个调用关系中的子节点进行比较,在比较一致的情况下,合并两个调用关系为一个调用关系流。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009101585149A CN101604262A (zh) | 2009-07-08 | 2009-07-08 | 一种获得程序模块间调用关系的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009101585149A CN101604262A (zh) | 2009-07-08 | 2009-07-08 | 一种获得程序模块间调用关系的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101604262A true CN101604262A (zh) | 2009-12-16 |
Family
ID=41470003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009101585149A Pending CN101604262A (zh) | 2009-07-08 | 2009-07-08 | 一种获得程序模块间调用关系的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101604262A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304211A (zh) * | 2017-01-11 | 2018-07-20 | 中国移动通信集团公司 | 一种服务地图构建方法及装置 |
CN108536463A (zh) * | 2018-04-09 | 2018-09-14 | 深圳市腾讯网络信息技术有限公司 | 获取资源包的方法、装置、设备及计算机可读存储介质 |
-
2009
- 2009-07-08 CN CNA2009101585149A patent/CN101604262A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304211A (zh) * | 2017-01-11 | 2018-07-20 | 中国移动通信集团公司 | 一种服务地图构建方法及装置 |
CN108536463A (zh) * | 2018-04-09 | 2018-09-14 | 深圳市腾讯网络信息技术有限公司 | 获取资源包的方法、装置、设备及计算机可读存储介质 |
CN108536463B (zh) * | 2018-04-09 | 2021-12-21 | 深圳市腾讯网络信息技术有限公司 | 获取资源包的方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7386577B2 (en) | Dynamic determination of transaction boundaries in workflow systems | |
US8463822B2 (en) | Data merging in distributed computing | |
CN102520972B (zh) | 电子游戏开发系统及其方法 | |
CN107704539B (zh) | 大规模文本信息批量结构化的方法及装置 | |
CN101772760B (zh) | 计算机执行方法以及计算机执行装置 | |
CN102508919B (zh) | 数据处理方法及系统 | |
EP3185027B1 (en) | Information processing method and device and computer storage medium | |
CN110109897A (zh) | 数据库脚本生成方法、装置、计算机设备和存储介质 | |
CN109635024A (zh) | 一种数据迁移方法及系统 | |
US11301218B2 (en) | Graph-based vectorization for software code optimization references | |
CN104317850A (zh) | 数据处理方法和装置 | |
US20240036841A1 (en) | Method and Apparatus for Compatibility Detection, Device and Non-transitory computer-readable storage medium | |
CN101604290B (zh) | 一种后台模块测试方法和后台模块测试系统 | |
CN100346308C (zh) | 一种基于数据库操作的自动化测试方法 | |
CN112948473A (zh) | 数据仓库的数据处理方法、装置、系统及存储介质 | |
CN101604262A (zh) | 一种获得程序模块间调用关系的方法及装置 | |
CN112882751A (zh) | Cuda程序移植方法、装置、电子设备及存储介质 | |
US11256488B1 (en) | Graph-based vectorization for software code optimizations | |
CN110287182B (zh) | 一种大数据的数据对比方法、装置、设备及终端 | |
CN108984757A (zh) | 一种数据导入方法及设备 | |
CN111209283A (zh) | 一种数据处理方法及装置 | |
CN100407162C (zh) | 一种具有测试柔性的集成软件测试方法 | |
CN115033280A (zh) | 一种基于知识图谱的需求规格文档自动化生成方法及存储介质 | |
CN111104161B (zh) | 一种数据库sql脚本的自动审批执行方法 | |
CN110515989B (zh) | 一种基于财务数据管理平台的数据实时统计方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1137550 Country of ref document: HK |
|
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20091216 |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1137550 Country of ref document: HK |