Upgrade to Pro — share decks privately, control downloads, hide ads and more …

思想から馴染ませるユニットテストの話/let-change-your-viewpoint-about-unit-test

 思想から馴染ませるユニットテストの話/let-change-your-viewpoint-about-unit-test

製作途中です。

---

自分の周囲を「ユニットテストは書けて当然」という世界線に導きたいので啓蒙資料を作りました。

自分の観測範囲では
・忙しいから案件で書く時間が確保できない
・学習方法がわからない、どう書けば良いのかわからない
といった部分が障壁になっている人がそこそこ多くいそうでした

まずは学ぶ時間を捻出する強い動機づけ、あるいは最初の一歩となるきっかけ作りがあれば負のスパイラルを抜け出せるのではないか?ということでこの資料を書いています。

B84123138372542a55401c92b170b528?s=128

hassaku63

April 13, 2022
Tweet

More Decks by hassaku63

Other Decks in Programming

Transcript

  1. !IBTTBLV@ ʮϢχοτςετ͸Α͘Θ͔Βͳ͍͔Βॻ͚ͳ͍ʯ ʮϢχοτςετ͸ॻ͘ͱ޻਺͕๲ΕΔ͔Βࠓճ͸ ΋ ॻ͔ͳ͍ʯ ͷѱ॥؀Λ๾໓͍ͨ͠ ࢥ૝͔Βೃછ·ͤΔϢχοτςετͷ࿩

  2. 4QFBLFS !IBTTBLV@ $PSQPSBUF&OH BU4FSWFSXPSLT$P -UE

  3. ࠓ೔ͷ಺༰ ໨త w Ϣχοτςετͷ৯Θͣݏ͍ΛݮΒ͍ͨ͠ w ςετॻ͍ͯͳ͍ͱ͔͓લͦΕʢҎԼུʣ ͠Ό΂Δ͜ͱ w ͳͥϢχοτςετ΍Δͷ͔ʁ w

    Ϣχοτςετͱ͸ԿΛ͢Δ͜ͱͳͷ͔ɻΠϝʔδΛ௫Ή
  4. ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ γφϦΦʢ̍ʣ ϢχοτςετΛֶͿ͕࣌ؒͳ͍ʗ࣮ફ͢Δํ๏͕Θ͔Βͳ͍ ʮ޻਺ʹ༨༟͕ͳ͍͔ΒࠓճͷϓϩδΣΫτ͸୯ମςετͳ͠ɻख࡞ۀͰݕূ͠Α͏ʯ ʮͰ͖·ͨ͠ʂݕূ݁Ռ͜ΕͰ͢ʂʯʮࢲͷ؀ڥͰ͸࠶ݱ͠ͳ͍Μ͚ͩͲɾɾɾʁʯʮ͑ͬɾɾɾʁʯ ख໭Γൃੜɻݕূ৚݅Λ֬ೝͯ͠ɺखॱॻ΍ύϥϝʔλγʔτͳͲͷࢿྉΛຒΊ௚͢ ӡ͕Α͚Ε͹׬ྃɻӡ͕ѱ͚Ε͹ސ٬ͷ௥ೝ֬ೝ΍ຊ൪؀ڥͰͷࢼݧͰ  ʹ໭Δ ʮ͍ͩͿ༧ఆ޻਺ΛΦʔόʔͯ͠͠·ͬͨɾɾɾ࣍ͷϓϩδΣΫτͷͨΊͷ޻਺͕ԡͯ͠Δɾɾɾʯ

      ʹ໭Δ
  5. ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ γφϦΦʢ̎ʣ ϢχοτςετΛֶͿ͕࣌ؒͳ͍ʗ࣮ફ͢Δํ๏͕Θ͔Βͳ͍ ʮ޻਺ʹ༨༟͕ͳ͍͔ΒࠓճͷϓϩδΣΫτ͸୯ମςετͳ͠ɻख࡞ۀͰݕূ͠Α͏ʯ ʮͰ͖·ͨ͠ʂݕূ݁Ռ͜ΕͰ͢ʂʯʮʢݫີʹ֬ೝͯ͠ͳ͍͚Ͳɺγʔτͷهड़಺༰ͦΕͬΆ͍͔Βʣ0,ʂʯ ͳΜͱ͔ϦϦʔε͢Δ ϩδοΫͷίʔφʔέʔεʢೖྗͷڥք৚݅ͳͲʣͰҙਤ͠ͳ͍ڍಈʗ૝ఆ࿙Ε͕ൃੜ ʮ௚͞ͳ͖ΌʂͰ΋ɺ΋͏ͦͷϓϩδΣΫτ͸ΞαΠϯ͕ղআ͞ΕͯΔ͔Β༧ఆ޻਺͕ɾɾɾʯ  

    ʹ໭Δ
  6. ςετΛॻ͔ͳ͍͜ͱʹෛͷࣗݾڧԽܕϧʔϓΛࣗΒੜΈग़͍ͯ͠Δ ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ ΍Γํ͕Θ͔Βͳ͍ɺ ࿅श͢Δ͕࣌ؒͳ͍ ͕͔͔࣌ؒΔ͔Β Ҋ݅Ͱ࣮ફͰ͖ͳ͍ ޙ͔ΒϩδοΫͷ όά͕ൃ֮ ख໭ΓରԠͰ͞Βʹ ͕࣌ؒͳ͘ͳΔ

    ख࡞ۀͰߦͬͨݕূ࡞ۀ͕ ଞͷ؀ڥͰ͸࠶ݱ͠ͳ͍ʜ
  7. ςετΛॻ͔ͳ͍͜ͱʹෛͷࣗݾڧԽܕϧʔϓΛࣗΒੜΈग़͍ͯ͠Δ ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ ΍Γํ͕Θ͔Βͳ͍ɺ ࿅श͢Δ͕࣌ؒͳ͍ ͕͔͔࣌ؒΔ͔Β Ҋ݅Ͱ࣮ફͰ͖ͳ͍ ޙ͔ΒϩδοΫͷ όά͕ൃ֮ ख໭ΓରԠͰ͞Βʹ ͕࣌ؒͳ͘ͳΔ

    ख࡞ۀͰߦͬͨݕূ࡞ۀ͕ ଞͷ؀ڥͰ͸࠶ݱ͠ͳ͍ʜ ͦΕɺʮ๩͍͔͠Βॻ͔ͳ͍ʯͷͰ͸ͳ͘ɺ ʮॻ͔ͳ͍͔Β๩͍͠ʯͷ͔΋
  8. ςετΛॻ͔ͳ͍͜ͱʹෛͷࣗݾڧԽܕϧʔϓΛࣗΒੜΈग़͍ͯ͠Δ ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ ΍Γํ͕Θ͔Βͳ͍ɺ ࿅श͢Δ͕࣌ؒͳ͍ ͕͔͔࣌ؒΔ͔Β Ҋ݅Ͱ࣮ફͰ͖ͳ͍ ޙ͔ΒϩδοΫͷ όά͕ൃ֮ ख໭ΓରԠͰ͞Βʹ ͕࣌ؒͳ͘ͳΔ

    ख࡞ۀͰߦͬͨݕূ࡞ۀ͕ ଞͷ؀ڥͰ͸࠶ݱ͠ͳ͍ʜ ࣗݾڧԽܕͷϧʔϓߏ଄͸ɺ ߏ੒ཁૉͷҰ෦Λ޷సʗѱԽͤ͞Δ͜ͱͰ ॥؀શମͷਖ਼ෛΛม͑ΒΕΔ
  9. ςετΛॻ͔ͳ͍͜ͱʹෛͷࣗݾڧԽܕϧʔϓΛࣗΒੜΈग़͍ͯ͠Δ ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ ͕͔͔࣌ؒΔ͔Β Ҋ݅Ͱ࣮ફͰ͖ͳ͍ ޙ͔ΒϩδοΫͷ όά͕ൃ֮ ख໭ΓରԠͰ͞Βʹ ͕࣌ؒͳ͘ͳΔ ख࡞ۀͰߦͬͨݕূ࡞ۀ͕ ଞͷ؀ڥͰ͸࠶ݱ͠ͳ͍ʜ

    ࣌ؒΛ౤ࢿͯ͠ɺ ΍ΓํΛֶͿ
  10. ςετΛॻ͔ͳ͍͜ͱʹෛͷࣗݾڧԽܕϧʔϓΛࣗΒੜΈग़͍ͯ͠Δ ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ ޙ͔ΒϩδοΫͷ όά͕ൃ֮ ख໭ΓରԠͰ͞Βʹ ͕࣌ؒͳ͘ͳΔ ख࡞ۀͰߦͬͨݕূ࡞ۀ͕ ଞͷ؀ڥͰ͸࠶ݱ͠ͳ͍ʜ Ҋ݅Ͱ΋࣮ફͰ͖Δ Α͏ʹͳΔ

    ࣌ؒΛ౤ࢿͯ͠ɺ ΍ΓํΛֶͿ
  11. ςετΛॻ͔ͳ͍͜ͱʹෛͷࣗݾڧԽܕϧʔϓΛࣗΒੜΈग़͍ͯ͠Δ ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ Ҋ݅Ͱ΋࣮ફͰ͖Δ Α͏ʹͳΔ όάͷൃੜස౓͕ݮΔ ख໭ΓରԠͰ͞Βʹ ͕࣌ؒͳ͘ͳΔ ผ؀ڥͰ΋ ςετͷ࠶ݱੑ͕୲อͰ͖Δ ࣌ؒΛ౤ࢿͯ͠ɺ

    ΍ΓํΛֶͿ
  12. ςετΛॻ͔ͳ͍͜ͱʹෛͷࣗݾڧԽܕϧʔϓΛࣗΒੜΈग़͍ͯ͠Δ ͍ͭ·Ͱܦͬͯ΋ςετ͕ॻ͚ͳ͍ѱ॥؀ ࣌ؒΛ౤ࢿͯ͠ɺ ΍ΓํΛֶͿ Ҋ݅Ͱ΋࣮ફͰ͖Δ Α͏ʹͳΔ όάͷൃੜස౓͕ݮΔ ࣮ફͷػձΛ௨ͯ͠ ੒௕αΠΫϧ͕ճΔɺ ࣌ؒΛ࡞Γ΍͘͢ͳΔ

    ผ؀ڥͰ΋ ςετͷ࠶ݱੑ͕୲อͰ͖Δ
  13. ςετॻ͖·͠ΐ͏ w ʮ࡞ΓऴΘ͔ͬͨΒΰʔϧʯ͡Όͳ͍ w ࡞ͬͨΞϓϦʗαʔϏε͕ແࣄʹՔಇͯ͠ɺͦ͜ͰॳΊͯ։ൃ࢓ࣄʹՁ஋͕ੜ͡Δ w ͦͷޙͷൃలʢػೳվम౳ʣ·ͰؚΊ݈ͯશʹճͤΔΑ͏ʹɺඞཁͳ͜ͱΛ΍Δ w ख࡞ۀͰೲ඼લͷςετ͢Δͷɺ͠ΜͲ͘ͳ͍Ͱ͔͢ʁ w

    ࠶ݱੑͷ୲อͱɺ෺ཧతͳՔಇͷख਺ɺͲͪΒ΋ܰݮ͍ͨ͠Ͱ͢ΑͶ w ݕূޙʹൃੜͨ͠࢓༷มߋ౳Ͱίʔυ͕มߋ͞ΕͨΒɺ·ͨಉ͡Α͏ͳख࡞ۀΛ΍Γ௚͢ͷͰ͢ ͔ɾɾɾʁ w ख࡞ۀͷॏ͍ͨ޻ఔ͕͋ΔͱɺΫΠοΫͳվળ׆ಈʹରͯ͠૬ੑ͕ѱ͍ɻ 
 ෛͷΠϯηϯςΟϒΛੜ͡΍͘͢ɺαΠΫϧෆશʹؕΓ΍͍͢
  14. ςετॻ͖·͠ΐ͏ w ςετίʔυΛॻ͘͜ͱͰɾɾɾ w ࠶ݱੑΛऔΓ΍͍͢ʢσϓϩΠ؀ڥͷࠩҟɺ։ൃ؀ڥͷࠩҟɺݕূ৚݅ͷ࠶ݱɺͳͲʣ w ͋Δػೳʢؔ਺ʣ͕ͲͷΑ͏ͳڍಈɾೖग़ྗΛ૝ఆͯ͠࡞ΒΕͨͷ͔͕ୈࡾऀʹ΋఻ΘΔ w ςετՄೳͳཻ౓΁ͷ෼ׂΛߟ͑Δඞཁ͕ग़ΔͨΊɺࣗͣͱίʔυϨϕϧͷઃܭ͕վળ͞ΕΔ w

    ҆৺ͯ͠ίʔυΛมߋͰ͖ΔΑ͏ʹͳΔɻมߋʹର͢Δ৺ཧతোน͕Լ͕Δ w $*$%ͷύΠϓϥΠϯʹςετͷ࢓૊ΈΛ৐ͤΒΕΔ w ૯ͯ͡ɺϢχοτςετ͸վળαΠΫϧΛਝ଎ʹճ͍ͯͨ͘͠Ίͷ౔୆ʹͳΔ
  15. ςετॻ͖·͠ΐ͏ w ͍ͭͰʹɺΩϟϦΞతʹ΋ଛࣦ w ϓϩμΫτ։ൃʹ͓͍ͯςετ͸΋͸΍લఏʹ͍ۙεΩϧηοτʢ˞ݸਓͷҙݟͰ͢ʣ w ࠾༻ଆͷ໨ઢͰɺςετΛॻ͚ͳ͍ਓ͕Ξϐʔϧ͢Δ։ൃ࣮੷ΛͲͷ͘Β͍৴༻ɾධՁͰ͖ΔͰ͠ΐ͏͔ʁ 
 ʢ໪࿦ɺςετ͚͕࣮ͩ૷ೳྗͷ͢΂ͯͰ͋Δͱ͸ࢥ͍ͬͯ·ͤΜʣ w

    ͔࣮ͤͬ͘૷ͷ࢓ࣄʹܞΘΔػձΛಘͨͷͰ͋Ε͹ɺҰఆਫ४ͰධՁ͞ΕΔαϒ΢Σϙϯͱݴ͑Δఔ౓ʹࣗ৴Λ ࣋ͪͨ͋͘ΓͤΜ͔ɾɾɾʁ 
 ʢ໪࿦ɺςετ͕ॻ͚Δʹ࣮૷ೳྗͷ୲อɹͱ͸ݴ͍੾Εͣɺ਺͋Δ؍఺ͷͻͱͭʹա͗ͳ͍ͱߟ͍͑ͯ·͢ʣ
  16. ςετॻ͖·͠ΐ͏ w ςετίʔυΛॻ͘͜ͱͰɾɾɾ w ࠶ݱੑΛऔΓ΍͍͢ʢσϓϩΠ؀ڥͷࠩҟɺ։ൃ؀ڥͷࠩҟɺݕূ৚݅ͷ࠶ݱɺͳͲʣ w ͋Δػೳʢؔ਺ʣ͕ͲͷΑ͏ͳڍಈɾೖग़ྗΛ૝ఆͯ͠࡞ΒΕͨͷ͔͕ୈࡾऀʹ΋఻ΘΔ w ҆৺ͯ͠ίʔυΛมߋͰ͖Δɻมߋʹର͢Δ৺ཧతোน͕Լ͕Δ w

    $*$%ͷύΠϓϥΠϯʹςετͷ࢓૊ΈΛ৐ͤΒΕΔ w ૯ͯ͡ɺϢχοτςετ͸վળαΠΫϧΛਝ଎ʹճ͍ͯͨ͘͠Ίͷ౔୆ʹͳΔ w ͍ͭͰʹɺΩϟϦΞతʹ΋ଛࣦ w ϓϩμΫτ։ൃʹ͓͍ͯςετ͸΋͸΍ී௨ͷεΩϧηοτʢ˞ݸਓͷภݟͰ͢ʣ w ࠾༻ଆͷ໨ઢͰɺςετ͕ॻ͚ͳ͍ਓ͕Ξϐʔϧ͢Δ։ൃ࣮੷ΛͲͷ͘Β͍৴༻ɾධՁͰ͖ΔͰ͠ΐ͏͔ʁ 
 ʢ໪࿦ɺςετ͚͕࣮ͩ૷ೳྗͷ͢΂ͯͱ͸ࢥ͍ͬͯ·ͤΜʣ w ͔࣮ͤͬ͘૷ͷ࢓ࣄʹܞΘΔػձΛಘͨͷͰ͋Ε͹ɺࢢ৔Ͱ΋ධՁ͞ΕΔ 
 αϒ΢Σϙϯͱͯ͠࢖͑Δఔ౓ͷࣗ৴ΛखʹೖΕͨ͋͘ΓͤΜ͔ʁ ςετΛॻ͔ͳ͍ͷ͸ɺʢଟ͘ͷ৔߹ʹ͓͍ͯʣ ଛࣦΛརࢠ෇͖ͰઌԆ͹͠ʹ͢Δߦҝ
  17. ͱ͸͍͑ Α͋͘Δ੠ʢιʔε͸ओʹաڈͷࣗ෼ʣ w ۩ମతͳϝϦοτͷେ͖͕͍͞·͍࣮ͪײͰ͖ͳ͍ w ֶशͷ࢓ํ͕Θ͔Βͳ͍ɺڭ͑ͯ͘ΕΔਓ͕͍ͳ͍ w ԿΛͲ͜·ͰͲ͏͢Ε͹ɺࣗ෼ͷςετ͕ʮଥ౰ʯͱݴ͑Δͷ͔Θ͔Βͳ͍ w ͍࣮͟ࡍͷҊ݅Λ໨ʹͨ͠ΒɺͲ͏ద༻ͨ͠Βྑ͍ͷ͔શ͘Πϝʔδ͕͔ͭͳ͍

  18. ͱ͸͍͑ Α͋͘Δ੠ʢιʔε͸ओʹաڈͷࣗ෼ʣ w ۩ମతͳϝϦοτͷେ͖͕͍͞·͍࣮ͪײͰ͖ͳ͍ w ֶशͷ࢓ํ͕Θ͔Βͳ͍ɺڭ͑ͯ͘ΕΔਓ͕͍ͳ͍ w ԿΛͲ͜·ͰͲ͏͢Ε͹ɺࣗ෼ͷςετ͕ʮଥ౰ʯͱݴ͑Δͷ͔Θ͔Βͳ͍ w ͍࣮͟ࡍͷҊ݅Λ໨ʹͨ͠ΒɺͲ͏ద༻ͨ͠Βྑ͍ͷ͔શ͘Πϝʔδ͕͔ͭͳ͍

    ࣍ճ΁ͭͮ͘ʢ੍࡞தʣ