🔧

AWS BugBust プライベートイベントを作成してみた

2021/06/30に公開

こんにちは、Masuyama です。

週間AWS 6/21週分を読んでいたら AWS BugBust という面白そうなトピックを見つけました。
ものは試しにと触れてみたので、紹介させていただきます。


AWS BugBust とは?

AWS が AWS BugBust を発表 6/24より抜粋

本日、AWS BugBust が発表されました。これは、Java と Python のデベロッパーを対象に 100 万件のバグを修正する世界初のグローバルコンテストです。Amazon CodeGuru を使用してソフトウェアエラーを排除し、多くのコストを節約して第 1 回 AWS BugBust Challenge での栄冠を勝ち取ってください。多くのデベロッパーの参加をお待ちしています。

これを読んだ時、AWSが提示するコードに含まれるバグを修正するコンテストのようなものだと思ったのですが、後にそういったものでは無いことが分かりました。
これは 個人が主催できるバグ修正イベント です。

公式の記事で、もう少し理解やすいものがありましたので引用します。

AWS BugBust では、ソフトウェアのバグを検出して修正するプロセスを変革し、ゲーム化するプライベートイベントを作成して管理できます。

また、どんどんバグを修正していくとユーザー情報や功績がランキングに載っていくようです (画像はスクショ作成樹点でのランキング)。

前提知識:CodeGuru とは?

BugBust は Amazon CodeGuru というサービスと密接に連携しているため、そちらも把握しておくとすんなりと説明が入ってくるかと思います。
クラスメソッドさんの記事が分かりやすいので、紹介しておきます。

BugBust の流れ

BugBust の全体の流れは以下の通りです。
なお、ここでは Amazon CodeGuru Reviewer (以下、CodeGuru Reviewer) でコードレビューをし、見つけたバグを潰すという流れを紹介しています。
(Amazon CodeGuru Profiler ではなく)

  1. CodeGuru Reviewer でコードを分析し、予め Bug を検出しておく
  2. BugBust でイベントを作成する
  3. CodeGuru Reviewer で分析済みのコード (レポジトリ) BugBust イベントに連携する
  4. 参加者を招待して、CodeGuru Reviewer で検出されたバグを直してもらう

参加者は自分でバグを見つけるのではなく、予め判明しているバグを修正していくというのがポイントです。

イベント開催者側のメリット

通常のバグバッシュ (修正) であれば、バグを検出 (発見) した後に自分で直さなければいけません。
しかし BugBust を利用すると、修正してくれる方がプルリクを出す形でどんどん修正してくれるので自分で直す必要が無いところです。
このため、イベント開催者としては新機能の開発や全体のマネジメントに集中することができます。

イベント参加者側のメリット

デベロッパーがプライベートイベントでバグを修正するたびに、ポイントが割り当てられて様々な報酬が与えられるという点はもちろんですが
個人的には CodeGuru Reviewer バグの箇所が予め判明している点 は大きなメリットであり、特徴だと思っています。
これにより、デベロッパーはバグ修正タスクに注力することができるので、よりハイレベルなタスクに取り組むことが出来ます。


BugBust イベントを作成

公式ページから飛べる AWS BugBust のページに飛び、Get Started を選択しましょう。

サインイン後、CodeGuru のページに飛ばされます。
CodeGuru の一つの機能として明確にサイドバーに載っていますね。

ものは試しということで [BugBust イベントを作成] を選択します。

すると、イベントをステップに分けて作成する画面に遷移しました。
ここからはステップの指示に従っていきます。

ステップ 1:ルールとスコアリング

この画面では特に設定する項目は無いようです。
ただ、セキュリティの問題を見つけた時にはポイントが高いようなので、重要度に応じた報酬が与えられることが分かります。

ステップ 2:AWS BugBust プレイヤーアカウントにサインイン

BugBust に参加するには、AWS アカウント以外に BugBust プレイヤーアカウント というものが必要です。
(バグを潰すデベロッパーとして参加するだけなら、この BugBust プレイヤーアカウントだけでよさそう)

別ウィンドウで登録するように促されるので、自分のメールアドレスで早速登録します。

ステップ 3:イベントの詳細を追加

ここではイベントの基本的な情報を設定していきます。

AWS がデベロッパーに与える BugBust のポイントとは別に、報酬も設定できるようです。
テストなので、ここでは Nothing とでも設定しておきます。

ステップ 4:レビューと作成

最後に全体の設定を確認します。
作成する時点ではそこまで設定する項目はありませんでしたが、この後にイベントの具体的な内容を設定していくことになります。

なお、イベントを作成すると、イベントのダッシュボードが表示されるようになります。


イベント開催内容を設定

この工程では、どのようにバグを潰してもらうか?を設定していきます。
具体的には次のような流れになります。

  1. バグを含むコードを持つリポジトリを作成 (未作成の場合)
  2. リポジトリを CodeGuru Reviewer で分析し、バグを検出
  3. BugBust イベントと該当リポジトリを連携

ではやっていきましょう。

1.バグを含むコードを持つリポジトリを作成 (未作成の場合)

前準備として、CodeGuru Reviewer による分析でバグとして認定されるようなコードを持つリポジトリを準備しておきます。
BugBust では AWS CodeCommit や BitBucket 等も選べますが、今回は GitHub を使います。

ではバグありコードを用意しましょう。
こちらを参考にさせていただき、意図的にバグを含むコードを作成してみます。

手法としては、AWS SDK (Boto3) が S3 オブジェクトを取得する際、list_objects メソッドではオブジェクト数 1,000 件までしか取得できないことを利用し、
1,000 件以上のオブジェクトを持つバケットには対応できないようなバグを含むコードを用意し、リポジトリに上げておきました。

main.py

import boto3

def main():
    s3_client = boto3.client('s3')
    response = s3_client.list_objects_v2(Bucket='example-bucket')

    for content in response['Contents']:
        print(content['Key'])

if __name__ == '__main__':
    main()

次に [CodeGuru] > [リポジトリ] からリポジトリを連携していきます。

先ほどアップしたリポジトリがある GitHub を選択し、アカウントの連携とレポジトリの指定を行っています

2.リポジトリを CodeGuru Reviewer で分析し、バグを検出

それでは先ほど連携したリポジトリに含まれるバグを検出するべく、コードを分析してみます。
[CodeGuru] > [レビュー担当者] > [コードレビュー] を選択します。

[フルリポジトリ分析を作成] を選択します。

レポジトリとブランチをそれぞれ選択し、[フルリポジトリ分析を作成] を選択します。

数分程度待っていただくと、リポジトリ内からバグが抽出されます。
直すべき箇所は [推奨事項] として表示されており、推奨事項が 1 となっていることが分かります。

推奨事項を確認してみると、このように「直すべき箇所」を教えてくれます。

The API method list_objects_v2 returns paginated results instead of all results. Consider using the pagination API or checking one of the following keys in the response to verify that all results were returned: ContinuationToken, IsTruncated, NextContinuationToken, NextToken.

要するに、ちゃんとすべての結果が返ってくるように直そうね、だそうです。
想定通り、オブジェクトをすべて受け取れない場合があるというバグが検出されていますね。

なお、Learn more をクリックすると、対処法のレファレンスに飛ばしてくれるので非常に便利です。

3.BugBust イベントと該当リポジトリを連携

さて、これでバグを検出できたので BugBust イベントと先ほどの分析結果を連携してあげましょう。
※既にイベントが開催されている期間ではこの操作は出来ないようですので、その時はイベント開催期間を再度設定し直します。

[作業項目をインポート] します。

先ほど作成した CodeGuru Reviewer の結果をインポートします。

なお、先ほどのバグはイベントボードの [バグ] 欄から確認できます。

これでイベントの準備は完了です!


BugBust イベントに参加する

私自身はイベントの開催者ですが、どんな様子かも見てみたいので自分で参加してみます。
※バグ修正する手前まで

プレイヤーを招待

デベロッパーがイベントに参加するには、イベント開催者側からプレイヤーを招待してする必要があります。

招待文を発行できるので、後は勝手にやってくれという様子です。
なお、プレイヤーはイベントに参加できる IAM の権限を持っている必要がありますが、ここでは説明を割愛します。

プレイヤーとしてイベントに参加

先ほどの招待文をプレイヤーとして受け取ったという前提で進めます。
招待文内のリンクをクリックし、イベントのダッシュボードにアクセスします。

バグ ページに遷移すると、CodeGuru Reviewer で見つかったバグの確認や、どのようにして BugBust ポイントを獲得できるかを確認することが出来ます。

Git の E メールアドレスを認証

先ほどのページに認証に必要なリンクが表示されているので、設定していきます。
デベロッパーは GitHub に使うメールアドレスを入力し、認証します。

メールアドレスの認証を済ませると、イベントに参加する準備が整いますので、イベントダッシュボード右上の [イベントに参加] ボタンからジョインできます。

バグをクレームする

イベントに参加するとバグをクレーム出来るようになります。
※クレーム:ここでは このバグ修正に取り組みます と宣言することを意味しているようです。

実際に検出されたバグをクレームしてみます。

クレームするとポップアップが表示されます。

クレームしたバグは 自分がクレームしたバグ に移行されます。

この後は、実際にバグを修正してプルリクエストを出し、レビューしてもらうといった流れのようです。


おわりに

今回は主催する側としてイベントを作成してみました。
まだプレイヤー側の操作にはほとんど触れていないので未知の要素が多いですが、システマティックにバグ修正に貢献できるようになるのは面白そうなので、今度はプレイヤーとして参加してみようかと思います。

Discussion