fc2ブログ

「全ファミ。」ブログ編

『F1レース』で基本的なバグ出しをしよう。

 レースゲームでバグを出す話に引き続き、『F1レース』を使ったバグ出しについて考えてみる。

 スタートボタンを押してゲームを始めた後、いよいよデバッグだ! と意気込んだあなたであるが、実は肝心なことを忘れている。「仕様書」の存在だ。仕様書を確認しないことには、何が正しい動作なのかわからないのだ。
 ただ、ここで注意したいことがある。「仕様書どおりに動いているかを確認する」のと、「自由な観点からバグを出す」のとは、実を言えばかなり違う。仕様書どおりに動いているかどうかは前提条件であり、かつまた仕様書の見方がわかれば、基本的には誰でも確認することができてしまう(たまにというか、かなりの頻度で読み取り能力の著しく低い人もいるけれども、それはまた別の機会に)。よって、仕様書はあくまでもバグを効率的に出すための参考資料と考えておこう。
 ちなみに、仕様書がなくても(ないままバグ出しをすることもよくある)バグ出しはできる。フリーズ、リセット、ハマり、メモリ破壊などなど、プレイヤーが回避できない致命的なバグを見つけていけばよいからだ。バグを出すのが仕事のデバッガーは、バグを出せば出すほど、重いバグを見つければ見つけるほど、”仕事ができる”という評価につながっていく。デバッガーたるもの、仕様書がない程度で迷ったり立ち止まったりしているわけにはいかないのだ。
 さて、『F1レース』のバグ出しを始めたあなたは、アクセルに割り当てられたAボタンを押して走りだす。そのままスピードアップしていき、トップスピードになったところでギアを替え……、とやろうとして、これは遊びではなくバグ出しの仕事であるということを思い出す。そもそも『F1レース』は、「Aボタン(=アクセル)を押すとスピードアップする」仕様なのだ。ゆえにあなたは、どんな状況でもAボタンを押せばスピードアップしているかどうかを調べることにした。
 そのアプローチは半分ほど正しい。「どんな状況でも仕様を満たしている」というのはバグ出しの基本であり、必ずチェックしなければならないからだ。ただ、「仕様書どおりに動いているかを確認する」段階のうちに、目端の利く人がそのポイントをチェックしてしまっている可能性もある。その場合、あなたのバグ出しは二度手間になってしまう(バグが再発していないかを調べるデグレチェックという試験もあるが、ここではおいておく)。だから、あなたはスピードアップにまつわるバグの核心、「Aボタンを押しているのにスピードアップしない」ことにいきなり迫る必要がある。しかも、ただ闇雲にやっているだけではバグは出てくれない。どうしたらAボタンを押しているのにスピードアップをしない状況になるのかを考え、その上で、バグが出やすい状況を自ら作り出していかなければならないのだ。
 Aボタンを押しているのにスピードアップしない原因として考えられるのは、「なぜかBボタン(=ブレーキ)が押された状態になっている」、「Aボタンが押されていないことになっている」、「Aボタンが押されていると判定されているのに、なぜかスピードアップの処理が動いていない」「ローギアで出せるMAXスピードに到達していると内部的に判定されてしまっている」といったことである。だから、それらのバグをあぶりだすように、あやしい状況状況をピンポイントで狙い撃ちしていけばよい。それらのバグが狙い通りに出せるようになれば、Aボタンを押していないのにスピードアップするバグでさえも見つけ出すことができることだろう。
 「Aボタンでスピードアップしない」なんて地味なことはやってらんない! もっとハデなバグを出したい! という目立ちがりな人もいるだろう(デバッガーには必要な資質である)。そんな人にオススメなのが、敵車との激突。『F1レース』は、敵車と接触すると爆発してしまうので、もちろんここは敵車と接触したのに爆発しない状況を狙う。しかし、単に爆発しないのではインパクトに欠ける。そういえば、ゴールと同時に爆発すると、爆発したF1がいきなり復活して、そのまま走っていったっけ……。よし、狙いどころはここだ! 
 目の付け所がシャープである。しかし、さらなるインパクトを狙うには、それだけではまだ足りない。実を言えば、車がゴールインする時、プログラム内部ではいろいろな処理を行っている。そこで、ゴールと同時に特殊な方法で自車を爆発させ、ゴールしたという判定そのものをさせないようにしてしまうのだ。ここで狙い通りのバグが出ると、自車が爆発したグラフィックのままで走り続け、なおかつ、いつまでもゴールしないことになる。このクラスのバグはファミマガでいうところの横綱技であり、デバッガーならばこういう大物を常に狙いたいものである。

---------
 ゲームのバグだしについて考える。エントリを読んだ人は「バグ出しは大変そう」と思うようだが、私自身はそんな風に思ったことは一度もないどころか、楽しくて楽しくてしょうがなかったりする。普通は決してできない(やってはいけない)ソフトウェアの破壊工作を存分に行うことができ、徹底的に壊せば壊すほど自分自身の評価が高まり、さらにバグをプログラマーに直させ、なおかつお金までもらうことができてしまうのだ。大変さなんて感じるヒマもないくらい、何をやっても面白い仕事なのである。
 私がゲーム制作会社でプランナーのヘルプをしていた頃、とあるゲームのプログラミングが行き詰まってしまったことがある。その時、とある天才プログラマーが行き詰まり打開のためにやってきた。いまや任天堂の社長となった岩田さんである。岩田さんはプログラムコードを一見して、たちどころに問題点とそのゲームの本質をつかみ、修正を開始した。いや、修正ではなくイチから作りなおしていたのかもしれないが、とにかく、行き詰っていたゲーム部分が、あっという間に完成へと近づいていったのだ。
 しかし、神がかり的なプログラミングをしていた岩田さんの前に、とあるデバッガーが立ちはだかった。岩田さんが組み上げたプログラムの穴を的確に突き、次々とバグを出しまくるのである。岩田さんがその穴を埋めても、さらに細かな穴をついてくる。
「岩田さん、またバグが出ちゃいました」
「あぁ~、まだ出ますかー。うーん、あそこかなぁ」
 岩田さんとデバッガーの楽しげなやりとりを聞くたび、何度、「デバッグしてぇぇぇ!」と思ったことだろうか。こんな風に毎日が楽しい、最高にゴキゲンな仕事なのだ。バグ出しってやつは。

---------
ゲームのバグを出す話

ゲームのバグだしについて考える。
レースゲームでバグを出す話
『F1レース』で基本的なバグ出しをしよう。
デバッガーに向く人、向かない人
じゃんけんマシンが史上最強すぎる件
バグ出しを暮らしに生かす話
ロマサガ2のひらめきに思うこと

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://zenfami.blog91.fc2.com/tb.php/210-b6df22a9
この記事にトラックバックする(FC2ブログユーザー)

デバッグ論

だいぶ前に見かけた、本職のデバッガーさんのブログが面白いです。デバッガーという仕事について、少し触れた気分になれます。 さてさて、メ...

  • 2010/01/27(水) 23:48:10 |
  • メイドインサトシ