ソフトウェア開発組織やソフトウェア自体の価値を向上させる方法は多岐にわたります。例えば、品質面においてでも複数のアプローチを組み合わせることで目標を達成しやすくなります。プログラミング、ソフトウェアテスト、プロジェクトマネジメント、プロダクトマネジメント、マーケティングなどなど。今回は、ソフトウェアテストを勉強することにより「ソフトウェア開発の質向上に対してどのように全体的に作用するのか」を実体験をもとに紹介します。
https://iijlab-seminars.connpass.com/event/89199/
ιϑτΣΞςετΛษڧͯ͠ઃܭϚωδϝϯτ্͕खʹͳͬͨIIJ Labηϛφʔ 2018/06/12kyon_mm
View Slide
Speaker• kyon_mm גࣜձࣾΦϯβϩʔυ MaaSࣄۀ෦ ςετΞʔΩςΫτ• ιϑτΣΞςετɺεΫϥϜɺιϑτΣΞߏཧɺTDD• Groovy/Scheme/Scala/F#
Agenda• ιϑτΣΞςετΛษڧ͢Δલͷ• ιϑτΣΞςετΛษڧ͍ͯ͠Δ• ιϑτΣΞςετ͕ʹཱͭ• ΤϯτϦʔϙΠϯτ• ·ͱΊ
ιϑτΣΞςετΛษڧ͢Δલͷ• ࠷ॳJavaΞϓϦέʔγϣϯͷ։ൃ• ͍ͦͦ͜͜͠ॻ੶ͱ͔ಡΜͰ͍ͨ• Effective xxxܥɺʙύλʔϯɺͳͲ• Ͱɺ։ൃ͕٧·͖ͬͯͨͱ͖ʹ͏·͘Ҿ͖ܧ͙͜ͱͳΜͯͰ͖ͳ͔ͬͨɻ
։ൃʹ٧·ͬͨͱ͖ͷ1• kyon_mmʮʙ͕·ͩग़དྷ͍ͯ·ͤΜʯ• ಉ྅ʮͲΕͲΕɺҰॹʹݟͯΈΑ͏͔ʯ• ಉ྅ʮΜʔɻΘ͔͚ͬͨͲɺ͜Εͩͱ͏·͘ಈ͔͠ͳ͕Β͢ͷ͍͠ͳɻॻ͖ͦ͏ʯ• PMʮ·͕͔͔ͨ࣌ؒͬͯ͠·͏ɻɻɻʯ
։ൃʹ٧·ͬͨͱ͖ͷ2• kyon_mmʮόάͷݪҼ͕·ͩΘ͔Γ·ͤΜʯ• ಉ྅ʮͲΕͲΕɺҰॹʹݟͯΈΑ͏͔ʯ• ಉ྅ʮΜʔɻ͜ΕͲͷςετ͔ΒΓ͍͍ͤΜͩɻԿ͕ಈ͍͍ͯΔͷ͔ݕ౼͕͔ͭͳ͍ɻʯ• PMʮ·͕͔͔ͨ࣌ؒͬͯ͠·͏ɻɻɻʯ
͔ͦ͜Β΄Μͷগ͠ௐͨΓ• ͪΐͬͱ͚ͩTDDΛษڧͨ͠Γ͚ͨ͠Ͳ࣮ફͰ͖ͳ͔ͬͨɻ• ີ݁߹͍ͯͯ͠ςετΛೖΕΒΕͳ͍• ݹ͍ιϑτΣΞڥͰੈͷதͷνϡʔτϦΞϧͱဃ͕͋Δ• ྑ͍ςετ͕ͳʹ͔Θ͔Βͳ͍ɻ• ݁ہςετʹର͔͚ͯ࣌ؒͯ͠ҙຯͳͦ͞͏ɻͬͯࢥͬͨɻ
ιϑτΣΞςετΛษڧ͢Δલͷঢ়گ• ͦͷιϑτΣΞͰ• Կ͕ग़དྷ͍ͯͯɺԿ͕ग़དྷ͍ͯͳ͍ͷ͔• ͳΜͷͨΊʹͦΕ͕͋Δͷ͔• Λਖ਼͘͠આ໌Ͱ͖Δঢ়ଶʹͳ͍ͱɺ ʮ͏·͍͔͘ͳ͔ͬͨͱ͖ʯʹͨ͘͞Μ͕͔͔࣌ؒΔɻ• ςετʹΑ্ͬͯखʹ։ൃ͢ΔՄೳੑΛࣺ͍ͯͯΔɻ• ্ͷ͜ͱΛɺkyon_mmੲಷײͰؾ͍͍ͮͯͳ͔ͬͨɻ
ษڧ͢ΔΩοΧέ• ΩοΧέ༑ਓ͕ιϑτΣΞςετͷΠϕϯτͷࢀՃΛ༠ͬͯ͘Εͨ͜ͱɻ• ιϑτΣΞςετͷجຊΛษڧͯ͠ΈΑ͏ͱ͍Ζ͍ΖͬͯΈͨɻ• ιϑτΣΞςετͷٕ๏Λษڧ• ΧϯϑΝϨϯεͳͲͷൃදࢿྉΛಡΈࠐΈ
ษڧ͠͡Ίͨͱ͖• ςετέʔεԿͱͳ͔͚͘ΔΑ͏ʹͳͬͨɻ• υϝΠϯੳςετ => ҟৗܥؚΊͨςετέʔεͷޮՌతͳ࡞Γํ• ݪҼ݁Ռάϥϑ => ༷Λผදݱʹͯ͠ςετέʔεΛޮՌతʹ࡞Δ
ιϑτΣΞςετΛษڧͯ͠Μͩ͜ͱ• લΑΓͨͩ͘͠ιϑτΣΞͷঢ়گΛදݱͰ͖ΔΑ͏ʹͳͬͨ• ͨͩ͠ɺ• όά·͍ͩͦͦͬͯͯ͜͜ɺऴ൫ʹݟ͔ͭͬͯࠔΔ͜ͱʹͳΔɻ• όάൃݟ·Ͱ͕͔͔࣌ؒΔɻ
͋Εʁςετͬͯ͑ͳ͍ʁ
ςετͬͯ͑ͳ͍ʁ• આ໌Ͱ͖ͳ͍ => આ໌Ͱ͖Δςετ• όά͕ૣ͘ʹݟ͔ͭΔ => ίετͷׂʹݟ͔ͭΒͳ͍• ͱ͍͏͜ͱ ʮςετ୭͕ͬͯҰॹͳͷͰͳ͍ͩΖ͏͔ʁʯ ʮ໘Ͱಓͳ͜ͱΛͨ͘͞ΜΔ͚ͩʁʯ
͍ ςετ͕͑ͳ͍ͱ͔ͷલʹ։ൃ্͕खʹͳ͍ͬͯͳ͍
ͳ্ͥखʹͳΒͳ͍ͷ͔ʁ
ࠓࢥ͑શମͷͨΊʹࣄΛ͍ͯ͠ͳ͔ͬͨɻ• ʮιϑτΣΞ։ൃϏδωεશମʯʹରͯ͠ʮݱͷνʔϜʯͱͯ͠ ʮ࠷ߴͷROIʯΛग़͢Α͏ͳऔΓΈΛͰ͖͍ͯͳ͍ɻ• ͦ͏ͳͬͯ͠·ͬͨݪҼ ʮ͕ࣗग़དྷΔ͜ͱ͔͠૾Ͱ͖ͳ͍ʯ ʮϏδωεͷWhyΛཧղͤͣʹࣄ͍ͯ͠Δʯ
͍ΖΜͳ͜ͱΛΒͳ͍ͱ։ൃ্खʹͳΒͳ͍ɻ ςετ෯͍ͷͰษڧͷΩοΧέʹΑͦ͞͏ɻ
ιϑτΣΞςετΛग़ൃʹ͍ͯ͠ΖΜͳ͜ͱΛษڧ͢Δ• ੳ/ཁ݅ఆٛ/ઃܭ/࣮/ධՁ ͷͲΕΛษڧͯ͠ɺͦΕͧΕͷΞτϓοτΛʮධՁ͢Δʯͱ͍͏ߟ͑ํιϑτΣΞςετ͕͑ͦ͏ɻ• ཁ݅ఆ͕ٛग़དྷͨ͜ͱͷςετͲ͏͢Δʁͱ͔ɻ• Կࣄʹ͓͍ͯɺʮͦΕ͕ग़དྷͨͱ͍͏͜ͱͲ͏͍͏ج४ͳͷ͔ʯΛߟ͑Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔɻ• ͦͷͨΊʹςετͷٕ๏͕͑ͦ͏ɻͲΜͳςετΛߟ͑ͯɺͲΜͳ༏ઌॱҐ͚Λ͍ͯ͘͠ͷ͔ɻ
ιϑτΣΞςετͰֶΔ͜ͱ• ະͷͷΛʮԿʹޮΑֶ͘श͢Δ͔ʯͷݟ͕ͭ·͍ͬͯΔɻ• ιϑτΣΞʹ͍ͭͯͷݟͰ͋Δ͕ ͍࣌ؒͰͲ͏ͬͯରΛѲ͢Δํ๏ ͷմɻ• ͜Ε͍ͦͦΖΜͳ͜ͱʹԠ༻͕Ͱ͖Δɻ
ιϑτΣΞςετ• ςετ ͳΜΒ͔ͷ͕ࠩͲ͜ʹ͋Γͦ͏Ͱɺ Ͳͷఔͷࠩͳͷ͔Λɺ ޮతʹݟ͚ͭΔํ๏
ιϑτΣΞ։ൃͷऔΓΈํ͕มΘͬͨ• ιϑτΣΞςετͷษڧଓ͚Δͱͯ͠• ιϑτΣΞ։ൃʹ͓͚Δ༷ʑͳݟΛٵऩ͢ΔΑ͏ʹͨ͠ɻ• શମΛݟͳ͕ΒιϑτΣΞςετΛͰ͖ΔΑ͏ʹͳͬͯ͘Δͱɺૣ͘ɺޮతʹόάΛݟ͚ͭΔ͜ͱ͕Ͱ͖ΔΑ͏ʹͳ͖ͬͯͨɻ• ͦͯ͠ɺͦͦιϑτΣΞ։ൃ্͕खʹͳ͖ͬͯͨɻ
ςετͷษڧ͕ʹཱͬͨྫ• ཏରͱཏج४ΛͲ͏͢Δͷ͔ʁ• ʙʹؔ͢Δٕज़ௐࠪͰԿΛௐΔ͖͔ʁ• σγδϣϯςʔϒϧ/υϝΠϯੳςετ• ϢχοτςετͳͲͰ༷ͷ͵͚ΕΛΒ͢• Έ߹Θͤςετ• αϒγεςϜಉ࢜ػೳಉ࢜ͷಠཱੑΛߴΊΔઃܭ
ςετϓϩηεͰݟΔؔ࿈• ςετઓུࡦఆ => ϓϩδΣΫτϚωδϝϯτɺϓϩμΫτϚωδϝϯτ• ςετੳ => UXɺٕज़จॻɺ՝ཧ• ςετઃܭ => γεςϜઃܭɺٕज़จॻ• ςετ࣮ => ٕज़จॻɺࣗಈςετ• ςετ࣮ࢪ => λεΫཧɺࣗಈςετ• ςετใࠂ => ՝ཧɺٕज़จॻɺϓϩδΣΫτϚωδϝϯτ
ઃܭ͕͏·͘ͳͬͨ
։ൃͷϧʔϓઃܭ/࣮ੳ/ςετࣦഊΛ༧͢Δઃܭ ࣦഊΛখ͘͢͞Δઃܭઃܭ/࣮Ռςετઃܭ όά ՝
։ൃͷϧʔϓઃܭ/࣮ੳ/ςετࣦഊΛ༧͢Δઃܭ ࣦഊΛখ͘͢͞Δઃܭઃܭ/࣮Ռςετઃܭ όά ՝ਅΜதͷ࣭ྔɺϧʔϓΛ͏·͘·Θ͢͜ͱͰޮతʹ্Ͱ͖Δ
։ൃͷϧʔϓઃܭ/࣮ੳ/ςετࣦഊΛ༧͢Δઃܭ ࣦഊΛখ͘͢͞Δઃܭઃܭ/࣮Ռςετઃܭ όά ՝େͳϢʔβʔͰ'BJM͢ΔηΩϡϦςΟόάࣗಈςετΛ׆༻͍͢͠ઃܭ
։ൃͷϧʔϓઃܭ/࣮ੳ/ςετࣦഊΛ༧͢Δઃܭ ࣦഊΛখ͘͢͞Δઃܭઃܭ/࣮Ռςετઃܭ όά ՝εέʔϥϏϦςΟͷߴ͍ઃܭηΩϡΞͳઃܭ جຊతͳηΩϡϦςΟςετࡁΈͷૄ݁߹ͳγεςϜઃܭେͳϢʔβʔͰ'BJM͢ΔηΩϡϦςΟόάࣗಈςετΛ׆༻͍͢͠ઃܭ
WebΞϓϦέʔγϣϯͷྫ
࠷ॳͷWebΞϓϦέʔγϣϯηΩϡϦςΟςετϨϏϡʔΛ࣮ࢪ͢Δͱɺ42-ΠϯδΣΫγϣϯͳΓɺෆਖ਼ͳૢ࡞Λߦ͑ΔจࣈྻΛೖྗͰ͖ͯ͠·͏ߏʹͳ͍ͬͯΔ͜ͱ͕໌͜ͷΑ͏ʹςετʹΑͬͯγεςϜͷߏ͕ු͖ூΓʹͳΓ·͢ɻ
मਖ਼ޙͷWebΞϓϦέʔγϣϯ੬ऑͳߏΛमਖ਼͢Δɻͦͯ͜͠Ε5%%ͳͲͰઃܭͱͯ͠هड़͢Δ͜ͱ͕Ͱ͖Δɻ
ςετͷଊ͑ํ• ઃܭ༷ݟΛ͍ͤͯ͘͞ͱ͍͏త ʮͳΜͷͨΊʹ͍ͭ࡞ΒΕͨςετ͔ʯʹΑͬͯ2ͭʹେผͰ͖Δɻ• ߏΛු͖ூΓʹ͢Δςετ• ηΩϡϦςΟςετɺύϑΥʔϚϯεςετɺA/Bςετɺ੩తղੳ• ߏΛܾఆ͢Δςετ• TDDɺηΩϡϦςΟςετɺύϑΥʔϚϯεςετ
ςετͷଊ͑ํ• ઃܭ༷ݟΛ͍ͤͯ͘͞ͱ͍͏త ʮͳΜͷͨΊʹ͍ͭ࡞ΒΕͨςετ͔ʯʹΑͬͯ2ͭʹେผͰ͖Δɻ• ߏΛු͖ூΓʹ͢Δςετ• ηΩϡϦςΟςετɺύϑΥʔϚϯεςετɺA/Bςετɺ੩తղੳ• ߏΛܾఆ͢Δςετ• TDDɺηΩϡϦςΟςετɺύϑΥʔϚϯεςετ͋Δςετ͕ͲͪΒ͔ͷΈʹଘࡏ͢Δͱ͍͏Α͏ͳഉଞతͳྨͰ͋Γ·ͤΜɻ
ͳͥઃܭߏʹண͢Δͷ͔• γεςϜͰߏΛมߋ͢Δ͜ͱͱͯίετ͕͔͔ΔɻٯʹɺߏΛม͑ͣʹࡁΉमਖ਼؆୯ɻ• ΫϦςΟΧϧͳߏతܽؕૣظʹൃݟͨ͠Γɺؤڧʹઃܭͨ͠ߏͰ࣮Ͱ͖͍ͯΔ͜ͱΛ࣮ূ͍ͨ͠ɻ• ιϑτΣΞςετͦͷͨΊʹ͑Δɻ
ςετͷֶशޮՌ
ߏΛු͖ூΓʹ͢Δςετʹ͓͚ΔֶशޮՌͷಛ• ߏΛු͖ூΓʹ͢Δςετςετπʔϧ͕๛ͳ͜ͱ͋ΓɺॳظࢿͰ͙͢ʹޮՌ͕ग़͍͢ɻ• πʔϧͰఈ্͛͞Εͨͱ͜Ζ͔Β͞Βʹ౿ΈࠐΜͰߏΛු͖ூΓʹ͢ΔͨΊʹଟ͘ͷֶशܦݧ͕ඞཁɻ• ؐݩओٛతʹϞϊΰτΛղͯ͠ݟΕΔΑ͏ͳεΩϧΛ͚͍ͭͯ͘͜ͱͱɺ၆ᛌͯ͠ཁ݅ͱ՝Λͭͳ͛ͯݟ͍ͯ͘εΩϧ͕ඞཁɻ
ߏΛܾఆ͢Δςετ ʹ͓͚ΔֶशޮՌͷಛ• ߏΛܾఆ͢Δςετςετπʔϧ͋·Γ๛Ͱͳ͍ͿΜɺͳ͔ͳ͔ޮՌ͕ग़ʹ͍͘ɻ• ੵΈ্ֶ͛ͯश͍ͯ͘͠༰͕ଟ͍ͨΊண࣮ʹޮՌ͕ग़͍͖ͯ·͢ɻ• ৗʹݕূൣғʹೖ͍ͬͯΔΑ͏ͳςετʹ͢ΔͨΊͷυΩϡϝϯςʔγϣϯίϛϡχέʔγϣϯεΩϧ͕ඞཁɻ• ࣗಈԽɺυΩϡϝϯτɺϖΞςεςΟϯάͷΑ͏ʹɺߏΛܾఆ͢Δςετઃܭใͱͯ͠ѻ͏ͨΊͷεΩϧ͕ॏཁɻ
ͲͪΒ͔ͷεΩϧ͕ෆʁ• ιϑτΣΞςετΛษڧͯ͠ͳ͔ͳ͔ޮՌ͕Ͱͳ͍ʂ ͍ͬͯ͏ͱ͖͔ͨ͠͠ΒɺͲͪΒ͔ͷςετʹ͓ؔͯ͠Ζ͔ͦʹͳ͍ͬͯͳ͍͔ΛٙͬͯΈ·͠ΐ͏ɻ
Ϛωδϝϯτ͕͏·͘ͳͬͨ
Ϛωδϝϯτʹʹཱͭ• νʔϜʹ߹ΘͤͯςετઓུΛࡦఆͰ͖Δͱɺ• ܭըతʹ࣭Λ্ͤ͞Δ͜ͱ͕Ͱ͖Δ• ߏܽؕͷΑ͏ͳόάΛૣظ͔Βݕࠪ͢ΔΑ͏ͳମ੍Λͭ͘Γɺେ෯ͳ࣮मਖ਼ͷՄೳੑΛݮΒͤΔ• ݁Ռͱͯ͠ݟੵΓ͘͢͠ͳΔɻ
ϓϩμΫτϚωδϝϯτ• Ͳ͏͍ͬͨ͜ͱ͕ى͖ΔͱࠔΔͷ͔ʁϦεΫϚωδϝϯτιϑτΣΞςετͷൣᙝ• ಛʹιϑτΣΞͷ࣭όάʹ͍ͭͯৄ͍͠ਓ͕ϦεΫϚωδϝϯτʹؔΘΔ͜ͱͰɺதظతʹROIͷߴ͍ܭըΛཱͯ͘͢ͳΔɻ
ϓϩδΣΫτϚωδϝϯτ• νʔϜϝϯόʔʹͱͬͯʮߏΛܾఆ͢ΔςετʯͱʮߏΛු͖ூΓʹ͢ΔςετʯͷͲ͏͍ͬͨ෦͕ෆ͍ͯ͠Δͷ͔ΛѲͰ͖Δͱɺ• ܭըతʹͲͷΑ͏ʹϝϯόʔͷεΩϧΞοϓΛਤΔ͖͔ʁͲͷΑ͏ͳΤΩεύʔτʹཔΔ͖͔Λٞ͠ɺܭըͰ͖Δɻ
ιϑτΣΞςετϦεΫϕʔε͕جຊ• (kyon_mm)ιϑτΣΞςετϦεΫϕʔεʹਐΊΔͷ͕جຊ(ͱߟ͍͑ͯΔ)ɻ• Ϛωδϝϯτͷେͳ͜ͱʹɺʮͰ͖Δ͚ͩަՄೳͳͷͰߏ͍ͯ͘͜͠ͱʯ͕͋Δɻ• ιϑτΣΞςετͰෳͷखஈΛߏஙͯ͠ϦεΫʹରॲ͍ͯ͘͜͠ͱ͕ଟ͘ɺͦΕΒΛී௨ʹग़དྷΔΑ͏ʹͳͬͯ͘ΔͱɺϚωδϝϯτ͕ͩΜͩΜ্खʹͳΔɻ
ΤϯτϦʔϙΠϯτ• ιϑτΣΞςετશମ• ࣗಈςετ• ιϑτΣΞςετίϛϡχςΟ
ιϑτΣΞςετશମ• ࣝθϩ͔ΒֶͿιϑτΣΞςετ ʲվగ൛ʳ ߴڮ णҰ• ιϑτΣΞɾςετͷٕ๏ ୈ2൛ G J ϚΠϠʔζ• ϚΠϯυϚοϓ͔Β࢝ΊΔιϑτΣΞςετ ాڿɼླࡾل• جຊ͔ΒֶͿιϑτΣΞςετ Cem Kaner
ࣗಈςετ• ॳΊͯͷࣗಈςετ ―WebγεςϜͷͨΊͷࣗಈςετجૅ Jonathan Rasmusson• ςετۦಈ։ൃ Kent Beck• γεςϜςετࣗಈԽ ඪ४ΨΠυ Mark Fewster, Dorothy Graham• ܧଓతσϦόϦʔ ৴པͰ͖ΔιϑτΣΞϦϦʔεͷͨΊͷϏϧυɾςετɾσϓϩΠϝϯτͷࣗಈԽ Jez Humble, David Farley
ιϑτΣΞςετίϛϡχςΟ• Slack https://testingcommunityjp.slack.com• WACATE http://wacate.jp/• ͱͪ͗ςετͷձٞ http://d.hatena.ne.jp/tochigitestnokaigi/• JaSST http://jasst.jp/
·ͱΊ• ιϑτΣΞςετ͍ΖΜͳਓͷ ޮతʹൃݟ͢Δํ๏͕·ͱ·͍ͬͯΔɻ• ༷ʑͳ͜ͱʹԠ༻͕͖͖ɺࣄͷ͍ΖΜͳ͜ͱʹରͯ͠ɺඞཁे͔ʁ͍ͯ͠Δͷ͔ʁͳͲΛఆٛͨ͠Γɺܭଌ͢Δ͜ͱ·Ͱߟ͑ΒΕΔΑ͏ʹͳΔɻ• ࢲୡ͕ͭ͘ΔιϑτΣΞͷ࣭Λʮදݱ͢ΔʯεΩϧΛతʹֶΔɻ