ソースコード構造解析ツール『Understand』は、大規模で複雑なプログラムを素早く解析するための多彩な機能を搭載しています。 アーキテクチャから個々のクラスや関数まで、あらゆるレベルでソースコードを解析し、プログラムの制御フローや構造、クラス継承、関数や変数の関係など、さまざまな角度から見える化します。

車載ソリューションの記事紹介

テクマトリックスでは車載ソフトウェア開発向けのソリューションを提案しています。
ツールチェーンとしてUnderstandが含まれていますので、ご関心のある方は「こちらの記事」をご覧ください。

2016/09/30

デッドコードを検出する

デッドコード(到達不能コードとも呼ばれます)は、ソースコードには存在していても、決して実行されないコードのことです。
デッドコードはサイズが無駄なだけでなく、デッドコードと気付かずに修正して無駄な労力を費やす、デッドコード内の関数を誤って呼び出しバグが発生する等の弊害を生むことがあります。
デッドコードを検出し、削除することで、このような弊害を防ぐことができます。

レビューなど目視でデッドコードを検出するには大変な労力がかかるため、多くのコンパイラや単体テストツールがデッドコードの検出機能を提供しています。 弊社が取り扱っている静的解析・単体テストツール C++testdotTESTJtest でも提供しており、条件分岐など処理構造を解析してデッドコードを検出することができます。

Understandでは、条件分岐など処理構造を解析した厳密なデッドコード検出はできません。 ただし、未使用関数や未使用変数を検出することができるため、関数や変数単位の粗い粒度であればデッドコードを検出することができます。

以下、未使用関数や未使用変数の検出方法を2つご紹介します。
  • エンティティフィルターによる未使用関数の検出方法
  • レポートによる未使用関数や未使用変数の検出方法


補足:「未使用関数」と「未使用変数」の定義


本文章内においては、以下のように定義しています。
  • 未使用関数とは、宣言されているが他の関数から呼出しがない関数です。
    • 未使用関数から呼び出される関数は、実際は使用されていない関数ですが、Understandでは未使用関数として検出されません。

  • 未使用変数とは、宣言されているが参照されていない変数です。
    • 値が設定されていても、参照されていなければ未使用変数です。
    • 未使用関数から参照される変数は、実際は使用されていない変数ですが、Understandでは未使用変数として検出されません。


エンティティフィルターによる未使用関数の検出方法


この方法では、未使用関数は検出できますが、未使用変数は検出できません。
検出手順は以下となります。
  1. Understandメニュー[表示]-[エンティティフィルター]を選択します。
  2. 開いたエンティティフィルター画面の「表示」のドロップダウンメニューから、 [Unused Methods]を選択します(プログラミング言語により[Unused Functions]や[Unused Subprogams]など名前が変わります)。

レポートによる未使用関数や未使用変数の検出方法


この方法では、以下の未使用関数未使用変数のレポートを、HTML形式やテキスト形式で出力することができます。

  • Unused Objects and Functionsレポート
    ファイル毎の未使用関数未使用変数とそれらの宣言行をすべて列挙し出力します。
    加えて、エンティティの種類(Function、Global Objectなど)を出力します。

  • Unused Objectsレポート
    ファイル毎の未使用変数とその宣言行をすべて列挙し出力します。
    エンティティの種類は出力されません。

  • Unused Program Unitsレポート
    ファイル毎の未使用関数とその宣言行をすべて列挙し出力します。
    エンティティの種類は出力されません。

レポート出力手順は以下となります。
  1. Understandメニュー[レポート]-[レポートの設定]を選択、 プロジェクトの設定画面で、前述の3つの中で必要なレポートのチェックボックスをオンにします。

  2. Understandメニュー[レポート]-[レポートの生成]を選択して開いたプロジェクト レポートダイアログから[レポートの生成]を選択します。

  3. プロジェクト レポートダイアログから[HTML レポートの表示]または[テキスト レポートの表示]を選択します。
    ※Understandメニュー[レポート]-[レポートの表示]から[HTML]または
     [テキスト]の選択でも、レポートを表示することができます。

  4. 表示されたレポートを参照します。
    以下は[Unused Objects and Functions]レポートを表示した例です。

  5. 【HTML形式】


    【テキスト形式】



まとめ


未使用関数や未使用変数の検出方法は以上となります。

本格的なデッドコード検出には、コンパイラや単体テストツールを利用いただくことをお勧めしますが、 簡易的なデッドコード検出で済む場合には、Understandの未使用関数や未使用変数の検出機能を是非ご利用ください。