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
Devinを使ったモバイルアプリ開発 / Mobile app development with Devin
yanzm
0
180
実践データベース設計 ①データベース設計概論
recruitengineers
PRO
2
190
Product Management Conference -AI時代に進化するPdM-
kojima111
0
220
OpenAPIから画面生成に挑戦した話
koinunopochi
0
150
現場が抱える様々な問題は “組織設計上” の問題によって生じていることがある / Team-oriented Organization Design 20250827
mtx2s
3
790
Goss: Faiss向けの新しい本番環境対応 Goバインディング #coefl_go_jp
bengo4com
0
1.4k
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
2
140
マイクロモビリティシェアサービスを支える プラットフォームアーキテクチャ
grimoh
1
200
Amazon Bedrock AgentCore でプロモーション用動画生成エージェントを開発する
nasuvitz
6
420
広島銀行におけるAWS活用の取り組みについて
masakimori
0
130
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
30k
[CVPR2025論文読み会] Linguistics-aware Masked Image Modelingfor Self-supervised Scene Text Recognition
s_aiueo32
0
210
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
4 Signs Your Business is Dying
shpigford
184
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Automating Front-end Workflow
addyosmani
1370
200k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Navigating Team Friction
lara
189
15k
Practical Orchestrator
shlominoach
190
11k
Agile that works and the tools we love
rasmusluckow
329
21k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Making Projects Easy
brettharned
117
6.3k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.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͕ڭ͑ͯ͘Εͳ͍ͷ • ιϑτΣΞ͕͍͔Ͳ͏͔ • ʹཱ͔ͭʢΧωΛੜΉ͔ʣ • ֦ுੑʹ༏Ε͍ͯΔ͔ (͋͘·ͰෳࡶͷͰ͋Δ͜ͱʹҙ)