ソフトウェアの部品化について

作成日:2001-04-13
最終更新日:

部品化の思い出

このあいだ、ある会議に出たところ、「プログラムのモジュール化」についての話題が出た。 話題の主はかつての私の上司であった。 私が手がけたプロジェクトの一つの目的に「プログラムの部品化」があり、 これが見事に失敗した。 その轍を踏まないようにということで、 元上司のグループでリーダーの人たちの間で モジュール化について意識合わせをしようとしている。

わたしの失敗もこのような形で報われるのなら以て瞑すべしであろう。 ただ、プログラムの部品化、モジュール化ということが未だに話題になっていることから、 問題の根は深い。

私は、失敗プロジェクトの前に、 予備調査プロジェクトを率いていた。そこでは、 モジュール組み立てによる新しい開発方法を研究開発していた。 この結果はひとことでいえば、 「モジュール組み合わせによる開発は確かに効率が上がるだろうが、 そのモジュールを作るためには相当の技量を要する」ということだった。 これでは、どうもうまくないと上層部は判断した。それは当然だったろう。 これを受けた失敗プロジェクトでは、 一部の GUI と取り替え可能なコマンドのみを部品の形で提供するに留まった。

一部の GUI とは、作り付けの GUI で足りない機能の部品化であり、 さらにいえば Motif(UNIX のウィンドウマネージャーの一種) のウィジェット(GUI)を作ることに相当した。 こちらは分析と設計が不十分であったため、 結局部品を環境に合わせてカスタマイズする羽目になり、 部品化の意義が十分ではなかった。

一方、取り替え可能なコマンドとは、 UNIX のコマンドレベルの部品化を目指したものであった。 こちらは、コマンドという入出力のはっきりしている対象を選んだため成功した。 また、この考えに近いものに、画像処理を行う専用のライブラリーを用い、 すべてをこのライブラリーを通して統一的に扱うことも行った。 こちらも成功した。

念のためいえば、GUIを指揮したのが私であり、 コマンドの成功した側を指揮したのは サブのベテラン氏であるので、これは対象の相違というよりは、 指揮の巧拙が大きかったのではないか。

部品の使い方

自分の失敗は棚に挙げて強引に話題を転換する。 部品を作る側はいくらうまく作っても、 部品を使う側がうまく使わなければ宝の持ち腐れとなってしまう。 よく引き合いに出される例が、C 言語での文字列の連結である。 文字配列へのポインタ *a, *b, *c, *d, *e があり、 これらをこの順に連接して文字配列 *x に納めるプログラムを作る。 なお、*xには十分な領域があるとする。 下手に書いた一例は次のようになる。


strcpy(x, a);
strcat(x, b);
strcat(x, c);
strcat(x, d);
strcat(x, e);

より直感的に、わかりやすく書くには次のようにすればよい。


sprintf(x, "%s%s%s%s%s", a, b, c, d, e);

sprintfも、strcatも立派な部品だ。しかし、使い方がわからなければ役に立たない。 部品化うんぬんを騒ぎモジュールを作ることを叫ぶより、 身近に使えるライブラリーを正確に使うことが最初のような気がする。 それができなければいきなり ERP という手になってしまうのではないか。

まりんきょ学問所品質の部屋 > ソフトウェアの部品化について


MARUYAMA Satosi