Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モデルの複雑度とコード複雑度のメトリクスの比較

循環的複雑度のメトリクスを使用して、システムの複雑度を解析します。このメトリクスは、システムに含まれる線形独立パスの数を測定することにより、システムの構造的複雑度を示します。システムの循環的複雑度を抑えることで、可読性、保守性、移植性を向上することができます。循環的複雑度は、モデルと、モデルから生成されたコードの両方について測定できます。コードとモデルの差異により、循環的複雑度のレベルが異なる可能性があることに注意してください。モデルの循環的複雑度を測定するには、メトリクス ダッシュボードとCyclomatic complexity metricを使用します。

メトリクスのしきい値

コードの複雑度のしきい値

手書きのコードによってアルゴリズムを開発する場合、コードの循環的複雑度を測定して、コードの可読性を評価します。コードの循環的複雑度が高いほど、理解および保守が難しくなります。コードの保守性を標準化するため、組織がコードの循環的複雑度を制限するしきい値を選択することがあります。たとえば、HIS コード複雑度メトリクス (Polyspace Bug Finder)に準拠するコードを記述する場合、コードの循環的複雑度がしきい値 10 以下であることをチェックします。

モデルの複雑度のしきい値

モデルベース デザイン ワークフローを使用してアルゴリズムをモデル化してコードを生成する場合、生成されたコードの循環的複雑度を測定する代わりに、モデルの循環的複雑度のメトリクスを使用して、システムの可読性を評価できます。Simulink® のグラフィカルなモデル化により、従来の手書きのコードよりも楽に複雑なアルゴリズムを管理できます。それを考慮して、モデルの既定の循環的複雑度メトリクスしきい値は 30 になっています。これは、標準のコードの複雑度しきい値である 10 よりも高い値です。モデルのメトリクスのしきい値を変更するには、メトリクス ダッシュボードのレイアウトおよび機能のカスタマイズを参照してください。

コードおよびモデルの複雑度の結果の比較

モデルの循環的複雑度は、生成コードの循環的複雑度より高くすることも、低くすることもできます。この差はモデルとコード生成のカスタマイズによります。複雑度の測定値に差が生じるパターンの一部には、次のものがあります。

  • モデルに含まれる余分なロジックを除去する、コード生成の最適化。これらの最適化により、コードの複雑度が低減されることがあります。

  • モデル メトリクスの解析では考慮されない、生成コードのエラー チェック。これらのエラー チェックにより、コードの複雑度が増大することがあります。

  • 特定のターゲット向けの生成コードに含まれる追加のロジック。このロジックにより、コードの複雑度が増大することがあります。

たとえば、モデル simulinkCruiseErrorAndStandardsExample を考えてみましょう。モデルを開くには、次を行います。

  1. プロジェクトを開きます。

    path = fullfile(matlabroot,'toolbox','shared','examples',...
    'verification','src','cruise');
    run(fullfile(path,'slVerificationCruiseStart'))

  2. プロジェクトからモデル フォルダーを開き、simulinkCruiseErrorAndStandardsExample を開きます。

このモデルには、チャート Compute target speed が含まれます。Polyspace® を使用してこのチャートのコードを生成して解析するには、コードの解析とソフトウェアインザループのテストを参照してください。

このコードについて Polyspace によって生成されるレポートには、循環的複雑度などのコード メトリクスが含まれています。チャートで生成されたステップ関数の循環的複雑度は 20 です。

モデルの循環的複雑度を測定するには、メトリクス ダッシュボードを使用します。

  1. メトリクス ダッシュボードを開きます。アプリ ギャラリーで [メトリクス ダッシュボード] をクリックします。

  2. [すべてのメトリクス] をクリックします。

  3. 循環的複雑度の詳細結果を表示するには、[モデルの複雑度] ウィジェットをクリックします。

モデルのチャートの循環的複雑度は 30 です。このチャートでは、コード ジェネレーターがロジックを統合してコードを最適化するため、生成コードの方がモデル内のチャートよりも循環的複雑度が低くなります。場合によっては、生成コードよりもモデルの方が循環的複雑度が低いこともあります。コード生成用のモデルを保守するときは、モデルの循環的複雑度を使用してシステムの複雑度を測定します。

参考

関連するトピック