有关变化影响分析阅读笔记2

工作报告

本周所看论文《一种改进的面向对象软件变化影响分析方法》,作者:周欣,黄璜,孙家骕。
论文从影响定义,依赖模型,分析方法三个方面进行探讨,提出了一种支持影响类型分析的改进的面向对象变化影响分析方法。
1) 影响定义
如果作用于实体A的原子变化将直接或者间接导致系统中某个实体B发生改变,则认为B受到A变化的影响。决定影响的因素有多种,包括变化类型、变化直接作用的实体A以及实体A和B之间的关系。这些因素的不同将导致B发生不同类型的改变,从而产生不同的影响分析结果。
 显示影响:如果作用于实体A的原子变化影响到实体B,使得维护人员需要引入作用在B
上的新变化才能保持整个系统的语法正确性,则这种影响导致了B的结构发生改变,是明显的,形象的称该变化对实体B有“显式影响”。
 隐式影响:如果作用于实体A的原子变化影响到实体B,使它的行为发生变化,但并不导致B的结构发生变化,则这种影响相对来说较为隐蔽,不容易被发现,称之为“隐式影响”。
2) 依赖模型
OOSDM分三层,第一层子图OOSDM-B描述方法内(Body)的实体依赖关系,第二层子图OOSDM-M描述成员(Member)间的实体依赖关系,第三层子图OOSDM-C描述类(Class)之间的实体依赖关系。两层子图实体之间的依赖关系分别由OOSDM—BC、OOSDM-BM和OOSDM-CM来描述,它们将三层子图连接起来,构成一个完整的有机整体。它区分、定义并记录了系统、类、成员和方法内四个层次的8种实体间共42类依赖关系。
变化内容 变化影响分析的依据
增加/删除一个类 OOSDM-C OOSDM-BC
OOSDM-MC
增加/删除一个属性/方法;
增加/删除一个父类 OOSDM-M OOSDM-MC OOSDM-BM
改变属性的类型;改变属性/方法的作用域;改变方法的返回类型;改变方法的参数列表;普通方法改成虚方法;虚方法改成普通方法;改变方法的实现体 OOSDM-B  OOSDM-M
OOSDM-BM   OOSDM-BC



3) 影响分析
Class A{
Public:
int MA(inti)
} ClassB:publicA{
public:
int b;
int MB(A pa);
} int A::MA(int i){
//…
return i+j;
} int B::MB(A pa){
//…
i=b+pa.MA(1);
return i;
}
变化1:删除属性B::b
变化2:将A::MA中return i+1;改为return 2*j
分析:由于方法B::MB和属性B::b之间存在依赖关系,所以删除属性B::b可能会受影响,删除属性b,则i=b+pa.MA(1)这句将不能编译通过,是显示影响,具体类型为“改变方法B::MB的实现体”。
对于变化2,由于方法A::MA和方法B::MB之间存在调用关系,若改变方法A::MA则方法B::MB可能受到影响,但是并不影响方法B::MB的结构,只是功能上可能改变,所以是隐式影响。具体类型为“改变方法B::MB的行为”。
   论文主要对影响分析类型做了分类,使得确定影响比较精确。
Object Oriented System Dependency Model该模型遵循UML基本概念,建模了系统、
类、成员和方法内四个层次的实体问共42种依赖
关系,明确地给出了可操作的模型实例生成原则.
能够较好地支持面向对象维护中经常出现的16种
变化的影响分析.



2013-3-9
用二元组(<e1,e2>,type)来记录依赖关系,表示el依赖于c2,类型为type。
OOSDM-B(16种) OOSDM-M
不考虑方法重载(8种) OOSDM-C(4种) OOSDM-BM(6种) OOSDM-MC(4种) OOSDM-BC(4种)
(<v1,v2>,B_VV_Defining)
判定条件:F(v2,v1)=true (<Ml,M2>,M MM_Calling),判定条件是:Ml调用M2 (<C2,Cl>,C_CC_Hieraarchy),判定条件
是:C2继承Cl (<P,M>BM_PM_Subordinate),判定条件是:OOSDM-B中的参数变量P是
00SDM-M中方法M的参数 (<C,a>,MC_CA Attribute),判定条件是:OOSDM-B中的属性a是OOSDM-C中类
C的成员 (<p,C>,BC_PC_Instance)判定条件是:
OOSDM-B中参数变量p是OOSDM-C中
类C的实例
(<v,M>,B_VM_Defming),判定条件是:如果存在某个语句s,s中含有方法调用M,且s的执行会影响到v。 (<MI,M2>,M_MM_lnherit),判定条件是:Ml继承M2 (<C2,Cl>,C_CC_Aggregation),判定条件
是:C2中某个属性为Cl的实例 (<m,M>BM_MM_Identity),判定条件是:OOSDM-B中的方法调用m对应00SDM-M中方法M的参数 (<a,C>,MC_AC_Instantce)判定条件是:OOSDM-B中的属性a是OOSDM-C中类C的实例 (<v,C>,BC_VC_Instance),判定条件是:
OOSDM-B中局部变量v是OOSDM-C中
类C的实例
(<v,a>,B_VA_Defining).判定条件是:F(a,v)=true (<M1,M2>,M_MM_Virtually_Inherit),判定条件是:M1虚-继承M2 (<C2,Cl>,C_CC_Invoking),判定条件
是:C2中某个方法调用了Cl的某个方法 (<m,M>BM_MM_Subordinate),判定条件是:OOSDM-B中的方法调用m出现在OOSDM-M中的方法M的实现体中
(<C,M>,MC_CM_Method)判定条件是:
OOSDM-B中的方法M是OOSDM-C中类
C的成员 (<a,C>,BC_AC_Instance),判定条件是:
OOSDM-B中属性a是OOSDM-C中类C
的实例
(<a,v>,B_AV_Defining).判定条件是:F(v,a)=true (<M1,M2>,M_MM_Redefine),判定条件是:Ml重定义M2,二者基调相同.实现体不同 (<C2,Cl>,C_CC_Using),判定条件
是:C2中某个方法定义了Cl类型的局部变量,或者C2中某个方法的参数类型或者返回类型是C1 (<v,M>BM_VM_Subordinate),判定条件是:OOSDM-B中的局部变量v出现在OOSDM-M中方法M的实现体中 (<M,C>MC_MC_Using),判定条件是:
OOSDM-B中的方法M的参数类型或者返
回类型是OOSDM-C中类C (<r,C>,BC_RC_Instance),判定条件是:
OOSDM-B中返回变量r是OOSDM-C中类C的实例
(<r,v>,B_RV_Defining).判定条件是:F(v,r)=true (<Ml,M2>M_MM_Virtually_Redefine),判定条件是:M1虚-重定义M2,二者基调相同,实现体不同 (<r,M>BM_RM_Subordinate),判定条件是:OOSDM-B中的返回变量r出现在
00SDM-M中方法M的实现体中
(<r,p>,B_RP_Defining)判定条件是:F(p,r)=true (<a1,a2>,M_ AA_Defining)判定条件是:F(a2,a1)=true (<a,A>BM_AA_Indetity),判定条件是:OOSDM-B中的属性a对应00SDM-M中的属性A
(<p,v>,B_PV_Defining).判定条件是:如果p是引用变量或者指针变量,且存在某个语句s,s执行之前v的值会影响到s执
行之后p的值 (<M,a>,M_MA_Reference),判定条件是:方法M的实现体中引用了属性a
(<p1,p2>,B_PP_Defining).判定条件是:如果p1是引用变量或者指针变量,且存在某个语句s,s执行之前p2的值会影响到s执
行之后p1的值 (<a,M>,M_AM_Defining),判定条件是:方法调用M的执行会影响a
(<p,M>,B_PM_Defining).判定条件是:如果p是引用变量或者指针变量,方法调用M的执行会影响到p
(<r,a>,B_RA_Defining)判定条件是:F(a,r)=true
(<r,M>,B_RM_Defining)判定条件是:方法调用M的执行会影响到r
(<a,M>,B_AM_Defining)判定条件是:方法调用M的执行会影响到a
(<a1,a2>,B_AA_Defining)判定条件是:F(a2,a1)=true
(<a,p>,B_AP_Defining)判定条件是:F(p,a)=true
(<p,a>,B_PA_Defining).判定条件是:如果p是引用变量或者指针变量,且存在某个语句s,s执行之前a的值会影响到s执
行之后p的值

猜你喜欢

转载自foralice0815.iteye.com/blog/1830872
今日推荐