コード検証とは何ですか?
コード検証とは、ソフトウェアが意図された設計や要件を正しく実装していることを確認するプロセスです。安全性が極めて重要な開発においては、このプロセスはライフサイクルを通じて継続的に行われ、各段階において文書化された証拠が作成され、それが適合性評価の根拠として活用されます。
検証および妥当性確認:要約版
この2つの用語はしばしば同じ意味で使用されますが、それぞれが扱う問いは異なります。
- 「検証」では、次のような問いを投げかけます。「ソフトウェアは正しく構築されたか? 実装は仕様と一致しているか?」
- 一方、バリデーションでは、「適切なソフトウェアを構築できたか?」「実際のユーザーのニーズを満たしているか?」という点を問います。
コード検証は前者に焦点を当てています。静的解析、構造化レビュー、動的テストを使用して、実装が設計や仕様を忠実に反映していることを確認します。
コード検証の内容
包括的な検証戦略では、通常、互いに補完し合ういくつかの活動を組み合わせます。
静的コード解析
ソースコードは実行せずに検査されます。PC-lint Plus などのツールは、テスト開始前に、コーディング標準への違反、ヌルポインタの参照、配列の境界外アクセス、未定義の挙動、その他数百種類に及ぶ欠陥をスキャンして検出します。静的解析の詳細
単体テスト
個々の関数、モジュール、クラス、およびコンポーネントは、個別にテストされます。開発者は、通常の入力、境界条件、およびエラーケースにわたって、動作が正しいことを検証します。VectorCAST などのツールを使用すると、テストの作成と実行を自動化し、テストによってコードがどの程度網羅的に検証されているかを測定することができます。ユニットテストについてさらに詳しく
コードカバレッジ測定
ステートメント、ブランチ、MC/DC などのカバレッジ指標は、テストスイートがコードを十分に実行していることを示す証拠となります。規制対象の業界では、特定のカバレッジレベルを達成することは、単なる目標ではなく、必須要件となります。コードカバレッジについて詳しくはこちら
要件のトレーサビリティ
各テストケースは、それが検証する要件と関連付けられています。双方向のトレーサビリティにより、すべての要件がテストされており、目的のないテストが存在しないことが示されます。これは、あらゆる安全監査において極めて重要な要素です。
なぜ検証を後回しにしてはいけないのか
コード検証の段階で発見された不具合は、統合テスト、システムテスト、あるいはフィールドで発見された不具合に比べ、修正にかかるコストが大幅に低くなります。リコールコストや安全上の影響が甚大になり得る組込みソフトウェアにおいては、体系的な検証を通じて早期にエラーを検出することは、経済的にも倫理的にも不可欠です。
ISO 26262、DO-178C、IEC 61508、IEC 62304 などの業界標準では、すべて、追跡可能な証拠を伴う文書化された検証活動を義務付けています。ベクターのツールは、これらの要件を満たすために特別に開発されています。