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

変更容易性と理解容易性を支える自動テスト(2024/02版) / Automated Test Knowledge from Savanna 202402 YAPC::Hiroshima edition

Takuto Wada
February 10, 2024

変更容易性と理解容易性を支える自動テスト(2024/02版) / Automated Test Knowledge from Savanna 202402 YAPC::Hiroshima edition

YAPC::Hiroshima 2024

Takuto Wada

February 10, 2024
Tweet

More Decks by Takuto Wada

Other Decks in Programming

Transcript

  1. ࣗಈςετ
    มߋ༰қੑͱཧղ༰қੑΛࢧ͑Δ
    5BLVUP8"%"
    'FC !:"1$)JSPTIJNB
    !U@XBEB !UXBEB
    📷🙆 🙆
    !UXBEB
    JEUXBEB
    ZBQD@JZBQDKBQBO

    View full-size slide

  2. ৴པੑͷߴ͍࣮ߦ݁Ռʹ
    ୹͍࣌ؒͰ౸ୡ͢Δঢ়ଶΛอͭ͜ͱͰɺ
    ։ൃऀʹࠜڌ͋Δࣗ৴Λ༩͑ɺ
    ιϑτ΢ΣΞͷ੒௕Λ࣋ଓՄೳʹ͢Δ͜ͱ
    ࣗಈςετͷ໨త

    View full-size slide

  3. ৴པੑͷߴ͍
    ࣮ߦ݁Ռʹ
    ୹͍࣌ؒͰ౸ୡ͢Δ
    ঢ়ଶΛอͭ
    "HFOEB
    🦁

    View full-size slide

  4. ςετࣗಈԽͱاۀͷۀ੷ͷҼՌؔ܎
    IUUQTXXXBNB[PODPKQEQ
    ςετͷࣗಈԽʹ͓͍ͯɺ*5ύϑΥʔϚϯεͷ
    ༧ଌई౓ͱͳΓ͏Δ͜ͱ͕൑໌ͨ͠ͷ͸࣍ͷͭ
    ৴པੑͷߴ͍ࣗಈςετΛඋ͑Δ͜ͱ
    ։ൃऀओମͰड͚ೖΕςετΛ࡞੒ɾ؅ཧ͠ɺ
    खݩͷ։ൃ؀ڥͰ؆୯ʹ࠶ݱɾमਖ਼Ͱ͖Δ͜ͱ
    ʰ-FBOͱ%FW0QTͷՊֶʱQʢ˞༁ΛҰ෦มߋʣ

    View full-size slide

  5. IUUQTXXXBNB[PODPKQEQ
    ςετʹ߹֨ͨ͠ιϑτ΢ΣΞͰ͋Ε͹ϦϦʔεՄೳɺෆ߹֨Ͱ͋Ε͹ॏେͳ
    ෆ۩߹͕͋ΔɺͱνʔϜ͕֬৴Ͱ͖ΔΑ͏ͳςετΛ࣮ࢪ͍ͯ͠Δ͜ͱ
    ޡݕ஌ʢِཅੑGBMTFQPTJUJWFʣ΍ݟಀ͠ʢِӄੑGBMTFOFHBUJWFʣ͕ଟ
    ͘ɺ৴པੑʹ͚ܽΔςετεΠʔτ͕͋·Γʹ΋ଟ͗͢Δ
    ৴པ౓ͷߴ͍ςετεΠʔτΛ࡞Γ্͛Δܧଓతͳ౒ྗͱ
    ౤ࢿ͸Ձ஋͕͋Δ
    ৴པੑͷߴ͍ࣗಈςετΛඋ͑Δ͜ͱ
    ʰ-FBOͱ%FW0QTͷՊֶʱQʢ˞༁ΛҰ෦มߋʣ

    View full-size slide

  6. ੒ޭͱࣦഊ
    IUUQTHJIZPKQEFWTFSJBMTBWBOOBMFUUFS

    View full-size slide

  7. ੒ޭͱࣦഊ
    IUUQTHJIZPKQEFWTFSJBMTBWBOOBMFUUFS
    σϓϩΠɺϚʔδ

    View full-size slide

  8. ੒ޭͱࣦഊ
    IUUQTHJIZPKQEFWTFSJBMTBWBOOBMFUUFS
    σϓϩΠɺϚʔδ
    ໰୊Օॴͷಛఆͱम෮

    View full-size slide

  9. ੒ޭͱࣦഊɺِཅੑͱِӄੑ
    IUUQTHJIZPKQEFWTFSJBMTBWBOOBMFUUFS

    View full-size slide

  10. ੒ޭͱࣦഊɺِཅੑͱِӄੑ
    IUUQTHJIZPKQEFWTFSJBMTBWBOOBMFUUFS

    View full-size slide

  11. ੒ޭͱࣦഊɺِཅੑͱِӄੑ
    IUUQTHJIZPKQEFWTFSJBMTBWBOOBMFUUFS
    ໰୊Օॴͷಛఆͱम෮
    σϓϩΠɺϚʔδ

    View full-size slide

  12. ৴པੑͷߴ͍
    ࣮ߦ݁Ռʹ
    ୹͍࣌ؒͰ౸ୡ͢Δ
    ঢ়ଶΛอͭ
    "HFOEB
    🦁

    View full-size slide

  13. ࣗಈςετͷ࣮ߦ݁Ռ͸ʮ৘ใʯͰ͋Γɺ৘ใͷ໾
    ׂͱ͸ҙࢥܾఆͱߦಈΛଅ͢͜ͱ
    ςετͷ࣮ߦ݁Ռ͕ଅ͢ߦಈͱ͸ɺσϓϩΠɺϚʔ
    δɺίʔυͷमਖ਼ͳͲ
    ৘ใͷ໾ׂ͸ҙࢥܾఆͱߦಈΛଅ͢͜ͱ

    View full-size slide

  14. ੒ޭ࣌ͷΞΫγϣϯɺࣦഊ࣌ͷΞΫγϣϯ
    σϓϩΠɺϚʔδ
    ໰୊Օॴͷಛఆͱम෮

    View full-size slide

  15. ςετͷग़ྗͱૂ͍
    w ςετ݁Ռͷग़ྗͱૂ͍
    w γάφϧͱͯ͠
    w ܽؕͷߜΓࠐΈͱͯ͠
    w υΩϡϝϯτͱͯ͠
    w σʔλͱͯ͠
    w ੒ޭ࣌ͷ৘ใྔΛίϯτϩʔϧ͢Δٕज़
    w ςετ໊ͱߏ଄
    w SFQPSUFS
    w ࣦഊ࣌ͷ৘ใྔΛίϯτϩʔϧ͢Δٕज़
    w ςετ໊ͱߏ଄
    w ςεταΠζʢޙड़ʣ
    w BTTFSUJPO FYQFDUBUJPO NBUDIFS
    %
    FN
    P

    View full-size slide

  16. ৴པੑͷߴ͍
    ࣮ߦ݁Ռʹ
    ୹͍࣌ؒͰ౸ୡ͢Δ
    ঢ়ଶΛอͭ
    "HFOEB
    🦁

    View full-size slide

  17. ςεταΠζ
    ࣗಈςετͱ$*ʹϑΟοτ͢Δ
    ໌֬ͳςετ෼ྨج४

    View full-size slide

  18. օ͞Μʹ͓࢕͍͠·͢
    🙋🙋🙋
    σʔλϕʔεʹΞΫηε͢Δͷ͸Ϣχοτςετ :FT/P
    ωοτϫʔΫʹΞΫηε͢Δͷ͸Ϣχοτςετ :FT/P
    ϑΝΠϧʹΞΫηε͢Δͷ͸Ϣχοτςετ :FT/P
    ݱࡏ࣌ࠁʹΞΫηε͢Δͷ͸Ϣχοτςετ :FT/P
    ґଘઌͷϞδϡʔϧʹຊ෺Λ࢖͏ͷ͸Ϣχοτςετ :FT/P

    View full-size slide

  19. IUUQTNBSUJOGPXMFSDPNCMJLJ6OJU5FTUIUNM
    6OJU5FTUͷ6OJUͬͯԿʁ

    View full-size slide

  20. IUUQTNBSUJOGPXMFSDPNCMJLJ6OJU5FTUIUNM
    6OJU5FTUͷ6OJUͬͯԿʁ

    View full-size slide

  21. 5FTU4J[FΑΓᐆດ͞ͷগͳ͍෼ྨ

    View full-size slide

  22. IUUQTUFTUJOHHPPHMFCMPHDPNUFTUTJ[FTIUNM
    ྫ(PPHMFͷ"OESPJE։ൃνʔϜʹ͓͚Δ5FTU4J[F

    View full-size slide

  23. ςετϐϥϛου
    ࣗಈςετͷ৴པੑΛ
    த௕ظతʹอͭ
    ࠷దͳόϥϯε

    View full-size slide

  24. Ϣχοτ
    ΠϯςάϨʔγϣϯ
    &&
    ίετ
    ஧࣮ੑ
    ଎౓
    ςετέʔε਺
    ߴ
    ௿
    ௿
    ߴ
    ܾఆੑ
    ςετϐϥϛου

    View full-size slide

  25. ςετϐϥϛουͱΞΠεΫϦʔϜίʔϯΞϯνύλʔϯ
    IUUQTXBUJSNFMPOCMPHJOUSPEVDJOHUIFTPGUXBSFUFTUJOHJDFDSFBNDPOF

    View full-size slide

  26. ࠞཚ͸ʮϢχοτʯʮΠϯςάϨʔγϣϯʯͷղऍͷϒϨ͔Βੜ͕ͪ͡

    View full-size slide

  27. Ϣχοτ
    ΠϯςάϨʔγϣϯ
    &&
    ίετ
    ஧࣮ੑ
    ଎౓
    ςετέʔε਺
    ߴ
    ௿
    ௿
    ߴ
    ܾఆੑ
    ϒϨͷগͳ͍ςετͷ෼ྨج४͸ʜʜʁ

    View full-size slide

  28. ίετ
    ஧࣮ੑ
    ଎౓
    ߴ
    ௿
    ௿
    ߴ
    ܾఆੑ
    ϒϨͷগͳ͍ςετͷ෼ྨج४ˠςεταΠζ
    4NBMM
    .FEJVN
    -BSHF
    ςετέʔε਺

    View full-size slide

  29. ςετμϒϧ
    ஧࣮ੑͱܾఆੑͷ
    τϨʔυΦϑΛཧղ͢Δ

    View full-size slide

  30. IUUQYVOJUQBUUFSOTDPN5FTU%PVCMFIUNM
    ςετμϒϧࣗಈςετ༻ͷِ෺

    View full-size slide

  31. IUUQYVOJUQBUUFSOTDPN5FTU%PVCMFIUNM
    ςετμϒϧͷ෼ྨʢY651ʣ

    View full-size slide

  32. ςετμϒϧͷར఺ͱ஫ҙ఺
    w ར఺
    w ͦ΋ͦ΋ςετ͠ʹ͍͘΋ͷΛςετՄೳʹ͢Δ
    w ςετͷ଎౓ͱܾఆੑΛ޲্ͤ͞Δ
    w ஫ҙ఺
    w ςετର৅ͷ࣮૷ͱͷߏ଄త݁߹͕ߴ·Γɺςετ͕੬͘ͳΓɺِ
    ཅੑΛট͘
    w ࣗ࡞ࣗԋςετͷϦεΫ͕͋ΓɺِӄੑΛট͘

    View full-size slide

  33. αΠζμ΢ϯઓज़ͱ
    ςετϐϥϛου

    View full-size slide

  34. IUUQTXBUJSNFMPOCMPHJOUSPEVDJOHUIFTPGUXBSFUFTUJOHJDFDSFBNDPOF
    4NBMM
    .FEJVN
    -BSHF
    खಈςετ
    Ͱ΋ɺଟ͘ͷݱ৔Ͱ͸ΞΠεΫϦʔϜίʔϯ͔Β࢝·ΔʢͦΕ͸ѱ͍͜ͱͰ͸ͳ͍ʣ

    View full-size slide

  35. Ͳ͏΍ͬͯΞΠεΫϦʔϜίʔϯΛϐϥϛουʹ͢Δ͔
    IUUQTXBUJSNFMPOCMPHJOUSPEVDJOHUIFTPGUXBSFUFTUJOHJDFDSFBNDPOF
    4NBMM
    .FEJVN
    -BSHF
    खಈςετ
    4NBMM
    .FEJVN
    -BSHF

    View full-size slide

  36. IUUQTXBUJSNFMPOCMPHJOUSPEVDJOHUIFTPGUXBSFUFTUJOHJDFDSFBNDPOF
    4NBMM
    .FEJVN
    -BSHF
    खಈςετ
    -BSHF͔Β.FEJVN΁

    View full-size slide

  37. IUUQYVOJUQBUUFSOTDPN5FTU%PVCMFIUNM
    -BSHF͔Β.FEJVN΁'BLF0CKFDU
    'BLF͸ࣗಈςετ༻ͷ୅ସ࣮૷ɻ
    %ZOBNP%#ʹର͢Δ%ZOBNP%#MPDBM΍MPDBLTUBDL͕୅දྫɻ
    ίϯςφͰಈ࡞ͤ͞ΒΕΕ͹ςεταΠζ͕.FEJVNʹऩ·Δɻ

    View full-size slide

  38. IUUQTXBUJSNFMPOCMPHJOUSPEVDJOHUIFTPGUXBSFUFTUJOHJDFDSFBNDPOF
    4NBMM
    .FEJVN
    -BSHF
    खಈςετ
    .FEJVN͔Β4NBMM΁

    View full-size slide

  39. .FEJVN͔Β4NBMM΁)VNCMF0CKFDU
    IUUQTXXXBNB[PODPKQEQ
    ςετ༰қੑΛԼ͍͛ͯΔཁૉΛബ͘੾Γग़͠ɺ
    ςετՄೳൣғΛ޿͘औΔجຊύλʔϯ

    View full-size slide

  40. ΞΠεΫϦʔϜίʔϯ͔Βϐϥϛου΁
    IUUQTXBUJSNFMPOCMPHJOUSPEVDJOHUIFTPGUXBSFUFTUJOHJDFDSFBNDPOF
    4NBMM
    .FEJVN
    -BSHF
    खಈςετ
    4NBMM
    .FEJVN
    -BSHF

    View full-size slide

  41. 4NBMM
    .FEJVN
    -BSHF
    ίετ
    ஧࣮ੑ
    ଎౓
    ςετέʔε਺
    ߴ
    ௿
    ௿
    ߴ
    ܾఆੑ
    ςετμϒϧͰαΠζμ΢ϯͯ͠ɺ֤αΠζΛϐϥϛουܕʹ഑ஔ͠ɺςετશମͷ৴པੑΛҡ࣋͢Δ
    ςετμϒϧ
    ςετμϒϧ
    ςετ༰қੑઃܭ
    υϝΠϯઃܭ

    View full-size slide

  42. medium
    small
    large
    ςετϐϥϛουͱςεταΠζͱϏϧυύΠϓϥΠϯ
    ϝϞϦ಺Ͱಈ͘4NBMM5FTU
    Ͱ͖Δ͚ͩ͜͜ͷൺ཰ΛߴΊ͍ͨ
    ϏϧυޙͷΠϝʔδ΍%#౳Λ૊Έ߹Θͤͨ
    .FEJVN5FTU
    ࣮γεςϜʹ͍ۙߏ੒ͷ
    -BSHF5FTU
    ʢͳͷͰ஗ͯ͘ෆ҆ఆʣ

    View full-size slide

  43. ৴པੑͷߴ͍
    ࣮ߦ݁Ռʹ
    ୹͍࣌ؒͰ౸ୡ͢Δ
    ঢ়ଶΛอͭ
    "HFOEB
    🦁
    🦁

    View full-size slide

  44. IUUQTXXXBNB[PODPKQEQ
    ςετʹ߹֨ͨ͠ιϑτ΢ΣΞͰ͋Ε͹ϦϦʔεՄೳɺෆ߹֨Ͱ͋Ε͹ॏେͳ
    ෆ۩߹͕͋ΔɺͱνʔϜ͕֬৴Ͱ͖ΔΑ͏ͳςετΛ࣮ࢪ͍ͯ͠Δ͜ͱ
    ޡݕ஌ʢِཅੑGBMTFQPTJUJWFʣ΍ݟಀ͠ʢِӄੑGBMTFOFHBUJWFʣ͕ଟ
    ͘ɺ৴པੑʹ͚ܽΔςετεΠʔτ͕͋·Γʹ΋ଟ͗͢Δ
    ৴པ౓ͷߴ͍ςετεΠʔτΛ࡞Γ্͛Δܧଓతͳ౒ྗͱ
    ౤ࢿ͸Ձ஋͕͋Δ
    ৴པੑͷߴ͍ࣗಈςετΛඋ͑Δ͜ͱ
    ʰ-FBOͱ%FW0QTͷՊֶʱQʢ˞༁ΛҰ෦มߋʣ

    View full-size slide

  45. IUUQTXXXBNB[PODPKQEQ
    ςετʹ߹֨ͨ͠ιϑτ΢ΣΞͰ͋Ε͹ϦϦʔεՄೳɺෆ߹֨Ͱ͋Ε͹ॏେͳ
    ෆ۩߹͕͋ΔɺͱνʔϜ͕֬৴Ͱ͖ΔΑ͏ͳςετΛ࣮ࢪ͍ͯ͠Δ͜ͱ
    ޡݕ஌ʢِཅੑGBMTFQPTJUJWFʣ΍ݟಀ͠ʢِӄੑGBMTFOFHBUJWFʣ͕ଟ
    ͘ɺ৴པੑʹ͚ܽΔςετεΠʔτ͕͋·Γʹ΋ଟ͗͢Δ
    ৴པ౓ͷߴ͍ςετεΠʔτΛ࡞Γ্͛Δܧଓతͳ౒ྗͱ
    ౤ࢿ͸Ձ஋͕͋Δ
    ৴པੑͷߴ͍ࣗಈςετΛඋ͑Δ͜ͱ
    ʰ-FBOͱ%FW0QTͷՊֶʱQʢ˞༁ΛҰ෦มߋʣ

    View full-size slide

  46. ِཅੑͱِӄੑͷύλʔϯ
    w ِཅੑ
    w ੬͍ςετ CSJUUMFUFTU GSBHJMFUFTU

    w ৴པෆೳςετ
    fl
    BLZUFTU

    w ِӄੑ
    w ۭৼΓ
    w ΧόϨοδෆ଍ɺςετෆ଍
    w ࣗ࡞ࣗԋ

    View full-size slide

  47. ৴པෆೳੑʢ
    fl
    BLJOFTTʣ͕ʹ઀ۙ͢Δͱɺςετ͸Ձ஋Λࣦ͍࢝ΊΔ
    IUUQTXXXPSFJMMZDPKQCPPLT
    ʰ(PPHMFͷιϑτ΢ΣΞΤϯδχΞϦϯάʱQ

    View full-size slide

  48. ِཅੑͱِӄੑͷύλʔϯ
    w ِཅੑ
    w ੬͍ςετ CSJUUMFUFTU GSBHJMFUFTU

    w ৴པෆೳςετ
    fl
    BLZUFTU

    w ِӄੑ
    w ۭৼΓ
    w ΧόϨοδෆ଍ɺςετෆ଍
    w ࣗ࡞ࣗԋ

    View full-size slide

  49. 4NBMM
    ʢ୯Ұϓϩηεʣ
    .FEJVN
    ʢ୯ҰϚγϯʣ
    -BSHF
    ʢ੍໿ͳ͠ʣ
    6OJU େ͍ʹਪ঑
    ආ͚͍͕ͨ
    ͔ͨ͠ͳ͍ͱ͖΋
    ࠷ѱ͕ͩ
    Α͘ݟ͔͚Δ
    *OUFHSBUJPO
    ॻ͚ΔͳΒ
    ίεύྑ͠
    ී௨
    Ͱ͖Ε͹
    ආ͚͍ͨ
    &&
    ݪཧ্ෆՄೳʹ͍͕ۙ
    খ͍͞γεςϜͳΒՄೳʁ
    খ͍͞γεςϜ
    ͳΒՄೳ
    ී௨͔ͭ
    $6+ʹߜΓ͍ͨ
    5FTU4DPQFͱ5FTU4J[F
    ߏ଄త
    ݁߹౓
    ௿
    ߴ
    5FTU4J[F
    5FTU4DPQF

    қ
    ໰୊Օॴಛఆͷ༰қ͞

    View full-size slide

  50. 4NBMM
    ʢ୯Ұϓϩηεʣ
    .FEJVN
    ʢ୯ҰϚγϯʣ
    -BSHF
    ʢ੍໿ͳ͠ʣ
    6OJU େ͍ʹਪ঑
    ආ͚͍͕ͨ
    ͔ͨ͠ͳ͍ͱ͖΋
    ࠷ѱ͕ͩ
    Α͘ݟ͔͚Δ
    *OUFHSBUJPO
    ॻ͚ΔͳΒ
    ίεύྑ͠
    ී௨
    Ͱ͖Ε͹
    ආ͚͍ͨ
    &&
    ݪཧ্ෆՄೳʹ͍͕ۙ
    খ͍͞γεςϜͳΒՄೳʁ
    খ͍͞γεςϜ
    ͳΒՄೳ
    ී௨͔ͭ
    $6+ʹߜΓ͍ͨ
    5FTU4DPQFͱ5FTU4J[F
    ߏ଄త
    ݁߹౓
    ௿
    ߴ
    5FTU4J[F
    5FTU4DPQF

    қ
    ໰୊Օॴಛఆͷ༰қ͞
    ίεύྑ͠
    ίεύѱ͠

    View full-size slide

  51. ِཅੑͱِӄੑͷύλʔϯ
    w ِཅੑ
    w ੬͍ςετ CSJUUMFUFTU GSBHJMFUFTU

    w ৴པෆೳςετ
    fl
    BLZUFTU

    w ِӄੑ
    w ۭৼΓ
    w ΧόϨοδෆ଍ɺςετෆ଍
    w ࣗ࡞ࣗԋ

    View full-size slide

  52. // プロダクトコード
    class Item {
    // コンストラクタ割愛
    tax_amount() {
    const rate = (this.tax_rate / 100);
    return (this.price / (1 + rate)) * rate;
    }
    }
    // テストコード
    it('税込価格から税額を返す', () => {
    const item = new Item('技評茶', 130, 8);
    const expected = (130 / (1 + (8 / 100))) * (8 / 100);
    assert.equal(item.tax_amount(), expected);
    });
    ࣗ࡞ࣗԋͷྫςετର৅ϩδοΫͷςετίʔυ΁ͷ࿙Εग़͠
    ԁະຬͷ୺਺͕ൃੜ͢Δ
    όά͕͋Δ
    ςετίʔυͷํ΋ಉ͡ϩδοΫͰ
    ظ଴஋Λܭࢉ͍ͯ͠ΔͷͰ
    ςετ͕੒ޭͯ͠͠·͏

    View full-size slide

  53. ৴པੑͷߴ͍
    ࣮ߦ݁Ռʹ
    ୹͍࣌ؒͰ౸ୡ͢Δ
    ঢ়ଶΛอͭ
    "HFOEB
    🦁

    View full-size slide

  54. ࣗಈςετจԽͱ͸

    View full-size slide

  55. IUUQTXXXPSFJMMZDPKQCPPLT
    ࣗಈςετจԽͱ͸
    ʰ(PPHMFͷιϑτ΢ΣΞΤϯδχΞϦϯάʱQ
    ʰ(PPHMFͷιϑτ΢ΣΞΤϯδχΞϦϯάʱQQ

    View full-size slide

  56. ʰY6OJU5FTU1BUUFSOTʱΑΓ
    อकੑʹ໰୊Λ๊͑ͨςετ
    ςετίʔυͷϝϯςφϯεͱ޲͖߹͏
    IUUQTXXXBNB[PODPKQEQ
    ཧ૝
    ݱ࣮

    View full-size slide

  57. w ςετࣗಈԽʹເΛݟͳ͍
    w ࣗಈςετͷϝϯςφϯεʹશһ͕ෲམͪ͢Δ
    w ࣗಈςετͷϝϯςφϯείετΛԼ͛Δ౒ྗΛଵΒͳ͍
    ࣗಈςετจԽͱ͸ɺࣗಈςετͷॏཁੑͱอकੑʢཧղ༰қ
    ੑɺมߋ༰қੑʣΛ૊৫ɺνʔϜ͕ཧղ͠ɺվળ౒ྗΛܧଓత
    ʹߦ͏จԽ
    ࣗಈςετจԽͱ͸

    View full-size slide

  58. ςετʹίετ͕͔͔Δ
    ͜ͱͷղܾํ๏͸ɺςε
    τΛ΍ΊΔ͜ͱͰ͸͋Γ
    ·ͤΜɻ͏·͘ͳΔ͜ͱ
    Ͱ͢ɻ
    4BOEJ.FU[
    ʰΦϒδΣΫτࢦ޲ઃܭ࣮ફΨΠυʱQ
    IUUQTHJIZPKQCPPL

    View full-size slide

  59. 4NBMM
    .FEJVN
    -BSHF
    ίετ
    ஧࣮ੑ
    ଎౓
    ςετέʔε਺
    ߴ
    ௿
    ௿
    ߴ
    ܾఆੑ
    ·ͱΊςετμϒϧͰαΠζμ΢ϯͯ͠ɺ֤αΠζΛϐϥϛουܕʹ഑ஔ͠ɺςετશମͷ৴པੑΛҡ࣋͢Δ
    ςετμϒϧ
    ςετμϒϧ
    ςετ༰қੑઃܭ
    υϝΠϯઃܭ

    View full-size slide

  60. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View full-size slide