継続的検証とCI/CD
検証をCIパイプラインに組み込むことで、欠陥は発生した時点で検出され、統合ビルドや下流のコンポーネントに波及する前に発見されます。
組込みソフトウェアチームにとって、検証をCI/CDパイプラインに統合することは、コードのコミットが行われるたびに、静的解析、回帰テストの実行、コードカバレッジ測定、および品質ゲートチェックが自動的に実行されることを意味します。問題が発生してから数分以内にそれが明らかになるため、コードが新しい状態で、修正も容易に行えます。
パイプラインにおける静的解析
PC-lint Plusはコマンドラインツールとして動作し、あらゆるCI/CD環境に統合できます。出力フォーマットは完全にカスタマイズ可能であるため、分析結果をビルドシステム、課題管理ツール、ダッシュボードなどで活用できます。ソースコードに対して直接処理を行うため、ビルドや実行を必要とせず、最小限のオーバーヘッドでコミットごとに実行可能です。
PC-lint Plus Viewは、その可視性を開発環境に直接拡張します。コードのコーディング中に検出結果がインラインで表示されるため、欠陥やガイドライン違反は、後からビルドレポートで明らかになるのではなく、それらを引き起こした開発者に即座に認識されます。パイプラインで実行されるのと同じ分析が、同じルール設定に基づいてエディタ内でも実行されます。
PC-lint Plusは、コーディング標準への違反、ヌルポインタの参照、セキュリティ上の脆弱性、およびその他の欠陥クラスを、コードベースに現れたその瞬間、つまりそれらを引き起こしたビルドの段階ですぐにフラグ付けします。
自動テストの実行
VectorCASTは、Jenkins、Azure DevOps、GitLab、その他のCIフレームワークと連携します。Server Editionは、自動化された環境での並列テスト実行に最適化されており、対話型のテスト開発を妨げることなく、複数の構成にわたってテストを実行します。
変更ベーステスト
大規模なコードベースでは、コミットごとにテストスイート全体を実行することは現実的ではありません。VectorCASTの「変更ベーステスト(CBT)」は、変更の影響を受けるコードセクションを網羅する最小限のテストケースを特定し、それらのテストのみを再実行することで、この課題に対処します。
カバレッジの完全性は維持されます。CBTは、CIサイクルを短く保ちつつ、各変更の影響について迅速なフィードバックを提供します。必要に応じて、完全な回帰テストの実行をスケジュールすることも可能です。その合間にも、CBTは変更の影響に関する迅速なフィードバックを提供し、隙間を残すことなくCIサイクルを短く保ちます。
品質ゲートと傾向モニタリング
個々のテスト実行結果は、単一のビルドの状態を反映したものです。Squoreはプロジェクトの進捗状況をモニタリングします。リリースごとにカバレッジが向上しているか、静的解析の結果が蓄積されていないか、そして統合前にコードベースがカバレッジ要件を満たす軌道に乗っているかを追跡します。
Squoreは、基準を満たさないコードがパイプラインを通過するのを防ぐ品質ゲートを適用します。コミットによってカバレッジが定義された閾値を下回る後退が生じたり、静的解析の結果が設定された制限値を超えたりした場合、ゲートはビルドを停止し、チームにアラートを送信します。傾向分析により、リリースを遅らせる問題となる前に、品質の低下を早期に発見することができます。
コンプライアンスの恩恵
自動テストの実行、静的解析の実行、およびカバレッジ測定のたびに、何が、どの程度徹底して、どのような根拠に基づいて検証されたかを示す証拠が蓄積されていきます。この証拠は、監査を控えて慌てて行われる個別のコンプライアンス活動としてではなく、開発プロセスの副産物として蓄積されていくものです。
ISO 26262、DO-178C、IEC 61508、またはIEC 62304に基づいて作業を行うチームにとって、その実用的な影響は甚大です。以前のプロジェクトの終了時に数週間を要してコンパイルされていた認証の証拠が、今回のプロジェクト全体を通じて継続的に存在することになります。カバレッジのギャップは、まだ小さい段階で明らかになります。 静的解析の負債が、管理不能なレベルまで蓄積されることはありません。監査は、証拠を急いで作成する競争ではなく、既存のレコードを確認する作業となります。
PC-lint Plus、VectorCAST、Squoreは、それぞれが対応する標準の認証を取得しています。これらの出力結果は、追加の検証作業を必要とせずに、検証証拠として受け入れられます。これらをパイプラインに組み込むことで、コンプライアンスの証拠は、独立したプロジェクトではなく、エンジニアリングの実践から生まれる製品となります。