不安定度と求心性結合(依存性入力)と遠心性結合(依存性出力)について
最近 ソフトウェアアーキテクチャの基礎を読んでいるんですが、「不安定度」のところでやたらと引っかかったのでメモ。
まず求心性結合(依存性入力)、遠心性結合(依存性出力)について。
おそらく依存性入力、依存性出力と言い変えた方がわかりやすくはある。
求心性結合(依存性入力)
あるモジュール(クラス、関数、コンポーネントなど)に対して他のモジュールがどのくらい依存しているか。
考え方としては
- 対象となるモジュールを変えたときに、変更されるになるモジュールがどのくらいあるか
- クラス図で矢印を引いた時にモジュールがが矢印の先になる場合の矢印
- class A extends B
だったら、対処のモジュールがBなら、AはBに依存しているので、BはAにからの依存性入力がある
- モジュールCをモジュールDが使っているなら、モジュールDはCからの依存性入力が存在する事になる
遠心性結合(依存性出力)
あるモジュール(クラス、関数、コンポーネントなど)がどのくらい他のモジュールに依存しているか
考え方としては
- 対象以外のモジュールが変更されたときに、対象となるモジュールにどのくらい変更が必要か
- クラス図で矢印を引いた時にモジュールがが矢印の元になる場合の矢印
- class A extends B
だったら、対処モジュールがAなら、AはBに依存しているので、Bに対して依存性出力がある事になる
- モジュールCをモジュールDが使っているなら、モジュールCはDに対して依存性出力が存在する事になる
不安定度
さて本題の不安定度。
これは - 求心性結合(依存性入力) = Afferent Coupling = Ca - 遠心性結合(依存性出力) = Efferent Coupling = Ce - 不安定度 = Instability = I
とすると
I = Ce / (Ce + Ca)
となる。
簡単に読み解くと、Caが多く、Ceが少ないほど不安定度Iは小さくなり、安定したモジュールといえる。
説明が特にないと何故って気がするんですが - Caが多い = 入力が多い = 対象モジュールを使っているモジュールが多い = 対象モジュールを変更する事が難しい - Ceが少ない = 出力が少ない = 対象モジュールが使っているモジュールが少ない = 対象モジュールは変更しやすい
と考えるっぽい。なるほど。