一种获得程序模块间调用关系的方法及装置的制作方法

文档序号:6579225阅读:208来源:国知局
专利名称:一种获得程序模块间调用关系的方法及装置的制作方法
技术领域
本申请涉及计算机领域,特别是涉及获得程序模块间调用关系的方法及装置。
背景技术
信息作为现代企业的宝贵资源,占据着越来越重要的地位,已经成为现代 企业科学管理的基础,正确决策的前提,有效调控的手段。能否拥有及时、准 确、全面的信息已经成为衡量一个企业是否具有发展潜力的一个重要指标。随 着这种需求的不断增加,数据仓库的应用在企业中得到普及。其中,数据抽取、
转换和加载过程(Extract Transform Load, ETL)是建立数据仓库的重要环节。 ETL过程主要完成以下几项任务1、数据抽取从各种不同结构和形态 的数据源中提取数据,如从ERP、 CRM和财务管理等方面的数据源中提取数 据。2、数据转换根据企业的特定规则,对抽取的数据进行转换,为统计、 分析等特定业务服务。3、数据清洗企业的数据往往存在着大量的质量问题, 从简单的数据格式的不一致、数据输入4f^、数据不完整到相对较复杂的数据 不一致性等问题。显然数据的质量将直接影响基于这些数据的信息服务的质 量。数据清洗的目标是通过各种措施从准确性、无冗余、符合应用的需求等方 面提高数据的质量。4、数据加载将抽取、转换及清洗过的数据正确的加载 到数据仓库中,并且对数据处理的过程进行监督和管理,以保证整个ETL过 程的准确和高效率。
ETL过程通过shdl (为UNIX或LINUX操作系统中的功能模块,程序代 码的载体)之间的相互调用、存储过程(procedure)之间的相互调用、以及shell 对存储过程的调用来实现。获得shell和存储过程的调用关系,^:设计和维护 ETL过程架构的重要环节。目前获得shell和存储过程的调用关系均是由人工实现,工作量较大,效率较低,并且容易出错。

发明内容
本申请实施例提供一种获得程序才莫块间调用关系的方法及装置,用于提高 获得调用关系的效率。
一种获得程序it块间调用关系的方法,包括以下步骤 获得第一 shell,并记录获得的第一 shell的标识;
将第一 shell中的字符与预设的关键字进行匹配,在匹配成功时,获得匹 配成功的字符位置之前的字符,其中该获得的字符在与匹配成功的字符位置最 近的符号之后;
根据获得的字符确定调用对象,并建立调用对象与第一 shell之间的调用 关系。
一种用于获得程序模块间调用关系的装置,包括 读取4莫块,用于获得shell,并记录获得的shell的标识; 匹配模块,用于将shdl中的字符与预设的关键字进行匹配; 提取溪块,用于在匹配成功时,获得匹配成功的字符之前的字符,其中该 获得的字符在与匹配成功的字符最近的符号之后;
关系模块,用于根据获得的字符确定调用对象,并建立调用对象与第一 shell之间的调用关系。
本申请实施例通过将shell中的字符与预设的关键字进行匹配来确定shell 是否有调用对象,当有调用对象时,通过读取匹配成功的字符之前的字符来获 得调用对象的标识,并进一步建立shell与调用对象之间的调用关系。从而实 现了自动获得调用关系,提高了效率和减少了错误率,同时节省了大量人力资 源。


图1为本申请实施例中装置的主要结构图;图2为本申请实施例中装置的详细结构图3为本申请实施例中获得调用关系的主要方法流程图4为本申请实施例中获得调用关系的详细方法流程图。
具体实施例方式
获得函数之间的调用关系。由于多个函数再加上内部的逻辑控制才能封装成一 个shell或存储过程,因此,采用词法分析无法获得shell和存储过程之间的调 用关系。为解决该问题,本申请实施例通过关键字的匹配来确定shell和存储 过程之间的调用关系。
本申请实施例利用计算机读取shell中的字符,并将shell中的字符与预设 的关键字进行匹配,在匹配成功的情况下,确定该shell调用了其它shell或存 储过程,若未匹配成功,则说明该shell未调用其它对象。以及在匹配成功的 情况下获得调用对象(即shell或存储过程),并建立shell与调用对象之间的调 用关系。重复该过程,可以利用计算机获得所有shell和存储过程之间的调用 关系,基本不会有遗漏,准确性较高,并且提高了获得调用关系的效率。
本申请实施例中字符包括字母、数字和符号。符号为除字母和数字以外的 字符,如"/"、"-"和空格等。
参见图1,本实施例中用于获得程序模块间调用关系的装置包括读^Mt块 101、匹配模块102、提^f莫块103和关系模块104。
读取4莫块101用于获得shell,并记录获得的shell的标识。其中,shell通 常由文本文件保存,获得shell就是打开shell的文本文件并将其中的程序代码 读到内存。由于shell可以调用存储过程,但是存储过程不能调用shell,所以 本实施例读恥漠块101需要先获得shell,而获M储过程不是必须的过程。
匹配模块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,与匹配成功的字符最近的符号为最右边的7",在"/"之后 的字符即为ccc,该ccc就是调用的shell的标识,0://&&3/1^1)/为调用的shell的 路径。
关系模块104用于根据获得的字符确定调用对象,并建立调用对象与第一 shell之间的调用关系。具体的,将获得的字符作为调用对象的标识建立与shell 的标识的对应关系,以建立shell与调用对象之间的调用关系。其中,调用对 象包括shell和存储过程。如果是通过第一关键字确定的调用对象,则该调用 对象为shell;如果是通过第二关键字确定的调用对象,则该调用对象为存储过 程。
所述装置还可以包括存储模块105,参见图2所示,存储模块105用于保 存shell和存储过程等,即保存shell和存储过程的文本文件等。读和漠块101可以一次从存储模块105中获得一个shell,由匹配模块102 和提取模块103等进行后续操作,然后读^Uf莫块101再获得下一个shell,直到 获得所有的shell,这样可以获得所有的shell与其调用对象之间的关系。读取 模块101可以从存储才莫块105保存的目录文件中获得所有shell的标识和对应 的文本文件的存储路径,并根据shell的标识和对应的文本文件的存储路径获 得shell.当调用对象为存储过程时,读取模块IOI还可以依据调用对象的标识 获得存储过程,即将存储过程的文本文件中的字符读到内存。然后匹配模块102 将存储过程中的字符与第二关键字进行匹配,判断该存储过程是否调用其它的 存储过程,即是否有调用对象。如果有,匹配模块102触发提取模块103获得 匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符 号之后;关系模块104将获得的字符作为调用对象的标识建立与存储过程的标 识的对应关系,以建立存储过程与调用对象之间的调用关系。通过以上过程可 以获得所有的shell与其调用对象的调用关系,以及获得存储过程与其调用对 象的调用关系,在调用关系中调用者为父节点,调用对象为子节点,相当于获 得了多个仅包括一个父结点和一个子节点的树结构。在上述调用关系中,可能 存在这种情况, 一个调用关系为A调用B (可表示为A->B ),另 一个调用关系 为B调用C (可表示为B->C),这两个调用关系可合并为一个调用关系流,则 得到A->B->C,以便更清楚的了解备shell和存储过程之间的调用关系。其中, 调用关系流包^"一个4艮节点到其所有叶子节点之间的调用关系。
为了获得较佳的调用关系流,所述装置还包括合并模块106,用于在关系 模块104建立多个调用关系后,将调用关系中的调用对象作为子节点,调用对 象的调用者作为父节点,将一个调用关系中的父节点与另 一个调用关系中的子 节点进行比较,在比较一致的情况下,合并两个调用关系为一个调用关系流。 如果比较不一致,则检查是否有未参加比较的调用关系,如果有则继续比较, 否则结束流程。
读取厲块101也可以不获得所有的shell,只需依据shell列表中的养外层shell的标识,获得最外层的shell.最外层的shell是指在调用关系中不被其它 对象调用的shell,即调用关系或调用关系流中的根结点。提和漠块103在获得 调用对象的标识后,可触发读取^莫块101,由读取4莫块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与调用对象之间的调用关系。从而实 现了自动获得调用关系,提高了效率和减少了错误率,同时节省了大量人力资 源。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申 请的精神和范围。这样,倘若对本申请的这些修改和变型属于本申请权利要求 及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
权利要求
1、一种获得程序模块间调用关系的方法,其特征在于,包括以下步骤获得第一shell,并记录获得的第一shell的标识;将第一shell中的字符与预设的关键字进行匹配,在匹配成功时,获得匹配成功的字符位置之前的字符,其中该获得的字符在与匹配成功的字符位置最近的符号之后;根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。
2、 如权利要求1所述的方法,其特征在于,根据获得的字符确定调用对 象并建立调用对象与shell之间的调用关系的步骤包括将获得的字符作为调 用对象的标识建立与第一 shell的标识的对应关系,以建立第一 shell与调用对 象之间的调用关系。
3、 如权利要求l所述的方法,其特征在于,所述获得的第一 shell,是最 外层shell;获得最外层shell的步骤包括:依据shell列表中记录的的最外层shell 的标识,获得最外层的shell。
4、 如权利要求1所述的方法,其特征在于,所述关键字包括用于表示shell 的第一关键字和用于表示存储过程的笫二关键字;相应的,调用对象包括shdl 和存储过程。
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所述的装置,其特征在于,关4建字包括用于表示shell 的第一关键字和用于表示存储过程的第二关键字;相应的,调用对象包括shell 和存储过程。
12、 如权利要求11所述的装置,其特征在于,当调用对象为shell时,读 取模块依据调用对象的标识获得shell;匹配模块重复将shell中的字符与预设 的关键字进行匹配的步骤,
13、 如权利要求ll所述的装置,其特征在于,当调用对象为存储过程时, 读取模块依据调用对象的标识获得存储过程;匹配模块将存储过程中的字符与第二关键字进行匹配;提^4莫块在匹配成功时,获得匹配成功的字符之前的字 符,其中该获得的字符在与匹配成功的字符最近的符号之后;关系模块将获得的字符作为调用对象的标识建立与存储过程的标识的对应关系,以建立存储过 程与调用对象之间的调用关系。
14、如权利要求8所述的装置,其特征在于,还包括合并模块,用于在关系模块建立多个调用关系后,将调用关系中的调用对 象作为子节点,调用调用对象的调用者作为父节点,将一个调用关系中的父节 点与另一个调用关系中的子节点进行比较,在比较一致的情况下,合并两个调 用关系为一个调用关系流。
全文摘要
本申请公开了一种获得程序模块间调用关系的方法,用于提高获得调用关系的效率。所述方法包括获得shell,并记录获得的shell的标识;将shell中的字符与预设的关键字进行匹配,在匹配成功时,获得匹配成功的字符之前的字符,其中该获得的字符在与匹配成功的字符最近的符号之后;根据获得的字符确定调用对象,并建立调用对象与第一shell之间的调用关系。本申请还公开了用于实现所述方法的装置。
文档编号G06F17/30GK101604262SQ20091015851
公开日2009年12月16日 申请日期2009年7月8日 优先权日2009年7月8日
发明者林正华 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1