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がコードベースで何を明らかにするかをご覧ください
独自のプロジェクトで解析を実行:コーディング規格、アーキテクチャ検証、技術的負債、品質ゲート — 数分で。