こんにちは!エンジニアの君島です。
先日AWSから興味深い発表がありました。
2021 年 6 月 28 日、AWS は AWS BugBust をリリースいたします。AWS BugBust は、100 万個のバグを修正し、技術的負債を 1 億ドル以上削減するという世界初のグローバルチャレンジです。
https://aws.amazon.com/jp/blogs/news/new-aws-bugbust-its-game-over-for-bugs/
なになに?新サービスか?と思ったら、AWSのサービスを使用して、プログラムのバグを検知、修正するプロセスから変革させようというゲーム性のあるイベントのようでした。
裏ではAmazon CodeGuruが動いているとのことです。今までCodeGuruに触れたことがなかったので、この機会に実際に使用してみようと思います。
目次
AWS BugBust
AWS主催のBug Bash
詳細はコチラ。
バグを修正するとポイントが貯まり、商品がもらえる
100ポイントのTシャツから、最終順位10位以内であればre:Inventへのチケットがもらえます。
対象言語はJavaとPython
対象リージョンはus-east-1
Amazon CodeGuru
ML を活用した推奨事項を使用して、コードレビューを自動化し、アプリケーションのパフォーマンスを最適化します。
以下の機能があります。
- 静的なコード解析のAmazon CodeGuru Reviewer
- 動的なプログラム解析のAmazon CodeGuru Profiler
サービスを詳しくは知りたい場合はコチラ。
準備するもの
- AWSアカウント
- メールアドレス
- PythonかJavaのソースコード
BugBustの流れ
詳細な手順の前に、BugBustの大まかな流れを記載しておきます。今回は静的コード解析のCodeGuru Reviewerを利用した場合を取り上げます。
プログラム解析に数分ほど時間がかかるので、手順を少し変えました。
プログラム解析の実行
BugBustイベントの作成と解析結果の紐づけ
BugBustイベント開始
BugBustでバグに打ち勝つ
プログラム解析の実行
リポジトリの作成
CodeCommitをリポジトリとして利用することにします。
BugBustの対象になっているバージニア北部(us-east-1)にリポジトリを作成して、JavaかPythonのソースコードをコミットしてプッシュしておいてください。
CodeGuruへのリポジトリ関連付け
CodeGuruを開きましょう
バージニア北部(us-east-1)リージョンなら、BugBustのメニューが追加されています。その他のリージョンはこの表示がありません。
しかし、まだBugBustを始めるにはまだ早いです。
メニューからCodeGuru > Reviewer > Repositoriesを選びます
日本語表示の場合は翻訳されてしまっていますが、CodeGuru > レビュー担当者 > リポジトリです。
リポジトリの関連付けを行います。
今回はCodeCommitをリポジトリにしますので、以下のように設定して、関連付けをします。
ソースプロバイダーを選択 | AWS CodeCommit |
リポジトリの場所 | バージニア北部(us-east-1)のリポジトリ一覧が表示されるので、対象のリポジトリを選択します。 |
フルリポジトリ分析の実施
メニューからCodeGuru > Reviewer > Code reviewsを選びます
ページ内にIncremental code reviewsとFull repository analysisのタブがあります。
Incremental code reviews(増分コードレビュー)は、バグ修正後に実行されるようで、特に設定は不要です。
Full repository analysis(フルリポジトリ分析)を、手動で新規作成しましょう。
以下のように設定してフルリポジトリ分析を作成します。
関連付けられたリポジトリ | 前の手順で関連付けたリポジトリを選択します。 |
ソースブランチ | レビュー対象のブランチ名を入力します。masterであることが多いかと思います。 |
コードレビュー名 – オプション | 自動で入るので、意図的な変更がなければそのままでOK。 |
すると、CodeGuru Reviewerが動いて解析が始まります。数分かかるので、その間にBugBustイベントを作成していきましょう。
BugBustイベントの作成と解析結果の紐づけ
BugBustイベントの作成
メニューからCodeGuru > BugBust > Eventsを選び Create BugBust eventします
ステップ 1: ルールとスコアリング
ルールが表示されますが、変更はできませんので次へ進みます。
ステップ 2: BugBust プレイヤーアカウントにサインイン
BugBustアカウントを作成していなければ、画面に従ってアカウント作成します。作成済みであれば、画面に従って認証を完了してください。
次へ進みます。
ステップ 3: イベントの詳細を追加
イベントの基本情報を入力します。いずれも必須項目なので入力してください。
開始時刻は自動で2時間後になってしまうので、必要があれば変更してください。ただし、15分後よりも短い時刻は設定できません。
後述の手順で再設定をすることもできますが、急いでいる人でも20~30分後に設定することをお勧めします。
プレイヤーに与える商品も記載します。
こちらも必須となっていますが、与える予定がなければ無しと入力しましょう。
ステップ4:レビューと作成
確認して問題がなければ、イベントを作成ボタンを押します。これでイベントの作成まで完了です。
なお、イベントは作成したら削除はできないようです。
解析結果の紐づけ
作成したイベントの詳細を開きます
作業項目をインポートを押します
記載が無さそうですが。イベント開始するまでにこちらの作業が完了していないと、イベントが始まりません。
また、イベント開始時間まで15分を切ってしまったら、イベントの詳細の編集で開始時間をまた15分以上の未来に設定してから、コチラの設定をしなければなりません。
余裕のある開始時間の設定をお勧めします。
以下のように設定して、変更の保存をします。
インポートする作業項目のソースの選択 | CodeGuru Reviewerからバグのみをインポート |
リポジトリ分析の選択 | 前の手順で実行していたフルリポジトリ分析を選択します。1回イベントに設定した分析は再度選択できないようです。 |
BugBustイベント開始
ここまでの手順が開始時刻の15分までにできていれば、あとは待つだけです。
待っている間にイベント詳細から、プレイヤーの招待用のテキストも取得して、プレイヤーに参加を要請しましょう。
記載もありますが、招待されるプレイシャーに推奨ポリシーを設定しておきましょう。
これらの操作はイベント開始後でもOKです。
BugBustでバグに打ち勝つ
招待リンクからイベントポータルから開催されたイベントに参加しましょう。
右上のボタンからイベントに参加します。
以下の記載の手順でバグを修正していきます。
1. Git の E メールアドレスを認証する
認証したメールアドレスがキーとなります。各開発者はこのポータルの認証に使用したメールアドレスを使用して、修正後のプルリクも行ってください。
そうでないと、修正してもポイントが反映されません。
2. バグをクレームする
まずはイベントポータルからCodeGuruが検知したバグをクレームします。
クレームしたバグが修正対象です。これは各開発者ではなく、管理者が行った方がよいかもしれません。
3. バグを修正する
各開発者はバグを修正します。通常通りの修正と、プルリクの作成を行ってください。
このときメインブランチに直接プッシュしてしまうとポイントが反映されませんので、注意してください。
プルリクを作成すると、イベントポータル上でも自分のプルリクが確認できます。
この時、裏で増分のコードレビューが進むようです。
どのバグを修正したか、修正の中に新たなバグが無いかを自動で判定してくれます。複数のバグ修正も検知してくれます。
以下はコードレビューが済んで、管理者によるマージを待っている状態です。まだポイントは付与されません。
4. レビュー
管理者によってプルリクがマージされた場合、再度増分コードレビューが進むようです。
これは2回目の増分コードレビュー進行中の状態です。
コードレビューが完了して、しばらく待ってからポータル画面に戻ると以下のポップアップが表示されました。
先ほどのプルリクを確認するとステータスも成功に変わっています。
以上でバグの修正からポイント付与まで完了です。
まとめ
AWS主催のBugBustに参加して、ポイントを獲得するところまで実践しました。
CodeGuru Reviewerは静的コード解析なので、プログラムとして動作しなくても、正しく書き替えてしまえばパスしてしまうところは仕方なさそうです。
そのため、もう一方のCodeGuru Profilerも利用することで、動作や性能面の評価もするのが良いのでしょう。機会があれば、こちらも使用してみようと思います。
また、バグとするかどうかの判断も大事で、修正すべきかどうかをしっかり意図を持って判断した方が良い修正プロセスになると思いました。
修正にあたっては、詳細な説明や参考の外部リンクを指示してもらえることもあり、適切なプログラムの書き方の勉強になると思います。循環的複雑度(Cyclomatic complexity)の算出もしてくれるのも良かったです。
最後に、執筆(2021/7/8)時点ではglobalで1stになりました!
- CLIでAmazon S3にあるファイル内の文字列検索をしてみる - 2024-02-01
- 不完全なマルチパートアップロードをCLIで確認してS3の無駄コストを無くそう - 2024-01-29
- AlmaLinux9.3にPHP8.3を入れてLaravel9から10にバージョンアップする - 2024-01-12
- AWS CloudShellの表現力を確認してみよう - 2024-01-01
- AWSのアーキテクチャーを学べるAWS Card Clash攻略Wiki - 2023-12-26