2015年7月19日日曜日

[システム開発]2つの視点

 システム開発には大きく分けて2つの視点がある。
 (1) 「今、必要な最小限のものだけを作る」
 (2) 将来拡張や長期に渡るメンテナンスを考慮した構成とする。
 現在のシステム開発の常識は上記(1)となっている。将来拡張等を見据えた複雑怪奇な構造を取っても、将来起きることを完全に予測することはできず、複雑な構造の作成にかけた工数がムダになるからである。
 しかし実際にはチーム開発している全てのソフトウェアは上記(2)の構成を取っている。上記(1)だと他システムとの連携を考慮しない構成やメンテナンスに不向きな構成が必ず出てくるからだ。上記(1)はプログラマに信頼を置きすぎている理想論であるために、このような事態となる。優れたプログラマだけが集まってシステムを作れば、大体同じようなプログラム構造となるし、ある程度メンテナンス性も考慮されているものだ。しかし現実には、他人が作るプログラムなどお構いなしの自由なコード体系ができあがってしまう。チーム開発に上記(1)の視点は危険なのである。人間が2人いれば法律が必要で、人間が3人になれば派閥が必ずできる、ということと同じである。自由に作られた相互に連携しないプログラムはバベルの塔よろしく、相互のコミュニケーションが成立しないために大きな争いと混乱を招くだけなのである。いくら政治経済に疎くても、プログラムを作るのが人間であることを忘れてはいけない。
 しかし上記(2)も前述したように、せっかく工数を使って整備した構成がムダになることが多い。ではどうすればどのようなシステム開発にも対応できる、メンテナンス性の高い構成を作ることができるのだろうか。その答えは「抽象化」にある。
 オブジェクト指向言語が初めて世に出た時から、抽象化という言葉もまた広くプログラミングの原則として認知されるようになった。Java言語でいえば「abstract」が付くクラスやメソッドである。抽象化は汎用化、共通化という言葉に置き換えることもできる。多くの事象に共通することを明示的な構造にするため、抽象化が行われる。犬でも猫でも人間でも呼吸をする。だから犬クラス、猫クラス、人間クラスは動物クラスというスーパークラスに抽象化され、「呼吸する」という抽象メソッドを持つ、といったことがオブジェクト指向の解説本に書かれるわけだ。一見こじつけとも取れる乱暴な意見に見えるが、実はこの分析手法は科学の基本原則に則った正しい手法である。そもそも科学の「科」とは「分ける」「分類する」という意味を持つ。自然界に存在するありとあらゆる事象のうち、共通的なものを分類していきましょう、というのが科学の基本である。イヌ科の動物、ネコ科の動物というように分類することそのものが「科学」である。そのような「分類」なくして物理法則は導き出されないし、化学反応も自在に制御できるようにはならないのである。「分類する」ことはとても重要なことである。そもそもJava言語などにある「class」は「分類する」という意味だ。
 ただしどのソフトウェア開発プロジェクトでも抽象化、汎用化、共通化は多かれ少なかれ必ず行っている。どのようなシステムにも、どのような変化にも耐えられる共通的なシステム構成を作るためには、より一歩踏み込んだ共通化が必要となる。メタデータの考え方について、別項として解説する。

0 件のコメント:

コメントを投稿