Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クソコードの測り方
Search
Hiraku NAKANO
March 01, 2016
Technology
36
12k
クソコードの測り方
PHPBLT#3 で話した内容です。
Hiraku NAKANO
March 01, 2016
Tweet
Share
More Decks by Hiraku NAKANO
See All by Hiraku NAKANO
iD決済を支える技術 / #merpay_techtalk
hirak
33
7.2k
github.com/mercari の今と昔 /github-mercari
hirak
8
3.1k
PHPStanで始める継続的静的解析 #phperkaigi /php-static-analysis
hirak
14
53k
極める!メソッドチェーン #phpstudy / fluent-interface
hirak
8
2.9k
evalこそパワー #phpkansai / phpkansai2017
hirak
2
1.6k
PHPのエラーと例外再入門 / php-error-and-exception
hirak
19
20k
メルカリ JP Tech Side / mercari-jp-tech-side
hirak
7
2k
グローバル展開を支える量子的なサービス設計 #mercariday / mercariday2017-api
hirak
22
14k
Composerプラグインを作ってみよう /phpcon2016
hirak
5
14k
Other Decks in Technology
See All in Technology
「Linux」という言葉が指すもの
sat
PRO
4
140
エンジニアリングマネージャーの成長の道筋とキャリア / Developers Summit 2025 KANSAI
daiksy
3
1.1k
テストを軸にした生き残り術
kworkdev
PRO
0
220
エンジニアが主導できる組織づくり ー 製品と事業を進化させる体制へのシフト
ueokande
1
110
メルカリIBISの紹介
0gm
0
460
ブロックテーマ時代における、テーマの CSS について考える Toro_Unit / 2025.09.13 @ Shinshu WordPress Meetup
torounit
0
130
MagicPod導入から半年、オープンロジQAチームで実際にやったこと
tjoko
0
110
LLMを搭載したプロダクトの品質保証の模索と学び
qa
1
1.1k
AIがコード書きすぎ問題にはAIで立ち向かえ
jyoshise
1
300
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.3k
slog.Handlerのよくある実装ミス
sakiengineer
4
480
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
1.2k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
70
4.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
930
Into the Great Unknown - MozCon
thekraken
40
2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Making Projects Easy
brettharned
117
6.4k
Why Our Code Smells
bkeepers
PRO
339
57k
How to train your dragon (web standard)
notwaldorf
96
6.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Building Applications with DynamoDB
mza
96
6.6k
Transcript
Ϋιίʔυͷ ଌΓํ PHPBLT #3 @Hiraku
ࣗݾհ • த (@Hiraku) • ޱบʮcomposer͕͍ʯʮޫ͕͍ʯˡNew! • ޫ͍Λࠀͯ͠composerΛ10ഒͨ͘͠ http://tech.mercari.com/entry/2016/02/01/164829
hirak/prestissimo (composerߴԽϓϥάΠϯ) Πϯετʔϧ͢Δ͚ͩͰ10ഒ͙Β͍͘ͳΓ·͢
hirak/prestissimo • ͝ԉ͋Γ͕ͱ͏͍͟͝·͢
prestissimoΛൃද͔ͯ͠Β Ұϲ݄
͜͜Ұϲ݄ͷՌ → 1/24 2/28
Scrutinizer • ίʔυ࣭ʹΛ͚ͭΔαʔϏε (OSSͳΒແྉʂ) • όάͬΆ͍ॴΛݟ͚ͭͯ͘ΕΔ • 10ຬ
ϝιουผͷ
ScrutinizerείΞͷ্͛ํ • ৭(AϥϯΫ)ͷϝιου͔ΓʹͳͬͨΒɺ 10.00ʹͳΔ • ଌఆ݁Ռ৭ʑग़ͯ͘Δ͕ɺͲ͜Λमਖ਼͢Ε ͍͍ͷ͔ʁ
͜͜ʹ
C.R.A.P. =Change Risk Anti-Patterns
༁͢Δͱ Ϋι
CRAPͱ • Ϋιίʔυͷ߹͍Λఆྔతʹදͨ͠ࣈ • 1ʙແݶେ • If CRAP1(m) > 30,
we consider the method to be CRAPpy.
Googleͷϒϩά͕ৄ͍͠ http://googletesting.blogspot.jp/2011/02/this-code-is-crap.html
None
comp(m) = ॥తෳࡶ cov(m) = ςετΧόϨοδ
comp(m)=॥తෳࡶ • ίʔυͷذΛ͑ͨͷ • ifforΛ͏ͱ1ͣͭ૿͑Δ(্ݶͳ͍) • ذ͕ͳ͚Ε1
cov(m)=ςετΧόϨοδ • ϢχοτςετͰ࣮ߦ͞Εͨίʔυͷׂ߹ • ͜͜Ͱݴ͏ΧόϨοδC0ΧόϨοδͷ͜ͱ ҰͰશߦ࣮ߦ͍ͯ͠Ε100% • 0%ʙ100%ͷؒͷࣈ
cov(m)͕100%ͩͬͨΒ ͕͜͜0ʹͳΔΑͶ
comp(m)=1, cov(m)=0% ͕͜͜1ʹͳΔΑͶ ͜͜1ʹͳΔΑͶ
CRAPͱมͷؔ • comp(m) ্͕͕Δͱ 2ͷ͍Ͱ૿͑Δ • cov(m)্͕͕Δͱগ ͠؇͞ΕΔ • ΧόϨοδ͕100%Ͱ
ɺෳࡶ͕30Λ ͍͑ͯͨΒμϝ
৭͕CRAP<30
CRAPείΞͷԼ͛ํ
جຊతͳϧʔϧ • ෳࡶϝιουผͳͷͰɺࡉׂ͔͘͢Δ ͱݮΔ • ϢχοτςετΛॻ͚ݮΔ
ݱ࣮తͳ • ෳࡶͳίʔυϢχοτςετͮ͠Β͍ • ςετ͘͢͠ॻ͖͑ͯΏ͘ • →ࣗવͱίʔυׂ͕͞ΕΔʂ
ιʔεΛ͘͢Δ • ಉ͡ϩδοΫΛ͍ίʔυͰ࠶ݱ͢Δ • ϥΠϒϥϦؔͷ׆༻ • ίϐϖΛݮΒͯؔ͠ڞ௨Խ • ࠶ؼʹॻ͖͑Δ
PHPUnitͰCRAPܭଌ • ΧόϨοδϨϙʔτͰCRAPείΞಡΊ·͢
prestissimoͷي
None
None
None
ࠓͷ·ͱΊ • ΫιίʔυΛఆྔతʹఆ͢Δํ๏͕͋Δ • ଌͬͯΈΔͱ໘ന͍ΑɺPHPUnitͰΘ͔ΔΑ • Ғͦ͏ʹղઆ͚ͨ͠ͲScrutinizerείΞ10.00 ·ͩ౸ୡͯ͠ͳ͍
ิɿ CRAP͕ڭ͑ͯ͘Εͳ͍ͷ • ιϑτΣΞ͕͍͔Ͳ͏͔ • ʹཱ͔ͭʢΧωΛੜΉ͔ʣ • ֦ுੑʹ༏Ε͍ͯΔ͔ (͋͘·ͰෳࡶͷͰ͋Δ͜ͱʹҙ)