機能
コード品質スキャナーはソースコードを分析し、コードベースの長期的な健全性に影響する具体的な問題を特定します。経験豊富なシニアエンジニアがすべてのファイルをレビューするように、手動レビューで見落とされがちな問題を検出し、実際に対応可能な改善に焦点を当てます。主な機能
- 自動コードレビュー:コードを詳細に分析し、保守性に影響する一般的な品質問題を確認
- 言語対応の分析:プログラミング言語ごとのコンテキストと慣習を理解
- フレームワーク検出:一般的なフレームワークを認識し、固有のベストプラクティスを適用
- 重大度分類:影響(High、Medium、Low)に基づいて問題を優先順位付け
- CWEマッピング:標準化された分類のため、問題をCommon Weakness Enumeration(CWE)にマッピング
見つけられるもの
コード品質スキャナーは、幅広いコード品質の問題を特定します。一貫した分類を行うため、すべての検出結果をにマッピングします。文法と明瞭さの問題
文法と明瞭さの問題
- コードコメント、変数名、文字列内のタイプミスやスペルミス (CWE-1078)
- 実際のコード動作と矛盾する、または古い可能性のある不正確または誤解を招くコメント (CWE-1116)
example.js
コードクリーンネス
コードクリーンネス
- 目的のない空のコードブロック (CWE-1071)
- 未使用変数、インポート、コードベースを混乱させるデッドコード (CWE-563、CWE-1041)
- エラーを握りつぶす空の例外ブロック (CWE-1069、CWE-390)
- 実行されることのない到達不能コード (CWE-561)
example.py
コードの重複と再利用性
コードの重複と再利用性
- 共有関数にリファクタリングすべき重複コード (CWE-1041)
- オブジェクト内の重複キーやリテラル、および定数にすべきマジックナンバー (CWE-1078)
- 原則に反するコード - 保守の負担を増やす重複ロジック
パフォーマンスの問題
パフォーマンスの問題
- パフォーマンスを低下させるループ内の文字列連結 (CWE-1046)
- 非効率な処理 および不必要なリソース消費(CWE-1050)
- 頻繁に実行されるコードパスのパフォーマンスボトルネック
Example.java
設計とアーキテクチャ
設計とアーキテクチャ
- パラメーターが多すぎる関数(6個以上のパラメーター)など、設計上の問題を示すコード(CWE-1064)
- 正しく使うのが難しい過度に複雑な関数シグネチャ
- モジュール間の循環依存関係 (CWE-1047)
コードの複雑さと可読性
コードの複雑さと可読性
- 分かりやすくするために分解すべき複雑な1行の文 (CWE-1120)
- 理解しづらい過剰な分岐を伴う深くネストされたロジック
- 意図が不明確になるほど汎用的なヘルパー関数
- KISS原則
命名と慣習
命名と慣習
- コードの理解を難しくする一貫性のない命名規則 (CWE-1099)
- 「obj」「x」「data」などの汎用的で記述的でない変数名
- 同じコードベース内でのcamelCaseとsnake_caseの混在
論理と正確性
論理と正確性
- 誤った挙動を引き起こす論理エラー (CWE-670)
- 誤った結果を生み出す不正確なデータ処理
- 実装ミスにより意図どおりに動作しないコード
未完了の実装
未完了の実装
- TODOコメント およびプレースホルダーコード(CWE-1071)
- 問題を引き起こす可能性のある未完成の機能
- 対応が必要な未完了の実装
仕組み
1. ファイル解析
スキャナーはコードベースの各ファイルを個別に処理し、ファイル構造、言語、検出されたフレームワークのコンテキストを踏まえてソースコード全体を分析します。2. AI搭載レビュー
コードレビュー用に訓練された高度な言語モデルを使用し、確立されたソフトウェアエンジニアリングの原則とベストプラクティスに照らしてコードを検証します。AIは次の要素を理解します。- 言語固有の慣用句と慣習
- フレームワークパターンとベストプラクティス
- コード複雑さおよび保守性の指標
- 業界標準のソフトウェア設計原則
3. 問題の特定
潜在的な問題が見つかった場合、スキャナーは次の処理を行います。- 関与するコードの正確な行を特定
- CWE基準を用いて問題タイプを分類
- 適切な重大度レベルを割り当てる
- 問題とその影響について明確な説明を生成する
4. 高信頼度の検出
- スキャナーは、信頼度が90%以上の問題だけを報告します。この高いしきい値により、推測ではなく、正確で対応可能な検出結果だけを提示します。
誤検知抑制
コード品質スキャナーには、意味があり対応可能な検出結果だけを提示するための高度な誤検知抑制機能があります。内蔵フィルター
セキュリティ問題排除:スキャナーはセキュリティ脆弱性(SQLインジェクション、XSS、認証問題など)を明確に除外します。これらはCorgeaの専用のセキュリティスキャナーが処理しているからです。これにより、コードの品質とセキュリティ検出結果の重複や混乱を防ぎます。
スタイル上の好みを除外:波かっこの配置、インデント、空白など、軽微なスタイル上の違いは報告しません。スキャナーはフォーマットの好みではなく、実質的な品質問題に焦点を当てます。
コンテキストの理解
スキャナーは誤検知を避けるためにコードコンテキストを把握します:- 「空」ブロックが意図的であること(例:プレースホルダー実装)を認識します
- 問題に見えるかもしれないフレームワーク固有のパターンを理解する
- 特定のプログラミング言語で許容される言語イディオムを考慮する
自動修復
コード品質の問題が特定された場合、Corgeaは迅速かつ一貫して問題を解決するための 自動修復機能 を提供します:何が修復されるのか
自動修復システムは、以下を含む多くの一般的なコード品質問題を修正できます:- クイックウィンズ
- 構造的改善
- ベストプラクティス
- 未使用変数やインポートの除去
- マジックナンバーを命名定数に変換する
- 変数名やコメントの誤字修正
修復の仕組み
- 問題のコンテキスト:問題のあるコードだけでなく、コードベース全体におけるその役割も含めて、各問題のコンテキストを分析します
- 安全な修正:自動修正は安全であり、既存の機能を維持するよう設計されています
- コードスタイルの維持:既存のコードスタイルと慣習に合わせて修正します
- 適用前のレビュー:どの修正を適用するかをユーザーが完全に制御できます
脆弱性スキャンとは別物
主な違い
なぜ両方が重要なのか
- セキュリティ:アプリケーションを攻撃者から保護
- コード品質:コードベースの保守性、パフォーマンス、信頼性を維持
重大度レベルの説明
- 重大度が高い
- 中程度の重大度
- 重大度:Low
クラッシュ、深刻なパフォーマンス問題、重大なバグを引き起こす問題:
- エラーを隠す空のキャッチブロック
- 無限ループ
- 常に失敗する論理
- 重大なパフォーマンスボトルネック
はじめに
コード品質スキャナーは開発ワークフローにシームレスに統合されます:1
リポジトリを接続
GitHub、GitLab、Azure DevOps、またはBitbucketを使用してコードリポジトリをCorgeaに接続します。
2
自動スキャン
スキャナーは自動的にファイルを分析します
3
検出結果を確認
プロジェクトダッシュボードで、明確な説明と重大度が付いた問題を確認します。
4
修正を適用する
自動修復を使用するか、問題を手動で修正します。
5
進捗を追跡
コード品質が時間の経過とともに改善しているかを確認します。
関連ドキュメント
AIネイティブ SAST
Corgeaのセキュリティ脆弱性スキャン機能
自動修正
すべてのスキャンタイプにおける自動修復の仕組み
誤検知管理
誤検知を効果的に管理・抑制する
問題管理
プロジェクト全体の問題を追跡・管理できます
