2012年04月18日

品質について

この内容は2003年9月から弊社ホームページに記載していたものをコピーしたものです。

どうして品質の悪いソフトウェアが多いのか

「どうして品質の悪いソフトウェアが多いのか」を議論するためには「バグとは何か」について正確に理解する必要があります。ソフトウェアのバグに対する一般的な理解は次のとおりです。

コンピュータはプログラムで記述されたとおりに動作する。したがって、プログラマが不注意によるミスをしなければ、バグは出ない

日本のほとんどの企業は上記の理解に基づいて、「プログラマの作業工程の品質を向上させることによってソフトウェアの品質も向上させよう」と考えています。しかしながら、この理解は間違っています。

バグはどうやって作りこまれるのか

プログラミングにおいては、エラーに対する耐性、性能、使いやすさなど様々な観点から最適の手段を選ぶ必要があります。また、上位モジュールや下位モジュールとのインタフェースミスを防ぐためには、そのインタフェースを熟知している必要があります。これらのことから、ちょっとしたプログラムでもプログラマが考慮しなければならない情報の量は人間が扱える量を軽く超えていることがわかります。したがって、プログラマはプログラムのすべての情報を把握してプログラムすることができず、考慮漏れが発生し、それがバグとなります。つまり、不注意によるミスではなく、当然の結果としてバグが出ていると言えます。

では、品質が高いソフトウェアを作ることはできないのでしょうか?いえ、そんなことはありません。扱う情報の量が人間の限界を超えていても闘うすべはあります。身近な例が囲碁や将棋です。

ミスを減らすには?

囲碁や将棋は以下の二つの点でソフトウェア開発に似ています。

  • 囲碁や将棋は、マージャンなどと異なり、プレーヤーに対して隠された情報がなく、数学的にはどちらか一方の手番に必勝法が存在します。つまり、プレーヤーがミスをしなければ勝てるわけです。このことは「プログラマがミスをしなければバグは出ない」と言われるソフトウェアの性質と同じです。
  • 扱う情報量が膨大(たとえば、19路盤の囲碁で100手打つと、その場合の数は 10の250乗)で人間が扱える量を軽く超えています。実際に囲碁や将棋の必勝法を実行できる人間はいません。そして、勝敗を決する原因はたいていの場合、どちらかの考慮漏れによるミスにあります。これはソフトウェアのバグが考慮漏れから発生することに似ています。

では、囲碁や将棋の高段者はどうやってミスを減らしているのでしょうか?定石や手筋と呼ばれるパターン化された手順を適用することによって、考慮すべき情報の量を人間が扱える量まで減らしているのではないでしょうか。ソフトウェアでも同様にパターンを適用することによって考慮すべき情報の量を減らすことができます。

誰ならできるか?

考えてみてください。もし、囲碁の初心者が定石や手筋の本を見ながら碁を打ったら、高段者に勝てるでしょうか?答えは No です。それは、適切なパターンを適用するためには、パターンを知っているだけではだめで、そのときの状況に応じて適切なパターンを選ぶ能力が要求されるからです。逆にいうと、高段者は、問題の状況に応じてすばやく適切なパターンを抽出する能力を持っており、これを利用して情報を絞り込んでいるわけです。この能力を持っていることは、しばしば「センスが良い」と表現されます。

ソフトウェア開発においても同様です。最先端の技術や複雑なシステムの実装方式を熟知していても、それらを適材適所で適用するセンスがなければ品質の高いソフトウェアを作ることはできません。

つまり、品質が良いソフトウェアを開発するためにはセンスが良いプロのプログラマが必要であると言えます。

だから Procube

ここまでで、バグが出る理由は、プログラマが不注意ではなく、プログラマのセンスが悪く適切なデザインパターンが適用されていないことであることを述べました。つまり、プログラミングやソフトウェアの設計という作業は、誰にでもできるものではなく、専門の職人、つまりプロに任せる必要があるということです。そして、それが唯一のソフトウェアの品質確保の手段なのです。

しかし、日本のほとんどの企業は、「誰がやっても安定して高品質なソフトウェアを開発できる方法」を求めてやっきになっています。ソフトウェア開発業務でミスが発生すると、これを反省して次回からの回避策をマニュアルで標準化することにより、ソフトウェアの品質を向上させようとしています。

これは、囲碁や将棋において、必勝法の本を作ろうとしているのと同じであり、永遠に不可能な話なのです。そのような企業において、経験の浅いプログラマが標準化マニュアルに従ってプログラミングするのは、碁の初心者が定石の本を見ながら碁を打つのと同じです。どんなに分厚い定石の本を作ろうとも、初心者が打つ限り碁には勝てません(=ミスはなくなりません)。そして、このことが世の中に質の悪いプログラムを蔓延させている原因なのです。

Procube は、高品質なソフトウェアを提供できるセンスの良いプログラマの集団です。プロのプログラマがすばやく適切にデザインパターンを選択することにより、高品質なソフトウェアを提供します。


posted by プロキューブ at 11:30| Comment(0) | コンセプト