SOLID未分類 コードカバレッジ機能(連載14)

コードカバレッジ機能(連載14)

(2023/9/19)

[連載14] コードカバレッジ機能

前回前々回と、例外が発生した場合の対応方法をご紹介しました。

今回は、コードカバレッジ機能についてご紹介します。

 

 

1.コードカバレッジ機能とは

画面を見るのが一番わかりやすいと思うので、以下URLから抜粋させていただきます。

https://solid.kmckk.com/SOLID/doc/latest/user_guide/code_coverage.html

こんな機能です。
プログラム開始しブレークするまでに、各行について実行したorしないを知ることができます。

何が嬉しいかというと、
「今のテストで全部のコード行通ったっけ?」
が、わかります。

テスト実施したはいいけど、全然通ってないコード行があると、そこはすなわちテストされてはいませんね。
そういうコード行をあぶりだすことができます。

加えて、実行した行の回数も見ることができます。
「ここほぼ通ってない」
とか、
「めちゃめちゃ通ってる。動きが遅いのはここがネックかも?」
とか、いろいろな分析に使う事が出来ます。
ちょっとしたプロファイル機能のようです。

このように、ソース行に着目したカバレッジ機能を、コードカバレッジ(C0カバレッジ)と言います。
SOLID-IDEでどのように使うのか、見ていきましょう。

 

 

2.動かしてみる

SOLID-IDEのコードカバレッジ機能については、すべてこのURLに記載されています。

https://solid.kmckk.com/SOLID/doc/latest/user_guide/code_coverage.html

この通りに実行してみます。
今回も前回に引き続き、Cortex-A9搭載ボード×PARTNER Jet2の組み合わせを使用します。

動作させるプログラムは以下のようにしました。
エリア①と判定文:何度も実行されるコード行
エリア②:一度だけ実行されるコード行
エリア③等:絶対に実行されないコード行

 

2.1 実行前の準備

①ビルドのソリューション確認

Clangでビルドする設定になっているかを確認します。

 

②コードカバレッジ有効化
プロジェクトとしてコードカバレッジを有効化するように設定します。
※後述しますが、ファイル単位の有効化も可能です。

まず、プロジェクトのプロパティを開きます。
このプロジェクトは「sample1プロジェクト」なので、sample1をポイントして右クリックすると以下のように表示されました。

プロパティを選択します。

すると、プロパティページが開きます。

構成として、Debug_clangを選択し、「C/C++」→「コードカバレッジ」と選択し、「コードカバレッジの有効化」を「はい」とします。

③ビルド
ビルドします。

実行前の準備は以上です。

 

2.2 実行

プログラムを実行します。
しばらく待って「すべて中断」を選択し強制ブレークします。
メニューから「デバッグ」→「ウインドウ」→「コードカバレッジ」を選択すると、コードカバレッジウインドウが開きます。

カバレッジを見るために、左上の「解析」ボタンを押します。

すると、このように表示されます。
ソースコードをクリックすると、ソースコードにもカバレッジ情報が表示されます。

ビューを「関数」に切り替えると、関数単位で表示されます。

 

 

3.オーバーヘッド

こちらに記載されている通りです。

https://solid.kmckk.com/SOLID/doc/latest/user_guide/code_coverage.html#id7

とても便利なカバレッジ機能ですが、気を付ける点もあります。
本機能実現のためには、カバレッジ情報記録用の処理が実行される必要があります。
したがって、処理時間やメモリ使用量にオーバーヘッドが存在します。

そのオーバーヘッド時間・量の多さは、カバレッジ記録する範囲によるので、カバレッジ取得範囲を少なくすればオーバーヘッドも減ります。

SOLID-IDEでは、カバレッジを取得する範囲をファイル単位で設定することができるので、オーバーヘッドを少なくしつつ効果的にカバレッジ機能を使用することができるようになっています。

 

 

4.まとめ

今回は、コードカバレッジ機能をご紹介しました。

カバレッジ情報には実行回数も表示されますので、ループ内の最適化など、実行性能の検討にも応用できますね。

コードカバレッジを取得する、というと、なんだか面倒な手順が必要がイメージがあるのですが、SOLID-IDEでは簡単に使えました。
結果の表示についても、視覚的でわかりやすかったです。

次回は、「静的解析」の予定です。