摘要:
1,给出需求依赖关系的依赖型式(范式);
2,回溯法——需求变更影响的量化方法;
3,需求依赖关系——设计一个可以量化评估需求变更影响的算法。
一、需求依赖关系
如果需求Rs发生变更,要求另一需求Rt也进行相应的变更,我们称需求Rt依赖于需求Rs,记为dep(Rs, Rt)。如果需求Rt不依赖于Rs,则记为┐dep(Rs, Rt)。其中:Rs为依赖源需求,Rt为依赖目标需求。
二、需求依赖关系的分类
四种:子集依赖、完全依赖、父集依赖、回路依赖。
1,子集依赖:如果任取Ra、Rb,存在Rc,使得dep(Rb, Ra) ∧ (Rc∈Rb) ∧ ┐dep((Rb-Rc), Ra),则称Ra对Rb子集依赖,记为childdep(Rb, Ra),否则为┐childdep(Rb, Ra)。
2,完全依赖:如果任取Ra、Rb,使得dep(Rb, Ra) ∧ ┐childdep(Rb, Ra),则称Ra对Rb完全依赖,记为fulldep(Rb, Ra)。
3,父集依赖:如果任取Ra、Rb,存在Rc,使得dep(Rb, Ra) ∧ (Rc∈Ra) ∧ ┐dep(Rb, (Ra-Rc)),则称Ra对Rb父集依赖,记为fardep(Rb, Ra),也就是说,在需求Ra和Rb的依赖关系中,仅Rc受到Rb需求变更的影响。
PS1:子集依赖和父集依赖的存在,可以认为是需求建模粒度过大而造成的,这种非原子性的需求模型可能掩盖了部分需求之间的精确依赖关系,同时也可能导致依赖关系对变更影响描述的不精确性和不同步性。(***,也就是说,在进行需求建模时,不仅需要保持stakeholder的需求文本的完整性,也要适当的进行细化的处理,为后来的软件设计与开发提供便利)
4,回路依赖:如果任取R1、R2、、Rn,使得fulldep(R1, R2) ∧ fulldep(R2, R3) ∧... ∧fulldep(Ri-1, Ri) ∧ ... ∧ fulldep(Rn-1, Rn) ∧ fulldep(Rn, R1),则称R1,R2,...Rn之间的关系为回路依赖关系,记为loopdep(R1, R2, ..., Rn)。
PS2:回路依赖关系是结构上的一种强耦合关系,它降低了模型对变化的适应能力和可复用的程度。
三、需求依赖关系的性质
1,依赖关系的传递性:如果任取Ra、Rb、Rc,使得fulldep(Ra, Rb) ∧ fulldep(Rb, Rc),则有fulldep(Ra, Rc),称为Rc对Ra传递依赖。
2,依赖关系的不可逆性:如果任取Ra、Rb,使得dep(Ra, Rb) ∧ ┐dep(Rb, Ra),则需求Rb的变更不会对Ra有影响。
四、回溯法——确定需求变更依赖集
(待续)