そもそものこと、ゲームに限らず、業務ソフトだろうが、ロケットを制御するプログラムだろうが、プログラムをすればバグは必ず出る。
よほどコード数の少ないプログラムであれば別だが、ある程度以上の規模のものになると、もはや人智ではバグを防ぐことはできない。
デバッグ作業でも、バグを完全には取り除けないので、もはやバグは、使用者に見つけてもらうしかない、くらいに思っていないと、開発者は精神をやられると、経験として、私は思う。
ただ、使用者が見つけた(遭遇した)バグが致命的なものであれば、巨大な信用低下や金銭的損失が出るわけで、納品前、発売前に金と人数をかけて必死でディバッグをするのである。
バグというのは、大きく二つに分けられる。
<1>プレーヤー(使用者)が普通に正しい操作をしているにもかかわらず不具合が生じるような、『プログラムやデータの構造的な誤り』が原因であるもの
<2>プレーヤー(使用者)の予想外の様々な操作に対応できず(全てに対応できるわけはないので)、そのためプログラムの構造に問題はなく、正しく動作しているのだが、『外部的な要因で不具合が生じる』もの
後者の(2)としては、JAXAの天体観測衛星【ひとみ】(2016年2月打ち上げ)が、わかりやすい。
打ち上げ~軌道投入まで成功して、いったん正常に動作していた衛星に、『ありえない制御指示データを送った』ことで、世界中の研究者がその観測データに期待していた高価な衛星が、宇宙ゴミになってしまった事故である。
【ひとみ】に搭載されたコンピュータのプログラムは正常であった。
正常であったから『地上から指示された間違った指示値』に従い、『その通りに姿勢制御用エンジンの噴射をした』ら、衛星が大破してしまったのであった。
敢えて童話風に言うと、『エンジン噴射で、ちょっと姿勢を変えて、太陽電池パネルを太陽の方向に向けてね』と指示するつもりが、『フィギアスケーターみたいに高速回転してね』という指示(誤った数値で指示)をしたので、スピンがかかりすぎて太陽光パネルなどが吹き飛び、衛星が壊れたのであった。
プログラムの構造だったり、データの不備だったり、原因は様々あるが、必ずバグは出る。
いくらデバッグをしても、バグは発見されず、残る。
だから、人工衛星の制御プログラムであっても、バージョンアップされ、その都度通信で更新されているだろうし、Windowsのバグなどの大部分は『こっそり』とアップデートで修正されている(はず)。
デバッグしても発見されないバグは、『こういう条件とこういう条件とこういう条件が揃ったときだけ出る』のであって、だから発見しにくい。
よって、デバッガーは、『普通ならしない色々なおかしな操作』をすることが仕事なのである。
|