CN111625223B - 一种基于静态分析与抽象的软件设计重建方法 - Google Patents
一种基于静态分析与抽象的软件设计重建方法 Download PDFInfo
- Publication number
- CN111625223B CN111625223B CN202010459766.1A CN202010459766A CN111625223B CN 111625223 B CN111625223 B CN 111625223B CN 202010459766 A CN202010459766 A CN 202010459766A CN 111625223 B CN111625223 B CN 111625223B
- Authority
- CN
- China
- Prior art keywords
- abstract
- program
- control flow
- flow graph
- action
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一种基于静态分析与抽象的软件设计重建方法,其步骤为:步骤S1:控制流图提取;对一个给定的软件程序P,提取出其在一组程序控制点上的具体控制流图C,控制点之间的迁移由一个动作序列集合所标注,表示其中的动作序列发生时会导致该控制迁移;步骤S2:动作抽象;根据设定的变量抽象域,计算具体控制流图每条边上的动作序列集合对应的抽象动作,分析出该组动作序列在更高的抽象层的含义;步骤S3:控制点和抽象域调整;步骤S4:程序合成;得到一个抽象的控制流图;根据此控制流图合成一个用来描述软件设计模型的抽象程序,完成设计重建。本发明具有原理简单、设计重建自动化水平高、可提高设计重建抽象程度等优点。
Description
技术领域
本发明主要涉及到软件设计技术领域,特指一种基于静态分析与抽象的软件设计重建方法。
背景技术
软件设计重建是一种重要的软件逆向工程技术,用来从软件源程序出发重建软件的设计,在软件程序理解、软件故障诊断与修复、软件维护等领域有着广泛应用。对于许多没有良好软件设计文档的遗留软件来说,尤其需要软件设计重建技术。例如,现在的Linux操作系统内核有两千多万行代码,其大部分的软件设计隐含于内核源程序中,通过设计重建可以帮助理解和维护该软件。
现有的典型设计重建方法包括以下四个步骤:
S1:程序控制流图初始分析,形成带原始程序语句的程序控制流图。
S2:编程计划知识(Programming Plan Knowledge)的初步分析。
S3:在编程计划知识的指导下,从小到大逐步分析控制流图中各程序模块的功能,并推理新的编程计划知识。
S4:得到完整的带自然语亨描述的程序控制流图。
现有的函数级软件设计重建技术存在的主要缺点是:
1、设计重建的成功严重依赖于人的智能。
目前典型的函数级设计重建方法使用带自然语言描述的控制流图(Control FlowGraph,CFG)来描述函数的设计模型,其重建过程很大程度上依赖于分析人员的智能,缺乏操作性强的重建方法指导,原因在于从程序片段到自然语言描述的转化依赖于很多综合的背景知识,需要进行更高抽象级别的思考,难以确定化。
即,目前基于控制流图的设计重建方法采用自底向上的方式逐步分析总结各程序片段的功能,从程序具体实现到程序意图的抽象过程是一个关键,但此过程涉及到不同抽象级别模型的转换,需要分析人员来创造性地手工完成,因此设计重建的成功很大程度上依赖于分析人员的创造性分析。
2、设计重建的抽象程度不够。
现有的设计重建对原始的程序语句进行了一些转化,但在控制流图上基本保留了原结构,对程序控制结构缺乏更高程度的抽象描述,导致有些真正关心的软件设计得不到清晰重建。即,目前基于控制流图的设计重建方法分析程序在所有程序控制点上的行为,在控制流图上基本保留了原结构,导致重建出的控制流图与原始控制流图很接近,所变化的主要是用自然语言对程序语句意图的描述。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、设计重建自动化水平高、可提高设计重建抽象程度的基于静态分析与抽象的软件设计重建方法。
为解决上述技术问题,本发明采用以下技术方案:
一种基于静态分析与抽象的软件设计重建方法,其步骤为:
步骤S1:控制流图提取;对一个给定的软件程序P,提取出其在一组程序控制点上的具体控制流图C,控制点之间的迁移由一个动作序列集合所标注,表示其中的动作序列发生时会导致该控制迁移;
步骤S2:动作抽象;根据设定的变量抽象域,计算具体控制流图每条边上的动作序列集合对应的抽象动作,分析出该组动作序列在更高的抽象层的含义;
步骤S3:控制点和抽象域调整;如果步骤S2失败,则调整关注的控制点集合和变量抽象域,然后重复S2;
步骤S4:程序合成;如果步骤S2成功,得到一个抽象的控制流图;根据此控制流图合成一个用来描述软件设计模型的抽象程序,完成设计重建。
作为本发明的进一步改进:所述步骤S1的过程包括:
步骤S11:构造程序P的原始控制流图;
步骤S12:计算原始控制流图在关注的程序控制点之间迁移时的动作序列,得到一个在该组程序控制点上的控制流图。
作为本发明的进一步改进:所述步骤S2的过程包括:
步骤S21:设定变量抽象域,即设置对程序中的各变量如何进行抽象;
步骤S22:根据变量抽象域,计算具体控制流图每条边上的动作序列集合对应的抽象动作;如果变量抽象域和程序控制点集合选择合适,则可以为每条边都找到抽象动作,此时步骤S2成功;否则会存在至少一条边无法找到对应的抽象动作,步骤S2失败。
作为本发明的进一步改进:在所述步骤S2中,具体控制流图中的有些边可能找不到对应的抽象动作,即在忽略掉内部动作以后,边上标注的某条动作路径中既有赋值动作,也有条件测试动作,或者边上标注的一条动作路径都是赋值或条件测试动作,但另一条动作路径不都是相同类型的动作。
作为本发明的进一步改进:所述步骤S3的过程包括:分析步骤S2失败的原因,调整该步骤中使用的控制点集合或者变量抽象域,使得具体控制流图中的每条边上标注的动作序列集合都能找到对应的抽象动作;即,使每条边上标注的所有动作序列都是相同的类型,即都是赋值型动作或都是测试型动作。
作为本发明的进一步改进:所述步骤S4的过程包括:根据抽象控制流图合成一个用来描述软件设计模型的抽象程序,该抽象程序在所关注的控制点上的行为与抽象控制流图一致,完成设计重建。
与现有技术相比,本发明的优点在于:
1、本发明的基于静态分析与抽象的软件设计重建方法,将抽象过程进一步细化为程序状态的抽象和程序动作的抽象,前者需要分析人员按推荐的模式来设定,后者可以按固定方式计算出来,从而大幅降低了对分析人员的依赖。
2、本发明的基于静态分析与抽象的软件设计重建方法,引入了对程序控制点的抽象,可以只关注一部分程序控制点,并重建在这些点上的程序行为,从而可以提高对程序控制结构的抽象程度,使重建更有针对性。
3、本发明的基于静态分析与抽象的软件设计重建方法,提高了设计重建的自动化水平。即,提供了一种系统化的设计重建方法,该方法的大部分步骤都可以由机器自动完成,只有在程序状态抽象部分需要分析人员辅助设置变量抽象域和程序控制点集合,并且本方法提供了上述设置的推荐模式。因此,按照本方法可以大幅降低对分析人员智能参与的要求,提高了设计重建的自动化水平。
4、本发明的基于静态分析与抽象的软件设计重建方法,提高了设计重建的抽象程度。本发明通过设置关注的程序控制点集合,并集中分析在这些点上的程序行为,重建出程序在所关注的控制点上的设计模型,从而可以隐藏大量不相关的程序细节,提高对程序控制结构的抽象程度,使设计重建更有针对性。
附图说明
图1是本发明方法的流程示意图。
图2是本发明在具体应用实例中得到与程序P1直接对应的原始控制流图。
图3是本发明在具体应用实例中从原始控制流图得出在集合L1上的控制流图C1。
具体实施方式
以下将结合说明书附图和具体实施例对本发明做进一步详细说明。
为了便于理解本发明的内容,本发明先将一些基本概念和定义进行说明:
静态分析(Static Analysis):指不运行软件而直接分析程序代码,来发现程序错误或程序工作原理等信息。
设计重建(Design Rebuilding):指根据软件可执行代码或源代码来建立软件设计的过程。
控制流图(Control Flow Graph):也叫控制流程图,是一个过程或程序的抽象表现,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个函数内所有基本块执行的可能流向,也能反映一个函数的实时执行过程。
软件逆向工程(Software Reverse Engineering):根据软件的可执行代码或源代码来分析推导出软件设计、需求等信息。
抽象域(Abstract Domain):一种数学结构,用来对程序状态及其转换进行抽象描述。
静态分区抽象(Static Partitioning Abstraction):一种抽象方法,基于对程序的所有可能状态的集合进行分区(划分为多个子集合)来作抽象。
如图1所示,本发明的一种基于静态分析与抽象的软件设计重建方法,其步骤为:
步骤S1:控制流图提取;
对一个给定的软件程序P,提取出其在一组程序控制点上的具体控制流图C,控制点之间的迁移由一个动作序列集合所标注,表示其中的动作序列发生时会导致该控制迁移。
步骤S2:动作抽象;基于静态分区抽象的程序动作抽象技术;
根据设定的变量抽象域,计算具体控制流图每条边上的动作序列集合对应的抽象动作,从而分析出该组动作序列在更高的抽象层的含义。
步骤S3:控制点和抽象域调整;基于动作序列类型分析的程序控制点集合和变量抽象域调整策略。
如果步骤S2失败,则调整关注的控制点集合和变量抽象域,然后重复S2。
步骤S4:程序合成;基于非确定选择结构的抽象程序合成技术。
如果步骤S2成功,则可以得到一个抽象的控制流图;根据此控制流图合成一个用来描述软件设计模型的抽象程序,从而完成设计重建。
在具体应用实例中,所述步骤S1的详细流程可以为:
步骤S11:构造程序P的原始控制流图。
步骤S12:计算原始控制流图在关注的程序控制点之间迁移时的动作序列,从而得到一个在该组程序控制点上的控制流图。
以下面的小程序P1为例:
经过步骤S11的处理后,可以得到与程序P1直接对应的原始控制流图,如图2所示。
其中各边上的标注都是一个动作,具体为:
可见这些动作要么为一个赋值语句,要么为一个条件判断。
经过步骤S12的处理后,可以得到一个在关注的程序控制点上的控制流图。如果设L1={1,2,3,5,6}为关注的程序控制点集合,则在可以从上面的原始控制流图得出在集合L1上的控制流图C1,如图3所示。
其中各边上的标注都是一个动作序列集合,表明所有可能导致该迁移发生的动作序列,具体为:
在具体应用实例中,所述步骤S2的详细处理过程可以为:
步骤S21:设定变量抽象域,即设置对程序中的各变量如何进行抽象。
步骤S22:根据变量抽象域,计算具体控制流图每条边上的动作序列集合对应的抽象动作。如果变量抽象域和程序控制点集合选择合适,则可以为每条边都找到抽象动作,此时步骤S2成功;否则会存在至少一条边无法找到对应的抽象动作,步骤S2失败。
以前面的具体控制流图C1为例,在步骤S21中,可以对变量a进行抽象,该变量原来的类型是整形(int),可以对该变量进行静态分区抽象(Static PartitioningAbstraction),具体可以采用集合来描述变量a的取值范围,其中表示所有闰年整数集合,表示所有非闰年整数集合,这两个集合构成对所有整数集合的一个划分。至于变量b,这里可以不作抽象。当采用此变量抽象方法时,在步骤S22中,可以为具体控制流图C1的每条边找到对应的抽象动作,具体如下:
用这些抽象动作替换具体控制流图C1的对应动作序列集合后,即可得到一个抽象控制流图C2,它与C1的结构相同,但边上的标注不同。在一些情况下,具体控制流图中的有些边可能找不到对应的抽象动作。典型的情况是,在忽略掉内部动作以后,边上标注的某条动作路径中既有赋值动作,也有条件测试动作,或者边上标注的一条动作路径都是赋值或条件测试动作,但另一条动作路径不都是相同类型的动作。
对于上述步骤S2中的变量抽象域设置方法,本发明基于静态分区抽象给出了一种设置示例,其它抽象域也是可以考虑的,只要能保证动作抽象的顺利进行即可。
在具体应用实例中,所述步骤S3中包括:分析步骤S2失败的原因,调整该步骤中使用的控制点集合或者变量抽象域,使得具体控制流图中的每条边上标注的动作序列集合都能找到对应的抽象动作,典型做法是:使每条边上标注的所有动作序列都是相同的类型,即都是赋值型动作或都是测试型动作。
在具体应用实例中,所述步骤S4中包括:根据抽象控制流图合成一个用来描述软件设计模型的抽象程序,该程序在所关注的控制点上的行为应该与抽象控制流图一致,从而完成设计重建。
以前面的抽象控制流图C2为例,从该控制流图可以合成如下的抽象程序M1:
该抽象程序中使用了一个“switch”语句,该语句在所有为真的分支中非确定地选择一个来执行。上面这个程序中switch语句的各分支不会同时为真,但因为做了抽象,所以在某些情况下可能出现多个分支同时为真。抽象程序M1可以改写一下,以增强可读性,如下所示:
此抽象程序清晰地刻画了原程序的软件设计思想。
至此完成函数的设计重建。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (5)
1.一种基于静态分析与抽象的软件设计重建方法,其特征在于,步骤为:
步骤S1:控制流图提取;即对一个给定的软件程序P,提取出其在一组程序控制点上的具体控制流图C,控制点之间的迁移由一个动作序列集合所标注,表示其中的动作序列发生时会导致控制迁移;
步骤S2:设定变量抽象域,即设置对程序中的各变量如何进行抽象;根据变量抽象域,计算具体控制流图每条边上的动作序列集合对应的抽象动作;如果变量抽象域和程序控制点集合选择合适,则可以为每条边都找到抽象动作,此时步骤S2成功;否则会存在至少一条边无法找到对应的抽象动作,步骤S2失败;
步骤S3:控制点和抽象域调整;即如果步骤S2失败,则调整关注的控制点集合和变量抽象域,然后重复步骤S2;
步骤S4:程序合成;即如果步骤S2成功,得到一个抽象的控制流图;根据此控制流图合成一个用来描述软件设计模型的抽象程序,完成设计重建。
2.根据权利要求1所述的基于静态分析与抽象的软件设计重建方法,其特征在于,所述步骤S1的过程包括:
步骤S11:构造程序P的原始控制流图;
步骤S12:计算原始控制流图在关注的程序控制点之间迁移时的动作序列,得到一个在该组程序控制点上的控制流图。
3.根据权利要求2所述的基于静态分析与抽象的软件设计重建方法,其特征在于,在所述步骤S2中,具体控制流图中的有些边可能找不到对应的抽象动作,即在忽略掉内部动作以后,边上标注的某条动作路径中既有赋值动作,也有条件测试动作,或者边上标注的一条动作路径都是赋值或条件测试动作,但另一条动作路径不都是相同类型的动作。
4.根据权利要求1或2或3所述的基于静态分析与抽象的软件设计重建方法,其特征在于,所述步骤S3的过程包括:分析步骤S2失败的原因,调整步骤S2中使用的控制点集合或者变量抽象域,使得具体控制流图中的每条边上标注的动作序列集合都能找到对应的抽象动作;即,使每条边上标注的所有动作序列都是相同的类型,即都是赋值型动作或都是测试型动作。
5.根据权利要求1或2或3所述的基于静态分析与抽象的软件设计重建方法,其特征在于,所述步骤S4的过程包括:根据抽象控制流图合成一个用来描述软件设计模型的抽象程序,该抽象程序在所关注的控制点上的行为与抽象控制流图一致,完成设计重建。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010459766.1A CN111625223B (zh) | 2020-05-26 | 2020-05-26 | 一种基于静态分析与抽象的软件设计重建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010459766.1A CN111625223B (zh) | 2020-05-26 | 2020-05-26 | 一种基于静态分析与抽象的软件设计重建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111625223A CN111625223A (zh) | 2020-09-04 |
CN111625223B true CN111625223B (zh) | 2023-04-28 |
Family
ID=72272131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010459766.1A Active CN111625223B (zh) | 2020-05-26 | 2020-05-26 | 一种基于静态分析与抽象的软件设计重建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111625223B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0841612A2 (en) * | 1996-11-08 | 1998-05-13 | International Business Machines Corporation | Framework for software development |
CN1402133A (zh) * | 2002-09-13 | 2003-03-12 | 中国人民解放军国防科学技术大学 | 一种面向路径的测试数据自动生成方法 |
CN103593222A (zh) * | 2013-09-29 | 2014-02-19 | 中国人民解放军第二炮兵装备研究院科研试验中心 | 一种逆向提取Java软件程序类图的方法 |
CN108628600A (zh) * | 2018-05-08 | 2018-10-09 | 北京理工大学 | 基于控制流分析的软件动态行为建模方法和装置 |
CN109814834A (zh) * | 2019-01-14 | 2019-05-28 | 中国人民解放军国防科技大学 | 一种基于条件数指导的浮点程序精度缺陷检测方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE526628T1 (de) * | 2004-01-22 | 2011-10-15 | Nec Lab America Inc | System und verfahren zum modellieren, abstrahieren und analysieren von software |
US8453116B2 (en) * | 2008-11-24 | 2013-05-28 | Microsoft Corporation | Efficient invariant inference for program verification |
US8495588B2 (en) * | 2010-04-16 | 2013-07-23 | International Business Machines Corporation | Abstraction-guided synthesis |
US8719790B2 (en) * | 2011-03-23 | 2014-05-06 | Nec Laboratories America, Inc. | Donut domains—efficient non-convex domains for abstract interpretation |
-
2020
- 2020-05-26 CN CN202010459766.1A patent/CN111625223B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0841612A2 (en) * | 1996-11-08 | 1998-05-13 | International Business Machines Corporation | Framework for software development |
CN1402133A (zh) * | 2002-09-13 | 2003-03-12 | 中国人民解放军国防科学技术大学 | 一种面向路径的测试数据自动生成方法 |
CN103593222A (zh) * | 2013-09-29 | 2014-02-19 | 中国人民解放军第二炮兵装备研究院科研试验中心 | 一种逆向提取Java软件程序类图的方法 |
CN108628600A (zh) * | 2018-05-08 | 2018-10-09 | 北京理工大学 | 基于控制流分析的软件动态行为建模方法和装置 |
CN109814834A (zh) * | 2019-01-14 | 2019-05-28 | 中国人民解放军国防科技大学 | 一种基于条件数指导的浮点程序精度缺陷检测方法 |
Non-Patent Citations (3)
Title |
---|
Gyuhyun Kwon.Evaluation of software usability using scenarios organized by abstraction structure.《ECCE '07: Proceedings of the 14th European conference on Cognitive ergonomics: invent! explore!》.2008,全文. * |
Jiahong Jiang.Analyzing Math Library Functions via Summarizatio.《2016 IEEE International Conference on Software Quality, Reliability and Security Companion (QRS-C)》.2016,全文. * |
文艳军. 基于接口自动机的组合验证方法研究.《中国博士学位论文全文数据库 信息科技辑》.2006,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111625223A (zh) | 2020-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Alnafessah et al. | Quality-aware devops research: Where do we stand? | |
US7644398B2 (en) | System and method for automatic test-case generation for software | |
DE3787431T2 (de) | Verfahren zur Generierung einer Kandidatenliste von fehlerhaften Schaltungselementen und Verfahren zur Isolierung von Fehlern in einer logischen Schaltung unter Verwendung dieser Kandidatenliste. | |
Grilo et al. | Reverse engineering of GUI models for testing | |
CN110502447B (zh) | 一种基于图的回归测试用例优先排序方法 | |
AT511272A1 (de) | Kopplungsmethodik für nicht-iterative co-simulation | |
CN104572474A (zh) | 一种基于动态切片的轻量级错误定位技术实现方法 | |
DE112018002316T5 (de) | Codeabdeckungsverfolgung für ein mikrocontroller-programm | |
CN111625223B (zh) | 一种基于静态分析与抽象的软件设计重建方法 | |
Baker et al. | Detect, fix, and verify TensorFlow API misuses | |
Hong et al. | Evaluation of model checkers by verifying message passing programs | |
CN107919998B (zh) | 基于JMeter的传感器服务端功能测试方法与系统 | |
CN115587480A (zh) | 数字化仿真方法以及数字化仿真装置 | |
CN109388876A (zh) | 一种地下水溶质运移数值模拟并行加速方法 | |
Bailey et al. | FRAM memory technology-advantages for low power, fast write, high endurance applications | |
CN114610648A (zh) | 一种测试方法、装置及设备 | |
Van Ertvelde et al. | Workload reduction and generation techniques | |
CN106547696B (zh) | 一种面向工作流系统的测试用例生成方法及装置 | |
Belardinelli et al. | Decidability of model checking non-uniform artifact-centric quantified interpreted systems | |
CN111290938A (zh) | 一种基于人工辅助的Android半自动化测试方法 | |
Murphy-Hill | Improving refactoring with alternate program views | |
CN111814415B (zh) | 用于芯片验证的高效回归测试方法 | |
Grafberger et al. | Towards declarative systems for data-centric machine learning | |
CN117875876A (zh) | 一种面向基建与运维过程的工程交付方法及终端 | |
CN115564060A (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 |