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

ソフトウェア工学09 テスト

ソフトウェア工学09 テスト

ユニットテスト

V字モデル,assert,ユニットテスト,テスト駆動開発,xUnitフレームワーク,カバレッジ計測,結合テスト

99b434b001cd93fe73322f764d73372c?s=128

Toru Tamaki

August 05, 2021
Tweet

Transcript

  1. ιϑτ΢ΣΞ޻ֶ nϢχοτςετ • VࣈϞσϧɼassertɼϢχοτςετɼςετۦಈ։ൃɼ xUnitϑϨʔϜϫʔΫɼΧόϨοδܭଌɼ݁߹ςετ ۄ໦పʢ໊޻େʣ

  2. ςετ

  3. ςετͱσόοά nσόοά • ίʔσΟϯάͯ͠΋ • ίϯύΠϧ͕௨Βͳ͍ • Syntax error •

    ࣮ߦͰ͖ͳ͍ • ࣮ߦ࣌Τϥʔ • Segmentation fault • Core dump • ظ଴ͨ͠ಈ͖Λ͠ͳ͍ • ίʔυΛσόοά͢Δ • ܦݧͱצΛཔΓʹ nςετ • ίʔσΟϯά͕ऴΘͬͯίʔυΛ ࣮ߦ͢Δ • ࣮ߦ݁Ռ͕࢓༷ͱҰக͍ͯ͠Δ͜ ͱΛ֬ೝ͢Δ • ҟͳΔ৔߹ʹ͸ίʔυΛमਖ਼͢ Δ • ͢΂ͯͷϞδϡʔϧΛςετ͢Δ • ໢ཏతʹߦ͏ • ܥ౷ཱͯͯߦ͏ • ্ҐϞδϡʔϧ͔ΒԼҐϞ δϡʔϧ·Ͱ͢΂ͯ
  4. ςετͱ͸ nςετ • ޡΓΛൃݟ͢Δ͜ͱ • ޡΓ͕ൃݟ͞ΕͨΒςετͷҙٛ ͕͋Δ • ςετέʔεΛ࡞੒͢Δ •

    ͋Δೖྗʹରͯ͠ظ଴͢Δग़ྗ • Ϟδϡʔϧͷग़ྗ͕ɼػମग़ྗ ʹҰக͢Δʹςετ͸੒ޭʢς ετΛύε͢Δʣ • ग़ྗ͕ظ଴͢Δ΋ͷͱҧ͏ͳΒ ޡΓ • ໢ཏతɼମܥతʹߦ͏ • צ΍ͳΜͱͳ͘Ͱ͸μϝ nςετઐ໳ͷࢿ֨΋͋Δ΄Ͳ • JSTQBʢJapan Software Testing Qualifications Boardɼιϑτ΢ΣΞ ςετࢿ֨ೝఆҕһձʣ • ࠃࡍιϑτ΢ΣΞςετࢿ֨ Advanced Level (AL) γϥόε, 2012 • ALςετϚωʔδϟɼALςετ ΞφϦετɼALςΫχΧϧςε τΞφϦετ • ࠃࡍιϑτ΢ΣΞςετࢿ֨ Foundation Level (FL) γϥόε, 2012 • FLςετٕज़ऀ
  5. 7ࣈϞσϧ n΢ΥʔλʔϑΥʔϧϞσϧͷ֦ு • ֤޻ఔʹςετΛରԠͤ͞Δ ཁ݅ఆٛ ֎෦ઃܭ ಺෦ઃܭ ࣮૷ ςετ ӡ༻ɾอक

    ཁ݅ఆٛ ֎෦ઃܭ ಺෦ઃܭ Ϟδϡʔϧ ࣮૷ ୯ମ ςετ ӡ༻ɾอक ݁߹ ςετ γεςϜ ςετ डೖ ςετ
  6. ֤ςετ޻ఔ n ୯ମςετʢϢχοτςετʣ • 1ͭͷϞδϡʔϧͷςετ • xUnitͳͲͷςετϑϨʔϜϫʔΫΛ ༻͍ͯࣗಈԽ͢Δ n ݁߹ςετ

    • ෳ਺ͷϞδϡʔϧΛ݁߹ͯ͠ߦ͏ςε τ n γεςϜςετ • γεςϜશମͱͯ͠໰୊ͳ͘ಈ࡞͢Δ ͔ͷςετ • ϕϯμଆͰμϛʔσʔλΛ༻͍ͯߦ͏ • ੑೳςετɼετϨεςετ΍ෛՙς ετɼػೳςετͳͲ΋ߦ͏ n ड͚ೖΕςετ • ΫϥΠΞϯτͷཁٻΛຬ͔ͨ͢Ͳ͏͔ ͷςετ • ΫϥΠΞϯτ΁ͷೲ඼΋݉ͶΔ৔ ߹͕͋Δ • ࣮ࡍͷݱ৔Ͱ࣮ࡍͷσʔλʹରͯ͠ς ετ͢Δ • ӡ༻ςετɼཁ݅ςετͳͲͱ΋ݴ͏ ৔߹͕͋Δ
  7. Ϣχοτςετ PythonͰίʔυΛઆ໌͠·͢

  8. Ϣχοτςετ nϢχοτςετʢ୯ମςετʣ • ϢχοτʢϞδϡʔϧʣ͕࢓༷௨Γʹͳ͍ͬͯΔ͔Ͳ͏͔Λ֬ೝ͢Δ n୯७ͳྫ • 2ͭͷҾ਺a, bͷ࿨ͱੵΛܭࢉ͢Δؔ਺ʢϞδϡʔϧʣΛςετ͢Δ • ઃܭ

    • compute.pyͷதʹmyadd()ͱmymult()Λ࡞੒ nςετίʔυΛॻ͘ • ௨ৗͷίʔυͱ͸ผʹςετ༻ʹίʔυΛॻ͘ • ࢓༷ʹैͬͯϞδϡʔϧͷೖग़ྗΛςετ͢Δ • ద੾ͳҾ਺ͱظ଴͢Δग़ྗͷηοτΛ༻ҙ͢Δʢςετέʔεʣ
  9. BTTFSUɿ͓खܰͳςετํ๏ nassertจ • ༩͑ͨ৚݅Λຬͨ͞ͳ͚Ε͹ऴྃ • Τϥʔϝοηʔδ΋දࣔ • assertɿʮஅݴ͢Δʯͱ͍͏ҙຯ • ֤छݴޠʹଘࡏ

    nϝϦοτ • ؆୯ • ༻్ଟ਺ • ؔ਺ͷҾ਺ͷ֬ೝͳͲʹ΋ nσϝϦοτ • ͍͍ͪͪఀࢭͯ͠͠·͏ • Կ౓΋ςετΛ࣮ߦ͢Δͷʹ͸޲͔ͳ ͍ assertจ ຬͨ͞ΕΔ΂͖ ৚݅ࣜ ৚͕݅ࣜfalseͷ ͱ͖ʹදࣔ͞Ε Δϝοηʔδ ࿨Λܭࢉ͢Δ ࣗ࡞myadd
  10. BTTFSUΛ༻͍ͨςετίʔυͷྫ ௨ৗͷmyaddΛ࢖͏ίʔυ main.py myadd༻ͷςετίʔυ assert_add.py ͜͜Ͱࣗ࡞ؔ਺ myaddΛ࢖͏ myaddΛΠϯ ϙʔτ ࠓ͸ؔ܎ͷͳ͍ίʔυ

    myaddͷςετέʔε 2छྨ myaddΛΠϯ ϙʔτ ·ͩμϛʔ ࣗ࡞ؔ਺͸compute.py
  11. BTTFSUΛ༻͍ͨςετίʔυͷྫ ̍ɿىಈ͢Δ $ cd 09_01_add_mult $ docker-compose build $ docker-compose

    up -d ̏ɿϒϥϯνΛ੾Γସ͑ $ docker-compose exec mypython git checkout assert ී௨ʹmainΛ࣮ߦ ʢ1+2ͷ݁Ռ͸ ؒҧ͍ͬͯΔʣ assertͷςετΛ࣮ߦ 1+2͕3ʹͳͬͯͳ͍ ͱ͍͏ΤϥʔͰऴྃ ̎ɿ.gitconfigΛίϐʔ • vscodeΛىಈͯ͠ίϯςφʹ઀ଓ͢Ε͹OK
  12. ςετϑϨʔϜϫʔΫ nઐ༻ͷϥΠϒϥϦ΍πʔϧ • xUnitɿ୅දతͳϑϨʔϜϫʔΫ • SmallTalk༻ͷSUnit͕ىݯ ʢ1998ʣ • ֤छݴޠʹଘࡏ •

    JavaɿJUnit, … • C/C++ɿCutter, CUnit, … • PythonɿPyUnit (unittest), PyTest, … • xUnitɿ͜ΕΒͷ૯শ • xUnitλΠϓҎ֎ͷ΋ͷ΋ଘࡏ͢Δ nϑϨʔϜϫʔΫͷར఺ • ςετ͕ࣗಈԽͰ͖Δ • Կ౓΋࣮ߦͰ͖Δ • ςετΛ࠶ར༻Ͱ͖Δ • ख͕ؒ࠷খݶ • ςετͷ౷ܭ͕ࣗಈܭࢉ͞ΕΔ • ΧόϨοδͳͲ΋ҙࣝͰ͖Δ n࢖͍ํ • ϞδϡʔϧͷίʔυΛॻ͘ • ςετ༻ͷίʔυΛॻ͘ • ςετΛ࣮ߦ͢Δ
  13. 5%%ɿςετۦಈ։ൃ n௨ৗͷ։ൃ • ࣮ࡍͷίʔυΛॻ͘ • ͦΕ͔ΒςετίʔυΛॻ͘ • ͦͯ͠ςετΛ࣮ߦ͢Δ nTDD (Test-Driven

    Development) • ࣮ࡍͷίʔυ͸ৄ͘͠ॻ͔ͣʹ࡞ ੒ʢμϛʔʣ • ςετίʔυΛॻ͘ • ςετΛ࣮ߦ͢Δ • ࠷ॳ͸μϛʔͳͷͰςετ͸ࣦ ഊ͢Δ • ςετΛ੒ޭͤ͞ΔΑ͏ʹ࣮ࡍͷ ίʔυΛॻ͘ • ςετ͕ࣦഊ͠ͳ͍ͱίʔυΛ ॻ͔ͳ͍ • ੒ޭͨ͠ΒςετίʔυΛߋ৽ ͢Δ Lifecycle of the Test-Driven Development methodXarawn - Own work CC BY-SA 4.0
  14. 5%%ɿςετۦಈ։ൃ nར఺ • ຬͨ͢΂͖࢓༷Λઌʹςετίʔ υͱͯ͠ॻ͚Δ • Կ౓΋ςετΛߦ͑Δ nBDD • ৼΔ෣͍ۦಈ։ൃʢBehavior

    Driven Developmentʣ • TDDͷ೿ੜ • ্ҐϨϕϧͷৼΔ෣͍ʹಛԽ͠ ͨςετ • ʢTDD͸Ϣχοτςετʣ Lifecycle of the Test-Driven Development methodXarawn - Own work CC BY-SA 4.0
  15. Ϣχοτςετ ϑϨʔϜϫʔΫ Pythonඪ४unittestύοέʔδ

  16. VOJUUFTUɿ1ZUIPOඪ४ͷϑϨʔϜϫʔΫ n ύοέʔδͷ໊শ͸unittest • xUnitͷ1ͭͱͯ͠આ໌͞ΕΔͱ͖ʹ͸ PyUnitͱݺ͹ΕΔ͜ͱ͕͋Δ n ߏ੒ཁૉ • ϥϯφʔ

    • ςετͷ࣮ߦΛ؅ཧ • ςετέʔε • ೖྗʹͯ͠ظ଴͢Δ݁Ռ • ςετεΠʔτ • ςετέʔεͷू߹ • ϑΟΫενϟ • ςετͷ࣮ߦલͷ४උ • ྫɿಡΈॻ͖͢ΔϑΝΠϧ΍DBͷ ηοτΞοϓ https://docs.python.org/ja/3/library/unittest.html
  17. ςετίʔυͷ࡞੒ ̏ɿίʔυΛνΣοΫΞ΢τ $ docker-compose exec mypython git checkout e6e3c8852db ̍ɿىಈ͢Δ

    $ cd 09_01_add_mult $ docker-compose build $ docker-compose up -d ̎ɿ.gitconfigΛίϐʔ vscodeΛىಈͯ͠ίϯςφʹ઀ଓ͢Ε͹OK
  18. ςετίʔυͷ࡞੒ nςετίʔυͷ ϑΝΠϧ໊͸ test_add.py ඞͣ͜ͷΫϥε͔Β೿ੜ͢Δ͜ͱ ࿨Λܭࢉ͢Δ ࣗ࡞myadd Ϋϥε໊͸ ෼͔Γ΍͘͢ ςετέʔε͸ϝ

    ιουʢ໊લ͸෼ ͔Γ΍͘͢ʣ val͕3ʹ౳ ͍͠ͱ͍ ͏assert nࣗ࡞ؔ਺͸compute.py ·ͩ μϛʔ unittestΛ ࣮ߦ͢Δ 2ͭ໨ͷςε τέʔε val͕6ʹ౳ ͍͠ͱ͍ ͏assert ஫ҙɿϝιου໊͸ খจࣈͷʮtestʯͰ࢝ ·Δ΋ͷ͚ͩʂʢͦ ͏Ͱͳ͍ͱςετ͞ Εͳ͍ʣ
  19. ςετͷ࣮ߦ ࣮ߦ͢Δςετͷ ϑΝΠϧ໊͔Β.pyΛআ͍ ͨ΋ͷ μϛʔίʔυ ͳͷͰࣦഊ͢Δ ࣦഊͨ͠ςετͷ਺ ࣮ߦͨ͠ςετͷ਺ ͱ࣮ߦ࣌ؒ

  20. ςετͷ࣮ߦ ࣮ߦ͢Δςετͷ ϑΝΠϧ໊ μϛʔίʔυ ͳͷͰࣦഊ͢Δ ࣦഊͨ͠ςετͷ਺ ࣮ߦͨ͠ςετͷ਺ ͱ࣮ߦ࣌ؒ

  21. 5%%Λ࣮ફ

  22. ࢓༷ʹج͍ͮͯςετέʔεΛ௥Ճ nҎԼ͸Սۭͷ಺෦ઃܭʹ͓͚Δmyadd(a, b)ͷ࢓༷ • aͱb͕྆ํਖ਼ͳΒɼ݁Ռa+b͸ਖ਼ • aͱb͕྆ํෛͳΒɼ݁Ռa+b͸ෛ • a͕0ͳΒɼ݁Ռa+b͸b •

    b͕0ͳΒɼ݁Ռa+b͸a • a͕ਖ਼ɼb͕ෛͳΒ • a > bͳΒ݁Ռa+b͸ਖ਼ • a < bͳΒ݁Ռa+b͸ෛ ಺෦ઃܭͷஈ֊Ͱ ؾ͕ͭ͘΂͖໰୊͕ɽɽɽ
  23. ςετίʔυΛ࡞੒ n࡞੒͢ΔςετίʔυʹରԠ͢Δ࢓༷ • aͱb͕྆ํਖ਼ͳΒɼ݁Ռa+b͸ਖ਼ • aͱb͕྆ํෛͳΒɼ݁Ռa+b͸ෛ ৚͕݅TrueͰ͋Δ ͱ͍͏assert ৚͕݅TrueͰ͋Δ ͱ͍͏assert

  24. ςετΛ࣮ߦɿࣦഊ nίʔυΛॻ͍͍ͯͳ͍ • ࣦഊ͢Δ΂͖ • ࣦഊ͔ͨ͠ΒίʔυΛॻ͚ Δ

  25. ςετΛ੒ޭ͢ΔΑ͏ʹίʔυΛॻ͘ n࡞੒͢ΔίʔυʹରԠ͢Δ࢓༷ • aͱb͕྆ํਖ਼ͳΒɼ݁Ռa+b͸ਖ਼ • aͱb͕྆ํෛͳΒɼ݁Ռa+b͸ෛ aͱb͕ਖ਼ͷ৔߹ aͱb͕ෛͷ৔߹ ิ଍ɿ ͜͜Ͱ͸࢓༷ʹ஧࣮ʹ࣮૷͍ͯ͠Δ

    ʢ୯ͳΔ࿨ͷܭࢉ͚ͩͲʣ
  26. ςετΛ࣮ߦɿ੒ޭ nίʔυΛॻ͍ͨ • ςετ͸੒ޭ͢Δ΂͖ • ࣦഊ͢ΔͳΒσόοάͯ͠मਖ਼ 3ͭͷςετέʔε ͢΂ͯ੒ޭ

  27. ςετίʔυΛ௥Ճ n௥Ճ͢ΔςετίʔυʹରԠ͢Δ࢓༷ • a͕0ͳΒɼ݁Ռa+b͸b • b͕0ͳΒɼ݁Ռa+b͸a a=0ͷ৔߹ b=0ͷ৔߹

  28. ࠶౓ςετΛ࣮ߦɿࣦഊ nίʔυΛॻ͍͍ͯͳ͍ • ࣦഊ͢Δ΂͖ • ͬ͠ͺ͍͔ͨ͠ΒίʔυΛ ॻ͚Δ ςετʹࣦഊ

  29. ςετΛ੒ޭ͢ΔΑ͏ʹίʔυΛ௥Ճ n࡞੒͢ΔίʔυʹରԠ͢Δ࢓༷ • a͕0ͳΒɼ݁Ռa+b͸b • b͕0ͳΒɼ݁Ռa+b͸a ิ଍ɿ ͜͜Ͱ͸࢓༷ʹ஧࣮ʹ࣮૷͍ͯ͠Δ ʢ୯ͳΔ࿨ͷܭࢉ͚ͩͲʣ a=0ͷ৔߹

    b=0ͷ৔߹
  30. ࠶౓ςετΛ࣮ߦɿ੒ޭ nίʔυΛॻ͍ͨ • ςετ͸੒ޭ͢Δ΂͖ • ࣦഊ͢ΔͳΒσόοάͯ͠मਖ਼ 5ͭͷςετέʔε ͢΂ͯ੒ޭ

  31. ςετίʔυΛ௥Ճ n௥Ճ͢ΔςετίʔυʹରԠ͢Δ࢓༷ • a͕ਖ਼ɼb͕ෛͳΒ • a > bͳΒ݁Ռa+b͸ਖ਼ • a

    < bͳΒ݁Ռa+b͸ෛ a > bͷ৔߹ a < bͷ৔߹
  32. ࠶౓ςετΛ࣮ߦɿࣦഊ nίʔυΛॻ͍͍ͯͳ͍ • ࣦഊ͢Δ΂͖ • ͬ͠ͺ͍͔ͨ͠ΒίʔυΛ ॻ͚Δ

  33. ςετΛ੒ޭ͢ΔΑ͏ʹίʔυΛ௥Ճ n࡞੒͢ΔίʔυʹରԠ͢Δ࢓༷ • a͕ਖ਼ɼb͕ෛͳΒ • a > bͳΒ݁Ռa+b͸ਖ਼ • a

    < bͳΒ݁Ռa+b͸ෛ ิ଍ɿ ͜͜Ͱ͸࢓༷ʹ஧࣮ʹ࣮૷͍ͯ͠Δ ʢ୯ͳΔ࿨ͷܭࢉ͚ͩͲʣ a > bͷ৔߹ a < bͷ৔߹
  34. ࠶౓ςετΛ࣮ߦɿ੒ޭɽɽɽ͋Εʁ nίʔυΛॻ͍ͨ • ςετ͸੒ޭ͢Δ΂͖ • ࣦഊ͢ΔͳΒσόοάͯ͠मਖ਼ɽɽɽʁ a < bͷ৔߹͕ ࣦഊ͍ͯ͠Δ

  35. ಺෦ઃܭͷ࢓༷Λ࠶֬ೝ nҎԼ͸Սۭͷ಺෦ઃܭʹ͓͚Δmyadd(a, b)ͷ࢓༷ • aͱb͕྆ํਖ਼ͳΒɼ݁Ռa+b͸ਖ਼ • aͱb͕྆ํෛͳΒɼ݁Ռa+b͸ෛ • a͕0ͳΒɼ݁Ռa+b͸b •

    b͕0ͳΒɼ݁Ռa+b͸a • a͕ਖ਼ɼb͕ෛͳΒ • a > bͳΒ݁Ռa+b͸ਖ਼ • a < bͳΒ݁Ռa+b͸ෛ n಺෦ઃܭͷϛεɽਖ਼͘͠͸ • a͕ਖ਼ɼb͕ෛͳΒ • |a| > |b|ͳΒ݁Ռa+b͸ਖ਼ • |a| < |b|ͳΒ݁Ռa+b͸ෛ a > 0, b < 0͔ͩΒ ʮa < bͷ৔߹ʯ͸ ͋Γ͑ͳ͍ʂ ςετίʔυͷॻ͖௚͠ ˍ ίʔυͷॻ͖௚͠ ख໭Γ ͕ ൃੜ
  36. ςετίʔυͷमਖ਼

  37. ίʔυͷमਖ਼

  38. ΧόϨοδͷܭࢉ

  39. ΧόϨοδͱ͸ nϗϫΠτϘοΫεςετͷࢦඪ • ΧόϨοδ • શମʹ઎ΊΔςετͨ͠෦෼ͷ ׂ߹ • ໢ཏੑͷࢦඪ •

    ໋ྩ໢ཏʢC0ʣ • ͢΂ͯͷ໋ྩΛ1ճҎ্࣮ߦ • ෼ذ໢ཏʢC1ʣ • ͢΂ͯͷ෼ذͷਅͱِΛͦ ΕͧΕ1ճҎ্࣮ߦ • ৚݅໢ཏʢC2ʣ • ͢΂ͯͷ෼ذͷ૊Έ߹Θͤ ʢܦ࿏ʣΛ1ճҎ্࣮ߦ nίʔυΧόϨοδ • C0໢ཏ཰ • ࣮ߦ໋ͨ͠ྩ਺/શ໋ྩ਺ • C0ΧόϨοδ • C1໢ཏ཰ • ࣮ߦͨ͠෼ذ਺/શ෼ذ਺ • C1ΧόϨοδ • C2໢ཏ཰ • ࣮ߦͨ͠ܦ࿏਺/શܦ࿏਺ • C2ΧόϨοδ
  40. DPWFSBHFίϚϯυʹΑΔܭଌ ̏ɿίʔυΛνΣοΫΞ΢τ $ docker-compose exec mypython git checkout main ̍ɿىಈ͢Δ

    $ cd 09_01_add_mult $ docker-compose build $ docker-compose up -d ̎ɿ.gitconfigΛίϐʔ vscodeΛىಈͯ͠ίϯςφʹ઀ଓ͢Ε͹OK
  41. DPWFSBHFίϚϯυʹΑΔܭଌ ΧόϨοδͷ࣮ߦ ςετ͸੒ޭ͍ͯ͠Δ ࣮ߦ͢ΔϑΝΠϧ ʢςετίʔυʹ ݶΒͳ͍ʣ ͜ͷϑΝΠϧ಺ʹ ܭଌ݁Ռ͕อଘ͞Ε͍ͯΔ

  42. ΧόϨοδܭଌ݁Ռͷදࣔ ΧόϨοδܭଌ݁Ռͷදࣔ ໢ཏ཰ ࣮ߦ͞Ε ͨߦ਺ ࣮ߦ͞Ε ͯͳ͍ߦ ਺

  43. ΧόϨοδܭଌ݁ՌΛ)5.-Ͱදࣔ ΧόϨοδܭଌ݁ՌͷHTMLΛ࡞੒ htlmcov/index.htmlΛ ϒϥ΢βͰݟΕ͹ྑ͍

  44. ΧόϨοδܭଌ݁ՌΛ)5.-Ͱදࣔ ͜Ε͕htlmcov/index.html compute.pyΛ ΫϦοΫ͢Δͱ ͜ͷߦ͕࣮ߦ͞Εͯ ͍ͳ͍͜ͱ͕෼͔Δ

  45. ςετεΠʔτ ෳ਺ͷςετέʔεΛҰׅͰ࣮ߦ

  46. ෳ਺ͷςετέʔεΛ࡞੒ nͦΕͧΕͷϞδϡʔϧʹରͯ͠࡞੒ • myadd()ʹରͯ͠test_add.py • mymult()ʹରͯ͠test_mult.py nҰׅͰ࣮ߦ͍ͨ͠ • ςετίʔυ͕૿͑Δͱ൥ࡶ •

    ςετ͠๨Ε͕ൃੜ nςετεΠʔτ • ෳ਺ͷςετέʔεͷू߹
  47. ςετεΠʔτΛ࡞੒ test_compute.pyΛ ༻ҙ͢Δ ֤ςετίʔυͷ ϑΝΠϧதͷΫϥε ΛΠϯϙʔτ Πϯϙʔτͨ͠ςε τΛ͢΂࣮ͯߦ ͜ΕΛςετ ͢Δͱ

    test_add.pyͷ7ݸʴ test_mult.pyͷ7ݸʹ߹ܭ14 ݸͷςετΛ࣮ߦ
  48. 74DPEFʹΧόϨοδΛදࣔ

  49. ֦ுػೳΛΠϯετʔϧ ֦ுػೳͰ code coverage highlighterΛݕࡧ͠ ͯ ίϯςφ಺ʹ Πϯετʔϧ ίϯςφʹ઀ଓ தʹ

  50. ΧόϨοδ9.-Λ࡞੒ ΧόϨοδܭଌ݁ՌͷXMLΛ࡞੒ ࡞੒͞Εͨ XMLϑΝΠϧ

  51. ΤσΟλ্ʹදࣔ ΧόϨοδ͕දࣔ ʢදࣔͷΦϯɾΦϑͷ੾ Γସ͑͸ݸʑΛΫϦο Ϋʣ ࣮ߦ͞Εͨߦ͸྘ ࣮ߦ͞Ε͍ͯͳ͍ߦ͸੺

  52. (JUΛ࢖͓͏

  53. ςετຖʹίϛοτ͢Δ͜ͱʂ

  54. ݁߹ςετ

  55. ݁߹ςετͱ͸ n͓͞Β͍ • ୯ମςετʢϢχοτςετʣ • 1ͭͷϞδϡʔϧͷςετ • xUnitͳͲͷςετϑϨʔϜϫʔΫΛ༻͍ͯࣗಈԽ͢Δ • ݁߹ςετ

    • ෳ਺ͷϞδϡʔϧΛ݁߹ͯ͠ߦ͏ςετ n্ҐϞδϡʔϧΛxUnitϑϨʔϜϫʔΫͰςετ͢Δ • ্Ґ͔Βςετ͢ΔͷͰɼτοϓμ΢ϯςετ • ͦͷͨΊʹ͸ελϒʢϞοΫʣ͕ඞཁ • unittestϑϨʔϜϫʔΫͷMagicMock()Λར༻͢Δ
  56. ݁߹ςετͷํࣜ nτοϓμ΢ϯςετ • ্ҐϞδϡʔϧΛઌʹ࡞੒ɾςετ͢Δ • ະ࡞੒ͷԼҐϞδϡʔϧʹ͸μϛʔʢελϒʣΛ༻͍Δ nϘτϜΞοϓςετ • ԼҐϞδϡʔϧΛઌʹ࡞੒ɾςετ͢Δ •

    ະ࡞੒ͷ্ҐϞδϡʔϧ͸μϛʔʢυϥΠόʣΛ༻͍Δ nαϯυΠονςετ • ϘτϜΞοϓͱτοϓμ΢ϯΛฒߦͯ͠ߦ͏ςετ Ϟδϡʔϧ ελϒ ελϒ ελϒ υϥΠό Ϟδϡʔϧ̍ Ϟδϡʔϧ̎ Ϟδϡʔϧ̏
  57. ্ҐϞδϡʔϧͷ࢓༷ྫ nҎԼ͸Սۭͷ಺෦ઃܭͷ࢓༷ • Ϋϥε໊ɿAddOrMult • ίϯετϥΫλʹ༩͑Δ΋ͷ • ࿨ܭࢉؔ਺myadd • ੵܭࢉؔ਺mymult

    • ϝιου໊ɿdo(a, b, c) • Ҿ਺c͕จࣈྻ’add’ͳΒa+bΛ ฦ͢ • Ҿ਺c͕จࣈྻ’mult’ͳΒa*bΛ ฦ͢ nલఏ • myaddͱmymult͸·ͩʮ࣮૷ͯ͠ ͍ͳ͍ʯ • ͜ͷஈ֊ͰAddOrMultΛςετ͢Δ • ͜Ε͸্ҐϞδϡʔϧͷʮϢ χοτςετʯ • ·ͩ݁߹ςετͰ͸ͳ͍ • myaddͱmymult͕࣮૷Ͱ͖ ͨΒ݁߹ςετΛߦ͏ n༻ҙ͢Δ΋ͷ • myaddͱmymultͷελϒ • ϞοΫʢmockʣͱ΋ݴ͏
  58. ্ҐϞδϡʔϧͷίʔυྫ Ϋϥε໊ ίϯετϥΫλ Ҿ਺͸selfΛআ͍ͯ2ͭ ༩͑ΒΕͨ2ͭͷؔ਺Λ selfͱͯ͠هԱ͓ͯ͘͠ ϝιουdo͸࢓༷௨Γ هԱ͓͍ͯͨ͠self.addͱ self.multΛ࢖͏ integration.py

  59. ςετίʔυ ࣮૷લͳͷ Ͱݺͼग़ͤ ͳ͍ unittestͷ mockΛར ༻ ςετ͢Δ ্ҐϞ δϡʔϧ

    test_integration.py
  60. ςετίʔυ mock͔Ͳ ͏͔Ϋϥε ໊Ͱ൑ఆ test_integration.py

  61. ςετίʔυ mockͷฦ Γ஋Λ8ʹ ࢦఆ ͜͜͸ී௨ ʹϢχοτ ςετ test_integration.py

  62. Ϣχοτςετͷ࣮ߦ ςετΛ࣮ ߦ ΧόϨοδ ܭଌ ԼҐϞ δϡʔϧ͸ ࢖ΘΕ͍ͯ ͳ͍

  63. ݁߹ςετ nԼҐϞδϡʔϧΛ࡞੒ͨ͠Β݁߹ςετ ϞοΫ͔Β ࣮ࡍͷԼҐϞδϡʔϧʹมߋ ʢޙ͸मਖ਼ͳ͠ʣ test_integration.py test_integration.py

  64. ݁߹ςετͷ࣮ߦ ςετΛ࣮ ߦ ΧόϨοδ ܭଌ ԼҐϞ δϡʔϧΛ ࢖͍ͬͯΔ

  65. None
  66. ՝୊ nunittestΛ༻͍ͨςετίʔυΛ TDDͰ࡞੒ͤΑ • mainؔ਺͔Βࣗ࡞ؔ਺Λݺͼग़͢ • ؔ਺͸ෳ਺ͷҾ਺͔ΒԿ͔Λܭ ࢉ͠஋Λฦ͢΋ͷͱ͢Δ • ྫɿࠩɾ঎ɾ࠷େɾ࠷খɾ૯

    ࿨ɾႈ৐ɾจࣈྻ࿈݁ͳͲ • Կ͔1ͭͷػೳͳΒɼ΄͔ͷ ΋ͷͰ΋ྑ͍ • ͦͷؔ਺ͷ࢓༷Λ5ͭఔ౓ܾΊΔ ʢ಺෦ઃܭʣ • ࣗ࡞ؔ਺͸ɼ࠷ॳ͸μϛʔίʔυͷ ΈΛهड़ • ࢓༷ʹରԠ͢ΔςετίʔυΛ࡞੒ ͢Δ • ͦΕͧΕͷ࢓༷ຖʹ • ςετ͕ࣦഊ͢Δ͜ͱΛ֬ೝ͢ Δ • ࣗ࡞ؔ਺ͷɼରԠ͢Δ࢓༷ͷ෦ ෼Λهड़͢Δ • ςετ͕੒ޭ͢Δ͜ͱΛ֬ೝ͢ Δ • ςετ੒ޭຖʹgit commit͢Δ nςετίʔυͷΧόϨοδΛܭࢉ ͤΑ • reportͷग़ྗɼhtmlͷग़ྗΛ֬ೝ͢ Δ
  67. ૝ఆࢼݧ໰୊ nϢχοτςετͱ͸Կ͔ɼͦͷॏཁੑΛઆ໌ͤΑ nassertจͱ͸Կ͔ɼͦͷ࢖͍ํΛઆ໌ͤΑ nςετϑϨʔϜϫʔΫͱ͸ͲͷΑ͏ͳ΋ͷ͔ɼͦͷར఺΋આ໌ͤΑ nςετέʔεͱ͸Կ͔Λɼ۩ମྫͰઆ໌ͤΑ nPythonͷxUnitϑϨʔϜϫʔΫunittestͷ࢖͍ํΛઆ໌ͤΑ nTDDͱ͸Կ͔ɼ࣮ફํ๏ͱɼͦͷར఺Λઆ໌ͤΑ nςετεΠʔτͱ͸Կ͔Λઆ໌ͤΑ nΧόϨοδͱ͸Կ͔ɼͦͷछྨΛઆ໌ͤΑ