AIモデルの「個性」がコード品質とセキュリティに与える影響

Theregister

コーディング支援のために設計された生成AIモデルは、それぞれが固有の「個性」を示し、それらが生成するコードの品質、セキュリティ、保守性に深く影響を与えます。これらのモデルは基本的な強みと弱みを共有していますが、個々のコーディングスタイルのニュアンスが異なる結果をもたらします。これには、より深い構造的問題を示す設計パターンである、問題のある「コードの異臭(code smells)」の生成も含まれます。

コード品質企業であるSonarによると、大規模言語モデル(LLM)を支援に活用するソフトウェア開発者にとって、これらのユニークな特性を理解することは極めて重要です。SonarのCEOであるTariq Shaukat氏は、モデルの能力全体を把握するためには、生のパフォーマンスだけでなく、その先を見る必要があると強調しました。彼は、各モデルの強みとエラーを起こしやすい傾向を認識することが、安全でセキュアな展開には不可欠であると述べました。

Sonarは最近、5つの主要なLLMをテストしました。AnthropicのClaude Sonnet 4と3.7、OpenAIのGPT-4o、MetaのLlama 3.2 90B、そしてオープンソースのOpenCoder-8Bです。この評価では、コーディング能力を評価するために設計された様々な課題を含む4,442のJavaプログラミングタスクが実施されました。「主要なLLMのコーディングの個性」と題されたレポートで発表された調査結果は、広範な業界の認識とほぼ一致しています。すなわち、生成AIモデルは、厳格な人間の監視とレビューと組み合わせて使用される場合、貴重なツールであるということです。

テストされたLLMは、標準的なベンチマークで様々なレベルの能力を示しました。例えば、HumanEvalベンチマークでは、Claude Sonnet 4が95.57%という驚異的な合格率を達成した一方で、Llama 3.2 90Bは61.64%と遅れをとりました。Claudeの強力なパフォーマンスは、有効で実行可能なコードを生成する高い能力を示唆しています。さらに、Claude 3.7 Sonnet(72.46%の正解率)やGPT-4o(69.67%)のようなモデルは、アルゴリズムやデータ構造の適用を必要とするタスクで技術的な腕前を示し、異なるプログラミング言語間で概念を転送できることも証明しました。

これらの強みにもかかわらず、レポートは共通の重大な欠陥、すなわち広範なセキュリティ意識の欠如を浮き彫りにしました。評価されたすべてのLLMは、驚くほど高頻度で、可能な限り最も高い重大度評価の脆弱性を生成しました。「ブロッカー」「クリティカル」「メジャー」「マイナー」を含むスケールで、生成された脆弱性は主に「ブロッカー」レベルであり、これはアプリケーションをクラッシュさせる可能性があることを意味します。Llama 3.2 90Bの場合、脆弱性の70%以上が「ブロッカー」と評価され、GPT-4oでは62.5%、Claude Sonnet 4では約60%でした。

最も一般的な欠陥には、パス・トラバーサルとインジェクション脆弱性があり、Claude Sonnet 4が生成したコードの問題の34.04%を占めました。これに続き、ハードコードされた認証情報、暗号設定の誤り、XML外部実体参照インジェクションが挙げられます。インジェクションの欠陥に苦労する原因は、モデルが信頼できないデータの流れをコードの機密部分に効果的に追跡できないことにあります。これは、通常の処理範囲を超える複雑な非ローカル分析です。さらに、トレーニングデータにそのような欠陥が含まれているため、ハードコードされた秘密を生成することがよくあります。ソフトウェア工学の規範に対する包括的な理解が不足しているため、これらのモデルはファイルストリームを閉じ忘れることも多く、リソースリークにつながりました。また、多数の「コードの異臭」を特徴とする、乱雑で複雑、保守が困難なコードを生成する傾向も示しました。

Sonarの分析により、各モデルの明確な「個性」が明らかになりました。

Claude 4 Sonnet は、ベンチマークテストの77.04%に合格する卓越したスキルにより、「シニアアーキテクト」という異名を得ました。その出力は通常、冗長で非常に複雑であり、経験豊富なエンジニアが洗練されたセーフガード、エラー処理、高度な機能を実装する傾向を反映しています。

GPT-4o は「効率的なジェネラリスト」と呼ばれ、信頼できる中堅の開発者として説明されています。最も深刻なバグは一般的に回避しますが、制御フローのエラーを犯しやすい傾向があります。

OpenCoder-8B は「迅速なプロトタイパー」として登場しました。最も簡潔なコードを生成し、行数も最少ですが、問題密度は最も高く、コード1000行あたり32.45の問題を抱えています。

Llama 3.2 90B は「果たされなかった約束」と評価され、61.47%という平凡なベンチマーク合格率と、70.73%という驚くほど高い「ブロッカー」レベルの重大度を持つ脆弱性が特徴です。

最後に、Claude 3.7 Sonnet は「バランスの取れた前任者」と名付けられました。72.46%という有能なベンチマーク合格率と高いコメント密度(16.4%)を誇ります。その強みにもかかわらず、このモデルもかなりの割合で「ブロッカー」レベルの重大度を持つ脆弱性を生成します。興味深いことに、Claude 4 Sonnetは新しいモデルであり、一般的なベンチマークではより良いパフォーマンスを示しますが、それが作成するセキュリティ脆弱性が「ブロッカー」レベルの重大度である可能性は、前任者のほぼ2倍です。

これらの固有の課題を考慮すると、Sonarのレポートは、AIが生成したコードを検証するためには、堅牢なガバナンスと徹底的なコード分析が単に推奨されるだけでなく、不可欠であると結論付けています。