Amazon CodeGuru を使用して最もコストがかかるコード行を検出する

Amazon CodeGuru は、機械学習の力を活用して、コードの保守容易性を向上させ、最も高価なコード行を見つけるのに役立つデベロッパーツールです。自動化されたコードレビューを実行し、アプリケーションパフォーマンスに関する推奨事項を提供します。

Amazon CodeGuru Reviewer

Amazon CodeGuru Reviewer は、 Java および Python コードの問題を検出し、それらの修正方法を奨励します。例えば、CodeGuru Reviewer では、AWS API や SDK の使用におけるベストプラクティスからの逸脱を検出したり、同時実行の問題、リソースリーク、セキュリティ脆弱性、さらに不正入力検証を特定したりします。コードのレビューを開始するには、GitHub、GitHub Enterprise、Bitbucket、または AWS CodeCommit の既存のコードリポジトリを CodeGuru に関連付けます。

プルリクエストの自動化された推奨事項

CodeGuru Reviewer は、ソースコードのプルリクエストを自動的に分析して重大な問題を見つけることにより、コードの保守容易性の問題とセキュリティリスク (上位 10 個の OWASP カテゴリを含む) を特定します。その後、プルリクエスト内でコードの欠陥を直接解決するためのインテリジェントな推奨事項を提供します。 CodeGuru Reviewer は、9 つの幅広いカテゴリでコードの保守容易性の問題を特定し、開発チームがソフトウェア開発プロセスで高いコーディング標準を維持できるようにします。

• AWS のベストプラクティス: AWS API (例: ポーリング、ページ区切り) の使用方法を修正します。
• Java と Python のベストプラクティス: 一般的な Java と Python の言語とライブラリ機能の正しい使用
• 同時実行: 機能上の障害を起こしている同期不良、あるいはパフォーマンスを低下させている過剰な同期を検出します。
• コードの保守容易性: コードの複雑さや、コードにより生み出される超過作業時間を抑えるのを困難にするソースコードの特性を特定します。
• リソースリーク: リソースの処理 (例: データベース接続の解放) を修正します。
• 機密情報のリーク: 個人識別情報 (例: ログインしているクレジットカードの詳細) の漏えいを検出します。
• 一般的なコーディングのベストプラクティス: パラメータをチェックし、バグ (オブジェクトを設定する前に null かどうかをチェックするのを忘れる、同期されたオブジェクトを再割り当てする、または例外パスに沿って変数を初期化するのを忘れる、など) を引き起こす可能性のあるコード行を探します。
• クローンコード: 統合することでコードの保守性を高められる可能性のある、重複コードを特定します。
• 入力検証: 信頼されないソースから送られる、不適当な形態の、もしくは悪意のあるデータをチェックする

プルリクエストの自動化された推奨事項
 クリックして拡大

セキュリティ検出
CodeGuru Reviewer は、コードのセキュリティを向上させ、ベストプラクティスについての推奨事項を提供します。自動推論を使用して、ソースからシンクへ、および複数の機能にわたるデータフローを分析し、見つけにくいセキュリティの脆弱性を検出します。Security Detector は、Java 11 を介して Java をサポートし、次のような問題のいくつかのカテゴリを特定します。

1.AWS API セキュリティのベストプラクティス:AWS EC2 や KMS 向けの API セキュリティを確認できます
2.Java Crypto Library ベストプラクティス:Javax.Crypto.Cipherが初期化され、正しく呼び出されているかどうかを確認できます
3.安全なウェブアプリケーション: LDAP インジェクションなどのウェブアプリケーション関連のセキュリティ問題を確認できます
4.機密情報漏えい: 個人情報や機密情報の漏えいがないか確認できます
5.AWS セキュリティのベストプラクティス (AWS Crypto の推奨事項など): コードが AWS のベストプラクティスを満たしているかどうかを確認できます

CodeGuru コンソールに移動し、ソースをアップロードしてアーティファクトを構築することにより、リポジトリ全体またはコードベースでセキュリティ分析をトリガーできます。

推奨事項

ユーザーは、コードに関するすべてのレビュー内容を、コンソールにある [Code reviews] (コードレビュー) ページ ([Reviewer] セクション) で表示できます。このページでは、コードレビューのステータス、対象のレポジトリ、推奨事項の数など、コードレビューに関する全情報を一覧で表示しています。ユーザーは、正常に完了したコードレビューをクリックすることで、推奨事項の詳細を表示したり、推奨事項を検索したり、解析した行数を表示したりできます。また、推奨事項の下に表示されるサムズアップやサムズダウンのアイコンをクリックすることで、ユーザーは CodeGuru の推奨事項に対するフィードバックを送ることもできます。

PullRequest
 クリックして拡大
リポジトリ全体の分析

CodeGuru を使用すると、指定されたコードブランチの下で、関連するリポジトリ内の (プルリクエストによる増分変更だけでなく) すべてのコード行について、ML を利用したコードレビューの推奨事項を取得できます。完全なリポジトリスキャンを実行して、コードの移行、コードのデューデリジェンス、定期的なコードのメンテナンスの取り組み中にコードレビューの推奨事項を取得できます。CodeGuru で、[Code Reviews] (コードレビュー) ページの [Repository Analysis] (リポジトリ分析) タブに移動して、完全なリポジトリで新しい分析をトリガーできます。新しいリポジトリサイズベースの料金モデルには、2 つの完全なリポジトリスキャンが含まれています。詳細については、CodeGuru の料金のページをご覧ください。

リポジトリ全体の分析
 拡大イメージを見る

CodeGuru Reviewer にオンボーディングしているお客様は、プルリクエストと完全なリポジトリ分析を利用して、1) リポジトリを関連付け、2) 完全なリポジトリ分析を開始し、3) プルリクエストを継続的に分析してコードの増分変更を確認し、4) 定期的に完全なリポジトリを再スキャンしてコードの保守容易性を保証することができます。

セキュリティ検出
 クリックして拡大

Amazon CodeGuru Profiler

Amazon CodeGuru Profiler はアプリケーションパフォーマンスの最適化策を常に探索しながら、最も「コストがかかる」コード行を特定します。さらにそれらを修正して CPU 使用率を削減し、計算コストの削減を行い、アプリケーションパフォーマンスを改善するための推奨方法を示します。たとえば、CodeGuru Profiler により、アプリケーションがコアビジネスロジック実行のためではなく、ログ記録ルーチンのために過剰な CPU 容量を消費している場合を識別できます。

実稼働環境にあるアプリケーションの定常的なプロファイリング

CodeGuru Profiler は、最小限のオーバーヘッドで本番環境で継続的に実行されるように設計されています。つまり、アプリケーションのパフォーマンスへの影響を最小限に抑えて、常時稼働させることができます。これにより、実際の顧客のトラフィックパターンを使用してアプリケーションのプロファイルとトラブルシューティングを行い、パフォーマンスの問題を簡単に発見できます。プロファイラーデータと ML を利用した推奨事項を使用すると、本番環境でのアプリケーションのパフォーマンスの問題を特定して修正できます。 CodeGuru Profiler はヒープサマリーも提供するため、いつでもどのオブジェクトがメモリを消費しているかを特定できます。

アプリケーションの実行時の動作を把握する

CodeGuru Profiler は、アプリケーションの CPU 使用率、ヒープ使用量、レイテンシー特性を継続的に分析して、アプリケーションのサイクルもしくは実行時間において最も消費量が多い部分を示します。この CPU とレイテンシー分析はインタラクティブなフレームグラフで表示されるので、どのコードパスが最もリソースを消費しているかを視覚的に簡単に理解でき、アプリケーションが期待どおりに実行されていることの確認や、さらに最適化できる領域を明らかにするのに役立ちます

画像処理異常
 クリックして拡大

フレームグラフは、一定時間のスタックトレースサンプルを収集して、その時間中のアプリケーションの動作をイメージ化することにより、アプリケーションのパフォーマンスを視覚化します。フレームグラフを使用して、どのパスが最もリソースを消費しているかを把握し、アプリケーションが期待どおりに実行されていることを確認し、最適化できる領域を発見できます。たとえば、UploadGreyImage というメソッドに毎年 134,868 USD の予算がかかり、実時間の 10.22% を消費しているとします。この時間が想定した時間より長いのであれば、調査してみる必要があります。

ヒープサマリーのまとめ

ヒープ使用量の分析は、ヒープサマリービジュアライゼーションに表示されます。これは、ヒープに割り当てられているオブジェクト(独自のドメインクラス、ライブラリまたは JDK が所有するオブジェクト)を示します。

アプリケーションパフォーマンスの異常と一般的な問題を発見する
 クリックして拡大

ヒープサマリーは、特定時間の間にヒープに割り当てられたすべてのオブジェクトを、サイズ、カウント、および時系列で視覚化します。たとえば、時系列のグラフが、午後 4 時 20 分に大幅に増加し始める 2 つのオブジェクト (java.util.LinkedHashMap$Entry および java.land.UUID) を示していれば、メモリリークの可能性があることがわかります。この上昇傾向が続く時にチェックを外すとメモリ不足の状態になる可能性があります。

インテリジェントな推奨事項

CodeGuru Profiler は、アプリケーションのパフォーマンスの問題を自動的に識別し、その修正方法に関する ML を利用した推奨事項を提供します。これらの推奨事項は、コード内で最もコストがかかる手段またはリソースを集中的に使用している手段を特定して最適化するのに役立ちます。ユーザーがパフォーマンスエンジニアリングの専門家である必要はありません。最適化を行うことで、インフラストラクチャのコストを削減し、レイテンシーを短縮し、エンドユーザーエクスペリエンス全体を改善するのに役立ちます。

インテリジェントな推奨事項
 クリックして拡大

アプリケーションのパフォーマンスを最適化する機会を特定すると、Amazon CodeGuru Profiler は、変更を推奨する理由、問題の原因、解決方法を説明し、さらにこの問題がアプリケーションに影響を与えるコード内の場所を明らかにします。この推奨事項を見ることで、コストが高いコード行が毎年 182,160 USD の予算を必要とし、CPU 使用率に 2.97% の影響を与えていることがわかります。このソリューション提案にある手順を実行することで、最大で 182,160 USD の節約が可能になります。

異常検出

Amazon CodeGuru Profiler は、アプリケーションプロファイルをリアルタイムで継続的に分析し、アプリケーションやメソッドの動作から異常を検出します。各異常の追跡結果は、CodeGuru Profiler コンソールの [Recommendation] (推奨事項) レポートに記載されます。ユーザーはこれにより、異常が明確に現れる時点でのメソッドのレイテンシーの振る舞いを、時系列的に確認することができます。また、新たな異常が検出されたときに通知を送るように、Amazon SNS を設定することもできます。

異常検出
 クリックして拡大
Standard Product Icons (Features) Squid Ink
Amazon CodeGuru の料金の詳細

Amazon CodeGuru の料金ページをご覧ください。

詳細 
Sign up for a free account
無料のアカウントにサインアップ

AWS 無料利用枠にすぐにアクセスできます。 

サインアップ 
Standard Product Icons (Start Building) Squid Ink
コンソールで構築を開始する

AWS マネジメントコンソールで Amazon CodeGuru の構築を始めましょう。

サインイン