CN106970803A - 一种软件***演化的分析方法和装置 - Google Patents
一种软件***演化的分析方法和装置 Download PDFInfo
- Publication number
- CN106970803A CN106970803A CN201710279321.3A CN201710279321A CN106970803A CN 106970803 A CN106970803 A CN 106970803A CN 201710279321 A CN201710279321 A CN 201710279321A CN 106970803 A CN106970803 A CN 106970803A
- Authority
- CN
- China
- Prior art keywords
- software
- algebraically
- component
- topological diagram
- version
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种软件***演化的分析方法和装置。该方法包括:以第一版本软件中的信息资源为节点,以第一版本软件中信息资源之间的关联关系为边,构建第一版本软件的第一软件结构拓扑图;根据代数拓扑复形原理,将第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取代数构件之间的关系信息;将第一软件结构拓扑图转化为以代数构件为节点,以关系信息为边的第二软件结构拓扑图,并将第二软件结构拓扑图分解为代数构件表达式;输出第一版本软件的代数构件表达式。本发明以代数运算的形式分析该软件***的演化过程,从整体上对软件***的演化过程进行掌握,指导软件***的重构和维护;提高软件***,特别是大规模软件***的演化分析效率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种软件***演化的分析方法和装置。
背景技术
目前在世界范围内的软件***演化方法主要分为动态软件***演化和静态软件***演化方法两大类,其中动态软件***演化方法指的是软件***在运行期间的演化,它具有软件***不会出现暂时失效的优点,但是其中的技术方案由于涉及到软件***的状态迁移问题,因此,相比于静态软件***演化方法来说技术上实现比较困难。静态软件***演化方法指的是软件***在停机状态下的演化,即软件版本的升级。相对来说实现起来比较容易,不需要考虑软件***的状态迁移以及处理活动的进程。
现有的软件***静态演化分析方法主要集中在对软件源代码的度量层次上,有基于Petri网的软件***演化过程,描述了软件***的演化过程,并提出了软件***演化过程中的活性判断及优化算法。基于代码复杂度的软件***演化评估与分析,分析了Java代码的McCabe圈复杂度和Halstead复杂度,通过对软件***的度量发现其中复杂度较高的模块,并且分析随着软件***版本的升级软件***复杂度的变化规律,对引起软件***复杂度变化的类和方法进行定位,从而知道软件***演化过程。
但是,现有的软件***静态演化分析方法只能从软件***的局部结构进行演化分析,不能从整体上对软件结构的演化进行掌握,并且随着软件规模的增大,现有的软件***演化分析方法效率较低。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的软件***演化的分析方法和相应的装置。
依据本发明的一个方面,提供了一种软件***演化的分析方法,对于给定软件***的第一版本软件,获取所述第一版本软件的代数构件表达式,具体包括:
以所述第一版本软件中的信息资源为节点,以所述第一版本软件中信息资源之间的关联关系为边,构建所述第一版本软件的第一软件结构拓扑图;
根据代数拓扑复形原理,将所述第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取所述代数构件之间的关系信息;
将所述第一软件结构拓扑图转化为以所述代数构件为节点,以所述关系信息为边的第二软件结构拓扑图,并将所述第二软件结构拓扑图分解为代数构件表达式;其中,所述代数构件表达式由所述第二软件结构拓扑图中的代数构件和所述关系信息组成;
输出所述第一版本软件的代数构件表达式。
可选地,所述方法进一步包括:对于给定软件***的不同版本软件,获取所述不同版本软件的代数构件表达式;
比较所述不同版本软件的代数构件表达式,获得所述给定软件***的演化信息,根据所述演化信息总结所述给定软件***的演化规律,并输出所述演化信息和所述演化规律。
可选地,所述以所述第一版本软件中的信息资源为节点,以所述第一版本软件中的关联关系为边,构建所述第一版本软件的第一软件结构拓扑图包括:
针对所述第一版本软件中的面向过程程序语言,以所述第一版本软件的源代码中的方法或结构体作为节点,以所述方法和/或所述结构体之间的调用和包含关系为边,构建所述软件***的第一软件结构拓扑图;
针对所述软件***中的面向对象程序语言,以所述软件***的源代码中的类为节点,以类和类之间的继承、泛化、关联、依赖或使用关系为边,构建所述软件***的第一软件结构拓扑图。
可选地,所述将所述第一软件结构拓扑图中的每一个节点表述成一个代数构件包括:
将所述软件结构拓扑图中的每一个节点表述成一个代数构件六元组形式;所述六元组中的元素包括:逻辑行为集合、连接关系集合、控制器、内部数据、聚合运算、检测器。
可选地,所述将所述第二软件结构拓扑图分解为代数构件表达式包括:
将所述第二软件结构拓扑图自上向下粗化分解得到第一代数构件表达式;
将所述第二软件结构拓扑图自左向右精化分解得到第二代数构件表达式;
将所述第一代数构件表达式和所述第二代数构件表达式进行集成,获得所述第一版本软件的代数构件表达式。
依据本发明的另一个方面,提供了一种软件***演化的分析装置,所述装置用于对于给定软件***的第一版本软件,获取所述第一版本软件的代数构件表达式,具体包括:
构建单元,用于以所述第一版本软件的信息资源为节点,以所述第一版本软件中信息资源之间的关联关系为边,构建所述第一版本软件的第一软件结构拓扑图;
获取单元,用于根据代数拓扑复形原理,将所述第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取所述代数构件之间的关系信息;
分解单元,用于将所述第一软件结构拓扑图转化为以所述代数构件为节点,以所述关系信息为边的第二软件结构拓扑图,并将所述第二软件结构拓扑图分解为代数构件表达式;其中,所述代数构件表达式由所述第二软件结构拓扑图中的代数构件和所述代数构件之间的关系信息组成;
输出单元,用于输出所述第一版本软件的代数构件表达式。
可选地,所述装置还用于对于给定软件***的不同版本软件,获取所述不同版本软件的代数构件表达式;所述装置进一步包括:
比较单元,用于比较所述不同版本软件的代数构件表达式,获得所述给定软件***的演化信息,根据所述演化信息总结所述给定软件***的演化规律;
所述输出单元,用于输出所述演化信息和所述演化规律。
可选地,所述构建单元,具体用于针对所述第一版本软件中的面向过程程序语言,以所述第一版本软件的源代码中的方法或结构体作为节点,以所述方法和/或所述结构体之间的调用和包含关系为边,构建所述第一版本软件的第一软件结构拓扑图;针对所述第一版本软件中的面向对象程序语言,以所述第一版本软件的源代码中的类为节点,以类和类之间的继承、泛化、关联、依赖或使用关系为边,构建所述第一版本软件的第一软件结构拓扑图。
可选地,所述获取单元,用于将所述软件结构拓扑图中的每一个节点表述成一个代数构件六元组形式;所述六元组中的元素包括:逻辑行为集合、连接关系集合、控制器、内部数据、聚合运算、检测器。
可选地,所述分解单元,具体用于将所述第二软件结构拓扑图自上向下粗化分解得到第一代数构件表达式;将所述第二软件结构拓扑图自左向右精化分解得到第二代数构件表达式;将所述第一代数构件表达式和所述第二代数构件表达式进行集成,获得所述第一版本软件的代数构件表达式。
本发明提出了一种基于代数拓扑的软件***演化的分析,具体为:根据给定软件***的第一版本软件,以第一版本软件中的信息资源为节点,以第一版本软件中信息资源之间的关联关系为边,构建第一版本软件的第一软件结构拓扑图;根据代数拓扑复形原理,将第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取代数构件之间的关系信息;将第一软件结构拓扑图转化为以代数构件为节点,以关系信息为边的第二软件结构拓扑图,并将第二软件结构拓扑图分解为代数构件表达式;输出第一版本软件的代数构件表达式。可见,本发明以代数运算的形式来分析该软件***的演化过程,可以从整体上对软件***的演化过程进行掌握,指导软件***的重构和维护;并且可以提高软件***,特别是大规模软件***的演化分析效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种软件***演化的分析方法的流程示意图;
图2示出了根据本发明一个实施例的一种第一版本软件的第一软件结构拓扑图;
图3示出了根据本发明一个实施例的代数构件之间的调用关系示意图;
图4示出了根据本发明一个实施例的代数构件之间的嵌套关系示意图;
图5示出了根据本发明一个实施例的代数构件之间的包含关系示意图;
图6示出了根据本发明一个实施例的一种第一版本软件的第二软件结构拓扑图;
图7示出了根据本发明另一个实施例的一种第一版本软件的第一软件结构拓扑图;
图8示出了根据本发明一个实施例的一种软件***演化的分析装置的结构示意图;
图9示出了根据本发明另一个实施例的一种软件***演化的分析装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
对于给定软件***的第一版本软件,获取第一版本软件的代数构件表达式。图1示出了根据本发明一个实施例的一种软件***演化的分析方法的流程示意图。如图1所示,该获取第一版本软件的代数表达式的方法具体包括:
步骤S110,以第一版本软件中的信息资源为节点,以第一版本软件中信息资源之间的关联关系为边,构建第一版本软件的第一软件结构拓扑图。
第一版本软件指的并非是该给定软件***的初始版本软件,而是该给定软件***的所有软件版本中的其中一个版本软件。这里的信息资源可以是第一版本软件的源代码中的逻辑行为,也可以是软件中的各个模块或子***。例如,方法、结构体、类等。信息资源之间的关联关系是各逻辑行为之间的逻辑关系,例如,方法与方法之间的调用和包含关系、方法与结构体之间的调用和包含关系、结构体与结构体之间的调用和包含关系;类和类之间的继承、泛化、关联、依赖或使用关系。
在本实施例中,以第一版本软件中的信息资源为节点,以第一版本软件中信息资源之间的关联关系为边,构建第一版本软件的第一软件结构拓扑图。图2示出了根据本发明一个实施例的一种第一版本软件的第一软件结构拓扑图。如图2所示,将main、min、sum、max等方法作为第一软件结构拓扑图的节点,main和min之间的关联关系、main和sum之间的关联关系、main和max之间的关联关系分别作为main和min之间的边、main和sum之间的边、main和max之间的边。
步骤S120,根据代数拓扑复形原理,将第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取代数构件之间的关系信息。
第一软件结构拓扑图为一个拓扑复形图,图中的每一个节点(例如,软件的各个组成要素、模块、子***等)对应一个拓扑子复形图,这里每一个节点都可以抽象成一个代数构件的形式。
例如,利用代数拓扑复形原理将图2所示的第一软件结构拓扑图中的main节点表述成一个代数构件。
在本实施例中,代数构件之间的关系包括调用关系、嵌套关系和包含关系三种。图3示出了根据本发明一个实施例的代数构件之间的调用关系示意图;图4示出了根据本发明一个实施例的代数构件之间的嵌套关系示意图;图5示出了根据本发明一个实施例的代数构件之间的包含关系示意图,其中,C0、C1、C2均为代数构件。
步骤S130,将第一软件结构拓扑图转化为以代数构件为节点,以关系信息为边的第二软件结构拓扑图,并将第二软件结构拓扑图分解为代数构件表达式;其中,代数构件表达式由第二软件结构拓扑图中的代数构件和关系信息组成。
当将第一软件结构拓扑图中每个节点表述成一个代数构件,且获得了各代数构件之间的关系后,可以将第一软件结构拓扑图对应转化成第二软件结构拓扑图,在本实施例中,第二软件结构拓扑图的节点是代数构件,边是代数构件之间的关系。例如,图6示出了根据本发明一个实施例的一种第一版本软件的第二软件结构拓扑图。如图6所示,C1、C2、C3、C4、C5、C6、C7、C8、C9、C10为代数结构,根据代数拓扑复形原理获得C1与C2、C3、C4之间是调用关系,C2、C3、C4之间是嵌套关系,以此类推,在本例中,第一软件结构拓扑图就可对应转化成图6所示的第二软件结构拓扑图。
本实施例中代数构件之间的调用关系表示为“+”;嵌套关系表示为“×”;包含关系表示为“⊕”。那么将第二软件结构拓扑图分解成代数构件表达式就可以通过上述符号进行表示。例如,将图6所示的第二软件结构拓扑图分解为代数构件表达式为:C1+[C2+C5×(C6+C9)]×[C3+(C7⊕C6)×(C8+C10)×[C4+(C8+C10)]。
步骤S140,输出第一版本软件的代数构件表达式。
这样就可以将软件***的第一版本软件构建成一个代数构件表达式的形式,通过该代数构件表达式运算过程中代数构件的改变和/或代数构件之间关系的改变分析软件***的演化过程,简化软件***的演化过程的分析。可见,本发明以代数运算的形式来分析该软件***的演化过程,可以从整体上对软件***的演化过程进行掌握,指导软件***的重构和维护;并且可以提高软件***,特别是大规模软件***的演化分析效率。
为了进行软件***的演化分析以获得软件***演化过程和该软件***的演化规律,需要获得该软件***的不同版本软件的代数构件表达式。所以,在本发明的一个实施例中,图1所示的方法进一步包括:对于给定软件***的不同版本软件,获取不同版本软件的代数构件表达式。
这里的不同版本软件指的是该给定软件***的各个版本软件中的全部或者一部分,可以根据需求获得该给定软件***的不同版本软件。例如,一个给定软件***有版本2.0.0、版本2.1.0、版本2.1.1,根据分析需求,获得该给定软件***的2.0.0版本软件、2.1.0版本软件和2.1.1版本软件的代数构件表达式;或者,根据分析需求只需获得2.0.0版本软件、2.1.0版本软件的代数构件表达式。
本实施例中,对于上述的不同版本软件的每个版本软件来说,代数构件表达式的获得方法同图1所示的第一版本软件的代数构件表达式的获得方法相同,具体为:以每个版本软件中的信息资源为节点,以每个版本软件中信息资源之间的关联关系为边,构建每个版本软件的第一软件结构拓扑图;根据代数拓扑复形原理,将每个版本结构拓扑图中的每一个节点均表述成一个代数构件,并获取代数构件之间的关系信息;将每个版本结构拓扑图转化为以代数构件为节点,以关系信息为边的第二软件结构拓扑图,并将第二软件结构拓扑图分解为代数构件表达式;其中,代数构件表达式由第二软件结构拓扑图中的代数构件和关系信息组成;输出每个版本软件的代数构件表达式。
为了进行软件***的演化规律的分析,当获得给定软件***的不同版本软件的代数构件表达式后,图1所示的方法还包括比较不同版本软件的代数构件表达式,获得给定软件***的演化信息,根据演化信息总结给定软件***的演化规律,并输出演化信息和演化规律。进行比较的代数构件表达式之间的不同就是软件***的演化信息,通过该演化信息可以总结该软件***的演化过程以及演化规律。例如,演化信息可以是代数构件的修改、增加或者代数构件之间的关系。
例如,对图6所示的第二软件结构拓扑图对应的软件***进行演化,第一版本的代数构件表达式为:C1+[C2+C5×(C6+C9)]×[C3+(C7⊕C6)×(C8+C10)×[C4+(C8+C10)];如果第二版本的代数构件表达式为:C1+[C2+(C5+C11)×(C6+C9)]×[C3+(C7⊕C6)×(C8+C10)]×[C4+(C8+C10)],两者进行比较可以发现,第一版本的代数构件表达式中的C5变成了第二版本的代数构件表达式中的C5+C11,由此可以分析得到,该软件***的演化过程是在代数构件C5后增加了代数构件C11,且两者之间是调用关系。如果第二版本的代数构件表达式为:C1+[C2+(C5+C11)]×[C3+C7×(C8+C10)]×[C4+(C8+C10)],两者进行比较可以发现,第一版本的代数构件表达式中的代数构件C6以及与代数构件C6相关联的部分被删除,由此可以分析得到,该软件***的演化过程是在删除代数构件C6。如果第二版本的代数构件表达式为:C1+[C2+(C5+C11)]×[C3+(C7⊕C6)]×[C4+(C8+C10)],两者进行比较可以发现,第一版本的代数构件表达式中的C8+C10部分被删除,由此可以分析得到,该软件***的演化过程是在删除代数构件C3与代数构件C8之间的调用关系,即代数构件C3不在使用代数构件C8的服务。
因为软件***的源代码语言分为面向过程程序语言和面向对象程序语言,那么,针对这两种类型的程序语言,构建的第一软件结构拓扑图会存在一定差异。具体地,在本发明的一个实施例中,图1所示的步骤S110中的以第一版本软件中的信息资源为节点,以第一版本软件中的关联关系为边,构建第一版本软件的第一软件结构拓扑图包括:
(1)针对第一版本软件中的面向过程程序语言,以第一版本软件的源代码中的方法或结构体作为节点,以方法和/或结构体之间的调用和包含关系为边,构建软件***的第一软件结构拓扑图,如图2所示。
(2)针对软件***中的面向对象程序语言,以软件***的源代码中的类为节点,以类和类之间的继承、泛化、关联、依赖或使用关系为边,构建软件***的第一软件结构拓扑图。
图7示出了根据本发明另一个实施例的一种第一版本软件的第一软件结构拓扑图。如图7所示,将动物、猫、狗这三类作为第一软件结构拓扑图的节点,动物和猫之间的关联关系、动物和狗之间的关联关系分别作为物和猫之间的边、动物和狗之间的边。
因为第一软件结构拓扑图中的每个节点是软件***中逻辑行为的集合,将每个节点表述成一个代数构件需要将其中的逻辑行为或各模块等中的所有信息表述完整。所以,在本发明的一个实施例中,图1所示的步骤S120中的将第一软件结构拓扑图中的每一个节点表述成一个代数构件包括:将软件结构拓扑图中的每一个节点表述成一个代数构件六元组形式;六元组中的元素包括:逻辑行为集合、连接关系集合、控制器、内部数据、聚合运算、检测器。
在本实施例中六元组中的元素可以通过不同的符号进行表示。例如,X为逻辑行为集合;Y为连接关系集合;C为控制器;D为内部数据;为聚合运算;η为检测器。则一个代数构件PM=(X,Y,D,C,η),也就是说,图6所示的第二软件结构拓扑图中的C1、C2、C3、C4、C5、C6、C7、C8、C9、C10均是采用这种组的形式表述的,在本实施例中,为便于表达,简化成了C1、C2、C3、C4、C5、C6、C7、C8、C9、C10。
其中,逻辑行为集合、内部数据和聚合运算组成该第一版本软件的功能件,连接关系集合、控制器和检测器组成该第一版本软件的连接件。代数构件PM的逻辑行为集合由n个逻辑行为x1,x2,…,xn构成,即:X={x1,x2,…,xn}
因为,一般来说,代数构件由代数构件体、代数构件纤维两个部分构成。对于一种代数构件,代数构件体只有一个,而代数构件纤维却有q种不同的种类。代数构件体之间的连接关系表现为代数构件纤维的连接关系,把两个代数构件纤维xil与xtm之间的连接关系记作
在本实施例中,在代数构件内,需要将X与Y之间的关系进行表述,其中每个代数构件又是下层代数构件体之间的连接运算成为聚合,所以,该X与Y之间的关系应该进行聚合运算,具体过程如下:
设X是代数构件的逻辑行为集合(所有的下层代数构件集合),Y是代数构件的连接关系集合,基于X与Y的关系运算,记作是指把代数构件连接关系集合Y作用在代数构件逻辑行为集合X后所得之结果,也就是Y中的每个连接分别作用在X中各自逻辑行为对上的结果,称为的解,定义为Ф,即
本实施例中的检测器包括输入判别器和输出判别器两部分。输入判别器针对有效连接关系,按照该代数构件的数据及传输格式要求进行转换,并把转换结果传输给控制器和数据存储器;输出判别器针对控制器、数据存储器、运算器的输入结果,控制向不同代数构件的输出。
为了可以将第二软件结构拓扑图进行分解,在本发明的一个实施例中,图1所示的步骤S130中的将第二软件结构拓扑图分解为代数构件表达式包括:将第二软件结构拓扑图自上向下粗化分解得到第一代数构件表达式;将第二软件结构拓扑图自左向右精化分解得到第二代数构件表达式;将第一代数构件表达式和第二代数构件表达式进行集成,获得第一版本软件的代数构件表达式。
例如,对于图6所示的一种第一版本软件的第二软件结构拓扑图,其分解过程为:
首先,自上向下粗化分解得到第一代数构件表达式:C1+C2×C3×C4。
其次,自左向右精化分解得到第二代数构件表达式:C2+C5×(C6+C9)、C3+(C7⊕C6)×(C8+C10)、C4+(C8+C10)。
最后,将C1+C2×C3×C4、C2+C5×(C6+C9)、C3+(C7⊕C6)×(C8+C10)、C4+(C8+C10)进行集合,获得第一版本软件的代数构件表达式:C1+[C2+C5×(C6+C9)]×[C3+(C7⊕C6)×(C8+C10)×[C4+(C8+C10)]。
图8示出了根据本发明一个实施例的一种软件***演化的分析装置的结构示意图。如图8所述,该软件***演化的分析装置800用于对于给定软件***的第一版本软件,获取第一版本软件的代数构件表达式,该软件***演化的分析装置可以作为软件***演化的分析工具进行使用,在该软件***演化的分析装置800使用前,需要将软件***的第一版本软件的源代码输出该软件***演化的分析装置800中。
软件***演化的分析装置800具体包括:
构建单元810,用于以第一版本软件的信息资源为节点,以第一版本软件中信息资源之间的关联关系为边,构建第一版本软件的第一软件结构拓扑图;
获取单元820,用于根据代数拓扑复形原理,将第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取代数构件之间的关系信息;
分解单元830,用于将第一软件结构拓扑图转化为以代数构件为节点,以关系信息为边的第二软件结构拓扑图,并将第二软件结构拓扑图分解为代数构件表达式;其中,代数构件表达式由第二软件结构拓扑图中的代数构件和代数构件之间的关系信息组成;
输出单元840,用于输出第一版本软件的代数构件表达式。
图9示出了根据本发明另一个实施例的一种软件***演化的分析装置的结构示意图。如图9所示,该软件***演化的分析装置900还用于对于给定软件***的不同版本软件,获取不同版本软件的代数构件表达式。
该软件***演化的分析装置900包括构建单元910、获取单元920、分解单元930、输出单元940和比较单元950。其中,构建单元910、获取单元920、分解单元930、输出单元940与图8所示的构建单元810、获取单元820、分解单元830、输出单元840具有对应相同的功能,在本实施例中,可以获得给定软件***的不同版本软件的代数构件表达式。
比较单元950,用于比较各个不同版本软件的代数构件表达式,获得给定软件***的演化信息,根据所述演化信息总结所述给定软件***的演化规律。
输出单元940,用于输出演化信息和演化规律。
在本发明的一个实施例中,构建单元910,具体用于针对第一版本软件中的面向过程程序语言,以第一版本软件的源代码中的方法或结构体作为节点,以方法和/或结构体之间的调用和包含关系为边,构建第一版本软件的第一软件结构拓扑图;针对第一版本软件中的面向对象程序语言,以第一版本软件的源代码中的类为节点,以类和类之间的继承、泛化、关联、依赖或使用关系为边,构建第一版本软件的第一软件结构拓扑图。
在本发明的一个实施例中,获取单元920,用于将软件结构拓扑图中的每一个节点表述成一个代数构件六元组形式;六元组中的元素包括:逻辑行为集合、连接关系集合、控制器、内部数据、聚合运算、检测器。
在本发明的一个实施例中,分解单元930,具体用于将第二软件结构拓扑图自上向下粗化分解得到第一代数构件表达式;将第二软件结构拓扑图自左向右精化分解得到第二代数构件表达式;将第一代数构件表达式和第二代数构件表达式进行集成,获得第一版本软件的代数构件表达式。
需要说明的是图8和图9所示的装置的各实施例与图1所示方法中的各实施例对应相同,上文已有详细说明,在此不再赘述。
综上所述,本发明提出了一种基于代数拓扑的软件***演化的分析,具体为:根据给定软件***的第一版本软件,以第一版本软件中的信息资源为节点,以第一版本软件中信息资源之间的关联关系为边,构建第一版本软件的第一软件结构拓扑图;根据代数拓扑复形原理,将第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取代数构件之间的关系信息;将第一软件结构拓扑图转化为以代数构件为节点,以关系信息为边的第二软件结构拓扑图,并将第二软件结构拓扑图分解为代数构件表达式;输出第一版本软件的代数构件表达式。可见,本发明以代数运算的形式来分析该软件***的演化过程,可以从整体上对软件***的演化过程进行掌握,指导软件***的重构和维护;并且可以提高软件***,特别是大规模软件***的演化分析效率。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的软件***演化的分析装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (10)
1.一种软件***演化的分析方法,其特征在于,对于给定软件***的第一版本软件,获取所述第一版本软件的代数构件表达式,具体包括:
以所述第一版本软件中的信息资源为节点,以所述第一版本软件中信息资源之间的关联关系为边,构建所述第一版本软件的第一软件结构拓扑图;
根据代数拓扑复形原理,将所述第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取所述代数构件之间的关系信息;
将所述第一软件结构拓扑图转化为以所述代数构件为节点,以所述关系信息为边的第二软件结构拓扑图,并将所述第二软件结构拓扑图分解为代数构件表达式;其中,所述代数构件表达式由所述第二软件结构拓扑图中的代数构件和所述关系信息组成;
输出所述第一版本软件的代数构件表达式。
2.如权利要求1所述的方法,其特征在于,所述方法进一步包括:
对于给定软件***的不同版本软件,获取所述不同版本软件的代数构件表达式;
比较所述不同版本软件的代数构件表达式,获得所述给定软件***的演化信息,根据所述演化信息总结所述给定软件***的演化规律,并输出所述演化信息和所述演化规律。
3.如权利要求1或2所述的方法,其特征在于,所述以所述第一版本软件中的信息资源为节点,以所述第一版本软件中的关联关系为边,构建所述第一版本软件的第一软件结构拓扑图包括:
针对所述第一版本软件中的面向过程程序语言,以所述第一版本软件的源代码中的方法或结构体作为节点,以所述方法和/或所述结构体之间的调用和包含关系为边,构建所述软件***的第一软件结构拓扑图;
针对所述软件***中的面向对象程序语言,以所述软件***的源代码中的类为节点,以类和类之间的继承、泛化、关联、依赖或使用关系为边,构建所述软件***的第一软件结构拓扑图。
4.如权利要求1或2所述的方法,其特征在于,所述将所述第一软件结构拓扑图中的每一个节点表述成一个代数构件包括:
将所述软件结构拓扑图中的每一个节点表述成一个代数构件六元组形式;所述六元组中的元素包括:逻辑行为集合、连接关系集合、控制器、内部数据、聚合运算、检测器。
5.如权利要求1或2所述的方法,其特征在于,所述将所述第二软件结构拓扑图分解为代数构件表达式包括:
将所述第二软件结构拓扑图自上向下粗化分解得到第一代数构件表达式;
将所述第二软件结构拓扑图自左向右精化分解得到第二代数构件表达式;
将所述第一代数构件表达式和所述第二代数构件表达式进行集成,获得所述第一版本软件的代数构件表达式。
6.一种软件***演化的分析装置,其特征在于,所述装置用于对于给定软件***的第一版本软件,获取所述第一版本软件的代数构件表达式,具体包括:
构建单元,用于以所述第一版本软件的信息资源为节点,以所述第一版本软件中信息资源之间的关联关系为边,构建所述第一版本软件的第一软件结构拓扑图;
获取单元,用于根据代数拓扑复形原理,将所述第一软件结构拓扑图中的每一个节点表述成一个代数构件,并获取所述代数构件之间的关系信息;
分解单元,用于将所述第一软件结构拓扑图转化为以所述代数构件为节点,以所述关系信息为边的第二软件结构拓扑图,并将所述第二软件结构拓扑图分解为代数构件表达式;其中,所述代数构件表达式由所述第二软件结构拓扑图中的代数构件和所述代数构件之间的关系信息组成;
输出单元,用于输出所述第一版本软件的代数构件表达式。
7.如权利要求6所述的装置,其特征在于,所述装置还用于对于给定软件***的不同版本软件,获取所述不同版本软件的代数构件表达式;所述装置进一步包括:
比较单元,用于比较所述不同版本软件的代数构件表达式,获得所述给定软件***的演化信息,根据所述演化信息总结所述给定软件***的演化规律;
所述输出单元,用于输出所述演化信息和所述演化规律。
8.如权利要求6或7所述的装置,其特征在于,
所述构建单元,具体用于针对所述第一版本软件中的面向过程程序语言,以所述第一版本软件的源代码中的方法或结构体作为节点,以所述方法和/或所述结构体之间的调用和包含关系为边,构建所述第一版本软件的第一软件结构拓扑图;针对所述第一版本软件中的面向对象程序语言,以所述第一版本软件的源代码中的类为节点,以类和类之间的继承、泛化、关联、依赖或使用关系为边,构建所述第一版本软件的第一软件结构拓扑图。
9.如权利要求6或7所述的装置,其特征在于,
所述获取单元,用于将所述软件结构拓扑图中的每一个节点表述成一个代数构件六元组形式;所述六元组中的元素包括:逻辑行为集合、连接关系集合、控制器、内部数据、聚合运算、检测器。
10.如权利要求6或7所述的装置,其特征在于,
所述分解单元,具体用于将所述第二软件结构拓扑图自上向下粗化分解得到第一代数构件表达式;将所述第二软件结构拓扑图自左向右精化分解得到第二代数构件表达式;将所述第一代数构件表达式和所述第二代数构件表达式进行集成,获得所述第一版本软件的代数构件表达式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710279321.3A CN106970803A (zh) | 2017-04-25 | 2017-04-25 | 一种软件***演化的分析方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710279321.3A CN106970803A (zh) | 2017-04-25 | 2017-04-25 | 一种软件***演化的分析方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106970803A true CN106970803A (zh) | 2017-07-21 |
Family
ID=59332752
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710279321.3A Pending CN106970803A (zh) | 2017-04-25 | 2017-04-25 | 一种软件***演化的分析方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106970803A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108287711A (zh) * | 2018-03-07 | 2018-07-17 | 北京理工大学 | 一种软件***的代数构件表示方法和装置 |
CN109814921A (zh) * | 2019-01-24 | 2019-05-28 | 华东师范大学 | 一种软件结构复杂度降解方法、设备及存储介质 |
CN110598417A (zh) * | 2019-09-05 | 2019-12-20 | 北京理工大学 | 一种基于图挖掘的软件漏洞检测方法 |
CN111858254A (zh) * | 2020-07-24 | 2020-10-30 | 中国工商银行股份有限公司 | 数据的处理方法、装置、计算设备和介质 |
CN112416397A (zh) * | 2020-11-22 | 2021-02-26 | 同济大学 | 一种位置变化驱动的软件更新方法、装置及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406870A (zh) * | 2016-09-06 | 2017-02-15 | 北京航空航天大学 | 一种基于软件复杂网络的四维软件演化度量分析方法 |
CN106484401A (zh) * | 2016-09-23 | 2017-03-08 | 东北大学 | 一种面向对象软件的自动化重构方法 |
CN106502669A (zh) * | 2016-10-20 | 2017-03-15 | 北京航空航天大学 | 一种软件复杂网络的三维坐标模型构建方法 |
-
2017
- 2017-04-25 CN CN201710279321.3A patent/CN106970803A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406870A (zh) * | 2016-09-06 | 2017-02-15 | 北京航空航天大学 | 一种基于软件复杂网络的四维软件演化度量分析方法 |
CN106484401A (zh) * | 2016-09-23 | 2017-03-08 | 东北大学 | 一种面向对象软件的自动化重构方法 |
CN106502669A (zh) * | 2016-10-20 | 2017-03-15 | 北京航空航天大学 | 一种软件复杂网络的三维坐标模型构建方法 |
Non-Patent Citations (2)
Title |
---|
单纯: ""软件缺陷分布预测技术及应用研究"", 《中国博士学位论文全文数据库 信息科技辑》 * |
张友生: ""基于代数理论的软件体系结构描述及软件演化方法研究"", 《中国博士学位论文全文数据库 信息科技辑》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108287711A (zh) * | 2018-03-07 | 2018-07-17 | 北京理工大学 | 一种软件***的代数构件表示方法和装置 |
CN109814921A (zh) * | 2019-01-24 | 2019-05-28 | 华东师范大学 | 一种软件结构复杂度降解方法、设备及存储介质 |
CN110598417A (zh) * | 2019-09-05 | 2019-12-20 | 北京理工大学 | 一种基于图挖掘的软件漏洞检测方法 |
CN110598417B (zh) * | 2019-09-05 | 2021-02-12 | 北京理工大学 | 一种基于图挖掘的软件漏洞检测方法 |
CN111858254A (zh) * | 2020-07-24 | 2020-10-30 | 中国工商银行股份有限公司 | 数据的处理方法、装置、计算设备和介质 |
CN111858254B (zh) * | 2020-07-24 | 2023-08-22 | 中国工商银行股份有限公司 | 数据的处理方法、装置、计算设备和介质 |
CN112416397A (zh) * | 2020-11-22 | 2021-02-26 | 同济大学 | 一种位置变化驱动的软件更新方法、装置及可读存储介质 |
CN112416397B (zh) * | 2020-11-22 | 2022-02-18 | 同济大学 | 一种位置变化驱动的软件更新方法、装置及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106970803A (zh) | 一种软件***演化的分析方法和装置 | |
Saldivar et al. | Industry 4.0 with cyber-physical integration: A design and manufacture perspective | |
CN109446059A (zh) | 测试模板脚本的生成方法及装置 | |
CN108052394A (zh) | 基于sql语句运行时间的资源分配的方法及计算机设备 | |
CN108664241B (zh) | 一种将SysML模型进行仿真验证的方法 | |
CN107678973B (zh) | 一种测试脚本的自动生成方法及*** | |
CN107153535A (zh) | 一种操作ElasticSearch的方法及装置 | |
Shrestha et al. | DeepFuzzSL: Generating models with deep learning to find bugs in the Simulink toolchain | |
CN106502720A (zh) | 一种数据处理方法和装置 | |
CN104090995B (zh) | 一种ABAQUS轮胎模型中rebar单元网格的自动生成方法 | |
Konur et al. | kPWorkbench: A software suit for membrane systems | |
CN114896755A (zh) | 一种支持模型属性量化评估的指标验证技术 | |
Bernard et al. | Design: a key stage of product lifecycle | |
CN108763869A (zh) | 一种测序数据高效处理方法 | |
Zengler et al. | Encoding the Linux kernel configuration in propositional logic | |
CN115658021B (zh) | 动态模型的确定方法、装置、存储介质及电子设备 | |
CN1194300C (zh) | 一种面向路径的测试数据自动生成方法 | |
CN110825453A (zh) | 基于大数据平台的数据处理方法及装置 | |
CN1760903A (zh) | 流程验证***及其方法 | |
US8954307B1 (en) | Chained programming language preprocessors for circuit simulation | |
CN106708595A (zh) | 程序语句形式化转换的方法及装置 | |
CN112149253B (zh) | 基于分布式混合协同代理模型的工程结构可靠性评估方法 | |
Panyala et al. | On the use of term rewriting for performance optimization of legacy HPC applications | |
CN109754087B (zh) | 量子程序转化方法、装置及电子设备 | |
Chard et al. | PDACS-A Portal for Data Analysis Services for Cosmological Simulations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170721 |