何十年もの知識と経験に基づいて訓練
CodeGuru の機械学習モデルは、Amazon のコードベースでトレーニングされています。モデルは、数十万の内部プロジェクトと、GitHub の 10,000 を超えるオープンソースプロジェクトで構成されています。何万人もの Amazon 開発者が、コードレビューとアプリケーションプロファイリングの長年の経験に基づいて CodeGuru のトレーニングに貢献してきました。たとえば、CodeGuru Reviewer のトレーニングは、ルールマイニングと、ロジスティック回帰とニューラルネットワークの組み合わせを活用した教師あり機械学習モデルを使用して行われます。ベストプラクティスからの逸脱を検出するためのトレーニングを行う際、CodeGuru Reviewer は、AWS API 呼び出しを含むプルリクエストの Amazon コードベースをマイニングします。コードの変更を確認し、さらに並行してマイニングするドキュメントデータと相互参照します。これにより、Reviewer がコードをレビューして推奨事項を提供するときに使用するベストプラクティスの新しいモデルが作成されます。CodeGuru Profiler は、Amazon パフォーマンスエンジニアによるトレーニングも受けており、Amazon で内部的に使用している何万ものサービスのプロファイリングに活用されています。CodeGuru が提供する各推奨事項を受け入れるかどうかは、お客様が決めることができます。フィードバックを多く与えるほど、その推奨事項が向上します。
最もコストがかかるコード行を見つける
CodeGuru Profiler は常にアプリケーションパフォーマンスを最適化をできないかを探り、最も「コストがかかる」コード行を特定します。さらにそれらを修正して CPU 使用率を削減し、計算コストを削減し、アプリケーションパフォーマンスを改善する推奨方法を示します。CodeGuru Profiler から具体的な推奨事項が得られるため、コストがかかるオブジェクトの過剰な再作成や逆シリアル化、非効率的なライブラリの使用、過剰なロギングなどの問題に直ちに対処できます。CodeGuru Profiler は本番環境で継続的に実行され、CPU 容量の消費が最小限に抑えられます。そのため、アプリケーションのパフォーマンスが大きな影響を受けることはありません。アプリケーションのプロファイリングを開始するには、CodeGuru が提供するコードを使用して小さなエージェントをインストールし、CodeGuru コンソールで設定してください。
アプリケーションのパフォーマンスを最適化する機会を特定すると、Amazon CodeGuru Profiler は、変更を推奨する理由、問題の原因、解決方法を説明し、さらにこの問題がアプリケーションに影響を与えるコード内の場所を明らかにします。
Amazon CodeGuru Reviewer はプルリクエストをスキャンし、Github または AWS CodeCommit のソースコードに対する推奨事項を提供するとともに、問題の原因と修正方法も示します。
コードの問題点を今すぐ把握しましょう – ページングされるのを待つ必要はありません
CodeGuru Reviewer は、不安で眠りを妨げるような問題点を探し、推奨される修正方法を示します。AWS API と SDK を使用する際のベストプラクティスからの逸脱を検出し、ページ区切りの欠落の検出やバッチ操作でのエラー処理など、本番環境の問題につながる可能性のある一般的な問題にフラグを立てます。CodeGuru Reviewer はアトミック性違反や、スレッドセーフではないクラスの使用など、同時実行の問題を検出します。これらは、経験豊富なプログラマでも見つけるのが困難な問題です。リソースが誤って閉じられ、レイテンシーの問題と停止がいつ発生したかを検出します。また正しい入力検証も識別します。入力が正しく行われていないと、サニタイズされていない入力がインジェクション攻撃やサービス妨害などの問題につながる可能性があります。コードのレビューを開始するには、GitHub または AWS CodeCommit の既存のコードリポジトリを CodeGuru に関連付けることができます。
すべてのコードレビューとアプリケーションに使用するのに十分な低料金
CodeGuru は、すべてのコードレビューとアプリケーションに使用するのに十分な低料金です。レビューされたコードの行数とアプリケーションプロファイルごとのサンプリング時間に基づいた、シンプルな月額の従量制料金で課金されます。たとえば、500 行のコードを含む典型的なプルリクエストがある場合、CodeGuru Reviewer を実行するのにかかるコストはたったの 3.75 USD です。最初の 90 日間は無料でお試しいただけます。無料期間経過後は、アプリケーションプロファイルごとのサンプリング時間あたり 0.005 USD、1 か月あたり 100 行のコードごとに 0.75 USD の料金で CodeGuru をお使いいただけます。料金表を参照 »
数千万ドル
Amazon CodeGuru についての開発者談
Amazon.in の販売者のスケジューリングサービスに携わるソフトウェア開発エンジニア、Chris Butterfield:
「CodeGuru Profiler を実行してその推奨事項を確認した後、サービスを更新して CPU ロックに関連するバグを修正する必要があることに気付きました。推奨される修正は完全に機能し、CPU 時間の 55.97% を使用していたスレッド競合に対する警告を取り除きました。これで、単一のホストが 700 TPS を処理できるようになりました。これは、単一のホストが以前処理できたトラフィック処理量の約 7.5 倍に相当します同じトラフィックを処理しながら、負荷テスト後にインスタンスの数を約 75% 削減できました」
Amazon.com のカタログ管理サービスに携わるシニアソフトウェア開発エンジニア、Rajesh Konatham:
「サーバーの起動時間を短縮し、プロファイルの乱雑さを軽減するために、いくつかのソフトウェア関連の設定を無効にしました。この変更によりどのような影響があるかを理解するために、CodeGuru Profiler を使いました。するとワークフローシステムがブランチを実行するたびに、ドキュメントが不要な場合でも複製していることに気付きました。このため、CPU 容量の複製値の 15% を不必要に消耗していました。CodeGuru Profiler の推奨に従い、これらのクローンされた値を削除したところ、CPU 使用率が同期フリートで 40% 、非同期フリートで 67% と大幅に削減されました。これは、予想していた CPU 使用率の 15% の削減をはるかに超えています。 クローンがヒープメモリを使用しなくなり、ガベージコレクションのアクティビティが減少したため、さらに削減できました」
Amazon CloudWatch に取り組むシニアソフトウェア開発エンジニア、Neeraj Kumar:
「CodeGuru Profiler を実行したところ、CPU 容量のほとんどが SHA-2 で Amazon S3 リクエストを署名するのに使用されていることがわかりました。SHA-2 の実装に JDK が提供したものを使用していましたが、CodeGuru Profiler は代わりに Amazon Corretto Crypto Provider を使うことを推奨しました。推奨事項に従ったことで、一部の暗号化アルゴリズムをより迅速に実装できるようになりました。Corretto Crypto Provider は JDK の動作と一致するため、オンボーディングは簡単でした。デプロイすると、CPU 使用率が約 30% 削減された AWS のリージョンがいくつもありました」
AWS ビルダーツールに取り組むシニアソフトウェア開発エンジニア、Mike Thompson:
「CodeGuru Reviewer を使用することで、重要なコードに潜む長期にわたる競合状態を把握できました。人間のレビュアーであれば、変更したコードの領域外にあったため、それを見逃していたところでしょう。CodeGuru Reviewer は、バグに関する十分なコンテキスト、バグが悪い理由の明確な説明、バグの修正方法の具体例を提供してくれました。必要な変更は非常に簡単で、ものの数分で完了しました。セットアップを要さず、さらに作業の支障にならずにコード品質を改善できる素晴らしいものです」
AWS DynamoDB に取り組むソフトウェア開発エンジニア、Danish Bashar:
「Amazon S3 からファイルをダウンロードしていたのですが、それがストリームで、リソースリークが発生したことに気づきませんでした。単体テストでは問題なく実行できたため、この問題は検出されませんでした。オブジェクト型を明示的に記述していなかったので気が付きませんでした。また、コードをレビューしている人は誰も気づかなかったことでしょう。CodeGuru Reviewer がコードのセマンティクスを確認するのに数分しかかからず、リソースリークを割と速く発見できました。CodeGuru Reviewer は、try-with-resources を使用してリソースを閉じることを推奨たので、すぐに実装しました。+1」
AWS DynamoDB に取り組むソフトウェア開発エンジニア、Geetika Vasudeo:
「通常は使用しない方法で Amazon DynamoDB テーブルを使用していたため、コードレビューで見落としていました。CodeGuru Reviewer は、操作がすべての結果ではなく、ページ区切りされた結果を返していることを突き止めました。今では問題になりませんが、スキャンを行って最初のページ上の結果を確認するだけでした。テーブルが次第に大きくなると、最初のページのみが表示され、残りの結果が失われていました。正しく処理されないと、これがコードの主要なバグになっていたかもしれません。上手く問題を検出でき、推奨事項も適切でした」