takafumi blog

日々の勉強メモ

不安定度と求心性結合(依存性入力)と遠心性結合(依存性出力)について

最近 ソフトウェアアーキテクチャの基礎を読んでいるんですが、「不安定度」のところでやたらと引っかかったのでメモ。

まず求心性結合(依存性入力)、遠心性結合(依存性出力)について。
おそらく依存性入力、依存性出力と言い変えた方がわかりやすくはある。

求心性結合(依存性入力)

あるモジュール(クラス、関数、コンポーネントなど)に対して他のモジュールがどのくらい依存しているか。

考え方としては - 対象となるモジュールを変えたときに、変更されるになるモジュールがどのくらいあるか - クラス図で矢印を引いた時にモジュールがが矢印の先になる場合の矢印 - 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が少ない = 出力が少ない = 対象モジュールが使っているモジュールが少ない = 対象モジュールは変更しやすい

と考えるっぽい。なるほど。