2020年9月2日~4日まで、CEDEC公式サイトのオンライン上にて開催された日本最大のコンピュータエンターテインメント開発者向けのカンファレンスCEDEC 2020。

 本記事では、1日目におこなわれた『龍が如く7 光と闇の行方』(以下、『龍が如く7』)のデバッグに関するセッション“「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム”をリポート。

 セッションには、セガのQAエンジニア・阪上直樹氏と、ビルドエンジニアの粉川貴至氏が登壇した。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

バグをハグしたくなる自動システム!

 まずは阪上氏が開発者たちへ向けて、「バグは好きですか?」という質問からセッションがスタート。最初に龍が如くスタジオの各タイトルで、バグを発見した数の推移が公開された。ゲームの規模が大きくなるにつれ、バグも増加傾向にあるという。

 そして全自動バグ取りシステムを運用した『龍が如く7』では、なんと25000ものバグが発見されたという。こう見るとネガティブな印象を受けるかもしれないが、バグ発見数が多ければ多いほど、ゲームクオリティがアップするということだ。

 バグというのは、開発者にとって辛いものだという。だが、阪上氏曰く、このセッションを最後まで見れば「バグをハグしたくなります」とのこと(持って生まれた知性と品性を感じさせるダジャレですね……!)

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 自動バグ取りシステムの方法を説明する前に、まずはデバッグを手動でおこなう際のフローを説明。最初にバグを発見する作業から始まり、続いてそのバグを報告したのちバグの再現性を確認するなどして、本当にバグであるならばバグチケット(バグのデータや問題点などがまとめられた、ひとつのタスク)を作成。

 そのチケットを見て、いますぐ開発に影響するものや、後回しでいいものなどの優先度や重要度を決定し、バグを潰す担当者を決める。その後、その担当者の環境のみでバグを再現し、バグを潰し、動作確認を経て、QAチームが再度確認し、全員のデータへと反映するそうだ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 そして今回目指したのが、その工程すべてを自動化してしまうというもの。デバッグ作業の効率が上がらなければ最悪発売延期になってしまうし、当然作業自体の時短が狙える。大きなポイントとしては、“壁をすり抜けてしまう”、“会話したらゲームが止まった”なんて単純なバグ探しに人員を割きたくないため、全自動化を目指したそうだ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 まずはバグ発見のため、テスト環境自動化を構築した。開発者たちのPCにはオートテスト用のシステムが用意されており、1日の開発が終わると帰宅前にそのクライアントを立ち上げるようにお願いしているという。立ち上げただけでテスト環境が展開していき、つぎに出社するまで、自動でバグ探しをしてくれるのだ。

 なお、開発者たちが懸念するのは、出社時に自身の作業環境へすぐに戻せるのかということ。クライアントを立ち上げる際に、その直前の環境のバックアップを取っているため、クライアントを終了させればすぐに前の状態に戻せるそうだ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 そのテスト環境で自動テストしてくれるファイルも、作成自体は自動でできるという。“どこでもリプレイシステム”と名付けられたこのシステムでは、手動での操作を記録するだけで、自動テスト用のファイルが作成可能。プログラムの知識がなくとも作れるほか、あとで条件を足したりすることも簡単にできるという。

 どこでもリプレイシステムを使えば、たとえば“昨日まで正常だったのに、今日からバグった”というようなエンバグ(デグレ)を発見しやすいほか、メインシナリオを何度もクリアーする、処理落ちしないかなどの確認や、アイテムをちゃんとコンプリートできるか? などの正確性が求められるテスト範囲も探しやすいのだとか。とくに『龍が如く7』では、コンプリート要素のひとつ“スジモン”を毎晩のように全員ゲットしていったそうだ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 さらに、ミニゲームのバグや、床をすり抜けてキャラクターが落ちてしまうなど、ランダム的に発生してしまうバグも見つけやすい。ただし、プレイヤーの操作というものは、ランダムでありながらも、正確な動作をしたりするため、中間のような存在だという。そういった操作を検知するのは現状難しいが、現在そちらについて研究中とのこと。

 たとえば、メインストーリーを単純にクリアーしていくだけのバグ探しなら安易だが、プレイヤーはメインストーリーの途中に寄り道したりすることもあるだろう。自動テスト用の操作を細切れにし、一挙にサーバーへ集め、一定時間ごとに似ている別の自動テスト操作が再生されたり、まったく別の目的地を目指したりと、さまざまな可能性を試せるシステムも披露された。なお、研究段階なので実際には取り入れなかったそうだ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 セッションでは実際に自動操作でデバッグする様子が披露され、春日一番が駐車場の柵とポールのあいだを舐めるように動き回る姿が映し出された。なお、フィールド探索用、バトル用など、シーンが変わるとボタン操作の方法も変わる。そちらも状況に合わせて自動で切り換えられるのだとか。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 また、テスト環境はもちろん開発者たちのPCだけでなく、24時間稼動でテストプレイをするPCも用意されている。24時間稼動のものでは、膨大な数のあるサブシナリオを全部クリアーするなどといった、時間の掛かるもので自動テストを回しているとのこと。多数用意されたPCに“つぎはこのテスト”、“このPCが暇になったからつぎはこれ”というような命令が24時間オートで割り当てられ、フル稼動しているという。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 もちろん自動テストを回す中で、バグを発見しなくては意味がない。バグの検知も自動化されており、何種類かのバグの種類に分かれて報告がされる。手動テストと自動テストを比較し、『龍が如く6 命の詩。』では、自動テストでのバグ報告が全体の約18%だったのに対し、効率の上がった『龍が如く7』では約68%にまで上昇。重複する内容の報告も含まれているので数が多くなったそうだが、重複した報告というのも役に立つデータなのだとか。

 これにより、最初の手動操作のファイル制作や、テスト計画自体などはさすがに自動化できなかったが、バグ探索に関わるほとんどの工程を自動化した。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

バグを見つけたら、自動で分析、報告!

 続いてはバグ報告の自動化。バグやバグのような挙動が発見されると、ログやスクリーンショット、動画、そして自動テストプレイ用の再生データが、適切な場所へと全自動で送られる。バグチケットにも必要な情報がすべて自動入力され、自動でチケットとして登録される。

 ただ、手動チェックで起きたバグは“バグ”チケットとして扱い、自動チェックで発生したバグ、またはバグのような挙動というのは“エラー報告”チケットとして扱っているそうだ。そうすることで、自動報告に質問をしてしまうなど、無駄なミスが生まれないようにひと目みて区別できるようにしたという。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 また、自動で発見されたバグは、自動で再現性を確認するために、自動で、自動テストプレイを開始する(何もかも自動ばかりですごい文章になっている)。再現性を自動確認し、確認が取れたらバグチケットに“自動再現された”という情報を付け加える。再現してもエラーにならなかった場合も、1度出たエラーなのになぜエラーにならなかったのか、という情報をもとに調査できるのだとか。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 自動でバグを検知し、その再現を自動でおこなう様子も動画で公開された。動画内ではランダムに動き回る春日一番が、ハン・ジュンギに話しかけたとたんエラーを検知。再現性の自動確認ではハン・ジュンギの前まで同じような操作で移動し、しばらく待ってからハン・ジュンギに話しかけたとたんエラーを検知していた。これは、エラー検知をした瞬間のボタン操作の記録がされないことがあるため。その対策として、一定時間経つと決定ボタンなどが押されるようになっているそうだ。

 これにより、バグ報告の工程はなんとすべて自動化に成功。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 続いては、バグ選別の自動化。優先度・重要度の決定の自動化についてだが、まず優先度というのは、優先度高いものほど、多くの場所に影響の出るので早急に直す必要のあるなど、作業の優先度のこと。重要度は、ゲームが強制終了してしまうバグなど、ゲームへの影響を指すものだという。

 誤字脱字や表記ミスについてはゲーム進行には影響しないので、重要度は低いそうだ。ただし、『龍が如く』シリーズは実在の商品なども多くゲーム内に登場するため、そういったものの表記ミスについては重要度が高くなるとのこと。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 どのようにして優先度の高さを自動で決めたのかというと、エラーの重複数で決定したという。エラーメッセージ内容の重複が多いということは、広範囲に影響しているということ。重要度の決定は、エラー判定の種類で決めたそうだ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 そしてそのバグを直す担当者も、自動で決定する。実用化する前は、機械学習で適切な担当者を判定するという方法を模索したそうだが、うまく運用はできないだろうと判断し、実際に運用はしなかったそうだ。

 もっと単純な方法として、いちばん多いバグ区別の種類に、バグ修正担当者をエラーメッセージに紐づけて直で自動割り当てしてしまうというものが採用された。だいたいはもともとそこの部分を作ったスタッフが割り当てられるそうだが、そうじゃない場合もあるそうだ。

 こうして、バグの選別もすべて自動化に成功した。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

修正自体の作業はさすがに手作業

 続いて目指したのが、バグの修正自動化。まず担当者が発生したバグを修正するのに、自分の環境でそのバグを確認する。そのための確認ファイルはバグが自動再現された場合は、リプレイファイルが自動で生成されているので、自分の環境ですぐに再生可能だ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 さすがにプログラミング修正の自動化は手作業となっているが、その後ゲーム自体への反映は自動化されている。また、修正が完了してゲームへの反映も完了すれば、バグチケットのステータスがQAチームへの確認待ちに自動でなるので、修正確認がすぐにできるようになっている。

 バグを潰す“デバッグ”、そのデータをゲームへ組み込む“コミット”は手作業だが、修正工程のわずらわしい部分が自動化されたという感じだろう。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 最後に、バグの修正確認。まずはそのバグ修正のせいで生まれる新たなバグ(エンバグ)がないか、入念なチェックがおこなわれる。エンバグのチェックも、自動テストプレイなどでおこない、エンバグの発生も自動検出されるそうだ。

 続いて修正の確認は、確認待ちになったバグチケットに対し、バグの自動再現確認で使用したリプレイデータを再度実行。そこで不具合がなければ、自動で確認済みに。再発すれば、自動で差戻しとなるそうだ。

 また、自動で検出されたバグ報告の中には、重複内容のものもある。修正確認済みにならないまま時間が経過し、同じようなエラー報告がなくなった場合は、解決済みのものと認識。意味合いとしては“もう再発しないバグ”ということだが、自動で確認済みとして処理するそうだ。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 最後に、さきほどの春日一番とハン・ジュンギの会話で起きたバグを例に、修正確認を自動でおこなう動画が公開された。今度はしっかりとハン・ジュンギの会話ログが表示され、エラー検出がなくなった。見た目としては「これだけ?」と思われるかもしれないが、前提で言ったように、全自動バグ取りシステムは、こういった単純なバグを全自動で潰すために作ったものだと、阪上氏はアピール。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 いくつかのシステムはこれまでのシリーズ作品でも採用されていたが、細部がより効率化し、自動処理で多数のタスクを処理できたという。そして23工程あるバグ潰しのうち、20工程も自動化に成功。完璧に20工程すべて全自動化で処理されたバグ総数は、250個と数としては少なめに見えるが、どのエラーも何かしらの自動化に関わっているという。

 自動で処理されたバグチケットをポイント化して集計したところ、『龍が如く 維新』よりも1件あたりの作業時間が減っていることが分かった。当初の目標通り、作業の効率化に成功したということだろう。今後の課題としては、途中で語られていたように、プレイヤーの動きなどを再現するリプレイデータを再現することだという。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】
『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 阪上氏が「全自動バグ取りシステムとは、ゲーム開発で面倒なことを自動化するスタートライン」だと語り、本セッションは終了となった。

『龍が如く7』は進化を続け、自動バグ発見どころかほぼ全自動のバグ取りシステムを構築。これぞ無職から勇者に成り上がるデバッグだ!【CEDEC 2020】

 『龍が如く』シリーズといえば、比較的短期間で超大作を連発しているシリーズだ。なぜここまで開発時間を掛けずに完成度の高いタイトルが世に出せるのか、その一端が垣間見えた。ここまで自動化してしまえば、将来的にはプログラム修正も自動化……か!?

※画像は公開映像をキャプチャーしたものです。