「システム設計」の対象
ここでいう「システム設計」の対象は、下記などを含む
- コンピュータに関係するシステム設計
- 人事制度や報酬制度など組織運営設計
- あるいはもっとシンプルに、与えられたデータをどうアウトプットするか(グラフを作るとか)などの作業プロセス設計
要は「複数のタスクが(おそらく複数の人間によって)行われるもの」である。
正常系と異常系
- どんな設計でも、「要するにこう動くはず」という「イメージ」がある
- この理想的な「イメージ」を表現したものを「正常系」と呼ぼう
- どんな設計でも、正常系から外れる対応が必要となる
- この対応を、「異常系」あるいは「例外処理」と呼ぼう
よい設計とはなにか
- よい設計とは、異常系(例外処理)が少なくなるように、正常系を設計したものである
- 一般に、異常系(例外処理)は時間とともに増加する。なぜならば、
- すべての状況を想定した設計は不可能である
- 状況は時間とともに変化する
- したがって、完璧な設計はなく、「設計のよさ」が大事である
- 時間経過とともに異常系の発生が少なくあってほしい
実際の観察
実際に、運用されているシステムを観察すると、
- 例外処理が多すぎるがゆえに、なにが正常系かわかりにくいことが多い
- 多くの場合は、運用している側も、なにが正常系かわからなくなっている
そこで実用上は、
- 動いているシステムを理解する際には、正常系を早く捉えられるとラクである
- 動かすシステムの構築にあたって、正常系のうまい設計は極めて重要である(あとあとラクである)
たとえばコンピュータに関わるシステム設計の場合、
- 全体の80%はテスト(バグ取り)である
- のこりの20%のうちの80%(全体の16%)は、例外処理の作成である
- 正常系のコーディングは全体の4%にすぎない
- うまく設計すれば
- 全体の75%をバグ取りに、例外処理の作成を19%に、正常系の作成を6%に高められるかもしれない(通常の1.5倍である!)
- そもそも全体の時間を削減できるかもしれない
うまく設計をするためには
うまい設計のコツは、
- 正常系の検討にじゅうぶんに時間をかけること
- うまくモジュール分割すること
- はやく一周まわすこと
であるとおもわれるが、ここで詳細は検討しない(ひとつひとつ検討することがたくさんある)。
- ひとつめの時間配分『人月の神話』ですでに議論されているし、様々な手法がある(とおもう)
- モジュール分割は、これまた様々な手法がある(プログラミングなら関数化、オブジェクト指向など)
- みっつめは、要はアジャイル
実際に使うにあたっては
不慣れなシステムに参加する場合、
- 正常系を早く理解すること
- 「もとにもどる」方法を早く見つけること
が、実戦上は有効だとおもう。