「良いソフトウェア」とは
良いソフトウェア、良いシステムとは、どのようなものを指すのでしょうか。
必要機能が充足されている、
品質が高い(不具合が少ない)、
動作性能(速度、メモリー使用量ほか)が優れている、
使い勝手が良い、…などが思い当たります。
これらをできるだけ低コストで実現できれば最高です。
但し、ここまではあくまでも初期構築の部分での話しです。
見過ごされがちなのは、ソフトウェアの長期に渡るランニング費用です。
現在の社会において、システムが前提としている業務や環境が「変わらない」ということはあり得ません。
必ず時の経過とともに「仕様の変更」が必要になります。
ソフトウェアがソフトウェアであるのは、ずばりこの「変化への対応」が必要であるからにほかなりません。
(もし変化が必要ないのなら機能をハードウェア化したいわゆる専用機にしてしまってもよいのです。)
ソフトウェアとして長期に渡りいかに「変化」に対応できるか。そしてそれに要するコストはどのくらいか。
ここが「良いソフトウェア」かどうかを見極める重要なポイントとなります。
しかしユーザー様の立場では、
実際のところは、今出来上がったソフトウェアが
将来どの程度の変化に耐えられるのか判らないというのが現状だと思います。
実際に長期に渡ってシステムを使い込み、仕様変更を重ね、
最終的に高くついたのか、安く抑えられたのかの評価ができるのは、
そのシステムを捨てるときであるということになります。
このように多くのユーザー様が最初は何となく使い初めて、使うにつれて高額な保守費用に悩まされ、
本来のビジネスの足を引っ張る結果になってしまうのは、是非とも避けるべき事態です。
「変化」に応えられるように作る。それが優れた技術者
では作る側から見るとどうでしょうか。
優れたソフトウェア技術者であるならば、出来上がったソフトウェアが、
どの程度の「変化」に応えられるのか、評価できるはず、いや評価できなければならない、というのが当社の持論です。
逆に言うと初めから(言われなくとも)「変化」に応えられるように作らなければならないということです。
でもこれは決して容易なことではありません。
初期構築の際にお客様の要件をつぶさにお聞きし、
それを正確に一所懸命そのままシステム化しても、これは実現できません。
何が必要なのでしょうか。
「本質」、「具現化」、「実装技術」
3つのキーポイントが必要と考えています。
まず1つ目の鍵となるのは、お客様の要件の中に潜在的に含まれている「本質」を見出しているかどうかという点です。
システムの要件を捉える際に、本質的に変化しない普遍的な部分、お客様の今置かれている環境に依存していてお客様ごとに異なる部分、
そして今後状況に応じて多様に変化していく可能性のある部分、というように構造化して捉えることができるかどうか。
もちろんお客様自身はそのような捕え方をする必要はありません。
これはプロである技術者が分析して見出す、あるいは感じ取る部分です。
どのように複雑な課題でも木にたとえれば必ず「根」「幹」「枝」「葉」という階層構造が潜んでいるのです。
そして2つ目は、そのように捕らえた構造をシステムの構造
(オブジェクト指向でいうところのクラス構造)に具現化できるかというシステム設計力の問題。
そして3つ目は、その構造を実際に実装する際にメンテナンス性をも考慮した
実装技術(実装設計力)を持っているか、ということになります。
このような視点でシステム構築を実施すれば、そうでない場合に比べて格段に変化に対応可能で
メンテナンスコストの低い優れたシステムを実現できるはずです。
「くさび(Wedge)」を打つ役割を果たしていきたい
実際にシステムを構築する際に、
上記のような問題意識と方向性を持って取り組んでいるソフトウェア企業はどの程度あるのでしょうか。
出来上がったシステムやそのドキュメントを見ても、
実際のものがどのように作られたのかは(作った者以外は)知ることはできません。
重要な点は、システムを作る前、作っている最中に、
どのような意識を持って作られているのかを人と人とのコミュニケーションの中で確認していくことだと考えます。
それによって本当に「良いソフトウェア」を作れる人か、作れる会社か、
をお客様が評価していくことにより日本のソフトウェア業界のレベルアップが図れるのではないかと思います。
当社は、このような業界に「くさび(Wedge)」を打つ役割を果たしていきたいと願っています。