そもそも設計していない現象の典型例として、一筆書きとクローンがあります。

一筆書きとは、処理な流れをそのままひとつのモジュールにしたものです。例えば、ひとつの関数で「入力処理して、演算処理して、出力処理をする」といったものです。C言語は手続き型言語なので、このモジュールでもコンパイルして、動作するものができます。しかし、次の様な問題が発生します。

・時間が経つと自分でも分からなくなる
・現象を追いかけてデバッグして、時間が余計にかかる
・内部の局所的に追加していくと、巨大なモジュールになり、手がつけられない

一筆書きコードは、徐々に肥大化し、ソフトウェア疲労を起こしていくことになります。

クローンは、モジュール単位ではなく、モジュール内部のコード断片を切り貼りすることで発生します。同じようなコード断片が、複数個所に散らばることで、次のような問題が発生します。

・同じ修正を複数個所に施さなければならない
・修正漏れが発生してバグが出る
・やたらとコード量が増える

クローンが多いと、ムダな修正時間が増えて、開発のスピードが徐々に低下していきます。

これらは、いずれも、そもそも設計という行為をしていないことに起因しています。特に基本である「構造化設計」が行われていないため、コードレベルで手続き的にプログラミングしてしまっています。

構造化設計の基本は、関数の呼び出し構造でもクラスの依存構造も同じであり、次の3つにまとめることができます。

設計思考1:関心事を分離する・・・・モジュール化:高凝集
設計思考2:利用関係で線を引く・・・レベル化:知的階層化
設計思考3:全体バランスを取る・・・モスク化:均衡形状

この3つを意識して、関数構造やクラス構造を形成することが「設計」となります。

一筆書きで「入力処理して演算処理して出力処理する」というモジュールは、複数のことをひとつのモジュールで実施しているため、モジュール化ができていません。クローンも、コード断片が、モジュール内部に埋もれてしまうので、モジュール化ができていないことになります。

「入力する」「演算する」「出力する」という3つのモジュールに分けることが、モジュール化です。

そして、そのモジュールの呼び出し構造を、「入力する」→「演算する」→「出力する」というように並べただけでは、レベル化ができていません。上下関係を付けること、上位にボスモジュールを作って、3つのモジュールを呼び出す構造を作ること、これがレベル化です。そして、全体の形状が、左右が求心-遠心、上下が論理-物理、の構造を作ることで、モスク化になります。このような設計構造があれば、修正やデバッグの効率が抜群に上がります。

構造化モデリング、及び、オブジェクト指向モデリングの講座を受講していただくことで、設計の基本が身に付きます。