fc2ブログ

バグはなぜ発生するのか? Game Programmer's (web)Log

バグはなぜ発生するのか?のページです。

バグはなぜ発生するのか?

ゲームに限らず、プログラムにはバグが大敵です。

なぜバグは発生するのか?その理由は一つしかありません。

「プログラムを書くからバグは発生するのです。」

あまりに大事なことなので文字を大きくしてしまいました。
「ふざけるな!」と言われそうですが、これ以外に理由はありません。
プログラマの技術レベルが低いとか、ゲームの仕様が複雑すぎるとか、
そういった理由は枝葉末節にすぎません。

いつも何かに例えるのが私の癖なので、今回も例えを出しますと、
「家から出なければ、交通事故に遭うことはないんです。」
「料理をしなければ、失敗することはないんです。」

「犬も歩けば棒に当たる」ではありませんが、プログラムを書く、
ということと、バグが発生するという2つの事柄は、
表裏一体と言うより、ほとんど同義であると言っても
過言ではないかと思います。

プログラムを書いているのは、残念ながら現在のところ必ず人間です。
人間ですから、見落とし、勘違い、思い込みなど、さまざまなミスを犯します。
人間が書いたプログラムを実行するのはコンピュータです。
同じ人間同士であっても意思の疎通は難しいくらいですから、
コンピュータの動作を完全に把握できる人間というのは存在しません。

もし、「私はバグを出したことがありません」という人がいたなら、
その人はプログラムを書いたことがないか、あるいはそもそも
人間でないか
のどちらかしかありえません。
ジョセフ・ジョースターの言葉を借りるならば、それは、
「コーラを飲んだらゲップが出るっていうくらい確実」なことなんです。

となれば、バグを出さない方法についてはすでにお分かりのとおり、
「プログラムを書かなければバグは発生しない」
ということになります。

それこそ「ふざけるな!」と言われそうですが、事実、私たちは
ゲームが完成直前を迎えたとき、バグを発生させないために、
なるべく「プログラムを書かない」ということを優先させようとします。

実のところ、世に出たゲームで、ユーザーの方に発見されたバグのうち、
8割程度のバグに関しては、発売前にすでに開発者側で発見されている
と言っても過言ではないと思います。
そこにバグが存在する、ということは分かっていても、
それ以上のバグを発生させないために、「プログラムを書かない」
という選択肢を優先することはさほど珍しいことではないのです。

「そのためのバグチェックだろう」という声もあるかと思います。
ただ、「間違いである」ということを証明するのと、
「間違いはない」ということを証明するのとで、
はるかに意味合いが違うというのは、数学に詳しい人であれば
誰しもが知っていることです。
(フェルマーの最終定理がよい例ではないかと思います)

「バグがある」というのを証明するには、一つの具体例、
やり方を提示すればそれで終了です。
「バグがない」というのを証明する方法はありません。
RPGで言えば、すべての武器、防具、アイテム、ステータスで
バグがないか試してみる、というのは不可能です。

バグがある可能性がゼロであることを証明することはできないので、
限りなくゼロに近いことを証明するために、時間をかけて、
たっぷりとバグチェックをおこないます。

さて、プログラマが「プログラムを書かない」ことを優先する理由について、
先ほど料理に例えたので、この例を引き続き使ってみます。
料理としてはほぼ完成、だけど、ちょっとだけ塩味が足りない、
と感じたとしましょう。
そのとき考える選択肢としては…

・素直に塩を足そう。
・しょうゆを足した方がおいしいかもしれない。
・塩味で言えば昆布を入れたほうがおいしくなるかも…

と、そして、

・今のままでも悪くはないのでこのまま食べよう。

というのがあげられると思います。

ここでプログラマにとって一番大事なことは、残されている期間と、
修正することによるメリット、それに伴うリスクを見誤らないということです。

先ほどの料理の例で言っても、リスクは非常に伴います。

・そもそも本当に塩味が足りないのか?
このレベルからの検討がまずは必要です。
塩味が足りないと思っていたのがそもそも勘違いで、
本当はだしをとり忘れていたのかもしれません。
その場合、塩を足すことは解決策にはなりません。

・塩を入れるとして、いつ、どれだけ入れるのか?
どのくらいの量を入れたら、どれだけ味が変わるのか、
そういったことをきちんと検証、理解しないうちに、
塩味を足してしまったら、入れすぎて取り返しのつかないことに、
なんてこともありえます。

・今入れようとしているその白い粒は本当に塩か?
ない話ではありません。早くしなければ焦げてしまう、
焦るあまりに間違えて砂糖を入れてしまった、
なんていう可能性はゼロではありません。

・結局のところ、塩を加えてどのくらいおいしくなるのか?
現状でも別においしくないことはない、というのであれば、
失敗のリスクを冒してまで味を変える必要があるのでしょうか?
今の味が90点として、それが100点になる?
それとも91点にしかならないかもしれません。
その1点は本当に必要な1点でしょうか?

自分で食べる料理ならともかく、大切なお客様、好きな異性に
お出しする料理だったら、その失敗によって作り直し、
(つまり「発売延期」)という方が大きな痛手になるでしょう。

今回の「ドラゴンクエストIX」の件で言えば、
完璧な料理を出さなければならないというプレッシャーのあまり、
膨大な品数と、誰も見たことにないような料理ばかりを、
いろいろな調味料を加えながら作り続けてしまったという感じでしょうか。

話としては遠回りしましたが、ゲームの完成直前というのは、
この「リスク」の部分が大変に大きくなります。
数万人、ものによっては数百万人の人が遊ぶかもしれない商品、
しかも、一度世に出てしまえば修正のチャンスはありません。
(最近はインターネットによるアップデートもありますが)
仮に致命的な不具合が出てしまえば、回収騒ぎで大損害、
という可能性も十分に考えられます。
その場合もやはり数億円規模の損害額が発生するでしょう。

それでも、まだ、塩を足そうというのでしょうか?
スポンサーサイト



2009年02月18日 Game Development トラックバック(0) コメント(5)

ふざけるな!
コーラを飲んだもゲップをしない私は何なんだ!

2009年02月23日 URL 編集

◆匿名さん
コメントありがとうございます。
申し訳ございません!
荒木飛呂彦先生の金言ですので平にご容赦を!

2009年02月24日 ykyky URL 編集

このコメントは管理者の承認待ちです

2017年08月06日 編集

このコメントは管理者の承認待ちです

2018年03月13日 編集

このコメントは管理者の承認待ちです

2018年03月21日 編集












管理者にだけ公開する