CN110764760B - 用于绘制程序流程图的方法、装置、计算机系统和介质 - Google Patents
用于绘制程序流程图的方法、装置、计算机系统和介质 Download PDFInfo
- Publication number
- CN110764760B CN110764760B CN201911043378.9A CN201911043378A CN110764760B CN 110764760 B CN110764760 B CN 110764760B CN 201911043378 A CN201911043378 A CN 201911043378A CN 110764760 B CN110764760 B CN 110764760B
- Authority
- CN
- China
- Prior art keywords
- program
- source code
- language
- flow chart
- grammar rules
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本公开提供了一种用于绘制程序流程图的方法,包括:获取待处理程序的源代码;识别所述源代码的语言类型;基于针对所述语言类型的语法规则,对所述源代码进行结构化解析,以便得到表征所述源代码执行逻辑的结构化解析结果;基于所述结构化解析结果绘制流程图;以及展示所述流程图。本公开还提供了一种用于绘制程序流程图的装置、计算机系统和介质。
Description
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种用于绘制程序流程图的方法、装置、计算机系统和介质。
背景技术
在各企业中,对于庞大的系统或存量历史较久的系统,往往缺少与系统中各程序对应的交接文档、接口文档、说明文档等,导致系统后续维护成本较高。如果有新的运维人员接手该系统进行运维、开发、测试等工作,通常需要大量的时间来学习系统中各程序的执行逻辑以了解业务逻辑。
发明内容
本公开的一个方面提供了一种用于绘制程序流程图的方法,包括:获取待处理程序的源代码。先识别该源代码的语言类型,然后基于针对该语言类型的语法规则,对该源代码进行结构化解析,以便得到表征源代码执行逻辑的结构化解析结果。接着,基于所得到的结构化解析结果绘制流程图,并展示该流程图。
可选地,上述方法还包括:预置语言库,该语言库包括针对多个语言类型的关键字语法规则。上述识别源代码的指定语言类型包括:将语言库中针对任一语言类型的关键字语法规则与源代码进行匹配。如果匹配成功,则确定该任一语言类型为上述源代码的语言类型。
可选地,上述待处理程序包括多个程序模块。上述对源代码进行结构化解析包括:对多个程序模块之间的函数调用进行解析,以便得到多个程序模块之间的调用顺序和调用方式。
可选地,上述对源代码进行结构化解析还包括:按照上述解析得到的调用顺序依次对上述多个程序模块中的每个程序模块的内部函数进行解析,以便得到每个程序模块中的节点分布和关联关系。
可选地,上述基于所述结构化解析结果绘制流程图包括:首先,基于每个程序模块中的节点分布和关联关系绘制所述多个程序模块中的每个程序模块的内部层级结构。然后,基于每个程序模块的内部层级结构以及上述多个程序模块之间的调用顺序和调用方式,绘制上述多个程序模块之间的路径,以便得到流程图。
可选地,上述方法还包括:获取所述待处理程序的内参列表。在上述展示流程图之后,获取针对流程图的输入参数。燃火,基于源代码执行逻辑和所述内参列表,确定输入参数在流程图中的流转路径。接着,为该流转路径添加预定标识,并展示该预定标识。
可选地,上述识别源代码的语言类型包括:利用机器学习模型识别该源代码的语言类型。其中,机器学习模型基于样本集训练得到,该样本集包括针对多个语言类型的多个程序源代码。
本公开的另一方面提供了一种用于绘制程序流程图的装置,包括:获取模块、语言识别模块、结构化解析模块、绘制模块以及展示模块。其中,获取模块用于获取待处理程序的源代码。语言识别模块用于识别源代码的语言类型。结构化解析模块用于基于针对上述语言类型的语法规则,对源代码进行结构化解析,以便得到表征源代码执行逻辑的结构化解析结果。绘制模块用于基于该结构化解析结果绘制流程图。展示模块用于展示该流程图。
本公开的另一方面提供了一种计算机系统,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时用于实现如上所述的方法。
本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
根据本公开的实施例,能够基于程序源代码自动绘制表征程序执行逻辑的流程图,且该方法能够适应于各种不同语言的程序。故可以将系统中任意未知程序作为待处理程序,基于本公开实施例的用于绘制程序流程图的方法对其源代码进行处理,无需人工逐行解读该源代码,即可得到相应的流程图。向运维人员展示该流程图,以便相应运维人员能够快速、清晰地了解程序运行路径,了解程序分支覆盖范围,从而对系统性能进行高效、可靠地维护。
附图说明
为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:
图1示意性示出了根据本公开实施例的应用用于绘制程序流程图的方法和装置的示例性系统架构;
图2示意性示出了根据本公开实施例的用于绘制程序流程图的方法的流程图;
图3示意性示出了根据本公开另一实施例的用于绘制程序流程图的方法的流程图;
图4示意性示出了根据本公开实施例的用于绘制程序流程图的装置的框图;以及
图5示意性示出了根据本公开实施例的适于实现用于绘制程序流程图的方法的计算机系统的框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
本公开的实施例提供了一种用于绘制程序流程图的方法、装置、计算机系统及介质。该方法可以包括:获取过程、语言识别过程、结构化解析过程、绘制过程以及展示过程。在获取过程,获取待处理程序的源代码。然后进行语言识别过程,以识别该源代码的语言类型。再进行结构化解析过程,基于针对该语言类型的语法规则,对该源代码进行结构化解析,以便得到表征源代码执行逻辑的结构化解析结果。接着进行绘制过程,基于所得到的结构化解析结果绘制流程图,并在展示过程展示该流程图。
图1示意性示出了根据本公开实施例的可以应用用于绘制程序流程图的方法和装置的示例性系统架构100。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
终端设备101、102、103上可以安装有各种客户端应用,例如银行类应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。终端设备101、102、103可以通过以上各种客户端应用与服务器105进行交互,以向服务器105发送各种请求或接收服务器105返回的结果。
终端设备101、102、103可以是各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、、或数据等)反馈给终端设备。
需要说明的是,本公开实施例所提供的用于绘制程序流程图的方法一般可以由服务器105执行。相应地,本公开实施例所提供的用于绘制程序流程图的装置一般可以设置于服务器105中。本公开实施例所提供的用于绘制程序流程图的方法也可以由终端设备101、102、103执行。相应地,本公开实施例所提供的用于绘制程序流程图的装置一般可以设置于终端设备101、102、103中。本公开实施例所提供的用于绘制程序流程图的方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的其他服务器或服务器集群执行。相应地,本公开实施例所提供的用于绘制程序流程图的装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的其他服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实际需要,可以具有任意数目的终端设备、网络和服务器。
图2示意性示出了根据本公开实施例的用于绘制程序流程图的方法的流程图。
如图2所示,该方法可以包括以下操作S201~S205。
在操作S201,获取待处理程序的源代码。
然后,在操作S202,识别该源代码的语言类型。
其中,语言类型例如可以包括JAVA语言、EGL(Enterprise Generation Language,企业级语言)、COBOL(Common Business-Oriented Language,面向商业的通用语言)、Python语言、C语言、等等,可以包括任意编程语言类型,在此不做限制。待处理程序的源代码的语言类型可以是上述多项之一。
然后,在操作S203,基于针对该语言类型的语法规则,对该源代码进行结构化解析,以便得到表征源代码执行逻辑的结构化解析结果。
其中,在操作S202确定源代码的语言类型之后,本操作S203基于针对该语言类型的语法规则,按照一定顺序解析源代码中的语法,以得到结构化解析结果。本操作S203是根据本公开实施例的用于绘制程序流程图的方法的核心之一,正确、高效地结构化解析过程对于后续绘制流程图至关重要。
接着,在操作S204,基于所得到的结构化解析结果绘制流程图(Flow Chart)。
在操作S205,展示该流程图。
本领域技术人员可以理解,在各企业中,对于庞大的系统或存量历史较久的系统,往往缺少与系统中各程序对应的交接文档、接口文档、说明文档等,导致系统后续维护成本较高。如果有新的运维人员接手该系统进行运维、开发、测试等工作,通常需要大量的时间来学习系统中各程序的执行逻辑以了解业务逻辑。为提高系统维护效率,图2所示的方法能够基于程序源代码自动绘制表征程序执行逻辑的流程图,且该方法具有多语言适应性。故可以将系统中任意未知程序作为待处理程序,基于本公开实施例的用于绘制程序流程图的方法对其源代码进行处理,无需人工逐行解读该源代码,即可得到相应的流程图。向运维人员展示该流程图,以便相应运维人员能够快速、清晰地了解程序运行路径,了解程序分支覆盖范围,从而对系统性能进行高效、可靠地维护。
在本公开的一个实施例中,为了识别待处理程序的源代码的语言类型,根据本公开实施例的用于绘制程序流程图的方法还可以包括:预置语言库,该语言库可以包括针对多个语言类型的关键字语法规则。在此基础上,上述识别源代码的指定语言类型的过程可以按照如下方式进行:将语言库中针对任一语言类型的关键字语法规则与源代码进行匹配,如果匹配成功,则确定该任一语言类型为源代码的语言类型。
示例性地,关键字语法规则例如可以包括条件判断语句的语法规则、循环控制语句的语法规则、赋值语句的语法规则等等。可以利用堆栈对语言库中针对各语言类型的关键字语法规则进行存储,利用栈针将关键字语法规则以类的形式存入内存。或者,可以通过各种类型的数据库对语言库中针对各语言类型的关键字语法规则进行存储。
例如,语言库包括针对三个语言类型(A语言、B语言和C语言)的关键字语法规则。以A语言为例,针对A语言的关键字语法规则包括:A语言的逻辑判断的语法规则、A语言的循环的语法规则、以及A语言的赋值的语法规则。将A语言的每个关键字语法规则分别在源代码中进行匹配,如先将A语言的逻辑判断的语法规则与源代码进行匹配,如果匹配成功,则继续将A语言的循环的语法规则与源代码进行匹配,以此类推,直至针对A语言的最后一个关键字语法规则与源代码匹配成功,确定针对A语言的关键字语法规则与源代码匹配成功。如果A语言的逻辑判断的语法规则、A语言的循环的语法规则、以及A语言的赋值的语法规则中的至少一个与源代码进行匹配不成功,则确定针对A语言的关键字语法规则与源代码匹配失败。针对B语言和C语言的关键字语法规则的匹配过程与上述同理,在此不再赘述。
在本公开的另一实施例中,根据本公开实施例的用于绘制程序流程图的方法可以利用机器学习方式来识别待处理程序的源代码的语言类型。示例性地,上述识别源代码的语言类型可以按照如下方式进行:利用机器学习模型识别源代码的语言类型。其中,机器学习模型基于样本集训练得到,该样本集包括针对多个语言类型的多个程序源代码。
例如,该机器学习模型可以包括如下至少一种:深度神经网络(Deep NeuralNetworks,DNN)模型、卷积神经网络(Convolutional Neural Networks,CNN)模型、以及循环神经网络(Recurrent Neural Networks,RNN)模型。该机器学习模型可以包括一个或多个隐藏层。该机器学习模型可以作为分类模型进行训练,经过样本集中多个样本的迭代优化,训练得到的机器学习模型用于接收任一程序的源代码,输出关于该源代码的语言类型的分类结果。
根据本公开的实施例,待处理程序可以包括多个程序模块,每个程序模块相当于一个子程序。上述对待处理程序的源代码进行结构化解析的过程可以包括:对多个程序模块之间的函数调用进行解析,以便得到多个程序模块之间的调用顺序和调用方式。这一过程可以解析出程序模块之间的调用逻辑关系。
进一步地,上述对待处理程序的源代码进行结构化解析还可以包括:按照上述解析得到的调用顺序依次对多个程序模块中的每个程序模块的内部函数进行解析,以便得到每个程序模块中的节点分布和关联关系。这一过程可以解析出每个程序模块的内部执行逻辑。由上述解析出的程序模块之间的调用逻辑关系和每个程序模块的内部执行逻辑构成了表征待处理程序的完整执行逻辑的结构化解析结果。
根据本公开的实施例,上述基于结构化解析结果绘制流程图包括:基于所述每个程序模块中的节点分布和关联关系绘制所述多个程序模块中的每个程序模块的内部层级结构。然后,基于所述每个程序模块的内部层级结构以及所述多个程序模块之间的调用顺序和调用方式,绘制所述多个程序模块之间的路径,以便得到表征待处理程序的完整执行逻辑的流程图,相关程序的运维人员可以基于该流程图直观地获知该程序的执行流程。
一些情况下,不仅需要向运维人员展示待处理程序的流程图,还需要基于该流程图针对一些用于程序测试或重现问题的输入参数的流转路径进行展示。示例性地,上文绘制得到的流程图并非静态图片,而是可以响应运维人员输入的图形化工具,根据本公开实施例的用于绘制程序流程图的方法还可以包括:获取待处理程序的内参列表。然后,在展示待处理程序的流程图之后,获取运维人员针对该流程图的输入参数。接着,基于待处理程序的源代码执行逻辑和上述内参列表,确定输入参数在该流程图中的流转路径。最后为该流转路径添加预定标识,并在展示流程图的同时展示该预定标识。
例如,一个待处理程序包括三个入口参数a、b和c,其中两个入口参数a和b来自于内参列表,可以通过查询内参列表获得。第三个入口参数c为运维人员的输入参数。在绘制得到该待处理程序的流程图后,接收针对该流程图的输入参数c,输入参数c通过与参数a、b的组合来确定接来下的调用模块为程序模块X、Y和Z中的程序模块Y。经过程序模块Y的内部逻辑得到最终结果。因此输入参数c的流转路径为程序模块Y的内部执行路径。在流程图中高亮显示该流转路径,以使运维人员获知该输入参数c的处理过程。
图3示意性示出了根据本公开另一实施例的用于绘制程序流程图的方法的流程图。
如图3所示,用于绘制程序流程图的方法可以包括操作S301~S306。
在操作S301,在语言库存储针对不同语言的关键字语法规则。
其中,所存储的关键字语法规则可以如表1所示:
表1
关键字 | 结尾语法 | 逻辑 | 备注 | 语言 |
if | end if | (A&&B||C) | 逻辑判断 | JAVA |
for | end | A in C | 循环 | EGL |
while | } | (A&&B||C) | 循环 | JAVA |
= | ; | A=B | 赋值 | JAVA |
move | ; | move A to B | 赋值 | COBOL |
function | ; | function abc() | 函数 | Python |
else | end if | else | 逻辑判断 | JAVA |
然后,在操作S302,输入待处理程序的源代码。
其中,待处理程序可以是任意未知程序。例如,输入的待处理程序的源代码如下所示:
接着,在操作S303,匹配源代码与关键字语法规则。
其中,将上文所示的源代码与表1所示的源代码语法规则进行匹配,确定源代码的语言类型,例如为JAVA语言。
接着,在操作S304,对源代码进行结构化解析。
其中,结构化解析过程可以包括基于函数调用解析的主流程解析过程以及基于函数解析的程序模块解析过程。其中,对于上文所示的源代码的主流程解析过程的部分结果如表2所示,对于上文所示的源代码的模块解析过程的部分结果如表3所示。
表2
在表2中,main为入口方法,Void表示无类型,String表示字符串,Null表示空,String a,String b,Int c表示字符串a和b以及整型c。解析出的各函数的序号在上文所示的源代码中对应标示。
表3
表3中,Boolean表示布尔型数据,解析出的各函数的序号在上文所示的源代码中对应标示。
接着,在操作S305,根据上文解析得到的层级和类型绘制流程图。
例如,可以先根据函数调用顺序,按照程序模块进行绘制。再根据函数内部逻辑,按照类型、层级绘制流程图。
接着,在操作S306,接收输入参数,基于单步输出和源代码确定输入参数的流转路径,并高亮显示该流转路径。
其中,单步输出与相应的源代码在表3中已示出。
图4示意性示出了根据本公开实施例的用于绘制程序流程图的装置的框图。
如图4所示,该用于绘制程序流程图的装置400包括:获取模块410、语言识别模块420、结构化解析模块430、绘制模块440以及展示模块450。
获取模块410用于获取待处理程序的源代码。
语言识别模块420用于识别源代码的语言类型。
结构化解析模块430用于基于针对上述语言类型的语法规则,对源代码进行结构化解析,以便得到表征源代码执行逻辑的结构化解析结果。
绘制模块440用于基于该结构化解析结果绘制流程图。
展示模块450用于展示该流程图。
需要说明的是,装置部分实施例中各模块/单元/子单元等的实施方式、解决的技术问题、实现的功能、以及达到的技术效果分别与方法部分实施例中各对应的步骤的实施方式、解决的技术问题、实现的功能、以及达到的技术效果相同或类似,在此不再赘述。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,获取模块410、语言识别模块420、结构化解析模块430、绘制模块440以及展示模块450中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,获取模块410、语言识别模块420、结构化解析模块430、绘制模块440以及展示模块450中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,获取模块410、语言识别模块420、结构化解析模块430、绘制模块440以及展示模块450中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图5示意性示出了根据本公开实施例的适于实现上文描述的方法的计算机系统的框图。图5示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图5所示,根据本公开实施例的计算机系统500包括处理器501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。处理器501例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器501还可以包括用于缓存用途的板载存储器。处理器501可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 503中,存储有系统500操作所需的各种程序和数据。处理器501、ROM 502以及RAM 503通过总线504彼此相连。处理器501通过执行ROM 502和/或RAM 503中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 502和RAM 503以外的一个或多个存储器中。处理器501也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,系统500还可以包括输入/输出(I/O)接口505,输入/输出(I/O)接口505也连接至总线504。系统500还可以包括连接至I/O接口505的以下部件中的一项或多项:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被处理器501执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。
Claims (9)
1.一种用于绘制程序流程图的方法,包括:
获取待处理程序的源代码;
识别所述源代码的语言类型,其中,所述识别所述源代码的指定语言类型包括:将预置语言库中针对任一语言类型的关键字语法规则与所述源代码进行匹配,如果匹配成功,则确定所述任一语言类型为所述源代码的语言类型,所述预置语言库通过堆栈存储针对多个语言类型的关键字语法规则,所述关键字语法规则以类的形式通过栈针存入内存,所述关键字语法规则包括条件判断语句的语法规则、循环控制语句的语法规则和赋值语句的语法规则;
基于针对所述语言类型的语法规则,对所述源代码进行结构化解析,以便得到表征所述源代码执行逻辑的结构化解析结果;
基于所述结构化解析结果绘制流程图;以及
展示所述流程图。
2.根据权利要求1所述的方法,其中,所述待处理程序包括多个程序模块;
所述对所述源代码进行结构化解析包括:
对所述多个程序模块之间的函数调用进行解析,以便得到多个程序模块之间的调用顺序和调用方式。
3.根据权利要求2所述的方法,其中,所述对所述源代码进行结构化解析还包括:
按照所述调用顺序依次对所述多个程序模块中的每个程序模块的内部函数进行解析,以便得到每个程序模块中的节点分布和关联关系。
4.根据权利要求3所述的方法,其中,所述基于所述结构化解析结果绘制流程图包括:
基于所述每个程序模块中的节点分布和关联关系绘制所述多个程序模块中的每个程序模块的内部层级结构;以及
基于所述每个程序模块的内部层级结构以及所述多个程序模块之间的调用顺序和调用方式,绘制所述多个程序模块之间的路径,以便得到所述流程图。
5.根据权利要求1所述的方法,还包括:
获取所述待处理程序的内参列表;
在所述展示所述流程图之后,获取针对所述流程图的输入参数;
基于所述源代码执行逻辑和所述内参列表,确定所述输入参数在所述流程图中的流转路径;以及
为所述流转路径添加预定标识,并展示所述预定标识。
6.根据权利要求1所述的方法,其中,所述识别所述源代码的语言类型包括:
利用机器学习模型识别所述源代码的语言类型,其中,所述机器学习模型基于样本集训练得到,所述样本集包括针对多个语言类型的多个程序源代码。
7.一种用于绘制程序流程图的装置,包括:
获取模块,用于获取待处理程序的源代码;
语言识别模块,用于识别所述源代码的语言类型,其中,所述识别所述源代码的指定语言类型包括:将预置语言库中针对任一语言类型的关键字语法规则与所述源代码进行匹配,如果匹配成功,则确定所述任一语言类型为所述源代码的语言类型,所述预置语言库通过堆栈存储针对多个语言类型的关键字语法规则,所述关键字语法规则以类的形式通过栈针存入内存,所述关键字语法规则包括条件判断语句的语法规则、循环控制语句的语法规则和赋值语句的语法规则;
结构化解析模块,用于基于针对所述语言类型的语法规则,对所述源代码进行结构化解析,以便得到表征所述源代码执行逻辑的结构化解析结果;
绘制模块,用于基于所述结构化解析结果绘制流程图;以及
展示模块,用于展示所述流程图。
8.一种计算机系统,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时用于实现如权利要求1~6任一项所述的方法。
9.一种计算机可读介质,存储有计算机程序,所述计算机程序被执行时用于实现如权利要求1~6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911043378.9A CN110764760B (zh) | 2019-10-29 | 2019-10-29 | 用于绘制程序流程图的方法、装置、计算机系统和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911043378.9A CN110764760B (zh) | 2019-10-29 | 2019-10-29 | 用于绘制程序流程图的方法、装置、计算机系统和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110764760A CN110764760A (zh) | 2020-02-07 |
CN110764760B true CN110764760B (zh) | 2023-09-05 |
Family
ID=69334712
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911043378.9A Active CN110764760B (zh) | 2019-10-29 | 2019-10-29 | 用于绘制程序流程图的方法、装置、计算机系统和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110764760B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181381B (zh) * | 2020-11-02 | 2024-02-20 | 苏州中科全象智能科技有限公司 | 一种基于分支循环的流程图构建方法 |
CN113626017B (zh) * | 2021-07-06 | 2023-10-31 | 曙光信息产业(北京)有限公司 | 异构程序的分析方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN106033516A (zh) * | 2015-03-18 | 2016-10-19 | 中国移动通信集团陕西有限公司 | 一种检测终端源代码安全的方法、装置及系统 |
CN107885715A (zh) * | 2017-11-23 | 2018-04-06 | 掌阅科技股份有限公司 | 代码信息的排版方法、电子设备及计算机存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9086931B2 (en) * | 2002-11-20 | 2015-07-21 | Purenative Software Corporation | System for translating diverse programming languages |
US8516443B2 (en) * | 2011-05-26 | 2013-08-20 | Oracle International Corporation | Context-sensitive analysis framework using value flows |
-
2019
- 2019-10-29 CN CN201911043378.9A patent/CN110764760B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN106033516A (zh) * | 2015-03-18 | 2016-10-19 | 中国移动通信集团陕西有限公司 | 一种检测终端源代码安全的方法、装置及系统 |
CN107885715A (zh) * | 2017-11-23 | 2018-04-06 | 掌阅科技股份有限公司 | 代码信息的排版方法、电子设备及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110764760A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9858270B2 (en) | Converting data into natural language form | |
US11568057B2 (en) | Systems and methods for triaging software vulnerabilities | |
CN109359194B (zh) | 用于预测信息类别的方法和装置 | |
US11474933B2 (en) | Test cycle optimization using contextual association mapping | |
CN106528393A (zh) | 一种WebService的Mock测试的方法及装置 | |
CN109901987B (zh) | 一种生成测试数据的方法和装置 | |
US10839168B2 (en) | Dynamic automation of pipeline creation | |
JP2023545625A (ja) | ソフトウェアの脆弱性のトリアージのためのシステムおよび方法 | |
CN110764760B (zh) | 用于绘制程序流程图的方法、装置、计算机系统和介质 | |
US9262735B2 (en) | Identifying and amalgamating conditional actions in business processes | |
CN110888972A (zh) | 一种基于Spark Streaming的敏感内容识别方法及装置 | |
CN110909768A (zh) | 一种标注数据获取方法及装置 | |
CN113962597A (zh) | 一种数据分析方法、装置、电子设备及存储介质 | |
CN109376220B (zh) | 用于获取信息的方法和装置 | |
CN111492364B (zh) | 数据标注方法、装置及存储介质 | |
US8825588B2 (en) | Rule correlation to rules input attributes according to disparate distribution analysis | |
CN114691850A (zh) | 生成问答对的方法、神经网络模型的训练方法和装置 | |
CN113032256A (zh) | 自动化测试方法、装置、计算机系统和可读存储介质 | |
CN113050987A (zh) | 一种接口文档的生成方法、装置、存储介质及电子设备 | |
CN113515285A (zh) | 生成实时计算逻辑数据的方法和装置 | |
CN112988778A (zh) | 一种处理数据库查询脚本的方法和装置 | |
CN113342646B (zh) | 用例生成方法、装置、电子设备和介质 | |
US20210304058A1 (en) | Automatic combinatoric feature generation for enhanced machine learning | |
CN116737588A (zh) | 应用测试方法、装置、设备及存储介质 | |
CN111209348B (zh) | 用于输出信息的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |