CppDepend
組み込みシステム — 事例紹介

事例紹介:CppDependによる組み込みファームウェアの複雑性管理と安全性確保

顧客は工場自動化や重機で使用されるスマートコントローラーを設計しています。そのファームウェアは圧力制御、障害検出などのタイミングに敏感な処理を担当し…

CppDependが標準でサポートする規格は? 組み込みルールセットの対象 MISRA C/MISRA C++, CWE, CERT C/CERT C++ および AUTOSAR C++14 — 他の規格は対象外です。このページで言及されているその他の規格(ISO 26262、DO-178C、IEC 62304、IEC 61508、JSF++ AV、NIST SSDF、ASPICE…)への準拠は、次によって実施されます カスタムCQLinqルール プロジェクト用に作成され、さらにアーキテクチャ検証とCI品質ゲートを組み合わせます。

事例紹介:CppDependによる組み込みファームウェアの複雑性管理と安全性確保

業界:組み込みシステム顧客プロフィール:スマートコントローラー向けファームウェアを開発する産業オートメーション企業領域:センサー監視およびアクチュエータ制御向けリアルタイム組み込みソフトウェアチーム規模:20名の組み込み開発者およびテスター言語:CおよびC++主要規格:MISRA C、CERT C、ISO/IEC TS 17961ハードウェアターゲット:ARM Cortex-M、RTOS(FreeRTOSベース)

課題

顧客は工場自動化や重機で使用されるスマートコントローラーを設計しています。そのファームウェアは、圧力制御、障害検出、産業プロトコル(CANopen、Modbus)経由の上位システムとの通信など、タイミングに敏感な処理を担当していました。

ファームウェアの進化に伴い、チームはいくつかの問題に直面しました:

  • 複雑で密結合したモジュールは、製品ライン間でのテストや再利用が困難でした。
  • MISRA Cおよび社内の信頼性ルールへの準拠は、スプレッドシートとチェックリストによる手動で実施されていました。
  • 開発者はメモリリスク、深い再帰、安全でない型変換を頻繁に導入し、それらは後期のテストまで検出されませんでした。
  • サードパーティベンダーのレガシードライバーとミドルウェアがアーキテクチャの境界を侵害し、システムの複雑さを増大させていました。
  • マネージャーは技術的負債やコードの健全性トレンドを把握できず、スプリント計画とリスク軽減が困難でした。

チームは、安全性と設計ルールの適用を自動化し、保守性を測定し、リスクの高いコードに早期フィードバックを提供するツールを必要としていました。オーバーヘッドの追加やシステムのリアルタイム制約の阻害なしに。

ソリューション:CppDepend

CppDependは、増大するファームウェアの複雑さをチームが制御し、長い製品ライフサイクルにわたるコードの安全性を確保するために導入されました。アーキテクチャ適用機能、トレンドダッシュボード、柔軟なCI統合により、より単純なリンターよりも選ばれました。

主な目標:

  • MISRA CおよびCERT C違反の検出を自動化
  • 隠れた循環依存とアーキテクチャリークを特定
  • 技術的負債、複雑性、コードチャーンを時系列で追跡
  • モジュール性と再利用のためのリファクタリングをガイド
  • テスト容易性とシステム認証ドキュメントをサポート

導入アプローチ

1〜2週目:ファームウェアベースライン

  • ファームウェアをスキャン(約30万LOC)
  • 検出:
  • 800件以上のMISRA違反
  • I/Oとビジネスロジック間の複数の循環依存
  • 循環的複雑度が高い、またはネストが過度な60以上の関数

3〜4週目:カスタムルール定義

  • 次を検出するために作成されたCQLinqルール:
  • 動的メモリまたはmallocの禁止された使用
  • 2レベルを超える深い再帰
  • ハードウェア抽象化レイヤー外でのvolatile使用
  • 設計レイヤールールを定義(例:HALはAppロジックに依存してはならない)

5〜6週目:CI統合とレポーティング

  • CppDependをJenkinsのナイトリービルドに追加
  • QAおよびファームウェアリードのレビュー用HTMLダッシュボードを生成
  • トレンドレポートを使用してコンポーネント間の忍び寄る複雑さを検出

6週間後の結果

指標CppDepend導入前6週間後
MISRA/CERTルール違反800+120
関数複雑性違反60+15
アーキテクチャルール違反40+8
レイヤリングに起因するリグレッションバグ頻繁稀
手動レビューのオーバーヘッド(平均/スプリント)約12時間< 3時間

成果とメリット

  • よりクリーンなアーキテクチャ:開発者は自信を持ってモジュールをリファクタリング・分離できるようになり、製品バリアント間での再利用が加速しました。
  • コード安全性の向上:深いネスト、安全でないキャスト、予期しないインクルードなどの高リスクパターンが早期に検出されました。
  • テスト容易性の向上:レイヤリングとモジュール性の適用により、チームは組み込みテスト用のユニットをより適切に分離できました。
  • 監査対応ドキュメント:レポートは社内品質監査と外部クライアントレビューで再利用されました。
  • 開発者の疲労軽減:コードレビューで互いを監視する代わりに、チームは一貫したルール適用をCppDependに任せられました。

なぜCppDependか?

CppDependは単なる静的解析ツールではなく、設計ガバナンスツールでした。これにより、チームはチェックリスト主導の受動的コンプライアンスから、プロアクティブで自動化された品質保証へと移行できました。

摩擦の少ない統合、豊富なコードモデル、カスタマイズ可能なルールにより、長期製品サポートを伴う深い組み込みソフトウェアに適していました。

まとめ

CppDependはチームが組み込みファームウェアの制御を取り戻すのを助けました。レビュー時間を削減し、モジュール性を高め、エンジニアとマネージャーの双方に、安全でスケーラブル、テスト可能な組み込みシステム(高信頼性の産業環境への展開準備が整った)を構築するために必要な可視性を提供しました。

← 組み込みシステムの概要に戻る

CppDependがコードベースで何を明らかにするかをご覧ください

独自のプロジェクトで解析を実行:コーディング規格、アーキテクチャ検証、技術的負債、品質ゲート — 数分で。