静的解析により、コーディングガイドラインは単なる文書上の推奨事項ではなく、強制力のある技術的制約となります。PC-lint Plus は、ビルドのたびに MISRA C および C++、AUTOSAR、CERT-C、CWE に対してこの強制処理を自動的に適用するほか、クエリベースのカスタムルール機構を通じて、アーキテクチャに関するルール、命名規則、およびドメイン固有の安全要件など、プロジェクト固有の制約にも適用範囲を拡大します。
| ガイドライン | 目的 | PC-lint Plusがサポートするバージョン |
| MISRA C | 組み込みシステムおよび安全上重要なシステムにおける C 言語の安全性と信頼性 | MISRA C:2025、MISRA C:2023、MISRA C:2012(修正第1~4号)、MISRA C:2004 |
| MISRA C++ | 組み込みシステムおよび安全上重要なシステムにおける C++ の安全性と信頼性 | MISRA C++:2023、MISRA C++:2008 |
| AUTOSAR | AUTOSAR準拠の自動車用ECUソフトウェアのためのコーディング規則 | AUTOSAR 17 および 19 |
| CERT-C | C言語のセキュリティおよび信頼性に関するベストプラクティス | 静的に適用可能な CERT-C ルール |
| CWE | 一般的なソフトウェアおよびハードウェアの脆弱性のリスト | CWEトップ25、CWEトップ10、KEV(C/C++に関連するすべての項目)、CWE互換認定 |
| カスタムガイドライン | 組織固有のルールおよび制約 | AST検査によるクエリベースのカスタムチェック |
MISRA C および MISRA C++
MISRA(Motor Industry Software Reliability Association)は、安全上重要なソフトウェアや組込みソフトウェア向けに、最も広く採用されているコーディングガイドラインを公表しています。その名称は自動車業界に由来しますが、MISRAガイドラインは、CまたはC++が実装言語として使用される航空宇宙、医療、産業、鉄道などの開発分野でも広く使用されています。
MISRA Cは、Cプログラミング言語を対象としています。そのルールは、未初期化変数、暗黙的な型変換、到達不可能なコード、およびその他数百に及ぶ類似のパターンなど、組み込み環境において未定義、実装定義、あるいはその他の点でハザードとなる構文を排除するように設計されています。MISRA C++は、同様の規範をC++に拡張したものです。
このガイドラインは、言語標準の進化に合わせて更新されています。現在の版は、MISRA C:2025およびMISRA C++:2023です。
PC-lint Plus の MISRA 対応
- MISRA C: 2025
- MISRA C:2023
- MISRA C:2012(修正第1、2、3、4号を含む)
- MISRA C:2004
- MISRA C++:2023
- MISRA C++:2008
AUTOSAR
AUTOSAR(Automotive Open System Architecture)は、電子制御ユニット(ECU)向けの標準化されたシステムアーキテクチャを定義する、自動車業界のグローバルなパートナーシップです。そのC++コーディングガイドラインでは、異なるサプライヤーが提供するAUTOSAR準拠のECUに正しく統合されるC++コードを記述するための規則が規定されています。
AUTOSAR C++ガイドラインは、自動車用ソフトウェアシステムの文脈において、コードの品質、信頼性、および安全性について定めています。このガイドラインへの準拠は、異なるチームやサプライヤーによって開発されたコンポーネント間の相互運用性を支援するとともに、C++コードベースにおけるISO 26262機能安全規格への準拠に向けた道筋を提供します。
PC-lint Plusは、AUTOSAR17およびAUTOSAR19を標準でサポートしています。
CERT-C
CERT-C コーディング標準は、カーネギーメロン大学ソフトウェア工学研究所(SEI)の CERT 部門によって策定されました。これは、特にセキュリティ上の脆弱性や信頼性の故障に焦点を当てた、C 言語向けのコーディングガイドラインおよびベストプラクティスを提供しています。
CERT-Cは分野を問いません。安全で信頼性の高いCコードが求められる航空宇宙、自動車、医療、金融分野のソフトウェアで広く使用されています。また、コモン・クライテリアやISO 27001の適合性評価フレームワークにおいて認められており、安全性とセキュリティの両方をカバーする必要があるプロジェクトでは、MISRA Cと併せて採用されることがよくあります。
PC-lint Plusは、CERT-Cの静的に適用可能なガイドラインの多くをサポートしており、標準のセキュリティおよび信頼性に関するルールの広範な範囲を網羅しています。
CWE:共通脆弱性一覧
CWEは、NISTおよびCISAのデータをもとに、コミュニティによって維持・管理されている、一般的なソフトウェアおよびハードウェアの脆弱性タイプのリストです。その目的は、脆弱性を周知することで、デプロイメント後に発見されるのではなく、開発段階で排除できるようにすることです。
「CWE 最も危険なソフトウェア脆弱性トップ25」および「CWE KEV(既知の悪用済み脆弱性)トップ10」リストは、開発チームやツールベンダーに対して優先的に対処すべき対象を示しています。CWE互換性の認証は、静的解析ツールがこれらのリストに掲載されている脆弱性を、文書化され検証可能な方法で網羅していることを証明するものです。
PC-lint Plus バージョン 2.1 以上は、CWE 互換性が認定されています。本製品は、CWE トップ 10 KEV 脆弱性リストに掲載されている C および C++ に関連するすべての脆弱性、ならびに CWE トップ 25 の大部分を網羅しています。
カスタムコーディングガイドライン
公開されているコーディング標準は、一般的な欠陥の種類や言語上のハザードを網羅しています。また、ほとんどのプロジェクトには、そのアーキテクチャ、組織、またはドメインに特有の制約があり、これらは公開されているガイドラインの範囲外となります。PC-lint Plus は、クエリベースのカスタムルール機構を通じて、MISRA や AUTOSAR のルールと同様に、プロジェクト固有の制約に対しても静的な検証を行うことで、これら両方をサポートしています。
PC-lint Plusのクエリシステムは、解析中に生成される抽象構文木(AST)を走査し、静的型付けされたドメイン固有言語を使用して、チェックの対象を正確に指定します。カスタムルールにより、アーキテクチャ上の制約を強制したり、アンチパターンをフラグ付けしたり、組織固有の安全ルールを定義したりすることができます。
この同じクエリメカニズムは、正当な例外を定義するためにも使用されます。これは、ルールカテゴリ全体を無効化する広範な抑制ではなく、特定の条件が満たされた場合にのみ適用される、正確でパターンに基づいた抑制です。これにより、抑制ファイルは整理され、監査可能で、意図的なものとなります。
抑制管理と監査対応の準備
既存のコードベースに対して静的解析を行うと、レビュー、正当化、または抑制が必要な検出結果が明らかになります。これらの判断を管理するための体系的なアプローチがなければ、抑制ファイルには古くなった例外が蓄積され、正当化された逸脱は記録されず、設定は当初の監査で承認された状態から逸脱してしまいます。
PC-lint Plusでは、個々の検出結果、コード領域、ファイル、およびルールカテゴリの各レベルで抑制設定が可能です。すべての抑制設定は文書化および追跡が可能です。診断アカウンティング機能により、不要になった抑制設定にフラグが立てられ、監査の信頼性を損なう古い例外の蓄積を防ぐことができます。