機械を設計するのに、ボルトやナットまで設計することは稀です。それは形状、材質、強度などが一定水準の品質であることが規格化されているからです。このように工業製品では、標準化した部品を用いることにより、生産の合理化、品質保証を実現しています。
それと同様に、ソフトウェアでも、部品化をして再利用することが行われてきました。
- サブルーチン
- あるロジックを変更しようとしたとき、それを個々のプログラムで記述されているならば、それに関係しているすべてのプログラムを改訂しなければなりません。それを欠落なしに探すのは大変な作業になります。それにたいして、ロジックを個々のプログラムで独自に記述するのではなく、そのロジックを一つのサブルーチンにしておき、それだけを改訂すればよいようにしておけば間違いがなく簡単に改訂できます。
特に、技術計算の分野では「方程式の根を求める」というような高度のロジックをサブルーチンにすることにより、その解法を知らなくても利用できるので、サブルーチンは非常に普及しています(参照:「数値解析」)。
- 標準パターン
- 事務処理では、ソート、照合、集計など、似たような処理が多くあります。個々のシステムでそれらの処理を個別に作成するのではなく、汎用的に使えるプログラムを作成しておき、それを多くの箇所で利用すれば開発が容易になります。しかも、その部分は十分なチェックがなされているのであるから、改訂のときは独自に開発した部分だけを考えればよいことになります。
- 非手続き型言語
- 修正個所を発見するには、プログラムのステップ数が短いほうが容易です。COBOLのような手続き型言語に比べてSQLのような非手続き言語を用いれば、ステップ数は非常に少なくなります。非手続き型言語は、標準パターンを言語化して汎用性を高めたものだと解釈することもできます(参照:「プログラミング言語の発展」)。
- システム開発アプローチでの部品化
- DOA(データ中心アプローチ)では、データベースは多様なシステムで共通に利用できるという発想に基づいています。すなわち、データの部品化だといえます。
OOA(オブジェクト指向アプローチ)では、データだけでなくそのデータを処理するプログラム(メソッド)までも部品化しました。
さらにSOA(サービス指向アーキテクチャ)では、受注とか在庫確認など、業務として意味のある単位(サービス)を部品化たものです。
このように、システム開発アプローチが部品に含める機能の多様化、部品のユニット化を追求してきたのです。
部品化することにより、多くのメリットがあります。
- 開発において、白紙の状態から開発するよりも、部品を組み合わせて作るほうが労力がかからない。
- 個々の部品の品質が保証されているならば、それを組み合わせて作成した情報システムの品質が向上するし、品質確認する範囲を少なくすることができる。
- 標準化された部品を標準化さらた方法で組み合わせる方法を確立すれば、個人による差異が少なくなり、初心者でもある水準の品質の情報システムを作成できる。
- 部品を取り換えることにより保守・改訂ができる。
反面、適切な管理をしないで部品化を進めると、かえって混乱が生じます。
- 多様な部品が整理されずに作られると、どのような部品があるのかわからない。
- 部品の存在を知っていても、その機能制約やインタフェースがあいまいなので使えない。
- 部品に欠陥があっても、それに気づかない。情報システムに欠陥があっても、部品が原因であることを突き止めるのはかえって困難である。
- このような理由により、部品を使う人と使わない人が混在して、情報システム全体の標準化ができない。
そのため、部品化を推進するには、多様な対処が必要になります。
- 共通に利用する正式な部品として作成し登録する制度。プログラマが勝手に作成したのでは、汎用性がなく、信頼性が低い部品が氾濫します。専門のグループが統一した思想や基準のもとで開発するとか、一般のプログラマなどからの提案や申請があったときは、専門グループがチェックや手直しを行って登録するなどの制度にします。
- 部品ライブラリなどの整備。部品利用の推進、利用の利便性向上のために、登録されている部品の検索、使い方、使用上の注意などが、プログラマの作業中に簡単にわかるような仕組みが必要です。
- 部品の標準化。利用者にわかりやすくするためには、部品の命名基準の統一、インタフェースの統一などを行うことが重要です。
- 部品の体系化。部品の粒度が大きいと生産性向上に効果がありますが、使い方が複雑になるとか、改訂が必要になるなどの欠点があります。また、同一システムの中でばらばらな粒度のものが混在していると、統一性のないシステムになります。ところが、大きい粒度のものが必要な場合もあるし、小さいほうが必要な場合もあります。そのため、体系化したライブラリが必要です。
- 市販部品の活用。ある目的だけのための機能のプログラムと比較して、汎用化した部品としたプログラムを作成するのは数倍の労力がかかります。情報システムでの「作るから買うへ」「所有から利用へ」の動向と同様に、市販の部品を利用することを考えるべきです。
- 長期的な推進体制。自作にせよ購入にせよ、部品化の効果を得るには再利用率を高めること、長期にわたって再利用することが必要です。部品化・再利用に関する成熟度を高めるマネジメントが求められます。