開発者は本当にバグをどのように扱うか

誰もがバグを知っています。面白いものと愚かなものがあります。迷惑なものと実際にダメージを与えるものがあります。しかし、彼らは自分自身を顕現しますが、バグはゲームのメーカーとそのプレイヤーの間に座っています。突然の間違いの現れ、シミュレーションの亀裂、地球に戻ってすぐにぶつかります。

バグの経験のプレイヤー側は簡単です。彼らは娯楽、刺激、時には怒りを散らばることがあり、すべて修正されるべきです。しかし、プレイヤーは開発者エクスペリエンスについてあまり知りません。それは、プレーヤーと開発者の関係が過去10年ほどでこれまで以上に近づいているにもかかわらずです。インターネットが配信されたパッチ、早期アクセス、インディー開発の台頭の時代では、プレイヤーは変更ログを覆い、フィードバックを提供するため、開発プロセスの渦巻きに巻き込まれます。

「それは複雑な祝福ですよね。ゲームをリリースでき、人々がそれが壊れていることを伝えることができ、それについて話してから修正できるという事実です」言う、そして最近では楽しい宇宙の不正な略奪品のラスカル。 「それは驚くべきことであり、それも信じられないほどストレスを感じています。あなたも非常に露出していると感じています。」

「それは非常に感情的なものになる可能性があります」と、Positech GamesのCliff Harris、Lionhead and Elixir Studiosのベテラン、民主主義シリーズの唯一の開発者、無償の宇宙戦、現在の自動車工場のSim生産ラインの唯一の開発者に同意します。

「一般的な誤解があると思います。バグがいるとき、プレーヤーは私たちがお金を持っているので開発者が気にしないと思っていると思います。特に蒸気の払い戻しの時代には、一時的にお金を手に入れました。私のゲームにあるバグは、それが私の間違いであり、私はそれを知っていますセロトニンのレベルは、バグレポート、または「クラッシュ」という言葉が表示されるたびに低下します。


Paradroid開発者Andrew Braybrook on C64バグ

6502アセンブラーは非常に容赦ない。それはただ止まってあなたが正確な障害のポイントを見ることができる方法はありませんでした、そして、私たちは初期の頃はどんな種類のデバッガーもありませんでした。その後、ゲームが20分間うまく機能していて、突然停止する可能性があることを想像してください。これはまさに、1983年9月にパラドロイドに起こったことです。これは、重複とリリースのためにオフになる1か月前です。

通常、バグが存在する場合、それは何かがまったく機能していないことを意味しますが、Paradroidは明らかに批判的な障害の点まで振る舞っていました。コードのどの領域がそれを引き起こしているかを示していないので、私はコードベース全体を3日間読みました。 3日目の終わりに家に帰ったとき、私はそれを衝突検出システムに絞り込みました。午後7時頃、私は夕食を食べて、インスピレーションを受けた瞬間を過ごしました。私は間違ったことを理解しました:私はロボットデータテーブルで間違ったインデックス値を使用していました。

24の異なるロボットタイプのテーブルがあり、ロボット数、最高速度、鎧の評価、開始エネルギー、武器のエントリを保持しています。また、現在デッキに16のロボットのテーブルがあり、位置、エネルギー、速度を保持しています。 16要素テーブルで24要素インデックスを使用すると、そのインデックスの最後の8つの値のいずれかが無効なデータを読み取り、テーブルの端を超えてデータに書き込む可能性があります。衝突を解決するときにこの間違いを犯していたので、メッセンジャーロボットが本来よりも多くの鎧を持っていることに気付かないかもしれませんが、大きなロボットが別のロボットに衝突してゲームが止まったときにそうします。私は庭に出て、良い叫び声がありました。私は自分の間違いを見つけました。


すべての開発者は、自分の仕事に深い誇りを持っているか、少なくともそれを努力しています。したがって、バグが発生したとき、システムがインターロックする信じられないほどの複雑さから自発的に出現すると、開発者はバグもほとんど避けられないことを知っているのと同じくらい気分が悪い。しかし、RealBugのレポートが登場し始めたのは、ゲームが発送された後までではありません。

「時々、バグに関するメールを受け取ることがあります」とハリスは言います。 「私のウェブサイトには、人々がバグを投稿するサポートフォーラムがありますが、多くの場合、ディスカッションフォーラムに投稿します。個人的なFacebookメッセージを受け取ります。ゲームのFacebookページでメッセージを受け取ります。 Reddit、およびSteamの間違ったフォーラムとSteamの適切なフォーラムに投稿してください。クラッシュします。」

時々、レポートは、プレーヤーが持っているマシン、ゲームのどの時点でバグが表示されるか、そして彼らが何をしていたかを詳細に説明することがあります。時々、ゲームを保存することがあります。 「しかし、「あなたのゲームが壊れている、修正してください」と言うメールをよく受け取ります」とハリスは言います。 「私は必ずしもそれがどんなゲームであるかさえわからない。ここに私に骨を投げてください


耐火性のロブ・ドッドは、バグの再現の痛みについて

私は数年前にFPSに取り組んでいました。そこでは、敵が殺されたときに武器を落とすでしょう。武器は物理的になり、床に落ちます。バグレポートは非​​常にまれに、銃は床からまっすぐに落ちることはありませんでした。これは大したことでした。なぜなら、ゲームはあなたが特定の銃を集めることができることに依存していたからです。ゲームで物事が地面から落ちるかもしれない理由がたくさんあります。それが起こるのを見るのは役に立ちませんでした。再現可能にする必要があるので、レベルの周りの異なる位置で、ランダムな速度、スピン、高さを持つ銃をそれぞれ1秒ごとに生成するコードを少し設定しました。それぞれを追跡し、10秒後に銃が地面の下にあった場合、正確な開始パラメーターを報告します。

私はそれを一晩走り去り、翌朝、ゲームが数時間クラッシュしたことを発見するために来ましたが、それが生き残った数千銃を投げて、数人が倒れました。私はテストベッドを変更して、それらの開始パラメーターで銃を産み、突然、地面に向かって優雅に回転し、まっすぐに落ちる安定したストリームがありました。修正は簡単でした - それは、銃が銃のためにセットアップされていないことに関係していました。まれな場合と同じくらいスピンします - スピンを固定するための1つのライン。


開発者として、Angry Bug Reportsは実際にはゲームに対する情熱の表現であるという考えを保持することは困難です。しかし、単に怒っているプレーヤーに返信するだけで、侵略者をはるかに合理的な人にすぐに変えることができます。ハリスは、GoogleやMicrosoftなどのモノリシックな組織を扱うことが空白に叫ぶようなものである世界に対する自然な反応と見なしています。ゲームのサポートメールアドレスが人間がいることを見つけるのはしばしば驚きです。

「私は彼らにすぐに返信しようとします。どんな時間であっても、ごめんなさいと言って、詳細を尋ねてみてください」とHaggettは言います。 「人々は一般的にクールです。私たちは、ペニスである人を体験できないほど幸運です。そして、最初に謝罪して人々を助けてもらうと、それは実際にはポジティブな人間の相互作用です。彼らは私のゲームをする人と対話するのが大好きです。」

次に、開発者は問題を記録する必要があります。一人で働いているハリスは、修正のための大まかな日付でカレンダーに記録するだけですが、大規模な開発者はZendeskなどのサポートチケット管理システムを使用し、コミュニティマネージャー、QAチーム、実際に働くプログラマーの努力を調整します修正について。専門システムは、1990年代にしばしば管理される方法から長い道のりです。

「私が驚くべきことの1つは、バグの報告と修正プロセスがどのように原始的であったかを振り返っていることです」と、見た目や非合理的に働いていたプログラマ兼デザイナーのドリアン・ハートは言います。 「Underworld IIとシステムショック、専用のバグレポートソフトウェアはありませんでした。テスターと開発者は、大きなリストをコンパイルするQAリードに電子メールを送ります。その後、1日に1回、QAリードがすべてのバグを一度に大声で読み取る大きなチームバグミーティングがありました。最も責任を負った人は誰でも手を挙げて、それに対処することに同意します。誰かがすでに持っていたバグだったら、彼らは「デュペ!」と叫ぶだろう!多くの場合、2つのバグが本当に同じ根本原因を持っているかどうかについての議論を開始します。 「バグではない!」の宣言についても同様の議論が始まります。または、誰がそれに対処するのにふさわしい人であるかについて意見の相違があった場合。」


ジョリス・ドーマンは、未開拓の行方不明のボスを逃したことで

初期のアクセスから完全にリリースされた状態に移動したとき、リリースする前に最後のパッチの1つで愚かな間違いを犯しました。基本的に、生成されるボスの数をゼロに設定します。最後のアクセスのプレーヤーが問題をもたらしたのは、ボスを離れずにゲームを出荷したばかりであることに気付くのに1週間ほどかかりました。私たちはそれを修正し、最初のアップデートとして50人の新しいボスをゲームに解き放つパッチをすぐに持っていました。他のプレイヤーはそれをかなりうまく取っているようでした。私たちが無制限のアップデートを備えたオンラインプラットフォームでリリースするインディーチームであることは良いことです。このようなことを逃れることができます。


ただし、レポートが管理されていますが、実際の作業は原因を把握することです。 「デバッグは探偵の仕事のようなものです。手がかりを見つけ、正しい質問をし、犯罪現場を調べる必要があります」と、Commodore 64 Classic Paradroidの開発者であるAndrew Braybrook氏は言います。 「注文することも、予算内でもできませんが、実行する必要があります。C64では、ゲームがリリースされる前に行わなければなりませんでした。」当時、コードベースはかなり小さく、プログラマーは一人で動作する傾向があったため、すべてのコードは彼らのものであるため、すべてがどのように機能するかを知っていました。 「それは、他の誰かのコードで他の誰かの間違いを探していないので、それは大きな利点をもたらします。私が見つけて修正できるほとんどのバグは数分で修正します。」

「ほとんどすべてが私がそれを再現できるかどうかにかかっています」と、彼自身のゲームエンジンをコーディングしているハリスは言います。 「一般的に言えば、クラッシュ、強打を見ることができれば、それは修正されています。」そのため、開発者はプレーヤーがバグに遭遇したときに整った条件に関する詳細情報を必要としています。開発者がバグを再現できる場合、障害の時点でコンピューターが何をしているかを見ることができ、それを通して、その原因を把握できます。多くの場合、 *実際の *作業は、ソースであるイベントと変数のまれな組み合わせを発見することです。

しかし、その後、他の、さらにイライラするようなバグがあります。ハリスは、デバッグプロセスを実行してそれらを調べる行為中に消えたり変化したりする「ハイゼンバグ」について語っています。 Bioware Edmonton、Ubisoft Montreal、Capybara Gamesなど、多くの開発者で働いていたCharles Randallは、コードではなくコンパイラから生じる「メタバグ」について語ります。

「コンパイラを非難することはループスではありません!ゲーム開発の瞬間」と彼は言います。 MDK 2では、サウンドコードに取り組んでいる男には、特定のゲームサウンドが再生を拒否した問題がありました。デバッグするとき、彼はコードが実際にplaysound()関数を実行していないことを知りました。多くの調査の後、私たちはそれが名前を描いた問題であるという教育を受けた推測を受け、その関数をPleaseLordSatanPlaysound()のようなものに改名し、問題を修正しました。私の知る限り、それはそのように出荷されました。」


アサシンクリード2でバグを修正しないでチャールズランドール

Assassin's Creed 2では、戦闘でアニメーションが欠落していることで解決できなかった継続的な問題がありました。バグを引き起こした状況の正確な組み合わせにつながった理由を理解することはできませんでした。それは私を1年以上かなり悩ませましたが、コードでそれを検出することができ、...ただそれを機能させることができました。適切ではありません、気をつけてください。エラーケースを検出したとき、別のアニメーションをプレイしました。ゲームにはまれな問題があると仮定しています。この問題では、同期しないアニメーションが表示されますが、誰も不平を言うことはありません。バグを消滅させることが、実際にそれを修正するための次善の策です。


そして、時には、レポートがバグではないことがあります。 「ゲーマーはそれがボロックだと思うと確信していますが、多くの場合、人々がゲームが実行されないと言うとき、彼らは自分のビデオカードドライバーを更新する必要があります」とハリスは言います。 「時間を購入しているように、そのような手のひらの塊が聞こえますが、スタートアップのクラッシュでは、80%がドライバーを更新することです。」 SteamバージョンとPS4バージョンの両方で、Haggettには、明らかな理由もなくスタートアップでゲームがクラッシュしたプレイヤーがいました。原因は発見されませんでしたが、ゲームを完全に修正しました。 「私たちは、「すごい、再インストールします。それはまだことです。」

固定されたら、今日の更新を発行するのは簡単です。コンソールでも、プロセスが大部分自動化されています。一般的な誤解は、コンソールメーカーがプラットフォーム上のすべてのリリースに課す認定プロセスは、バグをキャッチすることです。まったくそうではありません:それは、彼らがプラットフォームのルールに従うことを保証するためです。 Loot Rascalsは、さまざまなクラッシュバグがあるビルドから認定されました。たとえば、PS4でパッチを発行するには、通常、数日かかりますが、無料です。

そして、時には、ちょうど、バグが修正できないこともあります。これはあなたが思うよりもまれです - 開発者の仕事に対する誇りを覚えておいてください - したがって、それが起こるとき、それはビジネス上の決定にかかっています。 「誰かがWindowsの最新のアップデートがRedshirtがこれ以上走らないことを意味すると言った場合、私はそれを修正しません」とHarrisは言います。 「私はそれを売るのをやめるだけです。それは価値がありません。コーダーはバグに感情的に恥ずかしいです。ビジネスの決定。


ハイパーライトドリフターのバグとエクスプロイトの違いについてのテディディーフ

2013年のコンベンションでハイパーライトドリフターを見せたことを覚えています。私は夢の時間を過ごし、ゲームを見せて人々がそれを楽しんでいるのを見ました。また、私たちはビルドの準備をすることができるようにすることができたので、前夜は寝ていませんでした。その日の終わりに、この生意気な子供はブースに転がり、「私はあなたの衝突を壊すつもりです」と言い、何度も壁に駆け込み始めます。私は彼ができないと彼に言った。彼はできると主張した。私たちは約10分間前後に議論しました。私は議論した。幼い子供と。しかし、彼はバグを見つけませんでした。 2年後、私の仲間のデザイナーコーダーのBeau Blythと私は、素晴らしいゲームがすぐに行われるのを見ました。スピードランナーがグリッチを乱用するのを見ました時間のオカリナ壁を飛び越えて、レベル全体をスキップします。そして、初めて私は疑問に思った:誰かが *私たちの衝突を壊した *なら...それはちょっとクールでしょうか?

その6か月後、ハイパーライトドリフターを放出し、スピードランナーが不可解な壁を通過する方法を見つけ出すのに約2日かかりました。彼は私たちが試したことのないグリッチを使用し、クリスタルに意図的に閉じ込められ、壁の内側に彼を強制しました。これを修正することを考えました。 Alx Prestonは、私たちのレベルのデザインのいくつかを編集して、最初の重要な壁から結晶を遠ざけました。しかし、最終的には、完全に修正しないことを選択しました。 OK、私たちは、大規模なオーバーホールなしで、どのようにして完全にはわかりませんでした。したがって、このエクスプロイトからプレイヤーをブロックする代わりに、私は彼らにそれをさせることにしました...しかし、数秒後に彼らを殺しました。スピードランナーが *あまりにも *クレイジーなことをしないようにするのに十分な速さを感じましたが、不運なカジュアルなプレーヤーは、彼らがそうではない場所にいることに気付く時間があります。時々あなたはプレイヤーを殺し、彼らがあなたを許すことを願っています。私を許してください。

Anni Sayersのイラスト。