コードを分析するエンジニア

静的コード分析とは

静的コード分析の説明

静的コード分析(SCA)とは、プログラムを実行せずに、コンピューターのソースコードにバグ、セキュリティー脆弱性、最適でないコードがないかをチェックする方法です。自動化ツールを使用してコードをスキャンし、高度な分析をリアルタイムで実行します。

ソースコード分析とも呼ばれる静的コード分析は、アプリケーションの実行前に論理エラーとメモリー・リークを特定し、デバッグ時間を短縮します。人間が見逃す可能性のある構文エラーや隠れたセキュリティー脆弱性を自動的にスキャンします。コーディング標準を適用し、大規模なチーム全体で規制遵守を確保するとともに、開発全体のスピードアップにも役立ちます。

静的コード分析は、動的コード分析とは対照的に、コードが実行される前に行われます。動的分析には、アプリケーションを実行し、その動作を観察することが含まれます。対照的に、静的分析ではソースコードを構造的なデータ・セットとして扱い、アプリケーションがコンパイル、パッケージ化、またはデプロイされる前にスキャンして問題を特定します。このアプローチは、プログラムの構造に基づいてプログラムがどのように動作するかをモデル化します。どちらの手法も、DevOpsまたはdevsecopsフレームワークにおける全体的な品質保証業務にとって重要です。

静的コード分析の仕組み

静的コード分析には、主に3つの段階があります。

1. 解析とAST生成

アナライザーはソースコードを読み取り、トークンに分解します。これらはパーサーに送られ、特定のプログラミング言語の文法ルールに照らして評価された後、階層型の抽象構文木(AST)に再構成されます。ASTはソフトウェアの構造を機械可読形式でマッピングします。

2. 制御フローとデータフロー分析

アナライザーは、実行パスをマッピングする制御フロー・グラフ(CFG)を構築し、データ・フロー分析と組み合わせて、初期化から使用までの変数の値の変化を追跡します。この段階で、アナライザーはデッド・コード(決して実行できないコード)などのエラーを発見する可能性があります。

3. ルールの適用

このツールは、ASTとフロー・モデルを使用して、コードをコーディング・ガイドラインとヒューリスティックに照らしてチェックします。その対象は、単純な命名規則から、SQLインジェクションにつながる可能性のある汚染されたユーザー・インプットを追跡する汚染分析のような、より高度なセキュリティー・チェックまで多岐にわたります。

AI Academy

AIの専門家になる

ビジネスの成長を促進するAIへの投資を優先できるように知識を習得します。今すぐ無料のAI Academyを試して、貴社のAIの未来をリードしましょう。

静的コード分析の進化

コンピューティングの初期には、コードの実行にコストがかかったため、開発者はデバッグに計算リソースを浪費する余裕がありませんでした。検証は全面的に人間の判断に頼っており、時間のかかる手作業のコード・レビューが行われていました。

1978年にBell LabsのStephen C. JohnsonがLintを開発したことは、現代の静的コード解析の始まりでした。LintはUnixオペレーティング・システム用に開発されたもので、コンパイル前にソースコードをスキャンし、疑わしい構造にフラグを立てるよう設計されています。

Lintは、プログラムのロジックを変更せずに削除すべき問題のあるコードを特定し、貴重な計算処理時間を節約しました。Johnsonは、衣類乾燥機のフィルターにたまる糸くず(lint)にちなんでLintと名付けました。これは、彼のツールがロジック(衣服の構造)を変更せずに、不要で問題のあるコード(lint)を取り除いたためです。

1990年代から2000年代にかけてインターネットが成長するにつれて、セキュリティー上の欠陥を軽減する必要性も高まりました。この需要を満たすための新しいツールが登場し、コードを数学モデルにコンパイルして変数の動きを追跡する、より複雑な形式の分析も行われました。これらの脅威に対処するために、静的アプリケーション・セキュリティー・テスト(SAST)などの新しいフレームワークが登場し、また、動的アプリケーション・セキュリティー・テスト(DAST)などの手法により、ランタイム評価が可能になりました。

これらの手法は数学的には正確でしたが、文脈を理解する能力が限られていたため、誤検知率が高いという問題がありました。2020年代の機械学習大規模言語モデル(LLM)の台頭は、数十億行のコードでモデルを訓練できる新たなコード解析の時代を切り開きました。このトレーニングにより、開発者の意図と意味的コンテキストを推測する能力が獲得されました。

従来、静的コード分析はリリース前に実行されるゲートキーパー・プロセスでしたが、現在、この分析はソフトウェア開発ライフサイクル(SDLC)全体で実行されています。この「シフト・レフト」哲学は、テストを「左」へと移動させ、コードの作成に近づけることを意味します。

現在、SonarQube、ESLint、GitHub Advanced Securityなどのコード分析ツールは、開発者のワークフローに不可欠な要素となっています。統合開発環境(IDE)内で実行され、開発者が入力するエラーにリアルタイムでフラグを立てます。また、継続的統合および継続的デプロイ、すなわちCI/CDパイプライン内の自動チェックポイントとしても機能します。

AIによる静的コード分析

機械学習を活用した最新のコーディング・アシスタントにより、高速かつほとんど目に見えない分散型のコード分析が可能になり、開発者はエラーを早期に発見し、リアルタイムでコードの品質を向上させることができます。例えば、IBM Bobには別のパネルで実行される「レビュー」ワークフローがあり、「コードの臭い」を自動的に検出してコーディング標準への違反にフラグを立てます。ユーザーは検出結果を無視することも、Bobに自動的に解決させることもできます。

戦略的プロンプトを通じて事前に分析を行うこともできます。例えば、開発者はコーディング・アシスタントに「バグを見つけて」と依頼するのではなく、特定の目標を念頭に置いてリポジトリーをレビューするよう依頼できます。アーキテクチャーのレビューでは、ディレクトリー構成、エントリー・ポイント、コンポーネント間の関係、全体的なテクノロジー・スタックをレビューするよう依頼し、詳細なドキュメンテーションを生成させることができます。データベース設計を分析するプロンプトによって、モダナイゼーションの目標を特定できます。専門的なプロンプトによって、データベース設計のレビューや移行分析、技術的負債の包括的なレビューを行い、問題に最も戦略的に対処する方法を提案できます。

執筆者

Cole Stryker

Staff Editor, AI Models

IBM Think

関連ソリューション
IBM Bob

セキュリティーで保護された意図認識型の開発を実現するAIパートナー、IBM®  Bobにより、ソフトウェア・デリバリーを加速します。

IBM Bobはこちら
開発者向けAIソリューション

企業向けツールを活用し、AIアプリケーションの開発、デプロイ、管理をより迅速に実行します。

開発者向けAIの詳細はこちら
アプリケーション・モダナイゼーション・サービス

インテリジェントなAIモダナイゼーションにより、レガシー・システムを再構築します。

アプリケーション・モダナイゼーション・サービスの詳細はこちら
次のステップ

生成AIと高度な自動化を活用し、企業向けのコードをより迅速かつ一貫性を持って提供します。Bobモデルは開発者のスキルを拡張し、モダナイゼーション・ワークフローの効率化や複雑な開発タスクの簡素化を実現します。

  1. AIコーディング・エージェントの紹介
  2. 開発者向けAIソリューションの詳細はこちら