組織にテストを書く文化を根付かせる戦略と戦術 / Strategy and Tactics of Building Automated Testing Culture into Organization

9f3a83db74bee75a64b5e6ed106a775c?s=47 Takuto Wada
December 19, 2017

組織にテストを書く文化を根付かせる戦略と戦術 / Strategy and Tactics of Building Automated Testing Culture into Organization

2017/12/19 Tech Night @ Shiodome # 6
https://techsio.connpass.com/event/72585/

9f3a83db74bee75a64b5e6ed106a775c?s=128

Takuto Wada

December 19, 2017
Tweet

Transcript

  1. ૊৫ʹςετΛॻ͘ จԽΛࠜ෇͔ͤΔ ઓུͱઓज़ ࿨ా୎ਓ !U@XBEB  %FD !ςΫγΦ

  2. ࿨ా୎ਓ UXBEB U@XBEB UXBEB

  3. ؂मɺ؂༁ɺ຋༁ͨ͠ຊͨͪ

  4. テスト書いてますか!! ελϯυ໊ϫΠϧυɾαόϯφ

  5. “流しのペアプロ業”

  6. 8&# %#13&447PMɺ݄೔ൃചɺ૑ץप೥ه೦߸

  7. assert(typeof item.id === 'strong') | | | | | |

    | false | | "foo" | Item{id:"foo",name:"bar"} "string" --- [string] 'strong' +++ [string] typeof item.id @@ -1,6 +1,6 @@ str -o +i ng power-assert IUUQTHJUIVCDPNQPXFSBTTFSUKTQPXFSBTTFSU
  8. ΑΖ͓͘͠ئ͍͠·͢

  9. ઓུฤ ૊৫ʹςετΛॻ͘ จԽΛࠜ෇͔ͤΔ

  10. ݱ৔͔ΒͷதܧͰ͢

  11. ർฐ͖ͬͨ͠ݱ৔

  12. IUUQTXXXqJDLSDPNQIPUPTPLJOBXBTPCB ߥΈ͖ͬͨίʔυ

  13. ര஄ॲཧͷΑ͏ͳϦϦʔε

  14. lςετ͕ͳ͍ίʔυ͸ ϨΨγʔίʔυͩʂz

  15. ͭͷlͳΒΘ͠z

  16. IUUQTXXXqJDLSDPNQIPUPTELBMP lςετΛॻ࣌ؒ͘͸ͳ͍z

  17. ετϨε ςετ

  18. ࣗಈςετ ετϨε

  19. ςετΛॻ͕࣌ؒ͘ͳ͍ͷͰ ͸ͳ͘ɺςετΛॻ͔ͳ͍͔ Β͕࣌ؒͳ͘ͳΔͷͰ͢ɻ

  20. lಈ͘ίʔυʹ৮ΕΔͳz IUUQTXXXqJDLSDPNQIPUPT!/

  21. &EJU1SBZ͸ࢮ͕଴͍ͬͯΔ

  22. $PWFS.PEJGZ

  23. w จԽͷৢ੒͸೥୯ҐͷࣄۀʹͳΔ w ʮςετΛॻ͕࣌ؒ͘ͳ͍ʯͷͰ͸ ͳ͘ʮςετΛॻ͔ͳ͍͔Β͕࣌ؒ ͳ͘ͳΔʯ w ʮಈ͘ίʔυʹ৮ΕΔͳʯͱઓ͏ɻ ৮Εͳ͚Ε͹ڝ૪ྗ͕ऑ·Γɺࣄۀ ͸؇΍͔ʹࢮΜͰ͍͘

    จԽΛม͍͑ͯ͘
  24. ಈ͘ίʔυʹ৮Εͳ͚Ε͹ࢮ͋ΔͷΈ

  25. จԽΛม͑Δ޷ྫ70:"(&ͷʮٕज़ྗධՁձʯ IUUQTTFMFDLDD

  26. w ϨΨγʔίʔυվળʹਖ਼ղ͸ͳ͍ w ςετࣗಈԽ͸ۜͷ஄ؙͰ͸ͳ͍ w ಋೖํ๏ʹ΋ۜͷ஄ؙ͸ͳ͍ w ಋೖΛ໨తʹͯ͠͸ͳΒͳ͍ w ঢ়گ͸ݱ৔ʹΑͬͯશͯҟͳΔ

    ۜͷ஄ؙ͸ແ͍
  27. w 5P#FͰ͸ͳ͘"T*Tͱ/PU5P#F͔Β͸͡ΊΔ w ྡͷࣳ͸੨͍ɻؾʹ͠ͳ͍͜ͱ w ਓ͸ࣗ෼ͷ଎౓Ͱ͔͠੒௕Ͱ͖ͳ͍ w ϓϩδΣΫτ΋ϓϩδΣΫτͷ଎౓Ͱ͔͠੒௕ Ͱ͖ͳ͍ w

    ʮ·ΘΓ͸΋͏ΈΜͳ΍͍ͬͯ·͢Αʯ͸ܶༀ ͳͷͰ༻๏༻ྔΛकͬͯ࢖͏͜ͱ ΠϚίί͔Β࢝ΊΔ
  28. w շෆշͰಈ͘ਓɺଛಘͰಈ͘ਓ w ϦϑΝΫλϦϯάͷշײ w ճؼςετͷ͓ಘײ w ϝτϦΫεͷୡ੒ײ w ͦͯ͠ϏδωεՁ஋

    ਓΛ஌Δ
  29. ཧ࿦෢૷͢Δ

  30. ෆ۩߹ͷൃݟ͕ ஗ΕΕ͹஗ΕΔ΄Ͳ ίετ͕͔͔Δ IUUQTXXXBTURCPSHQSFTTSPPN*452#@$FSUJpDBUJPO@/FXT@@IUNM

  31. © Towersquest, Inc. 2010. all rights reserved. 5%%ಋೖޮՌ .4 *#.

    !31 IBM Driver MS Windows MS MSN MS Visual Studio ιʔείʔυαΠζ (KLOC) 41 6 26 155.2 ςετίʔυαΠζ (KLOC) 28.5 4 23.2 60.3 TDDΛ࠾༻͍ͯ͠ͳ͍ྨࣅϓϩ δΣΫτͰͷܽؕີ౓Λ̍ͱ͠ ͨͱ͖ͷܽؕີ౓ 0.61 0.38 0.24 0.09 TDD࠾༻ʹΑΓ૿Ճͨ͠ίʔυ ࣮૷࣌ؒ(؅ཧऀͷݟੵʹΑΔ) 15ʙ20% 25ʙ35% 15% 20ʙ25% N. Nagappan, M. E. Maximilien, T. Bhat and L. Williams: Realizing quality improvement through test driven development: results and experiences of four industrial teams, Journal of Empirical Software Engineering, vol. 13, pp. 289-302 (2008)
  32. © Towersquest, Inc. 2010. all rights reserved. 5%%ಋೖޮՌ ΤϦΫιϯଞ w

    5%%Λ࣮ࢪͨ͠৔߹ʹใࠂ͞Ε͍ͯΔ஌ݟ ‣ ػೳςετͰͷෆ۩߹ݕग़਺͕࡟ݮ͞Εͨ ‣ ίʔσΟϯά ࣮૷ ͷ͕࣌ؒˋ૿͑ͨ ‣ ςετͷΧόϨοδ͕େ͖͘ͳͬͨ w ඃݧऀΛର৅ͱͨ͠Ξϯέʔτ ‣ ͷඃݧऀ͕σόοάͷ޻਺ΛݮΒ͢ͱײͨ͡ ‣ ͷඃݧऀ͕ཁٻ͕ચ࿅͞ΕΔͱײͨ͡ ‣ ͷඃݧऀ͕ίʔυͷ඼࣭Λ্͛Δͱײͨ͡ ‣ ͷඃݧऀ͕։ൃ޻਺ΛݮΒ͢ͱײͨ͡ !32 Boby George, a and Laurie Williams: A structured experiment of test-driven development, Journal of Information and Software Technology Vol. 46, No. 5, p. 337-342(2004)
  33. w ਓ͸ͦΕͧΕͷ౓߹͍ͰมԽʹର͠ ͯ਎ߏ͑Δ w લྫ͕ͳ͍ɺࣄྫ͕ͳ͍ ม͑Δ͜ͱͷ೉͠͞

  34. ࣄલʹڐՄΛಘΔΑΓɺ͋ͱ Ͱڐͯ͠΋Β͏ํָ͕ Grace Hopper l*UJTFBTJFSUPBTL GPSHJWFOFTTUIBOJUJT UPHFUQFSNJTTJPOz

  35. IUUQTXXXqJDLSDPNQIPUPTUPNQBHFOFU ςετ͸඼࣭Λ্͛ͳ͍

  36. w ඼࣭͕ʮΘ͔ΔʯΑ͏ʹͳΔ w Θ͔Δ͜ͱͦ͜େࣄ w ςετΛॻ͚ͩ͘Ͱ͸ɺྑ͘͸ͳΒͳ͍ w ମॏܭʹ৐Δ͚ͩͰ͸૫ͤͳ͍ w ඼࣭Λ্͛Δͷ͸ઃܭͱϓϩάϥϛϯά

    w ࠶ઃܭͱϦϑΝΫλϦϯάΛςετͰࢧ͑Δ ςετ͸඼࣭Λ্͛ͳ͍
  37. lςετͰ͸඼࣭͸্͕Βͳ͍ Ͱ͢Αɻςετ͸͋͘·Ͱ΋඼ ࣭Λ͋͛Δ͖͔͚ͬɻ඼࣭Λ͋ ͛Δͷ͸ϓϩάϥϛϯάͰ͢ɻ ͜Ε͸େੲ͔Βͦ͏ɻz

  38. ૊৫ʹςετΛॻ͘ จԽΛࠜ෇͔ͤΔ ઓज़ฤ

  39. ͭͷlಓ͠Δ΂z

  40. w ʮϨΨγʔίʔυͷδϨϯϚʯ w lίʔυΛมߋ͢ΔͨΊʹ͸ςετΛ੔උ͢Δ ඞཁ͕͋Δɻଟ͘ͷ৔߹ɺςετΛ੔උ͢Δ ͨΊʹ͸ɺίʔυΛมߋ͢Δඞཁ͕͋Δz w ϨΨγʔίʔυʹ৮ΔͨΊͷ
 ޠኮͱٕ๏Λ੔ཧͨ͠ຊ w

    TUBDLPWFSqPXDPN͔Βͷ
 ඃݴٴ਺ୈҐ ϨΨγʔίʔυվળΨΠυ
  41. w ϨΨγʔίʔυվળΨΠυΑΓ΍΍ந৅౓͕ߴ͍ w ιϑτ΢ΣΞͷϦΤϯδχΞϦϯάΛߦ͏ͭͷબ ୒ࢶΛ͍ࣔͯ͠Δ w ϦϑΝΫλϦϯά w ϦΞʔΩςΫςΟϯά w

    ϏοάɾϦϥΠτ ϨΨγʔιϑτ΢ΣΞվળΨΠυ
  42. Ͳ͜ʹςετΛ ॻ͍͍͔ͯ͘

  43. w ʮԿ͕Ұ൪΍͹͍Ͱ͔͢ʁʯ w ࠷΋ࠔ͍ͬͯΔͱ͜Ζ͔Β w ͓ۚɺݸਓ৘ใɺʜʜ w ৽ػೳ։ൃ͔Β w όάमਖ਼ͷͱ͜Ζ͔Β

    w ੩తղੳͰϐϯϙΠϯτʹ Ͳ͔͜Β΍Δ͔
  44. ʮ௧ΜͩՕॴʯͱʮख͕ಧ͘Ռ࣮ʯ

  45. w ϦεΫ w खಈςετͷίετ w ࣗಈԽίετ ςετͷτϦΞʔδ

  46. ςετέʔεΛҰཡʹ·ͱΊΔ ςετέʔε σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁ ৽نϢʔβొ࿥ ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ ৼΓࠐΈͷ֬ೝ

  47. ϦεΫΛݟੵ΋Δ ςετέʔε ϦεΫ σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁ ৽نϢʔβొ࿥ ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ

    ৼΓࠐΈͷ֬ೝ
  48. खಈςετͷίετΛݟੵ΋Δ ςετέʔε ϦεΫ खಈςετͷ ίετ σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁ ৽نϢʔβొ࿥

    ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ ৼΓࠐΈͷ֬ೝ
  49. ࣗಈԽίετΛݟੵ΋Δ ςετέʔε ϦεΫ खಈςετͷ ίετ ࣗಈԽίετ σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁

    ৽نϢʔβొ࿥ ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ ৼΓࠐΈͷ֬ೝ
  50. ༏ઌॱҐΛ෇͚ͯฒ΂ସ͑Δ ςετέʔε ϦεΫ खಈςετͷ ίετ ࣗಈԽίετ ޱ࠲ͷౚ݁ ৼΓࠐΈͷ֬ೝ औҾཤྺ ݕࡧ݁Ռͷฒͼସ͑

    ͓ۚͷೖۚ ηΩϡϦςΟΞϥʔτ ৽نϢʔβొ࿥ σβΠϯมߋ
  51. Ͳ͏ςετΛ ॻ͍͍͔ͯ͘

  52. w ઀߹෦ͷݕ౼ͱۛຯ w ߜΓࠐΈ఺ͷൃݟͱґଘͷ෼཭ w ࠶ݱੑ͋Δςετϋʔωεͷ੔උ w ௒ूதฤू )ZQFSBXBSF&EJUJOH 

    w ίϯύΠϥ*%&·͔ͤ w ࢓༷Խςετ w ࢼߦϦϑΝΫλϦϯά ϨΨγʔίʔυվળͷٕ๏
  53. w ࠷ॳ͔Βશ෦΍Ζ͏ͱ͠ͳ͍ w ςετۦಈʹͩ͜ΘΔͳ w ςετϑΝʔετʹͩ͜ΘΔͳ w ʮϢχοτʯςετʹͩ͜ΘΔͳ w ςετͷ࣮ߦ଎౓ʹͩ͜ΘΔͳ

    w ςετͷ໢ཏੑʹͩ͜ΘΔͳ ͩ͜ΘΔͳ
  54. w ྑ͍Ϣχοτςετͷࢦඪʹ΋༏ઌ ౓͕͋Δ w ࠶ݱɺ܁Γฦ͠Մೳ 3FQFBUBCMF  w ಠཱ͍ͯ͠Δ *OEFQFOEFOU

     w ଞ͸ͦΕ͔ΒͰ͍͍ ͩ͜ΘΖ͏
  55. w ςετ͕ͳ͍ͷ͸طʹઃܭ͕ѱ͍ஹީ w ઃܭ࣮૷Λม͑Δͷ͕લఏ w ࣮૷ͷςετΛॻ͔ͳ͍͜ͱ w ςετ͕Χόʔ͢Δൣғʹ༡ͼΛ࣋ͨ ͤɺΧόʔൣғ಺ΛϦϑΝΫλϦϯά w

    ঢ়گʹԠͯ͡&&ςετΛ࢖͍͜ͳ͢ ઃܭͷՄಈҬΛ֬อ͢Δ
  56. ςετࣗಈԽϐϥϛουͱΞϯνύλʔϯ IUUQTXBUJSNFMPOCMPHJOUSPEVDJOHUIFTPGUXBSFUFTUJOHJDFDSFBNDPOF

  57. l5FTU4J[FTzBU(PPHMF IUUQTUFTUJOHHPPHMFCMPHDPNUFTUTJ[FTIUNM

  58. medium small large ࣗ෼ͨͪͰ4.-Λఆٛ͠ɺௐ੔͢Δ

  59. Y6OJU5FTU1BUUFSOTΑΓ ςετͷϝϯςφϯείετ ཧ૝ ݱ࣮ ςετͷϝϯςφϯείετ͕༩͑Δμϝʔδ

  60. w Ұ౓ʹଟ͘ͷਓΛม͑Δͷ͸೉͍͠ w ҭͯΔͷͰ͸ͳ͘ɺࣗΒҭͭΑ͏ʹ w ڭ͑ΒΕΔਓΛ૿΍͢ w ϖΞϓϩͰҰਓͣͭ w एखͷϗʔϓ͔ɺϕςϥϯ͔Β͔

    ͩΕͱ΍Δ͔
  61. ϖΞϓϩάϥϛϯά

  62. w ׂΕ૭ཧ࿦ w ϝτϦΫεΛऔΖ͏ w ΧόϨοδ͕௿͍͏ͪ͸ଌఆ͸ޮՌେ w খ͏Δ͍͞πʔϧΛ৐Γ͜ͳ͢ w ෼฼෼ࢠΛݟͳ͍ɻ࣌ؒΛ௥ͬͨมԽ

    ΛݟΔɻ܏͖ΛݟΔɻ ݟ͑ΔԽ
  63. IUUQTXXXqJDLSDPNQIPUPTTSHCMPH ΞϯνύλʔϯΧόϨοδΛ චهࢼݧͷΑ͏ʹѻ͏

  64. IUUQTXXXqJDLSDPNQIPUPT!/ ΧόϨοδ͸ܭثͷͻͱͭ

  65. w ಈతςετͱ੩తςετ w શମͷϝτϦΫεΛܭଌͯ͠၆ᛌͷ ࢹ఺ΛಘΔ w ෦෼తͳϝτϦΫεΛܭଌ͠ଓ͚ͯ ܏޲ΛݟΔ w 1.%

    SVCPDPQ $PWFSJUZ ʜ ੩తղੳΛ࢖͍͜ͳ͢
  66. w ίʔυϨϏϡʔͷΠϯϑϥʹ౤ࢿ w HJUIVC HJUMBC HJUCVDLFU w 8*1QVMMSFRVFTU w ίʔυΛݟΔจԽɺݟΒΕΔจԽΛ

    ҭͯΔ ίʔυϨϏϡʔ
  67. w αϯϓϧͱσϞ͕େࣄ w ਅࣅͯ͠΋Β͏౔୆Λ࡞Δ w ࠷ॳ͸αϯϓϧͷίϐϖͰ΋ྑ͍ w ςετͷ͋Δੜ׆Λମݧͯ͠΋Β͏ ͜ͱ͕େࣄ w

    ࣍ʹςετͷϝϯςφϯεΛֶͿ എதΛݟͤΔ
  68. w Ͱ͖Δ͔Β΍ΔͷͰ͸ͳ͍ w ΍Δ͔ΒͰ͖ΔΑ͏ʹͳΔ w ͋ͳ͕ͨॻ͚ΔΑ͏ʹͳΒͳ͚Ε͹ɺ ୭΋ॻ͚ΔΑ͏ʹ͸ͳΒͳ͍ 4PDJBM$IBOHFTUBSUTXJUI:06

  69. ςετ͸ϓϩͷᅂΈ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠