CN110334016B - 一种软件结构的层次化表达方法 - Google Patents
一种软件结构的层次化表达方法 Download PDFInfo
- Publication number
- CN110334016B CN110334016B CN201910509769.9A CN201910509769A CN110334016B CN 110334016 B CN110334016 B CN 110334016B CN 201910509769 A CN201910509769 A CN 201910509769A CN 110334016 B CN110334016 B CN 110334016B
- Authority
- CN
- China
- Prior art keywords
- function
- graph
- node
- program
- functions
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种软件结构的层次化表达方法,属于软件工程领域。本发明使用分层结构对程序的整体逻辑进行描述,其描述方法直接与程序在调用过程中形成的分层特性相适应,极大的简化了对程序逻辑结构的表达;由于将子函数看作一个黑盒,弱化了函数的具体实现过程,凸显了函数功能及其在程序整体结构中位置,使得程序分析过程更加清晰明了。
Description
技术领域
本发明涉及一种基于计算机程序存在函数封装特性的程序结构的层次化表 达方法,属于软件工程领域。该方法利用函数封装特性,极大地简化了程序层 次化的表达过程,提高了程序结构的可读性,适合于结构化程序的可视化表达。
背景技术
随着软件本身及其运行环境的日益复杂,软件可信性引起人们越来越多的 关注。众多计算机科学家都认为,形式化方法对软件进行模型设计和验证是一 种重要手段。软件结构的图形化表达能对软件的形式化验证起到推动作用。在 分析程序结构问题中,图形化可以清晰地描述程序各模块之间的联系,而对于 复杂程序结构图的层次化表达,可以为程序的理解和分析带来很大的便利。
从程序结构表达的要素上看,对程序结构的描述需要清晰地描述程序中的 控制依赖关系、数据依赖关系和消息传递关系,并能根据某一个切片准则得出 一段完备的程序切片。从程序结构的图形化表达发展历程来看,面向对象程序 的图形化表达方法与结构化程序的图形化表达方法相比有一个明显的优势就封 装和代码重用。本发明从函数封装和代码重用的角度提出程序的层次化图形表 达方法—HDG图,该方法更加符合程序自身所具有的特点。
另外,在程序结构的图形化描述中,描述工具如果与描述对象具有相同的 结构,那么其表达效果将会事半功倍。结构化程序中没有类、对象、继承、多 态等诸多特征,只需考虑过程内和过程间的调用关系,而这种调用关系可以用 数据流和控制流很好地描述,并且过程间的调用可以看做是过程与过程的层次 关系。结构化程序这一层次化特性在HDG中得到了充分的利用。
发明内容
本发明解决的技术问题是实现了程序结构的层次化表达。
一种软件结构的层次化表达方法,步骤如下:
(1)定义
HDG(Hierarchy Dependence Graph,简称HDG)图是由控制依赖子图、数据 依赖子图、过程依赖子图三部分组成,是由多个处于不同层级上的HDG图组成, 是个层次依赖复合图;
父函数和子函数:函数中存在对自定义函数的调用,则其中的被调用函数 称为子函数,主调函数称为父函数;
最小函数单元:函数中除了调用语言环境定义的函数和自身外,没有调用 其他的自定义函数;
函数距离:函数是一个父函数,该函数中的子函数距离该函数距离为1,若 子函数也是父函数则子函数的子函数距离该函数距离为2,依此类推;
HDG是一个层次依赖复合图,它具体由控制依赖图、数据依赖图、过程依 赖子图、层次依赖子图组合而成;
层次依赖子图:用函数所处的层级来描述函数间的调用关系;单独就每个 层次依赖子图看,它是一个函数完整的逻辑描述,它与处于最低级的层次依赖 子图共同组成一个HDG;整合所有层次依赖子图就构成程序的层次依赖图 HDG,它是一个程序的完整逻辑描述;
HDG图的构成,在HDG图中,语句和函数都被抽象为节点,控制关系和 数据流抽象为边;形式上HDG图由表示函数、一般语句的节点、表示程序调用 关系的边以及数据流向的边组成;
HDG图中节点和边的含义如下:
函数是一组一起执行一个任务的程序语句;每个程序至少有一个函数,即 主函数main(),它是程序的入口节点,为了将主函数与非主函数区分开,在HDG 中用圆角矩形框表示主函数;
(1.1)在HDG中需要使用两类节点,第一类是函数节点,包含函数节点和 子函数节点;第二类是一般节点,包含基本语句节点和参数节点;每种节点的 语法含义为:
(1.1.1)函数节点:代表函数的开始,是程序的主函数或是非主函数;
函数节点:一个函数节点表示一个函数的开始,用矩形框表示;函数节点 包含其函数体中数据成员、形参、子函数的信息,直接与函数体中的所有语句、 形参相连接,表现为控制关系;
子函数节点:一个子函数节点表示函数的调用,存在于父函数中,用带有 两条竖线的矩形框表示;子函数节点表示该函数中输入参数、输出参数、函数 功能的组合;子函数节点不描述该函数内部逻辑,只描述输入到输出过程中实 参的数据变化;
(1.1.2)一般节点
基本语句节点:基本语句节点的语句完成变量声明、计算、赋值和调用系 统内置函数,但不能导致自定义函数被调用或使用其返回值;
参数节点:参数节点用来表示函数形参和实参的对应关系;若某个传入参 数是可修改的,则为其设定一个输出参数与其对应;若函数存在返回值,则也 为其设定一个输出参数,表示函数的输出;
一般节点统一用椭圆表示;
(1.2)HDG中需要用到两种边,为控制边和数据流边
(1.2.1)控制边包括一般控制边、调用边和依赖边
一般控制边,描述程序的逻辑顺序,方向是单向的;若存在条件、循环控 制语句则其方向可逆;
调用边,描述对函数的一次调用;
依赖边,描述语句之间存在的控制依赖关系,由子函数指出;
控制边统一用加粗的实线箭头表示;
(1.2.2)数据流边包括一般数据流边和参数传递边
一般数据流边,描述函数内变量之间的数据传递,用实线箭头表示;如赋 值,简单运算,方向由程序语言表达式等号右边包含的变量指向左边包含的变 量;
参数传递边,描述函数调用时形参与实参的参数传递,用虚线箭头表示, 方向由实参节点指向形参节点;若存在返回值,则其方向由输出节点指出;
(2)获得源程序P及其控制依赖图和数据依赖图;
(3)判断程序P中的每个函数F是否是最小函数单元,如果F是最小函数 单元则将其加入到最小单元集合Fs中;如果F不是最小函数单元则继续查找P 中的下一个函数;
(4)对Fs中的每个函数F建立过程依赖图;
(5)判断Fs中的每个函数F是否存在父函数,如果函数F存在父函数, 则找到距离函数F最近的父函数PF,建立PF的过程依赖图;递归判断PF是否 存在父函数,如果存在父函数则进行与函数F相同的操作;如果不存在父函数 则结束递归判断;
(6)经过上述步骤(2)-(5)得出程序P中各个函数的过程依赖图,按离 main函数的距离从小到大依次从高层向低层排列,距离相同的函数处于同一层, 对于距离不同的函数则根据其距离大小形成函数的层次关系;最终主函数main 处于层次依赖图的最顶端,最小函数单元处于层次依赖图的最底层。
本发明的有益效果是:本发明使用分层结构对程序的整体逻辑进行描述, 其描述方法直接与程序在调用过程中形成的分层特性相适应,极大的简化了对 程序逻辑结构的表达;由于将子函数看作一个黑盒,弱化了函数的具体实现过 程,凸显了函数功能及其在程序整体结构中位置,使得程序分析过程更加清晰 明了。
附图说明
图1是HDG的组成部分示意图。
图2是HDG构建流程图。
图3是实例的HDG图表达示意图。
图4是图3的符号示例图。
具体实施方式
以下结合技术方案和附图详细叙述本发明的具体实施方式。
HDG图的构建过程如图2所示:
给出如下源代码P,构建出对应的HDG图。
(1)找出P中的所有最小函数单元集合Fs,得Fs={Add}。
(2)对Fs中的Add函数建立其过程依赖图,如图3(b)所示。
(3)找出Add函数的父函数,得到PF=main。
(4)建立main函数的过程依赖图,如图3(a)所示;将main函数放置在最 高层,Add函数放置在最底层,形成程序完整的HGD图,如图3所示。
Claims (1)
1.一种软件结构的层次化表达方法,其特征在于,步骤如下:
(1)定义
HDG图是由控制依赖子图、数据依赖子图、过程依赖子图三部分组成,是由多个处于不同层级上的HDG图组成,是个层次依赖复合图;
父函数和子函数:函数中存在对自定义函数的调用,则其中的被调用函数称为子函数,主调函数称为父函数;
最小函数单元:函数中调用语言环境定义的函数和自身;
函数距离:函数是一个父函数,该函数中的子函数距离该函数距离为1,若子函数也是父函数则子函数的子函数距离该函数距离为2,依此类推;
HDG是一个层次依赖复合图,它具体由控制依赖图、数据依赖图、过程依赖子图、层次依赖子图组合而成;
层次依赖子图:用函数所处的层级来描述函数间的调用关系;单独就每个层次依赖子图看,它是一个函数完整的逻辑描述,它与处于最低级的层次依赖子图共同组成一个HDG;整合所有层次依赖子图就构成程序的层次依赖图HDG,它是一个程序的完整逻辑描述;
HDG图的构成,在HDG图中,语句和函数都被抽象为节点,控制关系和数据流抽象为边;形式上HDG图由表示函数、一般语句的节点、表示程序调用关系的边以及数据流向的边组成;
HDG图中节点和边的含义如下:
函数是一组一起执行一个任务的程序语句;每个程序至少有一个函数,即主函数main(),它是程序的入口节点,为了将主函数与非主函数区分开,在HDG中用圆角矩形框表示主函数;
(1.1)在HDG中需要使用两类节点,第一类是函数节点,包含函数节点和子函数节点;第二类是一般节点,包含基本语句节点和参数节点;每种节点的语法含义为:
(1.1.1)函数节点:代表函数的开始,是程序的主函数或是非主函数;
函数节点:一个函数节点表示一个函数的开始,用矩形框表示;函数节点包含其函数体中数据成员、形参、子函数的信息,直接与函数体中的所有语句、形参相连接,表现为控制关系;
子函数节点:一个子函数节点表示函数的调用,存在于父函数中,用带有两条竖线的矩形框表示;子函数节点表示该函数中输入参数、输出参数、函数功能的组合;子函数节点不描述该函数内部逻辑,只描述输入到输出过程中实参的数据变化;
(1.1.2)一般节点
基本语句节点:基本语句节点的语句完成变量声明、计算、赋值和调用系统内置函数,但不能导致自定义函数被调用或使用其返回值;
参数节点:参数节点用来表示函数形参和实参的对应关系;若某个传入参数是可修改的,则为其设定一个输出参数与其对应;若函数存在返回值,则也为其设定一个输出参数,表示函数的输出;
一般节点统一用椭圆表示;
(1.2)HDG中需要用到两种边,为控制边和数据流边
(1.2.1)控制边包括一般控制边、调用边和依赖边
一般控制边,描述程序的逻辑顺序,方向是单向的;若存在条件、循环控制语句则其方向可逆;
调用边,描述对函数的一次调用;
依赖边,描述语句之间存在的控制依赖关系,由子函数指出;
控制边统一用加粗的实线箭头表示;
(1.2.2)数据流边包括一般数据流边和参数传递边
一般数据流边,描述函数内变量之间的数据传递,用实线箭头表示;赋值,简单运算,方向由程序语言表达式等号右边包含的变量指向左边包含的变量;
参数传递边,描述函数调用时形参与实参的参数传递,用虚线箭头表示,方向由实参节点指向形参节点;若存在返回值,则其方向由输出节点指出;
(2)获得源程序P及其控制依赖图和数据依赖图;
(3)判断程序P中的每个函数F是否是最小函数单元,如果F是最小函数单元则将其加入到最小单元集合Fs中;如果F不是最小函数单元则继续查找P中的下一个函数;
(4)对Fs中的每个函数F建立过程依赖图;
(5)判断Fs中的每个函数F是否存在父函数,如果函数F存在父函数,则找到距离函数F最近的父函数PF,建立PF的过程依赖图;递归判断PF是否存在父函数,如果存在父函数则进行与函数F相同的操作;如果不存在父函数则结束递归判断;
(6)经过上述步骤(2)-(5)得出程序P中各个函数的过程依赖图,按离main函数的距离从小到大依次从高层向低层排列,距离相同的函数处于同一层,对于距离不同的函数则根据其距离大小形成函数的层次关系;最终主函数main处于层次依赖图的最顶端,最小函数单元处于层次依赖图的最底层。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910509769.9A CN110334016B (zh) | 2019-06-13 | 2019-06-13 | 一种软件结构的层次化表达方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910509769.9A CN110334016B (zh) | 2019-06-13 | 2019-06-13 | 一种软件结构的层次化表达方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110334016A CN110334016A (zh) | 2019-10-15 |
CN110334016B true CN110334016B (zh) | 2021-04-20 |
Family
ID=68140656
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910509769.9A Active CN110334016B (zh) | 2019-06-13 | 2019-06-13 | 一种软件结构的层次化表达方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110334016B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473400A (zh) * | 2013-08-27 | 2013-12-25 | 北京航空航天大学 | 基于层次依赖建模的软件fmea方法 |
CN109800537A (zh) * | 2019-02-20 | 2019-05-24 | 大连理工大学 | 一种基于深度神经网络和蒙特卡洛法的机床热误差模型可靠度计算方法 |
-
2019
- 2019-06-13 CN CN201910509769.9A patent/CN110334016B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473400A (zh) * | 2013-08-27 | 2013-12-25 | 北京航空航天大学 | 基于层次依赖建模的软件fmea方法 |
CN109800537A (zh) * | 2019-02-20 | 2019-05-24 | 大连理工大学 | 一种基于深度神经网络和蒙特卡洛法的机床热误差模型可靠度计算方法 |
Non-Patent Citations (2)
Title |
---|
Design and Analysis of Video Parallel Processing on FPGA;Da Li;《2011 International Conference on E-Business and E-Government》;20111231;全文 * |
基于扩展的构件依赖关系图聚类的体系结构重构策略研究;钟林辉 等;《计算机应用研究》;20100831;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110334016A (zh) | 2019-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Felder et al. | Proving properties of real-time systems through logical specifications and Petri net models | |
JP6033891B2 (ja) | 状態図の生成 | |
CN106648662B (zh) | 基于工程造价计算描述语言bcl的报表生成装置及生成方法 | |
CN111176639A (zh) | 一种从SysML到AltaRica的自动化模型转换方法 | |
CN111984256A (zh) | 一种基于云原生架构的低代码应用流程系统和运行方法 | |
CN115964033B (zh) | 基于模型的可视化软件开发工具实现方法 | |
CN103761357A (zh) | 一种ug环境下基于xml的制造特征建模系统的方法 | |
Pereira et al. | Combining data-flows and petri nets for cyber-physical systems specification | |
CN111880784A (zh) | 一种面向simscript语言的离散事件仿真图形化建模方法 | |
Thramboulidis | IEC 61499 as an Enabler of Distributed and Intelligent Automation: A State‐of‐the‐Art Review—A Different View | |
CN110334016B (zh) | 一种软件结构的层次化表达方法 | |
Marmsoler et al. | Interactive verification of architectural design patterns in FACTum | |
CN106372152B (zh) | 一种在线表单开发系统 | |
Wu et al. | Computer Architecture and Chip Design for DIKWP Artificial Consciousness | |
CN115758789B (zh) | 一种复杂实时嵌入式系统的软件架构设计与架构传递方法 | |
CN111679809B (zh) | 一种基于Noesis逻辑的程序开发与验证方法及系统 | |
CN117492723A (zh) | 一种基于数据和行为模型的工业软件代码自动生成方法 | |
CN104615438A (zh) | 一种软件产品线的特征切片模型检测方法 | |
CN107291435B (zh) | 一种不确定性环境下混成aadl模型量化分析方法 | |
CN115525321A (zh) | 分布式任务生成方法、装置、设备及存储介质 | |
CN109754087B (zh) | 量子程序转化方法、装置及电子设备 | |
CN111240972B (zh) | 一种基于源代码的模型验证装置 | |
CN114153519A (zh) | 一种基于vue的通用页面通知弹窗插件生成方法及系统 | |
Arons et al. | Deductive verification of UML models in TLPVS | |
Zurowska et al. | Language-specific model checking of UML-RT models |
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 |