今日も知らない街を歩く

雑記に近い形でちまちま書いていきます。

あなたのシステムからバグを取り除けない理由

昨日からUbuntuを学習しています。インストールを終えて、いじりつつ参考になりそうなサイトを探して読んでいます。そんな中、初心者向けにUbuntuを開設しているサイト「行っとけ! Ubuntu道場! ― 第1回」で、「バグ#1」という話が出てきました。
ASCII.jp:~師範! Ubuntuインストールしようと思います!~ (1/5)|行っとけ! Ubuntu道場!

出典元はこちら。
Bug #1 in Ubuntu: “Microsoft has a majority market share"

これを読んで、バグについて思った事を書きます。

ほとんどの人が認識できないバグ#1

バグ#1の再現方法は、

1. Visit a local PC store.

近所のPCショップに出かける。たったこれだけです。すると、どんなバグが発生するのか。

2. Observe that a majority of PCs for sale have non-free software pre-installed.
3. Observe very few PCs with Ubuntu and free software pre-installed.

 MicrosoftなどのフリーでないOSがプリインストールされたPCばっかりで、UbuntuなどのフリーなOSがプリインストールされているPCはほとんど見かけない。
 皆さんはここにあるバグが何か、おわかりでしょうか。バグ#1のレポートはこう続けます。

What should happen:
1. A majority of the PCs for sale should include only free software like Ubuntu.
2. Ubuntu should be marketed in a way such that its amazing features and benefits would be apparent and known by all.
3. The system shall become more and more user friendly as time passes.

売り場に並んでいるのはフリーなOSがプリインストールされているPCがメインであるべき、またUbuntuはもっと注目されるべき、そしてシステムというものはユーザーフレンドリーになっていくべきだ、と書きます。
これはジョークの要素も含んでいますが、バグの本質をついています。バグというものは「こうあるべきなのにそうではない」ということを表しているからです。

深刻なバグであるほど発見は難しい

 以下に二つガジェットを用意しました。どらちも「実行ボタンを押すと、今日僕が食べた夕飯をポップアップで表示する」というプログラムです。ちょっと試していただければ幸いです*1


試していただけたでしょうか?それではこの二つのプログラム、バグがないプログラムはどちらでしょうか。


正解は「どっちもバグがある」です。

コンピューターはバグを教えてくれない

 1つ目はすぐにバグだとわかるでしょう。ボタンを押してもなにも反応がありません。原因は、javascriptをちょっとでもかじったことがある方ならわかると思いますが、ポップアップを出す命令「alert」のスペルミスです。alartになってます。これをalertに直してやれば、ポップアップが表示されます。
 さて、2つ目です。ポップアップは正しく表示されたと思います。*2しかし、これもバグです。
 なぜなら、今日の僕の夕飯は鳥うどんだからです。天ぷらそばではありません*3。このプログラムの仕様は「今日僕が食べた夕飯をポップアップで表示する」なので、仕様を満たしていないことになります。

バグを直すために必要なのは「どうあるべきか」という価値判断の統一

 「お前の夕飯なんて知らねえよそんなの!!」
 ごもっとも。ですが、僕の夕飯が何だったか知らなかった、それこそが問題なのです。何をやろうとしているかを「正確に」把握していないと、2つ目のプログラムをうっかり正しいと思ってしまいます。ましてや、1つ目の事例を見た後だと、なおさらそう思うのではないでしょうか。明らかにおかしな画面が出たら誰もがバグだと思いますが、怖いのは、一見するとそうだとはわからないバグです。誰かが気付かない限りバグは発見されず、後々になって大きな問題を引き起こします。例えば財務計算などで、エラーで何も処理できなくなるのは問題になるでしょう。しかし、もっと大変な問題になるのは、一見処理が正常に終わったと思ったら、後になって金額や勘定のつじつまが合っていないことが判明する場合です。
 バグというとコンピュータープログラムの問題とみなされがちですが、本質は開発者と利用者の認識が一致していないことにあります。最近のみずほ銀行のシステム障害についても同じことが言えます。バッチ処理が予定通り終わらなかった、と聞くとコンピューターのトラブルと考えてしまいますが、根っこにあるのは「東京都内の特定支店の特定口座への振り込みが想定以上の件数に上った」こと、つまり開発者(システム側の振込想定件数)と利用者の認識(実際に振り込まれた件数)が一致していなかったことがそもそもの発端です*4


 ある事について「どうあるべきか」という意見を統一するのは簡単なことではないでしょう。ましてや複雑なビジネスの世界ともなればなおさらです。したがって、どんなにコンピューター技術が発達してもバグは完全には無くならないし*5、今後もシステム障害が起こったというニュースは報道されるでしょう。
 しかし、それは決して不幸なことではないのかな、とも思います。前述のバグ#1のように、高度なバグはあるべき姿の再定義を行い、より良いと思われる在り方に変えられるチャンスを内包していると思うからです*6

それでは、また。

執筆時間:1時間44分11秒(javascriptに手間取りました……。)

*1:知らなかったのですが、はてなダイアリーってJavascript使えないんですね。クロスサイトスクリプティング対策のようですが、私見ではこれからjavascriptは利用するユーザーは増えてくると思うので、もったいないなあと思います。

*2:テストはしたつもりですが、もし出ないブラウザがあったらごめんなさい。ここは直します。

*3:ちなみにエビが嫌いなので、天ぷらそばを食べることは無いと思います。

*4:逆に言えば、認識さえ合えばバグがバグでなくなることもありえます。スペースインベーダーの名古屋打ちは、開発者は意図していなかったもののプレイヤーは裏ワザだと思い、結果「裏ワザだよね」と意見が一致し、バグでは無くなりました。

*5:そして瑕疵担保などの条件も含んだ形で、開発者と利用者の間で「仕様だ」「バクだ」という論争が始まってしまうのです。

*6:あ、一応システムエンジニアのはしくれなんで、僕自身はバグなんて大嫌いだし、バグの作り込み防止や発見・除去は一所懸命にやりますよ。念のため。