最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

デッド コードおよび定数が畳み込まれたコードの検出

テスト ファイルのシミュレーション中に、固定小数点コンバーター アプリはデッド コードまたは定数が畳み込まれたコードを検出します。アプリは、浮動小数点の MATLAB® コードから固定小数点の MATLAB コードにコードを変換するときに、コード カバレッジ情報を使用します。コード カバレッジの結果を確認すると、テスト ファイルがアルゴリズムを適切に実行しているか検証できます。

実行されない領域と変換されない領域に印を付けるために固定小数点コードにはインライン コメントが挿入されます。生成される固定小数点変換 HTML レポートにコード カバレッジ情報が追加されます。アプリのエディターで、コードの左側に色分けされたバーが表示されます。次の表では色分けを説明します。

カバレッジ バーの色意味

以下のいずれかに該当します。

  • エントリポイント関数が複数回実行され、コードが 1 回を超えて実行される。

  • エントリポイント関数が 1 回実行され、コードが 1 回実行される。

さまざまな緑の色調は、行の実行回数の各範囲を示しています。最も濃い緑の色調は、最大の範囲を示しています。

オレンジエントリポイント関数が複数回実行され、コードが 1 回実行される。
コードが実行されない。

デッド コードとは

デッド コードとは、シミュレーション中に実行されないコードです。デッド コードは次のシナリオの結果として生じる場合があります。

  • 到達しない意図された特殊ケースを含む防御的コード

  • コード内の人的エラーによって生じたどのような実行パスによっても到達できないコード

  • 不十分なテスト ベンチの範囲

  • 定数畳み込み

デッド コードの検出

この例では、固定小数点コンバーターを使用してアルゴリズム内のデッド コードを検出する方法について説明します。

  1. ローカルの書き込み可能なフォルダーで関数 myFunction.m を作成します。

    function y = myFunction(u,v)
        %#codegen
        for i = 1:length(u)
            if u(i) > v(i)
                y=bar(u,v);
            else
                tmp = u;
                v = tmp;
                y = baz(u,v);
            end
        end
    end
    
    function y = bar(u,v)
        y = u+v;
    end
    
    function y = baz(u,v)
        y = u-v;
    end
    
  2. 同じフォルダーでテスト ファイル myFunction_tb を作成します。

    u = 1:100;
    v = 101:200;
    
    myFunction(u,v);
    
  3. アプリ ギャラリーから [固定小数点コンバーター] を開きます。

  4. [ソース ファイルの選択] ページで myFunction ファイルを探して [開く] をクリックします。

  5. [次へ] をクリックします。[入力の型を定義] ページで、作成したテスト ファイル myFunction_tb を参照して選択します。[入力の型の自動定義] をクリックします。

  6. [次へ] をクリックします。[固定小数点への変換] ページで [解析] をクリックし、エントリポイント関数のシミュレーションを実行して範囲情報を収集し、推奨されるデータ型を取得します。

    編集ウィンドウの左側にある色分けされたバーによって、コードが実行されたかどうかが示されます。u が v より大きくなることはないため、if ステートメントの最初の条件のコードはシミュレーションの最中に実行されません。if ステートメントが実行されることはないため、関数 bar が実行されることはありません。アルゴリズムのこれらの部分は赤いバーでマークされ、デッド コードであることが示されます。

  7. [変換] をクリックし、推奨されたデータ型を関数に適用します。

    固定小数点コンバーターによって固定小数点の関数 myFunction_fixpt が生成されます。生成された固定小数点コードでは、デッド コードとして識別されたコードの周囲にコメントが含まれています。[検証結果] ペインでは、より徹底したテスト ベンチを使用するように提案されます。

    固定小数点コンバーターによってデッド コードが検出された場合は、アルゴリズムが全体の範囲で実行されるようにテスト ファイルを編集することを検討します。テスト ファイルが既に入力変数の範囲全体を反映している場合は、アルゴリズムを編集してデッド コードを除去することを検討します。

  8. 固定小数点コンバーターを閉じます。

デッド コードの修正

  1. テスト ファイル myFunction_tb.m を編集してより広い入力範囲が含まれるようにします。

    u = 1:100;
    v = -50:2:149;
    
    myFunction(u,v);
    

  2. 固定小数点コンバーターを再度開きます。

  3. 同じ関数と編集したテスト ファイルを使用して変換プロセスを再び実行します。

  4. [解析] をクリックすると、今回は新しいテスト ファイルの入力範囲によってアルゴリズムのすべての部分が実行されたことがコード カバレッジ バーによって示されます。

    [変換] をクリックして変換プロセスを終了し、関数を固定小数点に変換します。