これは、単純なプログラムミスだとか、あらかじめわかりきっていたテストが不足しているとか、品質定義がないとか、
そんな話ではなく、現在のソフトウェアがもつ背景的原因から、ソフトウェアのバグがどうしてなくせないのかを考える。
さて、ちょっと話は突拍子もないところに飛んでしまうが、
ある人はコンピュータに「こびと」がすんでいる。という。
しかし、私がまだBASICという言語しか知らない当時、コンピュータに小人がいると聞いたことがないし、まして、社会にでてCOBOLをやっていても聞いたことがない。
でも、いつからか、それがあってもいいとおもえるようになった。
しかし、人間に都合が悪いときだけ現れる「こびと」が非常に大きな原因をしめていると言っても納得できる人もいるはずである。
しかしながら、これをなかなか他の人に説明はできない。
そもそも、「こびと」のせいにしても、それは下手な「いいわけ」にしか聞こえない。
でも、そもそも「こびと」とはなんなのだろうか?
「こびと」の正体は何なのだろうか?
「プログラマが指示をしていないことを勝手に判断する。」
んー、困る。
こんなことをするなんて、きっと、そのプログラムのバグに違いない。
と考えるのが、私が今までやってきたCOBOLなどの言語でカバーするシステムである。
まさしく、「計算機」としての役割だ。
計算機はすべてのINとOUTが透過的でなければならない。
きちんと、右と左で金額が必ずあっていなければならないようにだ。
現在のシステムが「計算機」としてしっくりくるなら、バグ0を目指すべきで、そのようなシステムを目指すべきだが、
「インテリジェント」「自立型」「変化に強い」みたいな用語があるようなシステムでは、残念ながらそうはなりそうにない。
このようなシステムは「オブジェクト指向」であり、プログラムが「自立的」なのだ。
つまり、IN/OUTが想定内であれば問題ないが、INが想定外だと「自立的」にそして、「インテリジェント」に反応しようとする。
ようは局所的に最善解をあらかじめ決めたルールで実行する。
このような部分解の集合が全体解として最善でないので「バグ」なのである。
現在のソフトウェアは「生物」の仕組みをまねることで、「インテリジェンス・自立型・変化に強い」を実現しようとしている部分がある。
だから、バグがなくならないのである。
つまり、
「インテリジェンス・自立型・変化に強い」 = 「間違い(バグ)」
なのである。
つまり、「バグ」をなくすためには、事前に決められた動きしかできない「仕様」をつくるしかないのだ。
残念ながら、事前にすべての動きの「ケース」を決めるのも経済的にも「不毛」である。
結果、「インテリジェンス・自立型・変化に強い」が求められる。
では、間違った「反応(バグ)」にはどうやって対応していけばいいのだろうか?


