CN106970788A - 一种基于时态的对象依赖关系发现方法和系统 - Google Patents
一种基于时态的对象依赖关系发现方法和系统 Download PDFInfo
- Publication number
- CN106970788A CN106970788A CN201710124891.5A CN201710124891A CN106970788A CN 106970788 A CN106970788 A CN 106970788A CN 201710124891 A CN201710124891 A CN 201710124891A CN 106970788 A CN106970788 A CN 106970788A
- Authority
- CN
- China
- Prior art keywords
- entity
- node
- dependency
- tense
- analysis
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 238000004458 analytical method Methods 0.000 claims abstract description 134
- 230000002123 temporal effect Effects 0.000 claims abstract description 134
- 238000013461 design Methods 0.000 claims abstract description 71
- 230000008569 process Effects 0.000 claims abstract description 20
- 239000010410 layer Substances 0.000 claims description 124
- 230000001419 dependent effect Effects 0.000 claims description 58
- 230000008878 coupling Effects 0.000 claims description 42
- 238000010168 coupling process Methods 0.000 claims description 42
- 238000005859 coupling reaction Methods 0.000 claims description 42
- 239000011229 interlayer Substances 0.000 claims description 27
- 230000002441 reversible effect Effects 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 11
- 238000005303 weighing Methods 0.000 claims description 9
- 238000001514 detection method Methods 0.000 claims description 5
- 238000007619 statistical method Methods 0.000 claims description 5
- 230000001351 cycling effect Effects 0.000 claims 8
- 230000008859 change Effects 0.000 abstract description 57
- 238000012423 maintenance Methods 0.000 abstract description 3
- 230000006399 behavior Effects 0.000 description 30
- 235000019580 granularity Nutrition 0.000 description 19
- 239000011159 matrix material Substances 0.000 description 15
- 238000010586 diagram Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 11
- 238000007726 management method Methods 0.000 description 8
- 238000011160 research Methods 0.000 description 7
- 238000013499 data model Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 6
- 239000007787 solid Substances 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- RGHMISIYKIHAJW-UHFFFAOYSA-N 3,4-dihydroxymandelic acid Chemical compound OC(=O)C(O)C1=CC=C(O)C(O)=C1 RGHMISIYKIHAJW-UHFFFAOYSA-N 0.000 description 4
- 230000004075 alteration Effects 0.000 description 4
- 230000015556 catabolic process Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000009795 derivation Methods 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 238000009412 basement excavation Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000001965 increasing effect Effects 0.000 description 2
- 238000006116 polymerization reaction Methods 0.000 description 2
- 238000012502 risk assessment Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 101100279566 Arabidopsis thaliana EMB514 gene Proteins 0.000 description 1
- 206010013710 Drug interaction Diseases 0.000 description 1
- 102100031788 E3 ubiquitin-protein ligase MYLIP Human genes 0.000 description 1
- 101710190174 E3 ubiquitin-protein ligase MYLIP Proteins 0.000 description 1
- 101100268514 Mus musculus Serpina1a gene Proteins 0.000 description 1
- 101100268515 Mus musculus Serpina1b gene Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 125000002015 acyclic group Chemical group 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- ZACLXWTWERGCLX-MDUHGFIHSA-N dom-1 Chemical compound O([C@@H]1C=C(C([C@@H](O)[C@@]11CO)=O)C)[C@@H]2[C@H](O)C[C@@]1(C)C2=C ZACLXWTWERGCLX-MDUHGFIHSA-N 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000037361 pathway Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
Abstract
本申请涉及一种基于时态的软件配置管理对象依赖关系发现系统和方法。将包括以下至少一种的、随时间变化的——软件需求、设计、模型、构件、参数、软件产品、开发单位、开发人员的软件开发要素定义为时态实体。建立与时态实体和时态实体联系对应的表、视图、存储过程等数据库模式,以上数据库模式至少包括时间属性字段、时态实体内部依赖字段、时态实体外部依赖字段。访问以上所有数据库模式,建立多层时态依赖图MTDG(Multilayer Temporal Dependency Graph),根据以上多层时态依赖图,获得所需的关于时态实体内部和外部的依赖性分析。本申请有助于软件配置管理中及时发现软件系统中某部分变更后(版本升级、版本变化)对其它模块或整个软件系统的影响,降低软件开发和维护的成本,提高软件配置的效率。
Description
技术领域
本发明涉及软件工程和数据库技术,特别涉及一种在软件配置和管理中发现软件对象基于时态的依赖关系的技术。
背景技术
建模软件需求、设计、模型、构件、参数和软件产品等软件开发要素及其之间的复杂联系,建立集成统一的数据模型,是软件开发支撑平台的基础,也是核心工作。图1显示了现有技术中集成统一数据模型的软件开发平台框架示意图。但是以上存在不能将时态技术应用到软件开发平台中的弊端。
本发明提出从时间维度出发,综合利用时态图技术和时态数据库技术,研究软件开发诸要素及其复杂联系的时态建模方法,设计集成统一的时态数据模型和存储模型,该模型包括软件需求(Requirement)库、设计(Design)库、模型(Model)库、构件(Component)库、参数(Parameter)库、软件产品(Software Product)库和时态实体联系数据图(Temporal Entity-Relationship Data Graph);在此基础上,研究时态数据维护、检索和分析技术,可以为新的软件开发支撑平台开发提供基础性的支持。图2显示以时态实体联系数据图为核心的集成统一数据模型,这是本发明思想的基础。
软件需求、设计、模型、构件、参数和软件产品等实体对象都具有不同的版本,每个版本具有相应的发布时间、使用时间和停用时间。具有时态属性,并且其状态随时间变化的实体,称为时态实体。图3描述了A实体(例如构件)和B实体(例如软件)的4种版本时态联系,其中At0,At1,At2,At3,At4,At5….由虚箭头线相连随时间发展演化成A实体的各个版本对象,B实体也有类似随时间演化的版本序列,每个时刻版本对象上的时态标签为该对象的有效时间“[发布时间,停用时间)”,边上的标签表示两个版本对象建立联系的有效时间“[开始时间,结束时间)”;图3表示At0版本“使用”Bt0版本;图3表示A实体由At1版本升级为At2版本,Bt1版本不变;图3表示At3版本不变,Bt3版本升级为Bt4版本;图3表示At3升级为At5版本,Bt4版本升级为Bt5版本。上述A和B两类时态实体之间的四种时态联系,实际上为两类时态联系:A版本变化,B版本同步变化;A版本变化,B版本不变化。
图3表明,软件开发中的软件需求、设计、模型、构件、参数和软件等时态实体本身不仅存在随时间演化的版本联系,时态实体之间存在复杂的时态联系。因此,结合时态扩展实体联系E-R模型和时态图(Temporal Graph)模型,研究软件开发要素的时态建模方法,构建软件开发要素的概念模型,构建时态实体联系图,可以描述上述六类实体之间的动态时态联系。
依赖关系,是软件实体间最主要的一种关系,尤其是在软件开发过程中,软件实体类之间的依赖关系以及实体类内部之间的依赖关系,对软件的变更影响分析以及风险分析等都具有非常大的影响。然而,目前对于依赖关系的研究工作大多集中于代码级的研究。
软件开发过程中,一共有六个主要的实体,即需求、设计、模型、构件、软件以及支持数据,这六个实体间存在大量的依赖关系,同样的,实体内部也包含多种依赖关系。
在软件系统中,某一部分发生变更之后,其代码的变更可能会发生在许多不同的模块中,甚至于,波及到整个系统,这就是变更的连锁反应(Chain Reaction),而这种连锁反应就是由实体间的依赖关系引起的。
当某一个实体发生变更或失效时,实体间的依赖关系可能会导致与其有所关联的实体都发生变化,甚至于是失效,因而,软件实体间的依赖关系也成为了软件实体的变更影响分析以及失效风险分析的基础。如何将软件实体依赖关系分析并且表现出来,对于软件的其他分析有很大的帮助。
发明内容
本研究针对于软件开发过程中需求、设计、模型、构件、软件和支持数据等六类实体之间的过程级依赖关系进行研究,并且提出了一种软件实体依赖性分析系统及其方法。
本发明请求保护一种基于时态的软件配置管理对象依赖关系发现系统,包括:
数据库模式构建模块,根据时态实体以及时态实体之间的联系,建立数据库模式;
其中时态实体包括软件开发要素中的以下至少一种:软件需求、设计、模型、构件、软件产品、开发单位、开发人员;时态实体具有时态属性,该时态属性包括时态实体的版本信息和/或有效时间信息;时态实体联系包括时态实体内部的依赖关系或时态实体之间的依赖关系,
其中建立数据库模式包括将时态实体和时态实体联系在数据库环境中以包括表table、视图view、存储过程的方式来创建,其中建立专门的联系表relation table来表达时态实体的内部联系和时态实体之间的外部联系,其中表、视图中还包括时态属性字段来表达时态实体的以上时态属性;
依赖图构建模块,构建多层时态依赖图MTDG(Multilayer Temporal DependencyGraph),包括:
定义每种时态实体分别对应多层时态依赖图中的一层Layer,定义每种时态实体的一个具体对象为该层layer中的一个结点e,定义层内的结点与结点之间的有向边为内部依赖(即内部联系),定义层间的结点与结点之间的有向边为外部依赖(即外部联系);
定义由以上所有结点和有向边构成的图为多层时态依赖图;
输入以上数据库模式,获取其中包括表、视图、存储过程的所有数据库模式DS(Database Schema);
初始化多层时态依赖图的层数MTDG.LayerCNT为0;
开始非空循环,条件为“数据库模式不为空”;
如果获得的数据库模式是一个时态实体;
多层时态依赖图的层数MTDG.LayerCNT加1;
生成当前层的时态依赖图中的结点;
否则,如果获得的数据库模式是一个内部联系;
生成层内依赖关系;
否则,如果获得的数据库模式是一个外部联系;
生成层间依赖关系,即外部依赖关系;
结束非空循环,条件为“数据库模式不为空”;
输出多层时态依赖图MTDG;
依赖性分析模块,遍历整个多层时态依赖图,计算所有或部分结点的依赖性评价参数,从而作出依赖性分析;
其中,依赖性评价参数包括以下至少一种:该参数传入耦合Ca(AfferentCouplings)、传出耦合Ce(Efferent Couplings);
其中,传入耦合Ca为依赖于被分析实体的其他实体的数量;传出耦合Ce为被分析的实体所依赖的其他实体的数量;实体不稳定性I=Ce/(Ce+Ca);用于衡量实体的不稳定性,取值范围为[0,1],I=0表示实体最稳定,I=1表示实体最不稳定。
相应地,本发明还请求保护一种基于时态的软件配置管理对象依赖关系发现方法,包括:
步骤1,根据时态实体以及时态实体之间的联系,建立数据库模式;
其中时态实体包括软件开发要素中的以下至少一种:软件需求、设计、模型、构件、软件产品、开发单位、开发人员;时态实体具有时态属性,该时态属性包括时态实体的版本信息和/或有效时间信息;时态实体联系包括时态实体内部的依赖关系或时态实体之间的依赖关系,
其中建立数据库模式包括将时态实体和时态实体联系在数据库环境中以包括表table、视图view、存储过程的方式来创建,其中建立专门的联系表relationtable来表达时态实体的内部联系和时态实体之间的外部联系,其中表、视图中还包括时态属性字段来表达时态实体的以上时态属性;
步骤2,构建多层时态依赖图MTDG(Multilayer Temporal Dependency Graph),包括:
定义每种时态实体分别对应多层时态依赖图中的一层Layer,定义每种时态实体的一个具体对象为该层layer中的一个结点e,定义层内的结点与结点之间的有向边为内部依赖(即内部联系),定义层间的结点与结点之间的有向边为外部依赖(即外部联系);
定义由以上所有结点和有向边构成的图为多层时态依赖图;
输入以上数据库模式,获取其中包括表、视图、存储过程的所有数据库模式DS(Database Schema);
初始化多层时态依赖图的层数MTDG.LayerCNT为0;
开始非空循环,条件为“数据库模式不为空”;
如果获得的数据库模式是一个时态实体;
多层时态依赖图的层数MTDG.LayerCNT加1;
生成当前层的时态依赖图中的结点;
否则,如果获得的数据库模式是一个内部联系;
生成层内依赖关系;
否则,如果获得的数据库模式是一个外部联系;
生成层间依赖关系,即外部依赖关系;
结束非空循环,条件为“数据库模式不为空”;
输出多层时态依赖图MTDG;
步骤3,遍历整个多层时态依赖图,计算所有或部分结点的依赖性评价参数,从而作出依赖性分析;
其中,依赖性评价参数包括以下至少一种:该参数传入耦合Ca(AfferentCouplings)、传出耦合Ce(Efferent Couplings);
其中,传入耦合Ca为依赖于被分析实体的其他实体的数量;传出耦合Ce为被分析的实体所依赖的其他实体的数量;实体不稳定性I=Ce/(Ce+Ca);用于衡量实体的不稳定性,取值范围为[0,1],I=0表示实体最稳定,I=1表示实体最不稳定。
本发明获得的有益技术效果:可以自动化地帮助软件研发人员了解软件开发中的各种依赖关系,有助于在软件部分发生变化(例如版本变化、人员变化)是发现其中的依赖关系,提高软件维护效能。
附图说明
图1是现有技术一个基于集成统一数据模型的软件开发平台框架示意图。
图2是本发明一个以时态实体联系数据图为核心的集成统一数据模型。
图3是本发明一个两类软件开发要素实体A和B的4种版本时态联系图。
图4是本发明一个总体时态概念结构图(时态TER图)。
图5是本发明一个以需求为核心的分时态TER图。
图6是本发明一个需求内部之间的分时态TER图。
图7是本发明一个以设计为核心的分时态TER图。
图8是本发明一个设计内部之间的分时态TER图。
图9是本发明一个以模型为核心的分时态TER图。
图10是本发明一个模型内部之间的分时态TER图。
图11是本发明一个以构件为核心的分时态TER图。
图12是本发明一个构件内部联系的分时态TER图。
图13是本发明一个以软件为核心的分时态TER图。
图14是本发明一个以支持数据为核心的分时态TER图。
图15是本发明一个以项目为中心的分时态TER图。
图16是本发明一个以配置为核心的分时态TER图。
图17是本发明一个版本树示例。
图18是本发明一个简单的构件依赖图。
图19是本发明一个实体依赖树。
图20是本发明一个多层依赖图示例。图中实线为层内依赖关系,虚线为层间依赖关系。任意两层间都可以有依赖关系。
图21是本发明一个传入耦合示例图。
图22是本发明一个传出耦合示例图。
图23是本发明一个实体距离计算。
图24是本发明一个实体依赖图示例。
图25是本发明一个正向实体依赖分析结果。
图26是本发明一个逆向实体依赖分析结果。
图27是本发明一个双向实体依赖分析结果。
图28是本发明一个推导出开发人员只见依赖关系示意图。
图29是本发明一个开发人员d7依赖于d4推导关系示意图。
具体实施方式
一、本发明的实现环境
本发明的实现可以采用例如下列工具和环境,但是仅仅是可选的工具和环境之一,并不用于限定本发明的保护范围。
数据库采用Oracle 11g Express数据库。
数据库中间件采用Hibernate。
开发语言采用Java。
Web开发框架采用Wicket和Html。
开发工具采用开源的开发工具Eclipse。
图形标准和显示采用SVG和D3.JS。
二、时态实体概念结构设计及其时态实体关系图
本发明基于时态建模方法,结合关系数据库技术和时态数据库技术,构建包括软件需求、设计、模型、构件、支持数据和软件产品等软件开发要素实体及其联系的概念模型。如图4所示的总体时态概念结构图(时态TER图),体现了软件需求、设计、模型、构件、支持数据、软件产品、开发单位、开发人员、项目等时态实体之间的联系关系(依赖)。
下表1.1是对图4中时态E-R图中符号的说明。
表1.1时态TER图的符号说明
说明:
总的时态E-R图只是反映出最主要的实体之间的联系,此处略去了某些辅助实体之间的联系。
实体内部之间的联系可以根据需要将在分E-R图中画出(此处省略),例如需求实体内部的联系(依赖关系)分为父子层次联系、引用联系、复用联系等。
实体的属性需要设定时变属性。
2.1以需求为核心的概念结构设计及其分时态实体联系图TER
图5是以需求为核心的分时态TER图。其表达了以需求为核心时的积累需求之间的关系以及与其它软件开发要素之间的关系。原始需求、使用需求、系统需求、软件需求,实际上为各种需求项(Requirement Items)。各类需求项内部之间具有层次结构、复用和参照等各种联系,为了E-R图简洁,上述各种联系在上图中没有画出。
图6表达了需求内部之间的分时态TER图。与软件需求一样,系统需求、使用需求和原始需求也有类似的联系。
2.2以设计为核心的概念结构设计及其分时态实体联系图TER
图7是以设计为核心的时态TER图。图中显示了以设计为核心时,设计与其它软件开发要素之间各种联系。在图中,设计,实际上为各种设计项(Design Items)。设计项内部之间具有层次结构、复用和参照等各种联系,为了E-R图简洁,上述各种联系在上图中没有画出。
图8是设计内部之间的分时态TER图,其中可见设计内部的关系主要是父子关系和依赖关系。
2.3以模型为核心的概念结构设计及其分时态实体联系图TER
图9是以模型为核心的分时态TER图。图中给出了以模型为核心时,其与其它软件开发要素之间的联系。图中各类型模型之间具有复用和参照等各种联系,为了E-R图简洁,上述各种联系在上图中没有画出。
图10是模型内部之间的分时态TER图。图中可见模型内部之间的关系主要是父子关系和依赖关系。
2.4以构件为核心的概念结构设计及其分时态实体联系图TER
图11是以构件为核心的分时态TER图。图中显示了构件与其它软件开发要素之间的关系。各类构件之间具有复用、引用和组合等各种联系,为了E-R图简洁,上述各种联系在上图中没有画出。构件在具体开发上,可能是一个构件选定一种构件模型,并实现一种构件实现代码,因此,构件模型和实现代码,只是构件分类的两个重要属性,在逻辑设计时,也许并不需要把他们作为实体对待。
图12是构件内部联系的分时态TER图。可见在构件内部中主要包括父子关系和依赖关系。
2.5以软件产品为核心的概念结构设计及其分时态实体联系图TER
图13是以软件为核心的分时态TER图。图中显示了以软件为核心时,该时态实体与其它时态实体之间的关系。
2.6以支持数据为核心的概念结构设计及其分时态实体联系图TER
图14以支持数据为核心的分时态TER图。图中显示了以支持数据为核心时,该时态实体与其它时态实体之间的关系。(1)设计与构件相关,不与构件实现直接相关;(2)支持数据全集,实际上因为只有一个,不用具体存储。
2.7以项目为核心的概念结构设计及其分时态实体联系图TER
图15是以项目为中心的分时态TER图。图中显示了以项目为核心时,该时态实体与其它时态实体之间的关系。在该图中产品分解结构粒度细化到哪个层次、工作分解结构粒度细化到哪个层次、产品分解结构、工作分解结构和设计等其他实体之间的联系如何,则取决于具体的软件项目。
2.8以配置项为核心的概念结构设计及其分时态实体联系图TER
图16是以配置为核心的分时态TER图。图中显示了以配置为核心时,该时态实体与其它时态实体之间的关系。
三、构建时态实体及其联系的逻辑模型
本部分基于以上时态实体、依赖关系的发明构思,设计相应的关系数据库逻辑模型,包括软件需求、设计、模型、构件、支持数据和软件产品等软件开发要素实体及其之间联系的逻辑模型,特别是时态实体之间的时态联系逻辑模型,也包括相应的时态完整性约束。
概念结构设计识别出时态实体、时态属性和时态联系,并建立了时态实体联系图TER图。
数据库逻辑模型(即数据库模式):由时态实体和时态实体联系两部分组成,而每个时态实体有两部分组成:一部分为记录非时态属性的实体基本表TABLE,另一部分为记录时态版本属性的实体版本信息表TABLE。
在软件工程中每个以上时态实体的版本形成一棵多分枝的版本树,分枝又能合并,因此版本树是一个有向无环图(DAG)。图17显示了这样一颗版本树示例。
对于某个实体的版本树,可以根据该实体的版本及其记录的先序版本,逐步倒推出该版本相关的版本树。
可以将时态实体和时态实体联系在例如Oracle数据库环境中创建,其中建立数据库模式包括将时态实体和时态实体联系在数据库环境中以包括表table、视图view、存储过程的方式来创建,其中建立专门的联系表relation table来表达时态实体的内部联系和时态实体之间的外部联系,其中表、视图中还包括时态属性字段来表达时态实体的以上时态属性;
以下数据库模式的表table、视图view中,涉及“实体内部的联系及其属性”、“实体外部的联系及其属性”的,体现了时态实体的内部联系和外部联系,更重要的是体现了时态实体的内部依赖和外部依赖。
以下数据库模式的表table、视图view中的时间属性,或者代表了该时态实体的有效时间,或者代表该时态与其它时态实体之间联系(依赖)的有效时间valid time;
以下数据库模式的表table、视图view中,涉及“变更”的表table、视图view、字段field则可用于以上时态实体变更分析。
四、依赖基本概念
依赖(Dependency)基本定义
从变更影响的角度出发,依赖是指元素间存在的一种特定的语义连接和动态关联关系,当某个元素发生变更时,与之有依赖关系的另一个元素也会发生相应的变更,从而保证软件系统演化的完整性和一致性。
下面给出实体及其依赖关系的相关定义。
定义2.1实体型(Entity Type,ET):
实体型ET定义为(UA,DOMA,F,UB),UA为ET的m个属性集合{A1,A2,…,Am},DOMA为取值范围集合{DOM1,DOM2,…DOMn},F为UA到DOMA的映射,即Ai对应的取值范围为DOMi,UB为ET的n个行为集合{B1,B2,…,Bn};ET定义可以简写为(UA,UB);实体(Entity)e是实体型ET的实例(Instance),ET也是e的集合。
定义2.2时态实体型(Temporal Entity Type,TET):
时态实体型TET定义为(UA,DOMA,F,UB,VT),简写为(ET,VT)或者(UA,UB,VT),即在有效时间VT(Valid Time)内有效的ET,而VT为有效开始时间(Valid Start Time)Ts和有效结束时间(Valid End Time)Te组成的右半开时间区间[Ts,Te)的集合。时态实体et是实体型TET的实例(Instance),TET也是et的集合。
定义2.3依赖(Dependency):
依赖关系D:E1×DT×E2,定义为两个实体型E1和E2,以及依赖类型(DependencyType,DT)上的三元组;给定任意两个实体ei和ej,依赖类型dtk,如果ej的属性Ai或者行为Bi发生变更后,也会导致ei的属性Aj或者行为Bj发生变更,则称ei依赖ej于dtk,记为:D={<ei,dtk,ej>|ei∈E∧ej∈E∧dt∈DT∧dtk=f(Ai|Bi,Aj|Bj)},其中f(Ai|Bi,Aj|Bj)表示dtk跟Ai(或Bi)和Aj(或Bj)有关,即一个实体的不同属性或者行为,与另外一个实体的不同属性或行为之间可能存在着不同类型的依赖。当E1与E2相同时,dtk为实体型内部的依赖关系;当E1和E2不同时,dtk为实体型之间的依赖关系。
定义2.4时态依赖(Temporal Dependency):
时态依赖DT:D×VT,即在有效时间VT内存在的依赖关系D,在有效时间实体ei依赖ej于dtk,记为DT={<ej,dtk,ei,[ts,te)>}|ei∈E1∧ej∈E2∧[ts,te)∈VT∧dtk∈DT∧dtk=f(Ai|Bi,Aj|Bj)}。假设依赖dtk不随时间变化。
依赖的性质
不同实体之间的依赖关系是反自反的、不对称的、传递的,证明如下:
反自反性
依赖是基于不同实体之间关系为前提,也就是说,依赖指代的是两个或多个不同实体之间一个或多个实体的变化对于其他实体的影响,实体本身的变化不能够称作依赖,因此,依赖关系是反自反的。
不对称性
采用反证法来证明。假设A与B是两个实体,且A依赖于B,B依赖于A。根据依赖关系的定义,当A变化时,B也发生变化;同理,B发生变化时,A也发生变化。则当A发生变化时,会引起A本身变化,这与依赖关系是反自反的相矛盾。所以,不同实体之间的依赖关系是不对称的。
传递性
假设A、B、C是三个不同的实体,且A依赖于B,B依赖于C,则根据依赖关系定义,C的变化会引起B的变化,B的变化会引起A的变化,即C的变化引起了A的变化,也就是说A依赖于C,所以说实体之间的依赖关系是传递的。
依赖关系的分类
实体具有属性(Attribute)和行为(Behavior),属性所引起的依赖通常称为属性依赖(Attribute Dependency,AD),行为引起的依赖称为行为依赖(Behavior Dependency,BD)。从面向对象程序的角度来看,实体对应为对象,对象具有属性和方法,对象属性引起的依赖通常成为数据依赖(Data Dependency,DD),而对象方法引起的依赖通常称为方法依赖(Method Dependency,MD)。
定义2.5属性依赖(Attribute Dependency)
若一个实体ei的属性Ai引用ej的属性Aj,或者是ei的行为Bi引用ej的属性Aj,即当ej的属性Aj变更将引起ei的属性Ai或者行为Bi变更,称ei依赖ej于ad,记为AD={<ei,ad,ej>|ei∈E1∧ej∈E2∧ad∈DT∧ad=f(Ai|Bi,Aj)}。属性依赖属于静态依赖。
实体存在着各种各样的行为,实体行为之间也存在依赖关系。实体行为的复杂性使得实体行为之间的依赖关系比属性依赖更为复杂。行为依赖属于动态依赖。
定义2.6行为依赖(Behavior Dependency)
若一个实体ej的行为Bj变更将引起ei的行为Bi变更,称ei依赖ej于bd,记为BD={<ei,bd,ej>|ei∈E1∧ej∈E2∧bd∈DT∧bd=f(Bi,Bj)}。
除了属性依赖(数据依赖)与行为依赖(方法依赖)之外,还有一些依赖关系的定义。实际上,依赖关系可以从不同的角度来分类,详情如下:
从依赖的作用分为结构依赖、行为依赖和可跟踪性依赖(参见表2.1)。
表2.1常用的实体间依赖关系
从依赖的社会性分:技术性依赖、技术社会性依赖、社会性依赖(仅与人有关的依赖)
从依赖的来源分:直接依赖、间接依赖、导出依赖(根据依赖的传递特性从直接依赖和间接依赖推导出来的)。
五、依赖性分析
从程序级别上讲,依赖性分析是一种分析、理解和维护程序的重要手段,它反映了程序中语句、模块之间的执行顺序和相互调用关系。
从实体级别上来讲,依赖性分析是一种分析、理解和维护实体及其联系的重要手段,它反映了实体之间互相影响的关系和影响的程度。
一般来说,人们采用两种方法进行依赖性分析:
一种是沿着被依赖的方向由前(源头)至后(目的)的正向分析方法,例如,从需求到设计到构件到软件的分析方向,也称跟踪性分析。
另一种是沿着依赖的方向由后(目的)至前(源头)的逆向分析,例如,从软件到构件到设计到需求的分析方向,也称溯源分析。
六、实体依赖关系
通常,实体间的关系可以细分为:关联关系、聚合关系、组合关系、泛化关系、依赖关系。关联关系、聚合关系、组合关系、泛化关系与依赖关系都是实体间的关系,但是它们具有的部分属性满足依赖关系,因而可以称为弱依赖关系。在依赖性分析过程中,可以作为依赖关系考虑。
实体间关系定义
关联关系:描述了给定实体之间语义的连接描述,提供了不同实体间可以相互作用的连接。
聚合关系:聚合关系是关联关系的一种特殊形式,表示实体与实体间的“整体-部分”关系。聚合关系可以细分为一般聚合关系和共享聚合关系。
组合关系:组合是聚合的一种特殊情况。在组合中,成员对象的生命周期取决于聚合的生命周期。
泛化关系:泛化关系描述了父类和子类在分类学上的关系。
依赖关系:依赖关系描述是两个实体之间的语义上的连接关系,一个实体是独立的,另一个实体是非独立的,它依赖于独立的实体,如果独立的实体发生改变,将会影响依赖该实体的实体。
软件开发实体间依赖关系
软件开发过程中需求、设计、模型、构件、软件和支持数据等实体之间存在着许多的操作以及构成关系,实体之间存在着层次变化,因而实体之间存在依赖关系;而实体内部也会随着时间以及版本的变化存在大量的变更状况,因而实体内部也存在依赖关系。
实体之间的依赖关系
需求和设计、设计和模型、设计和构件存在跟踪性依赖(TraceabilityDependency);
构件与软件之间存在结构依赖(如组成依赖):软件是由多个构件经过多种组合方式形成的;
支持数据与模型、支持数据与构件存在数据依赖;
实体内部依赖关系
需求内部:不同需求之间结构依赖(包括内容依赖、引用依赖、复用依赖、同步依赖等等);原始需求和使用需求、使用需求和系统需求、系统需求和软件需求之间的跟踪性依赖;需求不同版本之间存在版本依赖。
设计内部:存在结构依赖、版本依赖。
模型内部:概念模型、数学模型和工程模型之间存在跟踪性依赖;模型之间存在结构依赖、版本依赖。
构件内部:构件之间存在结构依赖(如同步依赖、互斥依赖、组合依赖、包含依赖等等):构件的方法之间存在行为依赖,构件之间还可能存在数据依赖和版本依赖。
软件内部:与构件类似,软件之间存在结构依赖、行为依赖、数据依赖和版本依赖。
七、针对软件实体的依赖性分析
以构件作为实例。直至目前,没有一个关于构件的统一规范定义。但综合分析已有的几种典型定义,不难发现构件具备以下基本特征:构件是近乎独立的、可替换的、满足一定功能的模块;对所处的环境或上下文有一定的依赖关系;构件通常符合一组接口标准,构件之间通过接口进行通讯。
构件软件是多个构件(可以是异质的)通过连接件进行组装而形成的系统,是一种松耦合结构。研究者在对构件软件进行体系结构分析、测试或可靠性评估过程中,利用多种方式对构件软件系统进行了建模表示。
例如,Wu等人用构件交互图CIG(component inter action graph)描述构件间的交互场景;还有依赖矩阵、构件迁移概率图等表示方式。但最被普遍认同和广泛使用的还是构件依赖图CDG(component dependency graph)模型。
构件依赖图定义如下:
定义2.7构件依赖图(Component Dependency Graph)
构件软件可用一个四元组形式的依赖图CDG=(V,E,vs,vt)表示,其中V为表示构件的顶点集,E是表示连接件的边集,vs和vt分别表示起始、终止结点。构件顶点集V和连接件边集E可进一步定义如下:
V={〈vi,cp xi〉}(1≤i≤|V|),其中vi为第i个构件的标识符,cp xi为构件vi的复杂性。
E={〈eij,pij〉}(1≤i,j≤|V|),其中eij为由构件vi连接到构件vj的连接件的标识符,pij为连接件eij被执行的概率。
图18显示了一个简单的构件依赖关系图。其中从起始点S开始,到终止结点T,<es1,1>表示构件S到构件v1的连接件标识符为es1,其es1被执行的概率为1;<v1,0.4>表示构件v1的构件复杂性为0.4。
其中,构件复杂性是指构件的复杂程度的度量。对于代码可见的情形,可以认为程序控制流图的圈复杂性、代码行数以及包含的库文件数目均会对构件的复杂性产生影响。对于构件ci,其复杂性的3个分量(圈复杂性cci、行复杂性lci和库包含复杂性libi),参考文献中有公式可以计算。其中程序控制流图的圈复杂性,是用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数
对于代码不可见的外部构件,构件开发者一般运用XM L等标准、易于交换的文件格式提供构件的梗概信息(元数据),典型的有代码总行数、方法数目及方法间的调用关系等。构件使用者可以利用这些信息对构件的复杂性进行粗略的估计。
八、基于时态图,建模软件配置管理对象之间的依赖关系
本发明提出软件配置管理对象之间的依赖关系可以建模成一个时态有向图,其中实体对应时态图的结点,依赖关系对应时态图的边;在该图中,不仅要考虑结点的时态性,也要考虑边的时态性。设计基于关系数据库存储的时态数据生成时态图的算法,以及相应的时态图的更新维护方法。
8.1依赖图建模
为了方便理解,人们一般用图的形式来表示各种依赖关系,并提出许多依赖图的模型,主要由程序依赖图PDG、系统依赖图SDG、对象依赖图ODG和类依赖图CDG等,也可以使用图形化的方法表示实体间的各种依赖关系。
除了常用的一些依赖图之外,还可以通过依赖观察矩阵、依赖树等一些方法对实体、程序、函数等之间的依赖关系进行展示和描述。
有向依赖图
实体间的依赖关系可以使用有向依赖图来表示。有向依赖图的定义如下。
定义2.7有向依赖图(Directed Dependency Graph)
设有向依赖图DG=(V,E)中,V为结点vi的集合,记为V={vi},其中,节点vi表示实体ei,i=1,2,…,n。E为结点间有向边〈vi,vj〉的集合,其中,序偶〈vi,vj〉表示结点vi依赖于结点vj,1≤i≤n,1≤j≤n。
简单地说,就是一个有向依赖图主要由两种元素的集合来表达,即有向依赖图的结点以及结点间的有向边。
在实体的有向依赖图中,一个结点就表示一个实体,而结点间的有向边则是由一对序偶<vi,vj>来表示,其中vi与vj表示的都是有向依赖图中的结点,<vi,vj>表示结点vi依赖于结点vj。
对于实体间的依赖关系,通常是指实体间的调用关系(或者是包含关系),用实体间的依赖边表示,从代表调用实体(或起始实体)的节点指向代表被调用实体(或终结实体)的节点。
多粒度依赖关系图
定义2.8多粒度依赖图(Multi-granular Dependency Graph)
对于给定依赖图G=<V,E,DT>,结点既可以是实体(Entity),也可以是实体属性(Attribute),也可以是实体的行为(Behavior),则V=VE∪VA∪VB,E=V×DT×V,其中DT表示依赖类型集合。例如,对于给定一个基于Java的面向对象软件P,多粒度有向图G的结点可以分别是类、成员函数和成员变量,而DT={Inheritance,Membership,Call,Use},在类粒度上使用类-成员关系图为面向对象软件建模,在方法粒度上使用控制调用图为成员函数建模。
更具体地,E=V×DT×V表示为三个集合的笛卡尔积,其结果也是一个集合,该集合中每个元素是一个三元组(vi,dt,vj),其中第一个分量vi来自V×DT×V的第一个集合V,第二个分量dt来自V×DT×V的第二个集合DT,第三个分量vj来自V×DT×V的第三个集合V。(vi,dt,vj)实际上就是一条边的表示方法,其vi是边的起点,vj是边的终点,dt表示边的类型。所以,E=V×DT×V表示E是一个边的集合,每条边是一个三元组。
实际上,E应该是V×DT×V的子集,而不等于V×DT×V。所以更准确的表示是:
依赖矩阵
当考虑实体间的依赖时,也可以建立一个矩阵模型来体现实体间的依赖关系。具体的依赖观察矩阵定义如下:
定义2.9依赖矩阵(Dependency Matrix)
矩阵M=N×N,其中N表示n个实体的集合,矩阵元素依赖对<e1,dt,e2>表示实体e1依赖e2于dt(dt为依赖类型),其中依赖对的为数据依赖关系则为数据依赖观察矩阵,为控制依赖关系则为控制依赖观察矩阵。例如软件开发过程中,存在需求依赖矩阵,需求设计依赖矩阵等等。
实体依赖树
除了经常使用的依赖图和依赖观察矩阵之外,还可以使用依赖树来表示实体间的依赖关系,而依赖树一般是由依赖图转化而来的。
定义2.10实体依赖树(Entity Dependency Tree)
对于依赖图DG=(V,E),从给定结点vs出发,到终止结点vt,转化成一棵生成树:依赖图树DGT=(VT,ET,vrt),其中VT为表示实体的结点集,vrt为根结点,ET为表示实体依赖的有向边集。由于依赖图中不可能存在依赖循环子图,因此,从一个给定点出发,一定能生成一棵生成树。由依赖图向依赖树的转化方法如下:
第1步,给定结点vs作为根结点vrt,同时记根节点为当前结点。
第2步,对任一当前结点,广度优先搜索DG,将当前节点每一条出向边作为DGT中对应结点的一条边,该边目标结点作为当前结点的儿子结点。当满足如下两个条件之一时,DGT中的结点终止扩展:(1)若当前结点是终止结点vt;(2)若当前节点(设它处于DGT的第i(i>1)层)在DGT的1至i-1层出现过。
第3步,迭代进行第2步的遍历,直到所有节点都不能扩展为止。
一个简单的依赖树如图19所示。其中给出了经过以上算法,起点S依赖于结点C1,结点C1有分别依赖于结点C2、结点C3,结点C2、结点C3同时依赖于结点C4,结点C4依赖与结点T,到达终点。由此生成了一个实体依赖图树。
由以上定义来看,有向依赖图、多粒度依赖图是目前用得较多的依赖模型,而依赖矩阵可以用来作为依赖关系的输入模型,而依赖树可以作为依赖关系的输出模型。
多层依赖图模型
在深入研究依赖关系各种建模方法的基础上,本发明提出了多层依赖图模型。
定义2.11多层依赖图(Multilayer Dependency Graph)
每一层Li定义为一个多粒度依赖图Li=Gi=(Vi,Ei,DTi),该层只有相同类型的实体及其属性和行为构成,对于每个结点vi都有一个属性记录其所在层号。多层依赖图MDG=(L,EL,DTL),其中L为每一层多粒度依赖图集合Gi,EL为层间依赖关系<vi,dtl,vj>的集合,每个依赖关系由vi和vj来自不同的层,vi∈Vi,vj∈Vj,dtl∈DTL。
从上述定义可以看出,一方面,MDG可以看作是关于图的图(Graph of Graph),是由各层的有向依赖图构成的图;另一方面,其实质仍然是一个有向多粒度图,等价于G=(∪i=1nVi,∪i=1nEi∪EL,∪i=1nDTi∪DTL)。
更具体地,在物理上,多层依赖图MDG,实际上等价于一个多粒度图G,其顶点集合V等于各层多粒度依赖图的顶点集合Vi的并集∪i=1nVi,边集合E等于各层多粒度依赖图的边集合Ei的并集∪i=1nEi(其中U表示集合的并运算符,其下标i=1和上标n表示从1到n的n个集合的并),再并上层间边的集合EL,其边的类型集合等于各个多粒度依赖图的边的类型集合DTi的并集∪i=1nDTi,再并上层间边集合的类型DTL
多层时态依赖图模型
首先回顾单层依赖图的(实际上是一个图)的定义:
根据定义2.8定义多粒度时态依赖图G=<V,E,DT>,即定点集合V是普通结点和时态结点的结合,边E是普通边和时态边的集合,为了统一表示,普通结点和普通边的有效时间记为其创建时间开始至正无穷(+∞),其结点为vi表示为(vi,vt),其中vt为其有效时间,边ei表示为(vi,dt,vj,vt),即从vi到vj的边,边类型为dt,有效时间为v。然后定义多层时态依赖图。
定义2.12多层时态依赖图(Multilayer Temporal Dependency Graph)
每一层Li定义为一个多粒度依赖图Li=Gi=(Vi,Ei,DTi),若Vi为时态实体集合,Ei为时态依赖集合,则称Li为多粒度时态依赖图;若多层依赖图MDG=(L,EL,DTL),若L为多粒度时态依赖图,EL为层间时态依赖关系<vi,dtl,vj,vt>的集合,其中vt为有效时间,则称MDG为多层时态依赖图。
根据以上定义2.12,多层时态依赖图的相关数据结构可以如下:
数据结构为:
图20给出了一个多层依赖图示例。图中实线为层内依赖关系,虚线为层间依赖关系。任意两层间都可以有依赖关系。图20中的多层依赖图包括需求层、设计层、开发人员层、开发单位层共4个层L。其中需求层和设计层又构成了技术层;开发人员层和开发单位层又构成了社会层。设计层中有结点s1、s2、s3、s4、其中设计层内依赖关系包括s1依赖于s2、s2依赖于s4、s4依赖于s3;设计层与开发人员层的层间依赖关系包括s2依赖d4、s4和s3均依赖d3。更多示例性的层内依赖关系、层间依赖关系可从图20中看出。
在图20的示例中,这些层内依赖关系、层间依赖关系可以直观地看出来,在数据库中,这些依赖关系则存储或“隐藏”在一张张TABLE中,需要本发明的解决方案将其“挖掘”出来。
针对软件开发过程管理,以需求、设计、模型、构件、软件和支持数据为例,可以分为六层,实际上还要考虑到变更、项目、开发人员、开发机构等实体,则分层更多。分层的主要好处是,在逻辑上让可以更清楚地理解复杂依赖图的结构。图20是软件开发过程管理的部分分层时态依赖图示例。下面介绍多层时态依赖图的生成算法(如算法2.1)。
算法2.1:多层时态依赖图生成算法MTDGGA(Multilayer Temporal DependencyGraph Generation Algorithm)
算法2.1结合第三节的逻辑模型(也就是数据库设计中的数据库模式DatabaseShema,包括表table、视图view等),进一步说明如下:
Input为数据库中的所有数据模式,包括第三节中的所有表table、视图view。以上所有表table分为实体table、实体之间的联系table、实体内部的联系table三类。
Output为多层时态依赖图,其数据结构参见定义2.12下的相关数据结构。
算法2.1中的如下步骤(后续简称算法2.1步骤3-8):
是对数据库中的所有时态实体及其内部联系、外部联系的挖掘并建立多层时态依赖图的过程。其中的各个实体、关系均对应第三节中的逻辑模型。
举例来说,根据第三节在数据库中建立的逻辑模型,该逻辑模型至少包括以下将建立为多层时态依赖图中的“层”,每“层”又至少包括如下实体、内部联系、以及层间联系。
第一层为需求层:
实体例如为:需求关系Requirements,需求版本关系ReqVer_VT
层内联系为:需求层次依赖联系ReqHierarchy
层内联系为:需求版本依赖联系:ReqVerDependency
第二层为设计层:
实体例如为:设计关系Design,设计版本关系DesVer_VT
层内联系为:设计层次联系DesHierarchy
层内联系为:设计版本依赖联系DesVerDependency
第三层为模型层:
实体例如为:模型关系Model,模型版本关系ModVer_VT
层内联系为:模型层次联系ModHierarchy
层内联系为:模型版本依赖联系ModVerDependency
第四层为构件层:
实体例如为:构件关系Component,构件版本关系ComVer_VT
层内联系为:构件层次联系ComHierarchy
层内联系为:构件版本依赖联系ComVerDependency
第五层为软件层:
实体例如为:软件关系Software,软件版本关系SoftVer_VT
层内联系为:软件层次联系SoftHierarchy(
层内联系为:软件版本依赖联系SoftVerDependency
第六层为支持数据层:
实体例如为:支持数据关系SupDataSet,支持数据版本SupVer_VT
层内联系为:支持数据版本联系SupVerRelship_VT
第七层为变更层:变更关系Change_VT
该层内没有联系,层间联系通过“变更类型chgType,变更前版本号preChgVerId,变更后版本号postChgVerId”三个属性与其他层间建立联系,例如变更类型为“需求变更”,则变更前版本号preChgVerId与第一层需求层内的需求版本对象相对应,建立联系;变更后版本号postChgVerId也与第一层需求层内的需求版本对象相对应,建立联系。当变更类型为设计变更、模型变更、构件变更、软件变更和支持数据变更时,变更相应的与其对应的层和层内对象建立联系。
第一层与第二层层间联系:
需求版本与设计版本之间可跟踪性联系:Trac_ReqVer_DesVer
第二层与第三层层间联系:
设计版本与模型版本可跟踪性联系Trac_DesVer_ModVer
第三层与第六层层间联系:
模型版本与支持数据版本可跟踪性联系Trac_ModVer_SuppVer
第二层与第四层层间联系:
设计版本与构件版本可跟踪性联系Trac_DesVer_ComVer
第四层与第六层层间联系:
构件版本与支持数据版本可跟踪性联系Trac_ComVer_SuppVer
第四层与第五层层间联系:
构件版本与软件版本可跟踪性联系Trac_ComVer_SoftVer。
按照上面各层说明,第一层至第六层,每层内的实体是对应的实体对象及其各个版本对象,例如:第一层需求层,包含需求对象,以及每个需求对象的各个版本对象;层内联系主要是:父子层次联系和版本对象之间的依赖联系,而版本对象之间的依赖联系主要是相关依赖联系、同步依赖联系等,详情参见表2.1常用的实体间依赖关系。
第七层变更层,则只包含各个变更对象,没有版本对象,层内对象之间没有联系。该层与其它层的联系,见之前对“第七层为变更层”的介绍举例说明。
根据以上举例,举例说明算法2.1中循环的执行过程:
从算法2.1执行2步循环开始,
第3步,判断Requirements是一个实体关系,则
第4步,增加一层,
第5步,建立需求层时态依赖图,
(循环)第3步,判断ReqVer_VT是一个时态实体关系,则
第5步由于需求时态实体关系依赖需求实体关系,则仍然在需求层建立需求版本对象。
(循环)第6步,判断ReqHierarchy为internalrelationship,则
第7步,生成层内需求实体依赖联系;
(循环)第6步,判断ReqVerDependency为internalrelationship,则
第7步,生成层内需求版本实体依赖联系;
(循环)第8步,判断Trac_ReqVer_DesVer为需求层与设计层之间的联系,则
第9步,生成需求层与设计层之间的联系
其他依次类推。
8.2多层时态依赖图的性质
异构性(Heterogeneous)
依赖图中存在异构的实体(如需求、设计、模型、构件等等),也存在异构的不同粒度的结点(如实体、属性和行为等结点)。
多层性(Mutilayer)
同类实体为一次,每层都是一个多粒度有向依赖图。
多粒度(Multigranular)
每一层都存在实体、属性和行为等不同粒度。
有向性(Directed)
依赖关系具有不对称性,因此必须是有向的。如实体a依赖b于dt,等价的描述是:B被A依赖于dt-1,但都统一记为:记为<a,dt,b>。
非循环性(Acyclic)
由于依赖的反自反性,依赖不能存在循环,因此,有向依赖图中也不能存在循环子图。
稀疏性(Sparse)
由于实体通常只跟少数其他实体有依赖关系,依赖图中也会存在一个个子的依赖社区,总体上,依赖图表现出稀疏性。
动态性(Dynamic)
由于会不断有新的实体(如新的需求项、构件、模型等)加入依赖图,有些不再使用的实体也会被淘汰,因此总体上,依赖图会不断变化,呈现出较大的动态性。
时态性(Temporal)
依赖图中存在时态实体、实体也可能存在时态属性,其中一个最主要的时态变化,是需求、设计、模型、构件、软件等的版本性,他们会随时间不断演变产生新的版本,依赖图因此会随时间的变化不断演变,变现出很强的时态特性。
深入理解和分析依赖图的以上特性,对依赖图的依赖性分析具有很重要的意义。
九、设计基于时态的软件配置管理对象依赖关系发现算法
本发明考虑到软件系统生命周期软件缺陷修复、功能增强、性能改进、需求增加、运行环境改变等均要求构件和软件系统等对象具有较强的演化能力,对象之间的依赖关系也可能在随时间不断发生变化演化。同时,由于多版本并行开发,某个软件对象演化特征并不是简单的随时间线性演化,由于不同用户要求或运行环境要求而存在多个版本分支随时间演化而构成一个版本树。因此有必要研究基于时态的对象依赖关系发现算法研究。
随着需求、设计、模型、构件等复用程度的增加,软件开发过程的各类实体之间的依赖关系也变得越来越复杂。因此有必要统计和分析各类实体的依赖关系,分析各类实体的稳定性、抽象性和是否存在循环依赖的问题,分析各类实体依赖关系的合理性,甚至可以发现不必要的依赖关系。
对于设计的分层时态依赖图,既可以在整个图上执行各种依赖分析任务,也可以选择只在某层上执行分析任务,使得依赖分析任务执行比较灵活。另外,目前考虑分层的模型,一方面是为了在逻辑上容易理解复杂的时态依赖图,另外,在图形化显示方面,也可以按分层的思想来显示,也更有利于理解实体之间的依赖关系。
为了进行依赖性分析,借鉴代码质量的评价指标,定义几个类似的依赖性评价指标:
定义2.13传入耦合Ca(Afferent Couplings)
依赖于被分析实体的其他实体的数量,即有多少实体依赖于它,用于衡量实体的职责,以评估变更实体造成的影响。图21给出了传入耦合示例图,其中n个实体entity 1、entity 2、……entity n均依赖于entity 0。如图21所示,Ca越大,更改Entity 0造成的影响越大,Ca越小,更改Entity 0造成的影响越小。
定义2.14传出耦合Ce(Efferent Couplings)
被分析的实体所依赖的其他实体的数量,即它依赖了多少其他实体,用于衡量实体的独立性,以评估外界的更改如何影响实体。图22给出了传出耦合示例图,其中实体entity 0分别依赖于n个实体,从实体entity 1、entity 2、……到entity n。如图22所示,Ce越大,外界变更对该实体的影响越大,Ce越小,外界变更对该实体的影响越小。
定义2.15实体不稳定性I(Entity Instability)
定义I=Ce/(Ce+Ca),用于衡量实体的不稳定性,取值范围为[0,1],I=0表示实体最稳定,I=1表示实体最不稳定。如这个等式所示,传出耦合对包的稳定性起作用:一个包越依赖于其他包,面对更改时它越容易受到连锁反应的影响,换句话说,如果这个实体不依赖于任何其他实体,则它是最稳定的。反过来说,一个实体越被依赖,它越不可能发生更改。在开发、设计和实现实体时,依赖于稳定的实体是有益的,因为这些实体不太可能更改;而不稳定的实体依赖性会在发生变更时增大系统发生间接变更的风险。
定义2.16实体抽象性A(Entity Abstractness)
如果软件开发过程的实体越与具体的项目和应用背景无关,越能用到更多的项目和应用中去,就越抽象。抽象性A取值范围为[0,1],取值为0,表示最具体,不抽象;取值为1,表示最抽象。该取值可以由该实体与具体应用无关的特征和全部特征的比值得出,或者由专家凭经验给出,或者利用该实体的复用度来估计。
定义2.17实体距离D(Enttity Distance)
图23给出了实体距离计算的示意图。被分析实体和理想曲线A+I=1的垂直距离(如图23所示),用于衡量实体在稳定性和抽象性之间的平衡。理想的实体要么完全是抽象的和稳定(A=1,I=0),要么完全是具体类和不稳定(A=0,I=1)。取值范围为[0,1],D=0表示完全符合理想标准,D=1表示实体最大程度地偏离了理想标准。即实体要么是抽象的,不依赖任何其他实体(完全是抽象类和稳定);要么是具体的,不被任何其他实体依赖。
定义2.18循环依赖C(Cycle)
循环依赖的数量。
定义2.19依赖强度S(Severity of Dependency)
定义多层时态有向依赖图的边的权值为依赖强度S(Severity of Dependency)。通常该依赖强度默认值为1,即完全依赖,依赖强度为0表示不依赖,取值范围为[0,1]。某个实体直接依赖另外一个实体,其依赖强度通常由业务人员或者业务专家给出。由于依赖存在传递性,结点a到c之间的间接依赖强度不断减弱,由a到c的最短路径上的所有边的依赖强度相乘得出,再除以(ln(最短路径的边数)+1)。
2.1)
例如,设a----0.8--->b---0.9---->c,则a--->>c的依赖强度有下列公式计算:
SeverityOfDep(a,c)=SeverityOfDep(a,b)×SeverityOfDep(b,c)/(ln(最短路径的边数)+1)=0.8×0.9×/(ln2+1)
在做依赖性分析之前,可以遍历整个图,计算各个结点的传入耦合、传出耦合、稳定性、抽象性等性能指标。在分析结果中可以显示各个结点的上述指标。
目前研究如下分析算法和分析结果展现算法。
直接依赖统计分析
算法2.2基本思想是采用宽度优先算法遍历整个图,计算每个结点的传入耦合Ca、传出耦合Ce和实体稳定性I。如果每个实体的抽象性给定,则可以根据定义2.17计算每个结点的实体距离D。
算法2.2:直接依赖统计分析算法DDSA(Direct Dependency Statistics&Analysis Algorithm)
实际上,结点的传入耦合Ca也表示该结点代表的实体被多少个其他实体依赖,也表示一种被使用情况;而传出耦合Ce也表示该实体依赖了多少个其他实体,也表示一种使用情况。
通过算法2.2计算出每个结点的各个指标参数后,可以如表2.2的表格方式,把有向依赖图展现出来,方便用户浏览。
表2.2实体依赖浏览表示例
依赖链分析
从给定实体出发的直接依赖和间接依赖分析
从给定实体出发,查找其直接依赖和间接依赖关系,实际上是从给定实体出发,生成一棵生成树的过程。由于依赖关系的反自反特性,有向依赖图中不存在循环,所以一定能够生成一棵树,该生成树的最大高度由给定的最大间接依赖层数Lmax确定,从而避免生成太高的生成树,难以显示,也不便于理解。
算法2.1的基本思想是,采用宽度优先算法生成实体依赖树,同时也要保持原有的分层特性,便于理解。
算法2.3:依赖链分析算法DLA(Dependency Link Analysis Algorithm)
对于实体依赖树,可以使用例如D3.JS这样的强大的可视化图形显示工具来显示,也需要设计相应的分层显示算法。
从给定实体出发的正向依赖分析和逆向依赖分析
算法DLA实际上是一个正向依赖链分析算法,即沿着A依赖于B,B依赖于C,C依赖于D,...的依赖链正向分析实体之间的直接和间接依赖关系。
为了实现逆向依赖分析算法,只需把算法DID的宽度优先遍历出边,改为宽度优先遍历入边,就可以实现逆向依赖分析,即沿着A被B依赖,B被C依赖,C被D依赖,...的方向一直分析下去,是一种逆向依赖链分析方法。
把算法DLA改造为一个通用的正向或者逆向分析算法,如算法MDLA所示,只需要通过一个控制变量就可以控制正向或逆向分析,当然也可以双向分析。
算法2.4:多向依赖链分析算法MDLA(Multidirectional Dependency LinkAnalysis Algorithm)
正向分析或者逆向分析,产生的是一个实体依赖树,比如容易清楚地显示实体之间的依赖关系,但是当同时进行双向分析时,很容易把依赖和被依赖关系混合在一起,这样就需要在显示时,采用比较灵活方便的方式来显示。
另外正向分析结果和逆向分析结果合并在一起,并不等于同时进行的双向分析结果。这一点将在实现时予以区分。举例说明如下:
图24显示了一个与时态实体a相关的所有依赖关系的图。图中既包括从a开始的依赖关系:a依赖于b、c,b依赖于w,c依赖于z;同时也包括从a开始的被依赖关系:a被d、e依赖,d被b依赖,b被g、f依赖。图24中还包括了与结点b、c有依赖关系的其它结点x、y、u、v。
针对图24所示的实体依赖图,图25显示了正向实体依赖分析结果为:a依赖于b、c,b依赖于w,c依赖于z。
针对图24所示的实体依赖图,图26显示了逆向实体依赖分析结果为:a被d、e依赖,d被b依赖,b被g、f依赖。
针对图24所示的实体依赖图,图27显示了双向实体依赖分析结果为:从a开始的依赖关系:a依赖于b、c,b依赖于w,c依赖于z;从a开始的被依赖关系:a被d、e依赖,d被b依赖,b被g、f依赖。图24中还包括了与结点b、c有依赖关系的其它结点x、y、u、v。
可以证明,当Lmax等于1时,算法MDLAA分析算法满足:MDLA(正向分析)+MDLA(逆向分析)=MDLA(双向分析);当Lmax大于1时,算法MDLA分析算法满足:MDLA(正向分析)+MDLA(逆向分析)<>MDLA(双向分析);
因此改进算法MDLA为TMDLA,可以实现当Lmax为任何值时,TMDLA(正向分析)+TMDLA(逆向分析)=TMDLA(双向分析)。这样可以减少图的二次遍历,从而提高分析效率。改进的基本思想是:设立两个队列,一个正向队列,一个逆向队列,对正向队列的所有结点,都只进行正向分析;对逆向队列的结点,都只进行逆向分析。算法如下:
算法2.5:通用多向依赖链分析算法TMDLA(True Multidirectional DependencyLink Analysis Algorithm)
从给定两个实体出发,分析它们之间的依赖关系
给定两个,或者多个实体,分析他们之间的依赖关系,实际上是一个有向图搜索生成Steiner树的问题,这个问题在数据库信息检索领域已经有很多研究。
解决该问题的基本思想是:把有向图当做无向图看待,然后把给定的实体对应的结点当做叶子结点,从每个叶子结点出发并行执行一个最短路径算法(如Dijkstra算法),直到找到一个公共的结点或者找不到为止,该算法为BANKS算法。如果接着在该结果的基础上,进一步优化,可以采用STAR算法。
检测多层依赖图中的循环依赖
多层依赖图在整体上还是一个有向图。由于有向图的循环检测算法时间复杂性通常为O(n2),比较耗费时间。因此,一方面,可以在整个图上检测循环依赖,另一方面,也可以只在某一层上检测循环依赖。
另外,如果不考虑时态约束,则多层依赖图中可能存在较多的循环依赖,但是,若从时态的角度考虑,有些依赖关系是有有效性,即在某个有效时间范围内是有效的,当查询时间不在其有效范围之内,则那些依赖关系相当于是不存在的。因此,需要把目前已有的在有向图上检测环的算法,改为时态的有向环检测算法。
为了检测环,借鉴一个改进的深度优先(Depth First)搜索算法,称之为着色的DFS算法。其基本思想是:初始,所有结点标记为白色(White,即未被访问过),当它被访问过,标记为灰色(Grey),当它的所有后裔结点都被完全访问过,它被标记为黑色(Black)。如果一个灰色结点被再次遇到(访问),则存在一个环。时态的有向图环检测算法2.6所示。
算法2.6:检测循环依赖算法DCD(Detecting Cycle Dependency Algorithm)
算法2.7:结点访问算法Visit//boolean visit(Graph MTDG,Vertex v,Validtime qvt):
社会性分析
开发人员之间的社会性依赖关系,通常是通过与其他实体之间的技术-社会性依赖关系和技术性依赖关系推导得出来的。这里又分为直接推导出来的,还是间接推导出来的。如图28所示。
图28是一个推导出开发人员只见依赖关系示意图。其显示了开发人员d7依赖于d4,d4依赖于d3,d5依赖于d3,其具体的依赖关系推导过程可能是直接推导出来的,也可能是间接推导出来的。
根据开发人员和需求,开发人员和设计之间的依赖关系(其意义是指需求或者设计分配给某个开发人员来完成,因此也可以理解为需求或者设计依赖该开发人员),推导出开发人员之间存在依赖关系,其依赖强度由公式2.1得出。
图29显示了开发人员d7依赖于d4推导关系示意图。在图中,由于r1—>r2—>s2,则推导出d7依赖d4,其依赖强度(权值)由公式2.1得出。这里从r1到s2有两条路径,则d7和d4之间存在两个依赖关系,对应存在两条边,其依赖强度不一样。依据每条依赖边,可以查询其依赖路径详情。
社会性依赖图产生算法如下:
算法2.8:社会性依赖图生成算法SDGG(Social Dependency Graph GenerationAlgorithm)
算法2.8只是一个简单的社会性依赖图的生成算法。在实现时,讲依据实验情况,进一步改进该生成算法。
从给定开发人员出发分析其直接依赖的其他开发人员和间接依赖的开发人员
从给定开发人员出发的正向依赖分析和逆向依赖分析
从给定两个开发人员出发,寻找他们之间的依赖关系
基于社会性依赖图,可以直接采用多层时态依赖图上的算法2.3到2.6,按照上述三种情况分析开发人员之间依赖关系。
时态性分析
对于多层时态依赖图,结点和边都有有效时间。上述各种分析算法,通过增加一个查询时间区间,在处理过程中增加时间区间过滤,就可以实现基本的时态依赖分析算法。
对给定实体,分析其版本演化情况
对应算法2.5.输入增加一维输入参数“有效时间”ValidTime。
对给定实体,分析其依赖关系随版本变化情况
该分析对应算法2.5输入增加一维输入参数“有效时间”ValidTime。
对给定实体,分析其被依赖(被使用)情况
该分析对应算法2.2。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例该的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (14)
1.一种基于时态的软件配置管理对象依赖关系发现系统,其特征在于包括:
数据库模式构建模块,用于根据时态实体以及时态实体之间的联系,建立数据库模式;
其中时态实体包括软件开发要素中的以下至少一种:软件需求、设计、模型、构件、软件产品、开发单位、开发人员;时态实体具有时态属性,该时态属性包括时态实体的版本信息和/或有效时间信息;时态实体联系包括时态实体内部的依赖关系或时态实体之间的依赖关系,
其中建立数据库模式包括将时态实体和时态实体联系在数据库环境中以包括表、视图、存储过程的方式来创建,其中建立专门的联系表来表达时态实体的内部联系和时态实体之间的外部联系,其中表、视图中还包括时态属性字段来表达时态实体的以上时态属性;
依赖图构建模块,用于构建多层时态依赖图,包括:
定义每种时态实体分别对应多层时态依赖图中的一层,定义每种时态实体的一个具体对象为该层中的一个结点e,定义层内的结点与结点之间的有向边为内部依赖,定义层间的结点与结点之间的有向边为外部依赖;
定义由以上所有结点和有向边构成的图为多层时态依赖图;
输入以上数据库模式,获取其中包括表、视图、存储过程的所有数据库模式;
初始化多层时态依赖图的层数为0;
开始非空循环,条件为“数据库模式不为空”;
如果获得的数据库模式是一个时态实体;
多层时态依赖图的层数加1;
生成当前层的时态依赖图中的结点;
否则,如果获得的数据库模式是一个内部联系;
生成层内依赖关系;
否则,如果获得的数据库模式是一个外部联系;
生成层间依赖关系,即外部依赖关系;
结束非空循环,条件为“数据库模式不为空”;
输出多层时态依赖图;
依赖性分析模块,遍历整个多层时态依赖图,计算所有或部分结点的依赖性评价参数,从而作出依赖性分析;
其中,依赖性评价参数包括以下至少一种:该参数传入耦合Ca、传出耦合Ce;
其中,传入耦合Ca为依赖于被分析实体的其他实体的数量;传出耦合Ce为被分析的实体所依赖的其他实体的数量;实体不稳定性I=Ce/(Ce+Ca);用于衡量实体的不稳定性,取值范围为[0,1],I=0表示实体最稳定,I=1表示实体最不稳定。
2.根据权利要求1所述的系统,其还包括:依赖性分析模块中作出的依赖性分析为包括以下至少一种:直接依赖统计分析、依赖链分析、循环依赖分析、社会性分析、时态性分析。
3.根据权利要求1所述的系统,其还包括:依赖性分析模块中作出的依赖性分析包括直接依赖统计分析,
输入多层时态依赖图;
对多层时态依赖图采用宽度优先算法遍历整个图,具体为:
开始非空循环,条件为“存在没有访问过的结点”,
随机选定一个未访问过的结点e;
将该结点e进入队列Queue;
开始非空循环,条件为“队列Queue不为空”,
计算该结点e的传入耦合Ca,
计算该结点e的传出耦合Ce,
计算该结点e的实体不稳定性I,
计算该结点e的实体距离D,
结束非空循环,条件为“队列Queue不为空”,
结束非空循环,条件为“存在没有访问过的结点”,
输出每个结点的传入耦合Ca、传出耦合Ce、实体稳定性I。
4.根据权利要求1所述的系统,其还包括:依赖性分析模块中作出的依赖性分析包括依赖链分析,进一步包括正向依赖链分析:
输入给定时态实体e、给定最大依赖树层数Lmax、多层时态依赖图;
给定时态实体e记为实体依赖树的根节点;
当前时态实体e进入队列Queue;
初始化实体依赖树的层数Lcur为0;
开始非空循环,条件为“队列Queue不为空”;
层数Lcur加1;
如果Lcur大于Lmax,则退出;
当前结点e出队列Queue;
如果结点e当前结点已访问过,退出不执行;
广度优先搜索当前结点e的每一条出边,记为<e,e’>;
每条边的端点e进入队列Queue;
对应生成实体依赖树EDT的边<e,e’>;
结束非空循环,条件为“队列Queue不为空”;
输出该给定时态实体的实体依赖树。
5.根据权利要求1所述的系统,其还包括:依赖性分析模块中作出的依赖性分析包括依赖链分析,进一步包括通用多向依赖链分析:
输入给定时态实体e、给定最大依赖层数Lmax、给定分析方向Direction;其中0表示逆向分析、1表示正向分析、2表示双向分析;
给定实体e记为实体依赖树EDT的根结点;
如果方向Direction是正向分析或双向分析,则将当前结点e进入队列Queue;
如果方向Direction是逆向分析或双向分析,则将当前结点e进入反向队列ReverseQueue;
初始化实体依赖树EDT的层数Lcur为0;
开始非空循环,条件为“队列Queue或反向队列ReverseQueue,不为空”;
执行宽度优先遍历,具体为:
层数Lcur加1;
如果层数Lcur大于Lmax,则退出循环;
当前结点出队列Queue;
如果当前结点e已经访问过,则退出循环;
执行广度优先搜索当前结点e的每一条出边<e,e’>;
每条边的端点e’入队列Queue;
对应生成实体依赖树的边<e,e’>;
当前结点出反向队列ReverseQueue;
如果当前结点e已经访问过,则退出循环;
执行广度优先搜索当前结点e的每一条入边<e,e’>;
每条边的端点e’入反向队列ReverseQueue;
对应生成实体依赖树的边<e,e’>;
结束非空循环,条件为“队列Queue或反向队列Queue,不为空”;
返回该给定时态实体的实体依赖树EDT。
6.根据权利要求1所述的系统,其还包括:依赖性分析模块中作出的依赖性分析为包括循环依赖分析,进一步包括多层依赖图中的检测循环依赖:
输入多层时态依赖图MTDG、查询有效时间qvt;
开始循环,条件为“对于MTDG中的每个结点v”;
将结点v的标记为WHITE;
开始循环,条件为“对于MTDG中的每个结点v”;
如果节点v的标记为WHITE,那么
若函数visit(MTDG,结点v,qvt)返回结果为TRUE,则,退出且输出存在循环依赖TRUE;
结束循环,条件为“对于MTDG中的每个结点v”;
结束循环,条件为“对于MTDG中的每个结点v”;
输出不存在循环依赖FALSE;
其中函数visit(MTDG,结点v,qvt)为boolean函数:
将结点v的标记设定为GREY;
开始循环,条件为“对于MTDG中满足qvt的结点v的每个后裔结点u”;
如果结点u的标记为GREY,则退出返回TRUE;
否则,如果结点u的标记为WHITE,则
如果visit(MTDG,结点u,qvt)为TRUE,则退出返回TRUE;
结束循环,条件为“对于MTDG中满足qvt的结点v的每个后裔结点u”;
将结点v的标记设为BLACK;
返回FALSE。
7.根据权利要求1所述的系统,其还包括:依赖性分析模块中作出的依赖性分析为包括社会性依赖分析,
输入多层时态依赖图;
获取所有开发人员集合;
开始循环,循环条件“结点d在开发人员集合中”
从d开始宽度优先遍历MTDG,找出所有正向到达其他开发人员的有向路径;
从d开始宽度优先遍历MTDG,找出所有逆向到达其他开发人员的有向路径;
开始循环,循环条件“对每条d到其他开发人员的有向路径”;
增加一条d到其他开发人员之间的依赖关系;
计算依赖强度;
结束循环,循环条件“对每条d到其他开发人员的有向路径”;
结束循环,循环条件“结点d在开发人员集合中”;
输出社会性依赖图。
8.一种基于时态的软件配置管理对象依赖关系发现方法,其特征在于包括:
步骤1,根据时态实体以及时态实体之间的联系,建立数据库模式;
其中时态实体包括软件开发要素中的以下至少一种:软件需求、设计、模型、构件、软件产品、开发单位、开发人员;时态实体具有时态属性,该时态属性包括时态实体的版本信息和/或有效时间信息;时态实体联系包括时态实体内部的依赖关系或时态实体之间的依赖关系,
其中建立数据库模式包括将时态实体和时态实体联系在数据库环境中以包括表、视图、存储过程的方式来创建,其中建立专门的联系表来表达时态实体的内部联系和时态实体之间的外部联系,其中表、视图中还包括时态属性字段来表达时态实体的以上时态属性;
步骤2,构建多层时态依赖图,包括:
定义每种时态实体分别对应多层时态依赖图中的一层Layer,定义每种时态实体的一个具体对象为该层layer中的一个结点e,定义层内的结点与结点之间的有向边为内部依赖,定义层间的结点与结点之间的有向边为外部依赖;
定义由以上所有结点和有向边构成的图为多层时态依赖图;
输入以上数据库模式,获取其中包括表、视图、存储过程的所有数据库模式;
初始化多层时态依赖图的层数为0;
开始非空循环,条件为“数据库模式不为空”;
如果获得的数据库模式是一个时态实体;
多层时态依赖图的层数加1;
生成当前层的时态依赖图中的结点;
否则,如果获得的数据库模式是一个内部联系;
生成层内依赖关系;
否则,如果获得的数据库模式是一个外部联系;
生成层间依赖关系,即外部依赖关系;
结束非空循环,条件为“数据库模式不为空”;
输出多层时态依赖图;
步骤3,遍历整个多层时态依赖图,计算所有或部分结点的依赖性评价参数,从而作出依赖性分析;
其中,依赖性评价参数包括以下至少一种:该参数传入耦合Ca、传出耦合Ce;
其中,传入耦合Ca为依赖于被分析实体的其他实体的数量;传出耦合Ce为被分析的实体所依赖的其他实体的数量;实体不稳定性I=Ce/(Ce+Ca);用于衡量实体的不稳定性,取值范围为[0,1],I=0表示实体最稳定,I=1表示实体最不稳定。
9.根据权利要求8所述的方法,其还包括:步骤3中作出的依赖性分析为包括以下至少一种:直接依赖统计分析、依赖链分析、循环依赖分析、社会性分析、时态性分析。
10.根据权利要求8所述的方法,其还包括:步骤3中作出的依赖性分析包括直接依赖统计分析,
输入多层时态依赖图MTDG;
对多层时态依赖图采用宽度优先算法遍历整个图,具体为:
开始非空循环,条件为“存在没有访问过的结点”,
随机选定一个未访问过的结点e;
将结点e进入队列Queue;
开始非空循环,条件为“队列Queue不为空”,
计算结点e的传入耦合Ca,
计算结点e的传出耦合Ce,
计算结点e的实体不稳定性I,
计算结点e的实体距离D,
结束非空循环,条件为“队列Queue不为空”,
结束非空循环,条件为“存在没有访问过的结点”,
输出每个结点的传入耦合Ca、传出耦合Ce、实体稳定性I。
11.根据权利要求8所述的方法,其还包括:步骤3中作出的依赖性分析包括依赖链分析,进一步包括正向依赖链分析:
输入给定时态实体e、给定最大依赖树层数Lmax、多层时态依赖图;
给定时态实体e记为实体依赖树的根节点;
当前时态实体e进入队列Queue;
初始化实体依赖树EDT的层数Lcur为0;
开始非空循环,条件为“队列Queue不为空”;
层数Lcur加1;
如果Lcur大于Lmax,则退出;
当前结点e出队列Queue;
如果结点e当前结点已访问过,退出不执行;
广度优先搜索当前结点e的每一条出边,记为<e,e’>;
每条边的端点e进入队列Queue;
对应生成实体依赖树EDT的边<e,e’>;
结束非空循环,条件为“队列Queue不为空”;
输出该给定时态实体的实体依赖树EDT。
12.根据权利要求8所述的方法,其还包括:步骤3中作出的依赖性分析包括依赖链分析,进一步包括通用多向依赖链分析:
输入给定时态实体e、给定最大依赖层数Lmax、给定分析方向Direction;其中0表示逆向分析、1表示正向分析、2表示双向分析;
给定实体e记为实体依赖树EDT的根结点;
如果方向Direction是正向分析或双向分析,则将当前结点e进入队列Queue;
如果方向Direction是逆向分析或双向分析,则将当前结点e进入反向队列ReverseQueue;
初始化实体依赖树EDT的层数Lcur为0;
开始非空循环,条件为“队列Queue或反向队列ReverseQueue,不为空”;
执行宽度优先遍历,具体为:
层数Lcur加1;
如果层数Lcur大于Lmax,则退出循环;
当前结点出队列Queue;
如果当前结点e已经访问过,则退出循环;
执行广度优先搜索当前结点e的每一条出边<e,e’>;
每条边的端点e’入队列Queue;
对应生成实体依赖树EDT的边<e,e’>;
当前结点出反向队列ReverseQueue;
如果当前结点e已经访问过,则退出循环;
执行广度优先搜索当前结点e的每一条入边<e,e’>;
每条边的端点e’入反向队列ReverseQueue;
对应生成实体依赖树EDT的边<e,e’>;
结束非空循环,条件为“队列Queue或反向队列Queue,不为空”;
返回该给定时态实体的实体依赖树EDT。
13.根据权利要求8所述的方法,其还包括:步骤3中作出的依赖性分析为包括循环依赖分析,进一步包括多层依赖图中的检测循环依赖:
输入多层时态依赖图MTDG、查询有效时间qvt;
开始循环,条件为“对于MTDG中的每个结点v”;
将结点v的标记为WHITE;
开始循环,条件为“对于MTDG中的每个结点v”;
如果节点v的标记为WHITE,那么
若函数visit(MTDG,结点v,qvt)返回结果为TRUE,则,退出且输出存在循环依赖TRUE;
结束循环,条件为“对于MTDG中的每个结点v”;
结束循环,条件为“对于MTDG中的每个结点v”;
输出不存在循环依赖FALSE;
其中函数visit(MTDG,结点v,qvt)为boolean函数:
将结点v的标记设定为GREY;
开始循环,条件为“对于MTDG中满足qvt的结点v的每个后裔结点u”;
如果结点u的标记为GREY,则退出返回TRUE;
否则,如果结点u的标记为WHITE,则
如果visit(MTDG,结点u,qvt)为TRUE,则退出返回TRUE;
结束循环,条件为“对于MTDG中满足qvt的结点v的每个后裔结点u”;
将结点v的标记设为BLACK;
返回FALSE。
14.根据权利要求8所述的方法,其还包括:步骤3中作出的依赖性分析为包括社会性依赖分析,
输入多层时态依赖图;
获取所有开发人员集合;
开始循环,循环条件“结点d在开发人员集合中”
从d开始宽度优先遍历MTDG,找出所有正向到达其他开发人员的有向路径;
从d开始宽度优先遍历MTDG,找出所有逆向到达其他开发人员的有向路径;
开始循环,循环条件“对每条d到其他开发人员的有向路径”;
增加一条d到其他开发人员之间的依赖关系;
计算依赖强度;
结束循环,循环条件“对每条d到其他开发人员的有向路径”;
结束循环,循环条件“结点d在开发人员集合中”;
输出社会性依赖图。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710102904 | 2017-02-24 | ||
CN2017101029049 | 2017-02-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106970788A true CN106970788A (zh) | 2017-07-21 |
CN106970788B CN106970788B (zh) | 2018-08-07 |
Family
ID=59330150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710124891.5A Expired - Fee Related CN106970788B (zh) | 2017-02-24 | 2017-03-03 | 一种基于时态的对象依赖关系发现方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106970788B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107678776A (zh) * | 2017-08-09 | 2018-02-09 | 上海壹账通金融科技有限公司 | 多模块版本依赖关系构建方法、装置、服务器和存储介质 |
CN108255466A (zh) * | 2017-12-20 | 2018-07-06 | 中国人民解放军海军大连舰艇学院 | 一种基于时态的软件配置管理数据系统和方法 |
CN108287787A (zh) * | 2017-12-20 | 2018-07-17 | 中国人民解放军海军大连舰艇学院 | 一种基于时态的对象变更影响分析方法和系统 |
CN108459965A (zh) * | 2018-03-06 | 2018-08-28 | 南京大学 | 一种结合用户反馈和代码依赖的软件可追踪生成方法 |
CN109086050A (zh) * | 2018-07-04 | 2018-12-25 | 烽火通信科技股份有限公司 | 一种模块依赖关系的分析方法及系统 |
CN109726192A (zh) * | 2018-12-24 | 2019-05-07 | 普元信息技术股份有限公司 | 基于大数据环境实现主数据模型版本与字段分开管理功能的系统及方法 |
CN110211131A (zh) * | 2019-05-21 | 2019-09-06 | 上海阿几网络技术有限公司 | 一种基于参数化设计的平面设计尺寸自动拓展方法 |
CN110717076A (zh) * | 2019-09-06 | 2020-01-21 | 平安科技(深圳)有限公司 | 节点管理方法、装置、计算机设备及存储介质 |
CN111158676A (zh) * | 2019-12-31 | 2020-05-15 | 山东蚁动网络科技有限公司 | 基于变量传播技术的构件关联性分析方法及设备、介质 |
CN111240739A (zh) * | 2020-01-21 | 2020-06-05 | 烽火通信科技股份有限公司 | 一种对象的关联属性动态并发分配方法及系统 |
CN112115153A (zh) * | 2020-09-21 | 2020-12-22 | 北京字跳网络技术有限公司 | 数据处理方法、装置、设备及存储介质 |
CN116484822A (zh) * | 2023-06-26 | 2023-07-25 | 和创(北京)科技股份有限公司 | 表单字段表达式循环依赖计算方法及装置 |
CN116931889A (zh) * | 2023-09-18 | 2023-10-24 | 浙江工企信息技术股份有限公司 | 一种基于对象树的软件建模方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130326481A1 (en) * | 2012-06-05 | 2013-12-05 | Shakthi Kannan | System and method for tracking software package dependencies using a graph model |
CN103473400A (zh) * | 2013-08-27 | 2013-12-25 | 北京航空航天大学 | 基于层次依赖建模的软件fmea方法 |
US20140123108A1 (en) * | 2012-10-26 | 2014-05-01 | Infosys Limited | Systems and methods for estimating an impact of changing a source file in a software |
CN104298677A (zh) * | 2013-07-16 | 2015-01-21 | 中国移动通信集团浙江有限公司 | 一种关注点依赖关系识别方法及系统 |
CN105867906A (zh) * | 2016-03-22 | 2016-08-17 | 东南大学 | 一种面向软件演化的代码可替换性评估方法 |
CN105893257A (zh) * | 2016-03-30 | 2016-08-24 | 东南大学 | 一种基于演化的软件架构评估方法 |
-
2017
- 2017-03-03 CN CN201710124891.5A patent/CN106970788B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130326481A1 (en) * | 2012-06-05 | 2013-12-05 | Shakthi Kannan | System and method for tracking software package dependencies using a graph model |
US20140123108A1 (en) * | 2012-10-26 | 2014-05-01 | Infosys Limited | Systems and methods for estimating an impact of changing a source file in a software |
CN104298677A (zh) * | 2013-07-16 | 2015-01-21 | 中国移动通信集团浙江有限公司 | 一种关注点依赖关系识别方法及系统 |
CN103473400A (zh) * | 2013-08-27 | 2013-12-25 | 北京航空航天大学 | 基于层次依赖建模的软件fmea方法 |
CN105867906A (zh) * | 2016-03-22 | 2016-08-17 | 东南大学 | 一种面向软件演化的代码可替换性评估方法 |
CN105893257A (zh) * | 2016-03-30 | 2016-08-24 | 东南大学 | 一种基于演化的软件架构评估方法 |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107678776A (zh) * | 2017-08-09 | 2018-02-09 | 上海壹账通金融科技有限公司 | 多模块版本依赖关系构建方法、装置、服务器和存储介质 |
CN108255466A (zh) * | 2017-12-20 | 2018-07-06 | 中国人民解放军海军大连舰艇学院 | 一种基于时态的软件配置管理数据系统和方法 |
CN108287787A (zh) * | 2017-12-20 | 2018-07-17 | 中国人民解放军海军大连舰艇学院 | 一种基于时态的对象变更影响分析方法和系统 |
CN108459965B (zh) * | 2018-03-06 | 2021-11-02 | 南京大学 | 一种结合用户反馈和代码依赖的软件可追踪生成方法 |
CN108459965A (zh) * | 2018-03-06 | 2018-08-28 | 南京大学 | 一种结合用户反馈和代码依赖的软件可追踪生成方法 |
CN109086050A (zh) * | 2018-07-04 | 2018-12-25 | 烽火通信科技股份有限公司 | 一种模块依赖关系的分析方法及系统 |
CN109086050B (zh) * | 2018-07-04 | 2021-11-30 | 烽火通信科技股份有限公司 | 一种模块依赖关系的分析方法及系统 |
CN109726192A (zh) * | 2018-12-24 | 2019-05-07 | 普元信息技术股份有限公司 | 基于大数据环境实现主数据模型版本与字段分开管理功能的系统及方法 |
CN109726192B (zh) * | 2018-12-24 | 2021-05-18 | 普元信息技术股份有限公司 | 基于大数据环境实现主数据模型版本与字段分开管理功能的系统及方法 |
CN110211131A (zh) * | 2019-05-21 | 2019-09-06 | 上海阿几网络技术有限公司 | 一种基于参数化设计的平面设计尺寸自动拓展方法 |
CN110717076A (zh) * | 2019-09-06 | 2020-01-21 | 平安科技(深圳)有限公司 | 节点管理方法、装置、计算机设备及存储介质 |
CN111158676A (zh) * | 2019-12-31 | 2020-05-15 | 山东蚁动网络科技有限公司 | 基于变量传播技术的构件关联性分析方法及设备、介质 |
CN111240739A (zh) * | 2020-01-21 | 2020-06-05 | 烽火通信科技股份有限公司 | 一种对象的关联属性动态并发分配方法及系统 |
CN111240739B (zh) * | 2020-01-21 | 2022-04-15 | 烽火通信科技股份有限公司 | 一种对象的关联属性动态并发分配方法及系统 |
CN112115153A (zh) * | 2020-09-21 | 2020-12-22 | 北京字跳网络技术有限公司 | 数据处理方法、装置、设备及存储介质 |
CN116484822A (zh) * | 2023-06-26 | 2023-07-25 | 和创(北京)科技股份有限公司 | 表单字段表达式循环依赖计算方法及装置 |
CN116484822B (zh) * | 2023-06-26 | 2023-09-01 | 和创(北京)科技股份有限公司 | 表单字段表达式循环依赖计算方法及装置 |
CN116931889A (zh) * | 2023-09-18 | 2023-10-24 | 浙江工企信息技术股份有限公司 | 一种基于对象树的软件建模方法及系统 |
CN116931889B (zh) * | 2023-09-18 | 2023-12-12 | 浙江工企信息技术股份有限公司 | 一种基于对象树的软件建模方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106970788B (zh) | 2018-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106970788B (zh) | 一种基于时态的对象依赖关系发现方法和系统 | |
CN107066256A (zh) | 一种基于时态的对象变更模型的建模方法 | |
JP7344327B2 (ja) | アプリケーションプログラミングインターフェイスのメタデータ駆動型外部インターフェイス生成ためのシステムおよび方法 | |
US9466041B2 (en) | User selected flow graph modification | |
US20090113394A1 (en) | Method and system for validating process models | |
US10657208B2 (en) | Analyzing model based on design interest | |
Ma et al. | Computing inconsistency measure based on paraconsistent semantics | |
US8918358B2 (en) | Information integration flow freshness cost | |
Şora et al. | Finding key classes in object-oriented software systems by techniques based on static analysis | |
Deng et al. | Elimination of policy conflict to improve the PDP evaluation performance | |
CN106293891A (zh) | 多维投资指标监督方法 | |
Mateescu et al. | Mixed deterministic and probabilistic networks | |
US20130096967A1 (en) | Optimizer | |
Xu et al. | Towards context consistency by concurrent checking for internetware applications | |
US9773327B2 (en) | Modified flow graph depiction | |
Rabinovich et al. | Analyzing the behavior of event processing applications | |
Jekjantuk et al. | Modelling and reasoning in metamodelling enabled ontologies | |
Sánchez et al. | A family of heuristic search algorithms for feature model optimization | |
Lera et al. | Performance-related ontologies and semantic web applications for on-line performance assessment of intelligent systems | |
Bagheri Hariri et al. | Verification of semantically-enhanced artifact systems | |
CN110262795B (zh) | 一种应用系统部署体系结构建模和验证方法 | |
Kritikos et al. | Towards semantic KPI measurement | |
CN112015912A (zh) | 一种基于知识图谱的指标智能可视化方法及装置 | |
Hessami et al. | Formalization of weighted factors analysis | |
Kaminski et al. | Towards process design for efficient organisational problem solving |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180807 |
|
CF01 | Termination of patent right due to non-payment of annual fee |