よくある質問(FAQ)

カバレッジ計測に 「埋め込みコード」を適用したいのですが、オブジェクトサイズが大きくなりマイコンのROM容量を超えてしまいます。どのようにすれば良いですか?

埋め込みコードについて

質問

MC/DC、C0、C1のカバレッジ計測に、オブジェクト構造の影響を受けない「埋め込みコード」の機能を使用したいのですが、埋め込みを行ったコードをコンパイルしたところ、オブジェクトサイズが大きくなりマイコンのROM容量を超えてしまいます。どのようにすれば良いですか?

回答

回避方法には以下の通りです。



1)埋め込みコードの適用範囲を制限する

埋め込みコードを適用する対象は、ソースファイル単位で柔軟に選択することが可能です。テスト対象の関数が含まれる最小限のソースファイルのみに限定して埋め込みを行うことで、オブジェクトコードサイズの増加を回避できます。

CasePlayer2 → [プロジェクトメニュー] → [埋め込みコードビルド環境生成]にて、表示されるダイアログの「埋め込みコードの設定」タブにて、テスト対象の関数が存在するソースファイルのみにチェックを入れて選択してください。(下図参照)

2)圧縮埋め込みの機能を使用する

カバレッジマスターには、埋め込みコードのサイズをさらに削減するための「圧縮埋め込みコード(フックコード)を使用する」という機能が用意されています。削減できるコードサイズはご使用のマイコンやコンパイラの最適化仕様によって異なりますが、このオプションをONにすることで、埋め込みコードの冗長性を最小限に抑え、生成されるオブジェクトコード全体のサイズをコンパクトに抑えることが可能です。

3)使用しているマイコンと同じシリーズの別型番で、ROM容量の大きい型番でコンパイルする

ターゲットマイコンのROM容量が不足する場合の回避策として、同じシリーズ内で、より大きなROM容量を持つ型番のマイコンを選択し、埋め込みコード用のオブジェクトファイルを生成するという手法があります。

埋め込みコードによるカバレッジ計測は、マイコン固有のオブジェクト構造には依存せず、コード内に挿入されたフック関数の実行によって処理されます。そのため、実機とは異なる上位型番の設定でビルド・実行した場合であっても、そのコードが正常に動作する互換性があれば、MC/DCのテスト結果に影響を与えることはありません。

製品実装と同一の設定である「実コード用」のビルド環境は変更せず、「埋め込みコード用」のビルド環境のみに、上記の上位型番を指定してオブジェクトを生成してください。テスト実行時、関数実行後の出力値の評価は、埋め込みコード側ではなく、並行してする実コード側から取得されます。したがって、カバレッジ計測以外の単体テスト結果に影響が及ぶ心配もありません。

4)上記の回避方法を使用してもROM容量を超えてしまう場合は、オブジェクトを調整する

埋め込み対象のソースファイルを1ファイルのみに限定してもROM容量をオーバーしてしまう場合は、テスト対象外の不要なオブジェクトファイルをリンク対象から外すなど、テスト実行に影響を及ぼさない範囲で全体のコードサイズを物理的に削減するアプローチが必要となります。

  • (参考)入門セミナー資料からの抜粋:(参考)埋め込みコードによるコードサイズ増加 PDF閲覧