Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コードの複雑さを定量的に評価してみた

Avatar for bqnq bqnq
October 09, 2025

 コードの複雑さを定量的に評価してみた

Avatar for bqnq

bqnq

October 09, 2025

More Decks by bqnq

Other Decks in Technology

Transcript

  1. 2 ⾃⼰紹介 EC事業部 プロダクトチーム 2025年 新卒⼊社 bqnq(ばな) Kikuchi Shinji 普段はRailsとMySQLと向き合っています。 •

    今⽇給料⽇だと浮かれていたら明⽇でした 💴 • チェーンソーマン レゼ編を⾒ました 💣🌺 • Twitter : @_bqnq
  2. 循環的複雑度 10 • Thomas J. McCabeによって提案された指標 • M = E

    - N + 2P E: エッジ数, N:ノード数, P:連結成分 循環的複雑度 (Cyclomatic Complexity: CC ) https://www.mccabe.com/pdf/mccabe-nist235r.pdf if (n == 0) { x += 1; } else if n >= 1 { x += 2; } else { x = 0; } else if if start x+=1 x+=2 x=0 end E = 8 N = 7 P = 1 M = 2
  3. 循環的複雑度の数値と実装の対応 11 循環的複雑度が⾼い実装と低い実装 条件分岐が複雑化するほど循環的複雑度も⾼くなる price = input() if price >

    10000: if price > 50000: tax = price * 0.2 else: tax = price * 0.15 else: if price > 5000: tax = price * 0.1 else: if price > 1000: tax = price * 0.05 price = input() rate = 0.0 if price > 50000: rate = 0.2 elif price > 10000: rate = 0.15 elif price > 5000: rate = 0.1 elif price > 1000: rate = 0.05 tax = price * rate if price % 2 == 0: tax += 50 print(price + tax)
  4. 調査結果の分析 19 1. 要件変更に伴い1つの関数への責任が増加 情報抽出 + エラーハンドリング + データ計算, ⽣成

    2. 条件分岐の複雑化 if → switch、多重if 3. 関数のネストの深さが増加。2層から6層へ CCが⾼くなった要因