5ヶ月でカバレッジを20%から90%にあげた話

01e1fde913d3dee6c3fd5a67d54bc0d4?s=47 y_ahiru
December 01, 2019

 5ヶ月でカバレッジを20%から90%にあげた話

01e1fde913d3dee6c3fd5a67d54bc0d4?s=128

y_ahiru

December 01, 2019
Tweet

Transcript

  1. PHP Conference Japan 2019 ٢ా͋ͻΔ (@strtyuu) ϲ݄ͰΧόϨοδΛ ͔Βʹͨ͠࿩

  2. ࣗݾ঺հ  ٢ా͋ͻΔ!TUSUZVV τΡΪϟολʔגࣜձࣾ 4PGUXBSF&OHJOFFS -BSBWFM+1$POGFSFODF ίΞελοϑ

  3. 

  4. ɾΧόϨοδ͋͛Δ͜ͱΛख์͠ʹਪ঑͢Δ΋ͷͰ͸͋Γ ·ͤΜɻ ɾΧόϨοδ͸ඞͣ͠΋ΞϓϦέʔγϣϯͷ඼࣭ͱൺྫ͠ ·ͤΜɻ ⚠$BVUJPO 

  5. ੒Ռൃද 

  6.          

                  $PWFSBHF 5FTUT                                           
  7.          

                  $PWFSBHF 5FTUT                                            Min.t ϦϦʔε
  8.          

                  $PWFSBHF 5FTUT                                            PHP Conference Ԡื Min.t ϦϦʔε
  9.          

                  $PWFSBHF 5FTUT                                            PHP Conference Ԡื Min.t ϦϦʔε ࠾୒͞ΕΔ
  10. ͳͥɺ ΧόϨοδΛ্͔͛ͨͬͨͷ͔ 

  11. ɾؾܰʹίʔυͷमਖ਼͕͍ͨ͠ ɾίʔυϦʔσΟϯάͷίετΛԼ͍͛ͨ ΧόϨοδΛ্͔͛ͨͬͨཧ༝ ΧόϨοδΛ্͔͛ͨͬͨཧ༝ 

  12. ɾΫϥε͕ͨͪΧδϡΞϧʹґଘ͍͋ͬͯ͠Δ ɾϑϨʔϜϫʔΫϨΠϠͷվળΛ͠ଓ͚͍͕ͨɺӨڹൣғ ͕ͱͯ΋޿͍ ؾܰʹίʔυͷमਖ਼͕͍ͨ͠ ΧόϨοδΛ্͔͛ͨͬͨཧ༝ 

  13. ɾΫϥε͕ͨͪΧδϡΞϧʹґଘ͍͋ͬͯ͠Δ ɾϑϨʔϜϫʔΫϨΠϠͷվળΛ͠ଓ͚͍͕ͨɺӨڹൣғ ͕ͱͯ΋޿͍ ؾܰʹίʔυͷमਖ਼͕͍ͨ͠ ΧόϨοδΛ্͔͛ͨͬͨཧ༝  ɾӨڹൣғ͕Θ͔Βͣɺςετ࿙Ε͕ൃੜ͢ΔՄೳੑ͕͋ Δ

  14. ɾ5PHFUUFS͸೥ଓ͍͍ͯΔαʔϏε ɾྺ࢙తܦҢͷ͋Δίʔυ΋౰વ͋Δ ίʔυϦʔσΟϯάͷίετΛԼ͍͛ͨ ΧόϨοδΛ্͔͛ͨͬͨཧ༝ 

  15. ɾ5PHFUUFS͸೥ଓ͍͍ͯΔαʔϏε ɾྺ࢙తܦҢͷ͋Δίʔυ΋౰વ͋Δ ίʔυϦʔσΟϯάͷίετΛԼ͍͛ͨ ΧόϨοδΛ্͔͛ͨͬͨཧ༝  ɾಡΜͰ࢓༷Λཧղ͢Δͷʹίετ͕ଟ͔͔͘Δ ɾαʔϏε͕ଓ͚͹ଓ͘΄ͲɺͦͷίετΛ෷͏ਓ਺͕ଟ͘ ͳΔ

  16. ΧόϨοδΛ্͛ΔաఔͰ ΍ͬͨ͜ͱ 

  17. ɾϧʔϧɾํ਑ܾΊ ɾςετ؀ڥͷ੔උ ɾFUD ΧόϨοδΛ্͛ΔաఔͰ΍ͬͨ͜ͱ ΧόϨοδΛ্͛ΔաఔͰ΍ͬͨ͜ͱ 

  18. ɾϧʔϧɾํ਑ܾΊ ɾςετ؀ڥͷ੔උ ɾFUD ΧόϨοδΛ্͛ΔաఔͰ΍ͬͨ͜ͱ ΧόϨοδΛ্͛ΔաఔͰ΍ͬͨ͜ͱ 

  19. ɾ·ͣ͸֎ଆ͔Βςετ͢Δ ɾϦϑΝΫλϦϯά͸࠷খݶʹɺςετΛॻ͘͜ͱΛ༏ઌ ɾʹΌʙΜΫϥεΛڐ͢ ϧʔϧɾํ਑ܾΊ ϧʔϧɾํ਑ܾΊ 

  20. ɾϒϥοΫϘοΫεςετͳΒɺ࣮૷ͷ඼࣭Λؾʹͤͣς ετͰ͖Δ͜ͱ͕ଟ͍ ɾΧόϨοδ͕Ք͗΍ͦ͢͏ ·ͣ͸֎ଆ͔Βςετ͢Δ ϧʔϧɾํ਑ܾΊ 

  21. ɾΨοπϦϦϑΝΫλϦϯάͯ͠Δͱ͕࣌ؒ଍Γͳ͍ ɾઃܭ΍ϦϑΝΫλϦϯά͸ܧଓͯ͠܁Γฦ͠ߦͳ͍ͬͯ ͘΋ͷ ɾ͍͖ͳΓ׬ᘳΛ໨ࢦ͢ͷͰ͸ͳ͘Ұาͣͭண࣮ʹਐΊͯ ͍͘ ɾ׬ᘳओٛ͸μϝ ϦϑΝΫλϦϯά͸࠷খݶʹ ςετΛॻ͘͜ͱΛ༏ઌ ϧʔϧɾํ਑ܾΊ 

  22. ɾཧ૝తͳϦϑΝΫλϦϯάͱ͸΄Ͳԕ͍͕ɺݱ࣮ͷ౎߹ ͔Β͍ͼͭͳܗͰଥڠͤ͟ΔΛ͑ͳ͔ͬͨΫϥε ɾϦϑΝΫλϦϯάͷաఔͰ͸ઈରʹൃੜ͢Δ ɾྑ͘ͳΔͨΊͷୈҰาͱͯ͠ड͚ೖΕΔ͔͠ͳ͍ ʹΌʙΜΫϥεΛ࡞Δ ςετ؀ڥͷ੔උ 

  23. ɾϧʔϧɾํ਑ܾΊ ɾςετ؀ڥͷ੔උ ɾFUD ΧόϨοδΛ্͛ΔաఔͰ΍ͬͨ͜ͱ ΧόϨοδΛ্͛ΔաఔͰ΍ͬͨ͜ͱ 

  24. ɾ؆୯ʹςετσʔλΛ࡞Δ࢓૊ΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖Δ࢓૊ΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦ଎౓Λૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετ؀ڥͷ੔උ ςετ؀ڥͷ੔උ 

  25. ɾ؆୯ʹςετσʔλΛ࡞Δ࢓૊ΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖Δ࢓૊ΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦ଎౓Λૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετ؀ڥͷ੔උ ςετ؀ڥͷ੔උ 

  26. ؆୯ʹςετσʔλΛ࡞Δ࢓૊ΈΛ༻ҙ͢Δ ςετ؀ڥͷ੔උ  ɾ׬શίϯετϥΫλͳΫϥεͰ΋ɺ"DUJWF3FDPSEͰ ΋ɺͲͪΒͰ΋ରԠͰ͖ΔΑ͏ʹ͍ͨ͠ ɾॊೈʹ஋Λ૊Έཱ͍ͯͨ ɾঢ়ଶͷ۩ମతͳ஋Λந৅ԽͰ͖ΔΑ͏ʹ͍ͨ͠

  27. ؆୯ʹςετσʔλΛ࡞Δ࢓૊ΈΛ༻ҙ͢Δ ςετ؀ڥͷ੔උ  ɾ׬શίϯετϥΫλͳΫϥεͰ΋ɺ"DUJWF3FDPSEͰ ΋ɺͲͪΒͰ΋ରԠͰ͖ΔΑ͏ʹ͍ͨ͠ ɾॊೈʹ஋Λ૊Έཱ͍ͯͨ ɾঢ়ଶͷ۩ମతͳ஋Λந৅ԽͰ͖ΔΑ͏ʹ͍ͨ͠ ɾͪΐ͏Ͳྑ͍ϥΠϒϥϦ͕ݟ͔ͭΒͳ͍ɾɾɾɻ

  28. ࡞ͬͨ ςετ؀ڥͷ੔උ  ࣗ༝ʹσϑΥϧτ஋Λ ্ॻ͖Մೳ ঢ়ଶΛந৅Խ ࢦఆͨ͠਺͚ͩ࡞੒Ͱ͖Δ

  29. ɾ؆୯ʹςετσʔλΛ࡞Δ࢓૊ΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖Δ࢓૊ΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦ଎౓Λૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετ؀ڥͷ੔උ ςετ؀ڥͷ੔උ 

  30. ؆୯ʹ݁߹ςετΛͰ͖Δ࢓૊ΈΛ༻ҙ͢Δ ςετ؀ڥͷ੔උ  ɾݱঢ়ͩͱ݁߹ςετ͕ॻ͖ʹ͍͘ ɾϑϨʔϜϫʔΫͷϥΠϑαΠΫϧ͝ͱςετ͕͍ͨ͠ ɾ%*ίϯςφͷఆٛͱ͔΋ؒ઀తʹςετ͍ͨ͠

  31. ࡞ͬͨ ςετ؀ڥͷ੔උ 

  32. ɾ؆୯ʹςετσʔλΛ࡞Δ࢓૊ΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖Δ࢓૊ΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦ଎౓Λૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετ؀ڥͷ੔උ ςετ؀ڥͷ੔උ 

  33. ςετͷ࣮ߦ଎౓Λૣ͘͢Δ ςετ؀ڥͷ੔උ  ɾͨ͘͞Μςετͷ13Λग़͢ͷͰɺ$*͸ͳΔ΂͘ૣ͘ճͬ ͯ͘Εͨํ͕خ͍͠

  34. ςετͷ࣮ߦ଎౓Λૣ͘͢Δ ςετ؀ڥͷ੔උ  ɾͨ͘͞Μςετͷ13Λग़͢ͷͰɺ$*͸ͳΔ΂͘ૣ͘ճͬ ͯ͘Εͨํ͕خ͍͠ ɾQDPWͰΧόϨοδΛܭଌ͢Δ

  35. QDPWΛೖΕΔ ςετ؀ڥͷ੔උ  ɾYEFCVHͱҧ͍ɺσόοάػೳ͕ͳ͘ΧόϨοδܭଌʹ ಛԽ͍ͯ͠ΔͨΊɺѹ౗తʹ଎͘ϝϞϦফඅ΋গͳ͍ ɾQIQECHΑΓ΋ૣ͍ Speed up PHPUnit Code

    Coverage Analysis - Nicolas Cabot - Medium https://medium.com/@nicocabot/speed-up-phpunit-code-coverage-analysis-4e35345b3dad
  36. QDPWΛೖΕΔ ςετ؀ڥͷ੔උ  %PDLFSpMF ίϚϯυ

  37. ɾ؆୯ʹςετσʔλΛ࡞Δ࢓૊ΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖Δ࢓૊ΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦ଎౓Λૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετ؀ڥͷ੔උ ςετ؀ڥͷ੔උ 

  38. ɾJT%FW CPPMΈ͍ͨͳ΍ͭ ɾ৚݅෼ذʹ࢖ΘΕ͍ͯΔ άϩʔόϧϔϧύʔ ςετ؀ڥͷ੔උ 

  39. ɾJT%FW CPPMΈ͍ͨͳ΍ͭ ɾ৚݅෼ذʹ࢖ΘΕ͍ͯΔ άϩʔόϧϔϧύʔ ςετ؀ڥͷ੔උ  ɾڍಈΛม͑Δ͜ͱ͕ग़དྷͳ͍ ɾ৚݅෼ذͷ͏ͪύλʔϯ͔͠ςετग़དྷͳ͍

  40. ςετ؀ڥͷ੔උ  ͍ͨΔॴͰ࢖ΘΕ͍ͯΔͷͰ શ෦ϦϑΝΫλϦϯά͢Δ༨༟͸ͳ͍ɾɾɾ

  41. ςετ؀ڥͷ੔උ  https://kunit.jp/archives/108 1)17$3͕DVSMؔ਺Λ৐ͬऔΔํ๏ /&8(".&!LVOJU

  42. ςετ؀ڥͷ੔උ 

  43. ςετ؀ڥͷ੔උ 

  44. ςετ؀ڥͷ੔උ  ͜ΕɺͳΜͰ΋ग़དྷΔͷͰ͸ɾɾɾʁ

  45. ςετ؀ڥͷ੔උ 

  46. ςετ؀ڥͷ੔උ  Φεεϝ͠·ͤΜʂ ͝ར༻͸ࣗݾ੹೚Ͱɾɾɾ

  47. ΍ͬͯΈͯͲ͏͔ͩͬͨ 

  48. ɾ͔͚ͨίετݟ߹ͬͨ੒Ռ͕ग़Δͷ͔͸ݱ࣌఺Ͱ͸Θ͔ Βͳ͍ ɾ͸΍Γ͗ͨ͢ؾ͕͢ΔɺͦΕͧΕͷΞϓϦέʔγϣ ϯʹ߹ͬͨΧόϨοδͰे෼ ɾΧόϨοδΛ௥͍͔͚Δͷ͸ඍົ ɾϩʔΧϧͷ1)1Λʹ্͛ͯΈͨΒɺखಈςετͰ͸ ൃݟͰ͖ͳͦ͞͏ͳόάΛݟ͚ͭΔ͜ͱ͕ग़དྷͨ ɾϦϑΝΫλϦϯάΛ͢Δ౔୆͕ग़དྷ্͕ͬͨͱ͜Ζͳͷ ͰɺΉ͠Ζ͔͜͜Β͕ελʔτ ˋ·Ͱ্͛ͯΈͨײ૝

    ΍ͬͯΈͯͲ͏͔ͩͬͨ 
  49.  $VSBUJPO$PNNVOJDBUJPO1MBUGPSN IUUQTUPHFUUFSDPN ·ͱΊΑ͏ɺ͋ͭ·Ζ͏

  50. ΧόϨοδ͸ ຊ౰ʹ༗ޮͳࢦඪͳͷ͔ 

  51. 

  52. ɾमਖ਼ʹର͢Δ҆શੑͷ౓߹͍Λࣔͯ͘͠ΕΔ ɾ඼࣭Λվળ͢ΔͨΊͷΩοΧέʹͳΔ ɾςετͷ໢ཏੑ͕ߴ͍͜ͱ͸ྑ͍͜ͱ ɾΧόϨοδΛຒΊΔͨΊͷςετͰόάʹؾ͚ͮΔ͜ͱ ͕͋Δ ༗ޮ೿ͷҙݟ ΧόϨοδ͸ຊ౰ʹ༗ޮͳࢦඪͳͷ͔ 

  53. ɾΧόϨοδ͚ͩͰ඼࣭Λ൑அ͢Δͷ͸೉͍͠ ɾςετͷ඼࣭ͱ͸ؔ܎ͳ͍ ແޮ೿ͷҙݟ ΧόϨοδ͸ຊ౰ʹ༗ޮͳࢦඪͳͷ͔ 

  54. ɾΧόϨοδ͸ΧόϨοδͰ͔͠ͳ͍ ɾΧόϨοδ͚ͩͰ͸Կ΋ݴ͏͜ͱ͕Ͱ͖ͳ͍ ๻ͷ݁࿦ ΧόϨοδ͸ຊ౰ʹ༗ޮͳࢦඪͳͷ͔ 

  55.  ΧόϨοδ ޲্ςΫχοΫ

  56. !DPEF$PWFSBHF*HOPSF 

  57. ແҙຯͳίʔυΛҰԯߦ௥Ճͯ͠ UIJTBTTFSU5SVF USVF ͢Δ 

  58. ɾΧόϨοδ͸શମͷதͰ͜Ε͚ͩͷίʔυ͕ςετதʹ ࣮ߦ͞Ε·ͨ͠Αͱ͍͏ࣄ࣮Ͱ͔͠ͳ͍ ɾͦΕҎ্ͷҙຯΛݟग़͢ͷ͸ςετίʔυͷ࣭ΛධՁͰ ͖ͳ͍ݶΓඍົ ɾઌ΄Ͳͷۃ୺ͳྫͷΑ͏ʹΞϓϦέʔγϣϯͷ඼࣭ʹҰ ੾ߩݙ͠ͳ͍··ΧόϨοδΛ͋͛Δ͜ͱ΋Ͱ͖Δ ࣄ࣮ͱਪ࿦ ΧόϨοδ͸ຊ౰ʹ༗ޮͳࢦඪͳͷ͔