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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
54k
極める!メソッドチェーン #phpstudy / fluent-interface
hirak
8
3k
evalこそパワー #phpkansai / phpkansai2017
hirak
2
1.7k
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
配列に見る bash と zsh の違い
kazzpapa3
3
160
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
670
Greatest Disaster Hits in Web Performance
guaca
0
270
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
170
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
820
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.5k
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
130
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.9k
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.3k
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
140
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
Exploring anti-patterns in Rails
aemeredith
2
250
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
97
Unsuck your backbone
ammeep
671
58k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
150
Mind Mapping
helmedeiros
PRO
0
88
Design in an AI World
tapps
0
140
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
54
Everyday Curiosity
cassininazir
0
130
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
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͕ڭ͑ͯ͘Εͳ͍ͷ • ιϑτΣΞ͕͍͔Ͳ͏͔ • ʹཱ͔ͭʢΧωΛੜΉ͔ʣ • ֦ுੑʹ༏Ε͍ͯΔ͔ (͋͘·ͰෳࡶͷͰ͋Δ͜ͱʹҙ)