ソフトウェア設計論
(3)

【詳細設計】納豆


── 良いプログラム構造とは

『納豆は、あの粘りがいい。
 わらづとから器に移す時に、もう糸をひいている。
 箸でよくかき混ぜる。さらに粘りが出る。
 刻んだねぎ、よく溶いた黄色いからし。しょうゆ
 の味、におい。
「納豆にあたたかき飯を運びけり」(村上鬼城)
   ・・・・・』

という「天声人語」の文章を読んで、つばきを飲み込みながら思った。良いソフトウェアとは、うまい納豆のようなものではないかと。

 良いソフトウェアとは何か、それを定義するのは難しい。良いソフトウェアとは、性能が良くて機能的にも利用者を満足させられる、保守性がよい、設計に拡張性がある、時期を得たリリースができる‥‥等色々あるが、取り敢えずここでは「実行性能の良いプログラム」にしぼって考察してみよう。性能を高めるにはもちろん良いアルゴリズムの採用と優れた内部設計が求められる。しかしこれは当たり前のことであって、更に細かく考察するとプログラムの性能は「プログラムの構造」に依存している場合が多いと言えるであろう。

 プログラムの構造は、性能のことだけを考えれば、各プログラムモジュールがどのようなデータに対しても(何時でも好きなときに)自由に直接アクセスできるようになっていればよい。しかし全く自由な構造にしてしまうと、不用意にデータを壊されたり、あるいは一部の設計変更が全体に影響するといった弊害が出てくる危険性がある。したがって、モジュール構造を整理して良い構造のプログラムを設計することが必要になってくる。

 プログラム設計法では、このモジュール設計の指針としてモジュール内の強度を高め、モジュール間の結合度を弱めることを教えている。それによって個々のモジュールの独立性を高め、一部のモジュールの変更が他のモジュールに影響を及ぼさないようにする。モジュールの強度を高めるには一つのモジュールは一つの固有の機能を持つようにするとよい。モジュール間の結合度を弱めるには、モジュール間でデータを受け渡す方法として、必ず呼出し時に引き数で渡すことにし共通領域を利用したりしないことである。しかし、このようにしてモジュール強度を高め、データ結合を弱めることによって教科書通りに作られたモジュールの集まりは、各モジュール間が太いパイプ(データを受け渡すための引き数の並び)で結ばれた構造になってしまって性能の良いプログラムになるとは到底思えない。

 性能の良いプログラム構造を実現するには、各プログラムモジュールがデータと密接な関係になければならないことは既に述べたとおりである。それにはどのモジュールも、データに何時でも(引き数等を介さずに)直接アクセスでき、しかもデータを公開の場(共通領域など)に置くのではなく、自分の内に抱えているようにしたい。つまりアクセス資格のないモジュールは決してアクセスできず、アクセスする必要のあるモジュールは常に身近にデータを抱えているような構造にしたいということである。

 このような構造のプログラムは、たとえて言えば糸をひくねばねばした納豆のようなものである。個々の納豆の豆がモジュール(手続きとデータをカプセル化したもの)であり、納豆の細い糸はモジュール間のデータ共有であり、モジュールの呼出しである。従来のモジュール構造では、納豆と納豆の間を細い糸ではなく太い1本の管(太いインタフェースのお化けのようなもの)で結ぶ構造になってしまっていた。これでは糸を引かない干涸びた、見るからにまずそうな納豆になってしまう。

 糸を引くうまい納豆構造のソフトウェアを実際に作るには、オブジェクト指向プログラミングにおける、カプセル化、情報隠蔽、クラスの継承などの手法を利用するとよい。たとえば、C++の継承にもとずくクラスの階層構造を利用したプログラムを見ていると、まさに納豆構造そのもののような気がしてくるのである。

 ところで、良いソフトウェアができる過程を見ていると成功の陰には色々な努力の積み重ねがある。その中でも特に「全員がプロジェクト室にこもる」という手法を取るケースがよくみられる。丁度納豆を器に入れて「ガァ〜ッ」とかき混ぜるようなものである。こうすると良いソフトウェア(糸を引いたうまい納豆)ができる。つまり良いソフトウェアを作るには、全員を器(プロジェクト室)に入れて箸(良いリーダ、良い指導者)でよくかき混ぜる(インタフェースをとる)。適度に糸をひいて粘りが出てきたら、頃合を見て薬味のねぎ、からし、そしてしょうゆを入れると味、においが良くなるという訳である。この味付けの時期を間違えないようにすることと、飯にかける(つまり利用者へリリースする)前によくかき混ぜることがうまくするコツである。

 飯にかける時期についても頃合がある。飯はあたたかく(利用者の受け入れ体制が整っている)なければならない。我々は、リリース前に(利用者に迷惑を掛けないよう)味見や毒味をする機会も与えられているのだから、うまい納豆(良いソフトウェア)ができなければおかしいのである。あたたかい飯と混ぜ合わせると(利用者ノウハウと一体になって)更に粘りが出てうまくなるという寸法である。
 ソフトウェア作りを念頭に置きながら、冒頭の「納豆の文」をもう一度読んでみるとよい。実に味わい深い文章ではないか。■

【追記】この拙文を読んでくださった天声人語氏(白井健策氏:当時)からいただいたコメントによれば、この納豆に関する記事が掲載されたのは1989年7月10日(7.10で“ナットウ”の日)の朝日新聞朝刊だそうである。これを書いたときには、関西の読者から「気分が悪い」、「朝食の時に読めない」などと苦情が来たとか。東西の味覚の違いですね、とのことであった。