静的コード検証と動的コード検証
静的解析と動的テストは、同じ問題の異なる側面に対処するものです。静的解析は、実行前にソースコードの欠陥を発見します。動的テストは、実行中の正しい動作を確認し、テストがコードをどの程度網羅的に実行しているかを測定します。開発パイプライン全体でこれらを使用することで、一方が見逃した欠陥のクラスをもう一方が検出できるようになります。
静的コード検証
静的検証とは、ソースコードを実行せずに解析する手法です。コードの静的解析ツールは、コードの構造やロジックを直接検証することで、テストを1回も実行する前に、潜在的な欠陥、セキュリティ上の脆弱性、およびコーディング標準への違反を特定します。
静的解析で何が検出されるか
- ヌルポインタの参照および配列の範囲外アクセス
- MISRA C、AUTOSAR C++、CERT-C などのコーディング標準への違反
- 初期化されていない変数および不適切な型変換
- 到達不可能なコードおよび論理エラー
- CWE分類にマッピングされたセキュリティ上の脆弱性
主な利点
- ビルドや実行を必要とせず、ソースコードに対して直接処理を行います
- 開発の初期段階から、ビルドパイプライン内で継続的に実行されます
- 早期に統合すれば、欠陥1件あたりのコストを大幅に抑えられます
- ランタイム条件や入力データにかかわらず、一貫性があり再現性のある結果を生成します
PC-lint Plusは、ベクター社が提供するCおよびC++コード向けの静的解析ツールです。IEC 61508およびISO 26262の認証を取得しており、MISRA、AUTOSAR、CERT-C、CWEを標準でサポートし、ほぼすべてのビルド環境に統合可能です。
動的コード検証
動的検証とは、ソフトウェアの実行中にその動作を検証する手法です。定義されたテストケースに基づいてコードを実行し、実際のランタイム挙動を監視するとともに、要件に対してテストがコードをどの程度網羅的に検証できているかを測定します。
動的テストがもたらすもの
- 実際の環境およびシミュレーション環境において、コードが正しく動作することを確認すること
- 安全規格で要求される、ステートメント、分岐、およびMC/DCを含むコードカバレッジ測定
- スタックオーバーフローやタイミング違反などのランタイムエラーの検出
- テスト結果と、その検証対象となった要件との間の要件トレーサビリティ
主な利点
- ソースコードの構造だけでなく、実際のランタイム挙動も検証します
- ISO 26262 や DO-178C などの標準において、構造カバレッジの証拠として要件とされています
- ホストベースおよびターゲットベースの両方のテスト環境に対応しています
- CI/CDパイプラインに統合され、継続的な自動実行を実現します
VectorCASTは、組込みC、C++、およびAdaソフトウェア向けの、Vector社が提供する動的テストおよびテスト自動化プラットフォームです。このプラットフォームは、単体テストを生成し、管理し、実行するほか、業界標準レベルでのコードカバレッジを測定し、安全認証に必要な監査可能なレポートを作成します。
なぜ両方が必要なのか
静的解析と動的テストには、それぞれ明確な適用範囲があります。静的解析はソースコードを対象とし、実行前に欠陥を特定します。動的テストは実行中のソフトウェアを対象とし、実際の条件下での正しい動作を確認します。この両方を使用する開発プロセスでは、それぞれの手法が最も効果を発揮する段階で欠陥を検出することができます。そのため、ISO 26262、DO-178C、IEC 61508、およびIEC 62304では、これらを別個の検証活動として義務付けています。