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

開発生産性の観点から考える自動テスト(2024/06版) / Automated Test Knowledge from Savanna 202406 Findy dev-prod-con edition

開発生産性の観点から考える自動テスト(2024/06版) / Automated Test Knowledge from Savanna 202406 Findy dev-prod-con edition

2024年6月29日
Findy 開発生産性カンファレンス2024 Closing Keynote
https://dev-productivity-con.findy-code.io/2024

Takuto Wada

June 29, 2024
Tweet

More Decks by Takuto Wada

Other Decks in Programming

Transcript

  1. ِཅੑͱِӄੑͷύλʔϯ w ِཅੑ w ੬͍ςετ CSJUUMFUFTU GSBHJMFUFTU  w ৴པෆೳςετ

    fl BLZUFTU  w ِӄੑ w ۭৼΓ w ΧόϨοδෆ଍ɺςετෆ଍ w ࣗ࡞ࣗԋ
  2. ِཅੑͱِӄੑͷύλʔϯ w ِཅੑ w ੬͍ςετ CSJUUMFUFTU GSBHJMFUFTU  w ৴པෆೳςετ

    fl BLZUFTU  w ِӄੑ w ۭৼΓ w ΧόϨοδෆ଍ɺςετෆ଍ w ࣗ࡞ࣗԋ
  3. ِཅੑͱِӄੑͷύλʔϯ w ِཅੑ w ੬͍ςετ CSJUUMFUFTU GSBHJMFUFTU  w ৴པෆೳςετ

    fl BLZUFTU  w ِӄੑ w ۭৼΓ w ΧόϨοδෆ଍ɺςετෆ଍ w ࣗ࡞ࣗԋ
  4. // プロダクトコード 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); }); ࣗ࡞ࣗԋͷྫςετର৅ϩδοΫͷςετίʔυ΁ͷ࿙Εग़͠ ԁະຬͷ୺਺͕ൃੜ͢Δ όά͕͋Δ ςετίʔυͷํ΋ಉ͡ϩδοΫͰ ظ଴஋Λܭࢉ͍ͯ͠ΔͷͰ ςετ͕੒ޭͯ͠͠·͏
  5. ࣗಈςετ࣮ߦ݁Ռͷग़ྗͱૂ͍ w ৴߸ػͱͯ͠ w ਓؒʹ͸྘ͱ੺ w ػցʹ͸ͱ Ҏ্  w

    ܽؕͷߜΓࠐΈͱͯ͠ w ࣗಈςετͷࣦഊʹ͸छྨ͋Δ w &YFDVUJPO&SSPSςετ࣮ߦதʹϓϩμΫτίʔυ͔Βൃੜ͢Δ࣮ߦ࣌Τϥʔ w "TTFSUJPO'BJMVSFςετίʔυͷதʹॻ͍ͨද໌ʢΞαʔγϣϯʣͷࣦഊ w ໰୊Օॴͷಛఆͱ͸ w Կ͕ɺͲ͜ͰɺͲͷΑ͏ʹࣦഊ͔ͨ͠ IUUQTHJIZPKQEFWTFSJBMTBWBOOBMFUUFS
  6. @Test void 税込価額を税率ごとに区分して合計した金額に対して税額を計算し端数は切り捨てること() { var inv = createSimplifiedInvoice(); // 中略

    var tax = inv.tax(); assertTrue(tax.reduced() == 40); } ͲͷΑ͏ʹࣦഊ͔ͨ͠Ξαʔγϣϯͷద੾ͳ࢖༻ org.opentest4j.AssertionFailedError: expected: <true> but was: <false> ୯ͳΔ࿦ཧࣜͰ͸ʢ޻෉͠ͳ͍ͱʣ ࣦഊ࣌ͷ৘ใ͕ܽམ͢Δ
  7. @Test void 税込価額を税率ごとに区分して合計した金額に対して税額を計算し端数は切り捨てること() { var inv = createSimplifiedInvoice(); // 中略

    var tax = inv.tax(); assertEquals(40, tax.reduced()); } ͲͷΑ͏ʹࣦഊ͔ͨ͠Ξαʔγϣϯͷద੾ͳ࢖༻ ൺֱͷͨΊͷΞαʔγϣϯʹมߋ org.opentest4j.AssertionFailedError: expected: <40> but was: <39>
  8. 4NBMM ʢ୯Ұϓϩηεʣ .FEJVN ʢ୯ҰϚγϯʣ -BSHF ʢ੍໿ͳ͠ʣ 6OJU େ͍ʹਪ঑ ආ͚͍͕ͨ ͔ͨ͠ͳ͍ͱ͖΋

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

    ࠷ѱ͕ͩ Α͘ݟ͔͚Δ *OUFHSBUJPO ॻ͚ΔͳΒ ίεύྑ͠ ී௨ Ͱ͖Ε͹ ආ͚͍ͨ && ݪཧ্ෆՄೳʹ͍͕ۙ খ͍͞γεςϜͳΒՄೳʁ খ͍͞γεςϜ ͳΒՄೳ ී௨͔ͭ $6+ʹߜΓ͍ͨ 5FTU4DPQFͱ5FTU4J[F 5FTU4J[F 5FTU4DPQF ίεύྑ͠ ίεύѱ͠
  10. Ϣχοτ ΠϯςάϨʔγϣϯ && ίετ ஧࣮ੑ ଎౓ ςετέʔε਺ ߴ ௿ ௿

    ߴ ܾఆੑ ϒϨͷগͳ͍ςετͷ෼ྨج४͸ʜʜʁ
  11. ςετμϒϧͷར఺ͱ஫ҙ఺ w ςετμϒϧͷར఺ w ͦ΋ͦ΋ςετ͠ʹ͍͘΋ͷΛςετՄೳʹ͢Δ w ςετͷ଎౓ͱܾఆੑΛ޲্ͤ͞Δ w ςεταΠζΛԼ͛Δ w

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

    ςετμϒϧͷ஫ҙ఺ w ςετର৅ͷ࣮૷ͱͷߏ଄త݁߹͕ߴ·Γɺςετ͕੬͘ͳΓɺِ ཅੑΛট͘ w ࣗ࡞ࣗԋςετͷϦεΫ͕͋ΓɺِӄੑΛট͘
  13. 4NBMM ʢ୯Ұϓϩηεʣ .FEJVN ʢ୯ҰϚγϯʣ -BSHF ʢ੍໿ͳ͠ʣ 6OJU େ͍ʹਪ঑ ආ͚͍͕ͨ ͔ͨ͠ͳ͍ͱ͖΋

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

    ࠷ѱ͕ͩ Α͘ݟ͔͚Δ *OUFHSBUJPO ॻ͚ΔͳΒ ίεύྑ͠ ී௨ Ͱ͖Ε͹ ආ͚͍ͨ && ݪཧ্ෆՄೳʹ͍͕ۙ খ͍͞γεςϜͳΒՄೳʁ খ͍͞γεςϜ ͳΒՄೳ ී௨͔ͭ $6+ʹߜΓ͍ͨ αΠζμ΢ϯઓུ ߏ଄త ݁߹౓ ௿ ߴ 5FTU4J[F 5FTU4DPQF ೉ қ ໰୊Օॴಛఆͷ༰қ͞
  15. 4NBMM .FEJVN -BSHF ίετ ஧࣮ੑ ଎౓ ςετέʔε਺ ߴ ௿ ௿

    ߴ ܾఆੑ ςετμϒϧͰαΠζμ΢ϯͯ͠ɺ֤αΠζΛϐϥϛουܕʹ഑ஔ͠ɺςετશମͷ৴པੑΛҡ࣋͢Δ ςετμϒϧ ςετμϒϧ ςετ༰қੑઃܭ υϝΠϯઃܭ