クソコードの測り方

 クソコードの測り方

PHPBLT#3 で話した内容です。

2295fec4d38f59366f983d38628e6ca0?s=128

Hiraku NAKANO

March 01, 2016
Tweet

Transcript

  1. Ϋιίʔυͷ
 ଌΓํ PHPBLT #3 @Hiraku

  2. ࣗݾ঺հ • த໺ ୓ (@Hiraku) • ޱบʮcomposer͕஗͍ʯʮޫ͕஗͍ʯˡNew! • ޫ஗͍໰୊Λࠀ෰ͯ͠composerΛ10ഒ଎ͨ͘͠࿩
 http://tech.mercari.com/entry/2016/02/01/164829

  3. hirak/prestissimo 
 (composerߴ଎ԽϓϥάΠϯ) Πϯετʔϧ͢Δ͚ͩͰ10ഒ͙Β͍଎͘ͳΓ·͢

  4. hirak/prestissimo • ͝੠ԉ͋Γ͕ͱ͏͍͟͝·͢

  5. prestissimoΛൃද͔ͯ͠Β
 Ұϲ݄

  6. ͜͜Ұϲ݄ͷ੒Ռ → 1/24 2/28

  7. Scrutinizer • ίʔυ඼࣭ʹ఺਺Λ͚ͭΔαʔϏε (OSSͳΒແྉʂ) • όάͬΆ͍ॴΛݟ͚ͭͯ͘ΕΔ • 10఺ຬ఺

  8. ϝιουผͷ఺਺

  9. ScrutinizerείΞͷ্͛ํ • ྘৭(AϥϯΫ)ͷϝιου͹͔ΓʹͳͬͨΒɺ 10.00ʹͳΔ • ଌఆ݁Ռ͸৭ʑग़ͯ͘Δ͕ɺͲ͜Λमਖ਼͢Ε ͹͍͍ͷ͔ʁ

  10. ͜͜ʹ஫໨

  11. C.R.A.P. =Change Risk Anti-Patterns

  12. ௚༁͢Δͱ
 Ϋι౓

  13. CRAPͱ͸ • Ϋιίʔυͷ౓߹͍Λఆྔతʹදͨ͠਺ࣈ • 1ʙແݶେ • If CRAP1(m) > 30,

    we consider the method to be CRAPpy.
  14. Googleͷϒϩά͕ৄ͍͠ http://googletesting.blogspot.jp/2011/02/this-code-is-crap.html

  15. None
  16. comp(m) = ॥؀తෳࡶ౓ cov(m) = ςετΧόϨοδ

  17. comp(m)=॥؀తෳࡶ౓ • ίʔυͷ෼ذΛ਺͑ͨ΋ͷ • if΍forΛ࢖͏ͱ1ͣͭ૿͑Δ(্ݶ͸ͳ͍) • ෼ذ͕ͳ͚Ε͹1

  18. cov(m)=ςετΧόϨοδ • ϢχοτςετͰ࣮ߦ͞Εͨίʔυͷׂ߹ • ͜͜Ͱݴ͏ΧόϨοδ͸C0ΧόϨοδͷ͜ͱ
 Ұ౓Ͱ΋શߦ࣮ߦ͍ͯ͠Ε͹100% • 0%ʙ100%ͷؒͷ਺ࣈ

  19. cov(m)͕100%ͩͬͨΒ ͕͜͜0ʹͳΔΑͶ

  20. comp(m)=1, cov(m)=0% ͕͜͜1ʹͳΔΑͶ ͜͜΋1ʹͳΔΑͶ

  21. CRAPͱม਺ͷؔ܎ • comp(m) ্͕͕Δͱ 2৐ͷ੎͍Ͱ૿͑Δ • cov(m)্͕͕Δͱগ ͠؇࿨͞ΕΔ • ΧόϨοδ͕100%Ͱ

    ΋ɺෳࡶ౓͕30Λ௒ ͍͑ͯͨΒμϝ
  22. ྘৭͕CRAP<30

  23. CRAPείΞͷԼ͛ํ

  24. جຊతͳϧʔϧ • ෳࡶ౓͸ϝιουผͳͷͰɺࡉ͔͘෼ׂ͢Δ ͱݮΔ • ϢχοτςετΛॻ͚͹ݮΔ

  25. ݱ࣮తͳ࿩ • ෳࡶͳίʔυ͸Ϣχοτςετͮ͠Β͍ • ςετ͠΍͘͢ॻ͖׵͑ͯΏ͘ • →ࣗવͱίʔυ͕෼ׂ͞ΕΔʂ

  26. ιʔεΛ୹͘͢Δ • ಉ͡ϩδοΫΛ୹͍ίʔυͰ࠶ݱ͢Δ • ϥΠϒϥϦؔ਺ͷ׆༻ • ίϐϖΛݮΒͯؔ͠਺ڞ௨Խ • ࠶ؼʹॻ͖׵͑Δ

  27. PHPUnitͰ΋CRAPܭଌ • ΧόϨοδϨϙʔτͰCRAPείΞಡΊ·͢

  28. prestissimoͷي੻

  29. None
  30. None
  31. None
  32. ࠓ೔ͷ·ͱΊ • ΫιίʔυΛఆྔతʹ൑ఆ͢Δํ๏͕͋Δ • ଌͬͯΈΔͱ໘ന͍ΑɺPHPUnitͰ΋Θ͔ΔΑ • Ғͦ͏ʹղઆ͚ͨ͠ͲScrutinizerείΞ10.00 ·ͩ౸ୡͯ͠ͳ͍

  33. ิ଍ɿ
 CRAP͕ڭ͑ͯ͘Εͳ͍΋ͷ • ιϑτ΢ΣΞ͕଎͍͔Ͳ͏͔ • ໾ʹཱ͔ͭʢΧωΛੜΉ͔ʣ • ֦ுੑʹ༏Ε͍ͯΔ͔ (͋͘·Ͱෳࡶ౓ͷ࿩Ͱ͋Δ͜ͱʹ஫ҙ)