コイル複雑度の低減-Cyclomatic Complexity


これまで開発されたモジュールはC++であり,機能も比較的簡単であるため,コード全体として簡潔明瞭で分かりやすい.最近、プロジェクトの原因のため、Cコードを熟知する必要があります.機能が比較的複雑なので、各関数は大きくて、数百行に1つです.その実行数は2番目で、コード自体が複雑すぎるのが一番嫌いです.簡単な例は次のとおりです.
void func()
{
    if (condition)
    {
        ...
        if (condition)
        {
               
        }
        ...
    }
}

みんなが何を見ているのか分かりませんが、これは輪の複雑さが高い関数です.ifネストを継続すると、現在問題がなくても、このコードは絶対に問題になりやすいと思います.
次のように変更すると、
void func()
{
    if (!condition)
        return;
        ...
    if (!condition)
        return;
        ...
}
のようなコードは読みやすくなったのではないでしょうか.
輪の複雑さを減らす方法をいくつか探しました.
1.関数の再編成
a.抽出関数-コード組織を独立し、関数を用いてカプセル化し、関数名によってコード作用を解釈する
b.あなたのアルゴリズムを置き換える-より簡潔なコードを使用して、複雑なアルゴリズムはbugの可能性の増加と理解性/メンテナンス性の低下を招き、関数がperformanceやresourceに対する要求が高くなければ、より簡単で明瞭なアルゴリズムを提唱することを覚えておいてください.
2.条件式の簡略化
a.条件式-複雑な条件式を分解し、関数を用いてカプセル化する
b.条件式-一連の条件式を結合し、同じ結果を得て、これらの条件式を結合することができ、できれば関数にカプセル化する.
c.繰り返し条件フラグメント-異なる条件のブランチをマージし、同じ処理を行い、ブランチ以外を抽出したり、関数としてカプセル化したりすることができる
d.制御タグの削除-制御タグを条件としてbreakとreturnで置換
3.簡略化関数呼び出しa.クエリー関数と修正関数を分離する-Simplest&&specificest関数の機能、多用性ではなく関数の多重性を強調する
b.関数にパラメータを持たせる-パラメータ関数を用いて、関数の多重性を強調する
c.パラメータの代わりに明確な関数を用いる-関数の機能性の明確性を強調する
d.多態置換条件式------Refactoring:Improving the Design of Existing Code