変更に強いシステムとは?
「変更に強いシステム」とは、「変更が発生した際、その影響範囲を極少化することができ、容易にシステムを変更することができる」、つまり変更に強い構造をしているシステムのことです。
ものづくりにおいては、「一つひとつのモジュール(システムの構成要素)が独立し、他のモジュールとの接続が疎結合(相互に影響を受けない)構成であること」と考えています。
変更に弱い構造
では、逆に、変更に弱い構造とは、どのようなシステムでしょうか。簡単な機能でものづくりの方法を見ていきたいと思います。
例えば、
- AについてBする
- XについてBする
という二つの機能を開発することで見ていきます。
もし、
- AについてBする
- XについてBする
という二つの機能を
- 〔AについてBする〕
- 〔XについてBする〕
というように一つの機能を一つの塊として開発した場合をイメージしてください。
さらにそこに、
- AについてNする
- XについてNする
という機能を追加する変更が発生したと想定してください。
さきほどと同じように
- 〔AについてNする〕
- 〔XについてNする〕
というように、更に2つの機能を追加することになり、
結果、
- 〔AについてBする〕
- 〔NについてBする〕
- 〔AについてNする〕
- 〔XについてNする〕
というシステムができあがります。
これだけを聞くと、これでいいじゃないの?と思われるかもしれませんね。でも、これは、実は変更に弱いシステムなのです。
変更に強い構造
次に、変更に強い構造について、同じ例を用いて見ていきましょう。
- AについてBする
- XについてBする
という二つの機能をつくる場合、
変更に強い構造とは、
「一つひとつのモジュール(システムの構成要素)が独立し、他のモジュールとの接続が疎結合(相互に影響を受けない)構成であること」
ですから、
- 〔AについてBする〕
- 〔XについてBする〕
とはせずに、
- 〔Aについて〕 - 〔Bする〕
- 〔Xについて〕 -
というように、ひとつのモジュールとして独立させて、かつそれぞれが互いに影響を受けにくいようにします。
このことによって、「AについてNする」「XについてNする」機能を追加する場合には、
- 〔Aについて〕 - 〔Bする〕
- 〔Xについて〕 - 〔Nする〕
というように、〔Nする〕という機能だけをつくり、すでにある機能と関連付けるだけでできてしまいます。
変更に弱い構造と比べていただくと一目瞭然ですが、ソフトウェアの量は、1/4で済みます。1/4で済むということは、単純に言うと、1/4の工数(つまり1/4の時間)でつくることができるというようにイメージしてもらえればいいと思います。
変更に弱い構造のシステムを構築してしまうと、以後、変更するたびに、より多くの箇所をより多くの時間をかけて対応しなければならなくなります。当然、ミスも増え、原因がわからないトラブルが発生する原因にもなっているのです。
※ 〔 〕はひとつのモジュール(機能)
※変更に強い構造のシステムは、変更の弱い構造のシステムに比べて、モジュールが独立し、他のモジュールとの接続が疎結合であるため、影響箇所を極少化することができます。
従って、変更に強い構造であれば、変更に弱い構造のシステムに比べて、早く、容易に変更を行うことができます。