保険をこれまで乗っていたバイクから移し替えなければなりません。車検証をバイク屋から保険屋さんにファックスしてもらうだけでできてしまうと聞きました。慣れている人には対したことのないことかもしれませんが、購入した保険をどう使いこなすのかのノウハウがなかなかわかりません。

保険証書など印刷されているものは存在しますが、保険というものは手に取って触れること見ることができません。家を買う場合にはものすごく考えて購入するのに、高い生命保険を義理人情で購入してしまうことがあるようですが、見えないという特性がそういったことに寄与しているのかもしれません。

ところで目に見えず、手に取って触れないものとして、ソフトウェアというものもその中に入るわけですが、保険と同じようにそれをきちんと理解するのが難しいです。例えばソフトウェアの品質というものをどうやって見るのかという問題があります。もちろん品質特性を評価する 方法はあります。それを使えばある1つのソフトウェアの品質を確認することは容易です。しかしながら、そのソフトウェアが別のソフトウェアと比較して品質が良いと言えるのか?、を確認しようとするととたんに難しくなります。

例えば、評価結果の値として1Kラインの開発における不具合の発生率を考慮して、AというソフトウェアはBというソフトウェアより品質が良いといったことは言えます。しかしそこでは2つのソフトウェアの複雑性などを考慮していません。同じだけコストを掛けたとすると、Aというソフトは1Kラインで1つのバグの発生でも品質が悪く、Bといソフトは1Kラインで2つのバグが発生しても高い品質をよく実現したといった指標を示すことが難しのです。

例えば、"Hello World"を表示するプログラムとWikiを実現するプログラムを比較した場合に、そのソフトウェアの規模は簡単に分かるのですが、ソフトウェアの複雑性の違いを定量的に把握するとこが難しいのです。

入力と出力が規定され、かつ例外事項が少ない仕様を実現するソフトウェアと、入力と出力の自由度が高く事実上メモリが許す限り無限の可能性があり、かつ例外事項が数えきれない仕様を実現するソフトウェアがあったとします。この2つのソフトウェアが同規模で実現されていたとしても、ソフトウェアの複雑さという点では2つのソフトウェアには通常かなりの違いがあると考えられます。従って、これらのソフトウェアの開発過程で発生するバグの数は異なって当然なのですが、これを具体的なソフトウェア開発においてロジカルにかつ簡単に定量的に表現する良い方法があるのでしょうか?と考えている今日この頃...