Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コードの複雑さを定量的に評価してみた
Search
bqnq
October 09, 2025
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コードの複雑さを定量的に評価してみた
bqnq
October 09, 2025
More Decks by bqnq
See All by bqnq
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
210
メタプログラミングと モンキーパッチの話
bqnq
0
25
35歳までの若手エンジニア限定LT大会
bqnq
0
41
Other Decks in Technology
See All in Technology
大型犬好きによるPugの紹介
yamanoku
1
160
hackers_champloo_2026_tidb
makocchi
0
170
価値について
gree_tech
PRO
0
100
今さら理解するウェブフォントver.2026
takanorip
3
900
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
300
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
930
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
890
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
290
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
180
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
400
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
310
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Fireside Chat
paigeccino
43
4.1k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
The Mindset for Success: Future Career Progression
greggifford
PRO
0
540
Chasing Engaging Ingredients in Design
codingconduct
0
360
Testing 201, or: Great Expectations
jmmastey
46
8.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
The Curse of the Amulet
leimatthew05
3
16k
Ethics towards AI in product and experience design
skipperchong
2
440
Transcript
1 コードの複雑さを 定量的に評価してみた @bqnq d2i-25 2025/10/08 GMO ペパボ株式会社 EC事業部
2 ⾃⼰紹介 EC事業部 プロダクトチーム 2025年 新卒⼊社 bqnq(ばな) Kikuchi Shinji 普段はRailsとMySQLと向き合っています。 •
今⽇給料⽇だと浮かれていたら明⽇でした 💴 • チェーンソーマン レゼ編を⾒ました 💣🌺 • Twitter : @_bqnq
突然ですが 3
AIが書いたコードを読むの つらくないですか? 4
AIが書いたコードに機能を追加する のが⼤変だったので評価してみました 5
なぜLTでこの話をしようと思ったのか? 6 • 研修の⼀環で成果物を⾃分たちで考えてアウトプット • 期間は2週間でゼロから実装、⾔語はGoを選択 • AI Agentを使う前提で、開発を進めた •
新しく機能を追加するのに時間がかかってしまった きっかけ: 機能追加に時間がかかった
AIが書いたコードが複雑だった 7 • ファイル処理の機能を追加 .csv形式に加えて.xlsx形式にも対応したい • 簡単そうに⾒えて⼤変だった 処理の中に、外部からファイルを取得、.csv形式 のみに対応したエンコード処理が含まれていた ⼤変だったこと
コードリーディングが下⼿? or 実装が複雑になっている? 8
複雑性を評価指標で評価してみる 9
循環的複雑度 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
循環的複雑度の数値と実装の対応 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)
循環的複雑度 12 • 循環的複雑度の値についてMathWorksが意味付け • 10以下が望ましく、30以上でリファクタ対象 循環的複雑度の値の意味 https://jp.mathworks.com/discovery/cyclomatic-complexity.html
循環的複雑度 CC を計算してみる 13 • プロジェクトのコードはGoで実装 • gocyclo: Go向けの循環的複雑度を計算するコマンド 実際に調査してみた
https://github.com/fzipp/gocyclo
調査結果 14 調査結果: 循環的複雑度が⾼いファイルが存在 ファイル処理を⾏っている実装箇所のCCが29と⾼い値に 循環的複雑度が20を超える実装が4つ
最初からCCが⾼かった? or 機能追加によって⾼くなった? 15
調査結果 16 commitを遡り循環的複雑度の推移を計算 commit毎に循環的複雑度は増加 ある時点から急激に増加している commit、古いほど左 循環的複雑度の総和
調査結果 17 commitを遡り循環的複雑度の推移を計算 commit、古いほど右 循環的複雑度の総和 Excel処理、計算処理、検証ロジック追加 基本的なCSV処理 データ抽出機能追加
調査結果 18 循環的複雑度が10以上の関数の数の推移 循環的複雑度が10以上の関数の数 commit、古いほど右 グラフが右肩上がり コミットが増えるたび関数が複雑化
調査結果の分析 19 1. 要件変更に伴い1つの関数への責任が増加 情報抽出 + エラーハンドリング + データ計算, ⽣成
2. 条件分岐の複雑化 if → switch、多重if 3. 関数のネストの深さが増加。2層から6層へ CCが⾼くなった要因
まとめ 20 • コード品質を評価する指標に循環的複雑度がある • 機能追加により、循環的複雑度が急に増加する可能性 • 複雑度が増加する要因には、機能追加の際に 関数の責務が増えてしまうことが挙げられる •
CIで循環的複雑度を計算して、対策できそう まとめ
コードを定量評価してみると 発⾒があって⾯⽩いかもしれません! 21