循环的复雑度とは

循环的复雑度(サイクロマティック复雑度,圈复杂度)とは,ソフトウェア品质を测定するソフトウェアコードメトリクスのひとつで,プログラムの复雑度を测定するものです.Thomas J.麦凯布によって1976年に考案されました。线形的に独立な経路の数を数値化するもので,例えば,ソースコード内に条件が1つの如果文のような决定论理が1つある场合,如果文が真の场合と如果文が伪の场合があり,线形的に独立したパスは2つとなります。

循环的复雑度の重要性

循环的复雑度が高くなると,プログラムは复雑になります。バグの混入リスクや発见されたバグの修正にかかる时间が増え,修正で新たなバグが购入する可能性も増えるため,再利用が困难になります。
循环的复雑度を计测し,低く保つことで,プログラムの可読性,保守性,移植性は高まります。また,テストに必要なテストパターンの数も减るため,カバレッジも上げることができます。

循环的复雑度の目安

循环的复雑度
复雑さの状态
バグ混入确率
10以下
非常に良い构造
25%
30以上
构造的なリスクあり
40%
50以上
テスト不可能
70%
75以上
いかなる変更も误修正を生む
98%

循环的复雑度を下げるために

循环的复雑度を低减する一つの手段として,リファクタリングによる简略化があげられます。
リファクタリングとはプログラムの振る舞いを変更せず,コードの内部构造を改善することです。例えば,大规模关数内に复数回现れる处理をコンポーネント化し,关数を整理します。
リファクタリングにより,コードの可読性の向上やテストのしやすさにも系がります。
循环的复雑度を高くしている关数を见つけてリファクタリングすることにより,コードの品质向上が见込まれます。

ソフトウェアテストを支援する静的解析ツールPolyspace

静的解析ツールPolyspace®は,プロジェクトレベル,ファイルレベルおよび关数レベルで,以下のようなソフトウェアメトリクスの测定をサポートします。

  • 循环的复雑度
  • 关数结合
  • コメント密度
  • コールレベル
  • パス数
  • CWEマッピング

また,以下のソフトウェアメトリクス测定关连タスクで,高品质なコードの完成を支援します。

  • ソフトウェアの各バージョンやビルドに対するソフトウェアメトリクスの生成
  • 网络ダッシュボードによるソフトウェアメトリクスの管理
  • 阈値设定によるソフトウェア品质目标の定义と,改善率测定による达成までの进行状况の追迹

Polyspace网络ダッシュボードで表示されたソフトウェア品质メトリクス

さらに,Polyspaceは循环的复雑度やその他のソフトウェアメトリクスの测定の他,下记の解析机能を提供し,ソースコード解析を强力にサポートします。

  • 目视での発见が困难な,ランタイムエラー,并列处理问题,セキュリティ脆弱性およびその他の欠陥の検出
  • MISRA®,JSF ++等のコーディング规约への准拠により,コーディングスタイルの一贯性を保ち,コードの可読性や保全性を向上
  • 制御フロー及びデータフローの详细情报や,关数コール図表や,データディクショナリーによる変数の书き込み·読み取りの追迹により,ソフトウェア実行时の振舞いを理解可能

详しくは,Polyspaceの制品ページをご覧ください。

参考:静的解析ランタイムエラーコードレビュー検证とテスト要求仕様のトレーサビリティ形式検证/形式手法