
システム開発はなぜ楽にならないか?
2008/7/15
あるプロジェクトマネージャから、次のような疑問を投げ掛けられました。
「Javaや開発ツールなどの技術は進歩しているのに、開発は少しも楽にならない。技術の進歩は、誰もが簡単にシステム開発ができるようにはしてくれないのか」
確かに、最近の技術の進歩は目覚しいものがあります(いつの世も技術進歩は目覚しいのかもしれませんが……)。しかしながら、確かに私たちシステム開発者が楽になったとは思えません。
■急速な技術進歩で高度化、複雑化するシステム
システム開発は、事務作業の効率化、省力化からスタートし、ビジネスの発展とともにシステム化される範囲が増え、システムは規模を拡大するとともに、機能の高度化、複雑化が進みました。
- - PR -
こうした傾向に最近拍車を掛けたのが、経済のグローバル化、インターネットの普及、それらを前提としたシステムへの要求かもしれません。
このようにシステムは高度化、複雑化の一歩をたどっているのに、システム開発はずっと厳しいままです。
■なぜシステム開発は楽にならないか
どうしてシステム開発は楽にならないのでしょうか?
それは、先述したシステムの高度化、複雑化が原因の1つだと考えられます。
システムを高度化、複雑化させると、さまざまな設計要素間の関係が複雑になり、考えなければならないことも増加します。それに従って設計要素間の調整は難しくなり、決めなければいけないことが幾何級数的に増えてしまうのです。これでは当然、システム開発は、なかなか楽になりません。
■設計方法論は浸透しない
構造化設計やオブジェクト指向設計などの開発方法論では、対象の問題領域がどのような要素で構成されているかを分析し、それを整理して、システムとしてどのように構成するかを設計します。この際、効果的に整理することで、シンプルな構造のシステムを作り上げることができます。
そのためには、構造化設計技法やデータ中心アプローチ、オブジェクト指向など、対象システムやプロジェクトに合った最適な開発手法を選択し、カスタマイズして適用することが必要だと考えられます。
しかし、このような開発方法は、実際のところ設計現場になかなか浸透していないのが実情です。これは、ソフトウェアの開発には多くの人員を必要とし、それらの設計方法を習得して浸透させるまでには時間がかかること、そうした設計方法を習得するよりも目の前の開発を、という状況などが理由として考えられます。
■コンポーネント化に基づくアーキテクチャ
とはいえ、システム開発で楽をしたいものです。そこで、シンプルな構造にできるようなアーキテクチャを適用できないかを考えます。アーキテクチャを考えてコンポーネント化を図るのです。それにより複雑さをコンポーネントの中に隠蔽(いんぺい)し、これらを利用する側からは簡単に利用できる仕組みを考えます。
しかし、各コンポーネントの独立性を高くし、コンポーネント内部を隠ぺいし、拡張性を持たせるような抽象化構造を実現できるような設計をすることは、これまでなかなかできないのが実情でした。
■シンプルなシステム構造を基にして簡単に作る
誰にでも簡単にシステムが開発できたら、こんなに良いことはありません。ただ、アーキテクチャの設計やコンポーネントの設計は難しく、誰にでもそれこそ簡単にできるものではありません。例えばハードウェアの例でも、部品を買ってきてパソコンを組み立てるのは簡単でも、部品であるCPUボードの設計は、電子工学の専門知識が必要となり難しいでしょう。
このように、アーキテクチャやコンポーネントを設計することは難しいものです。しかし、例えばアーキテクチャやコンポーネントを利用して、パソコンを作ることは、比較的簡単にできます。
このことをまとめると、次のようになります。
- シンプルなアーキテクチャとシンプルなインターフェイスを持ったコンポーネントによりシンプルな構造のシステムになる
- シンプルな構造のアーキテクチャやコンポーネントを利用することにより、簡単にシステムを構築することができる
- シンプルな構造のアーキテクチャやコンポーネントを設計することは難しい
■シンプルに設計するための設計方法論織
それでは、シンプルな構造のアーキテクチャやコンポーネント化を推進するためには、どのように設計すればよいのでしょうか。
オブジェクト指向分析設計を活用することにより、コンポーネントに基づいたアーキテクチャを適用してアプリケーションをシンプルに構築することができます。コンポーネントやアーキテクチャの設計については、これまでの連載でお話してきました。これらのことについて再度復習されたい方は、本連載の次の回を中心にお読みください。
今回参考になる本連載記事
| Page1 システム開発はなぜ楽にならないか |
|
| Page2 技術の進歩はシンプルに作るために |
保守性・拡張性に優れたシステムを作る バックナンバー 連載インデックスへ»
- 第1回 ソフトウェアにおける保守性と拡張性の定義
- 第2回 オブジェクト指向で実現できる保守性・拡張性
- 第3回 変更に耐えるシステム構造とモデルの関係(上)
- 第4回 変更に耐えるシステム構造とモデルの関係(下)
- 第5回 コンポーネント化でクラスをすっきり整理
- 第6回 使いやすくて、変化に強いコンポーネント
- 第7回 階層アーキテクチャの利点は、複雑さの減少
- 第8回 ドメイン層に最適なアーキテクチャを考える
- 第9回 「データの永続性」に配慮した設計
- 第10回 ドメイン層をシンプルに作るためのO-Rマッピング
- 第11回 キミの設計に「トレーサビリティ」はあるか
- 最終回 システム開発はなぜ楽にならないか?
ホワイトペーパー(TechTargetジャパン)
|
|

