TypeScript + PhantomJSを利用した効率的なテスト実施
by
Ryo Nishikawa
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
5ZQF4DSJQU 1IBOUPN+4Λར༻ͨ͠ ޮతͳςετ࣮ࢪ Ξελϛϡʔθגࣜձࣾ ։ൃɾΠϯϑϥ෦ ྒ
Slide 2
Slide 2 text
ࣗݾհ ໊લ ྒʢʹ͔͠Θ Γΐ͏ʣ ۈઌͳͲ Ξελϛϡʔθגࣜձࣾ ։ൃɾΠϯϑϥ෦ झຯ ञɺ৯͏ɺ৸ΔɺΔ ಓ Ո ࠺ͱଉࢠ
Slide 3
Slide 3 text
ࣗݾհ ٕज़ +BWBɺ4DBMBɺ1ZUIPOɺ#BTIɺ "OTJCMFɺ"TUBEɺ "QBDIFɺ.Z42-ɺ1PTUHSF42-ɺ ;BCCJYɺ3BCCJU.2ɺ&MBTUJD4FBSDIɺ'MVFOUE FUD 4BMFTGPSDFDPNɺ4ɺ3PVUF ܦྺ ిΛੜۀͱ͢Δάϧʔϓձࣾʹ͍ͨ ަػͷࢼݧΛͨ͠Γ ۚ༥ͷγεςϜ࡞ͬͨΓ ݚڀॴͰٕज़ݕূͨ͠Γ ηΩϡϦςΟͷ։ൃͬͨΓ ɾɾɾ
Slide 4
Slide 4 text
ࣗݾհ ٕज़ +BWBɺ4DBMBɺ1ZUIPOɺ#BTIɺ "OTJCMFɺ"TUBEɺ "QBDIFɺ.Z42-ɺ1PTUHSF42-ɺ ;BCCJYɺ3BCCJU.2ɺ&MBTUJD4FBSDIɺ'MVFOUE FUD 4BMFTGPSDFDPNɺ4ɺ3PVUF ܦྺ ిΛੜۀͱ͢Δάϧʔϓձࣾʹ͍ͨ ަػͷࢼݧΛͨ͠Γ ۚ༥ͷγεςϜ࡞ͬͨΓ ݚڀॴͰٕज़ݕূͨ͠Γ ηΩϡϦςΟͷ։ൃͬͨΓ ɾɾɾ ൧Λ৯͏ͨΊʹԿͰͨ͠ʂ
Slide 5
Slide 5 text
ͦͨ͠Βମॏ̓̔LHʹʂ ࣗݾհ
Slide 6
Slide 6 text
ࣾձਓʹͳͬͯ̍̏LH૿͑ͨʂ ࣗݾհ
Slide 7
Slide 7 text
ࣗݾհ ʮϩΧϘʯ࢝Ί·ͨ͠ʂ
Slide 8
Slide 8 text
ϩΧϘʁ • ࣭ʢϩʔΧʔϘʣμΠΤοτ • ʮϘΧϩʯͰ͋Γ·ͤΜʮϩΧϘʯͰ͢ʂ • ݫີʹʮϩʔΧʔϘʯͱҧ͏Β͍͠Ͱ͢ ҰͰ̏LH૫ͤͨʂ
Slide 9
Slide 9 text
ࣗݾհ ࠓೖࣾ͠·ͨ͠ʂ
Slide 10
Slide 10 text
Ξελϛϡʔθגࣜձࣾͷ
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
స৬φϏͱ͍͏αʔϏεʹैࣄ
Slide 17
Slide 17 text
స৬φϏͷ స৬φϏΛ͝ଘͰ͔͢ʁ
Slide 18
Slide 18 text
స৬φϏͷ
Slide 19
Slide 19 text
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ
Slide 20
Slide 20 text
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ αΠτ͕ଘࡏ
Slide 21
Slide 21 text
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ αΠτ͕ଘࡏ ొͨ͠Ϣʔβͷస৬Λαϙʔτʂ
Slide 22
Slide 22 text
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ αΠτ͕ଘࡏ ొͨ͠Ϣʔβͷస৬Λαϙʔτʂ స৬Λߟ͑ͨΒੋඇʂ
Slide 23
Slide 23 text
స৬φϏͷςετͷ
Slide 24
Slide 24 text
స৬φϏͷςετͷ స৬φϏͷ։ൃ • νʔϜ̒ਓ • ෦ • σβΠφ ̍ਓ • ϑϩϯτΤϯδχΞ ̍ਓ • 4DBMBΤϯδχΞ ̏ਓ • ि̍ʙ̏ճϖʔεͷϦϦʔε
Slide 25
Slide 25 text
స৬φϏͷςετͷ ։ൃॳ • αΠτ গͳΊ • ػೳ গͳΊ • 1$αΠτ͔͠ͳ͍ खಈͰࢼݧ
Slide 26
Slide 26 text
αΠτͷϞόΠϧରԠ αΠτػೳগͳ͍͠ ·ͩखಈͰ͍͚ͦ͏ʂ స৬φϏͷςετͷ
Slide 27
Slide 27 text
ొϑΥʔϜվम ·͍͚ͩΔʂ·͍͚ͩΔʂ స৬φϏͷςετͷ
Slide 28
Slide 28 text
ొϑΥʔϜվम ͍͚ͳ͔ͬͨʂ స৬φϏͷςετͷ
Slide 29
Slide 29 text
ొϑΥʔϜվम ϞόΠϧαΠτͰ Ϣʔβొ͕Ͱ͖ͯͳ͔ͬͨ స৬φϏͷςετͷ
Slide 30
Slide 30 text
ొϑΥʔϜվम ϞόΠϧαΠτͰ Ϣʔβొ͕Ͱ͖ͯͳ͔ͬͨ స৬φϏͷςετͷ ϦϦʔεޙʹൃ֮
Slide 31
Slide 31 text
Կ͕͍͚ͳ͔ͬͨͷ͔ʁ • 1$ͱϞόΠϧͰొϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ࢼݧ࿙ΕͷݪҼ స৬φϏͷςετͷ
Slide 32
Slide 32 text
ͲΕ͙Β͍ҧ͏ͷ͔ʁ
Slide 33
Slide 33 text
ͲΕ͙Β͍ҧ͏ͷ͔ʁ ϑΥʔϜͷܗঢ় ભҠͷ͕શ͘ҧ͏
Slide 34
Slide 34 text
Կ͕͍͚ͳ͔ͬͨͷ͔ʁ • 1$ͱϞόΠϧͰొϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ࢼݧ࿙ΕͷݪҼ ཁରࡦʂ స৬φϏͷςετͷ
Slide 35
Slide 35 text
స৬φϏͷςετͷ Կ͕͍͚ͳ͔ͬͨͷ͔ʁ • 1$ͱϞόΠϧͰొϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ࢼݧ࿙ΕͷݪҼ ࣗಈςετಋೖ
Slide 36
Slide 36 text
స৬φϏͷςετͷ είʔϓʁ • ࠷ݶͷϢʔβϏϦςΟ֬อ Ϣʔβొॲཧ
Slide 37
Slide 37 text
స৬φϏͷςετͷ ͯ͞ɺԿͰ࡞Ζ͏ʁ 1IBOUPN+4
Slide 38
Slide 38 text
1IBOUPN+4ͱԿ͔ • 8FCςετΛ͢ΔͨΊͷπʔϧ • ྨࣅπʔϧ • 4FMFOJVN • ςετέʔε+BWB4DSJQUͰهࡌ͢Δ $BTQFS+4ͱ͍͏ϥούʔ͕͋Δ
Slide 39
Slide 39 text
ग़དྷ্͕ͬͨͷ $*αʔό HJUαʔό APサーバ ᶃϦΫΤετ ᶄμϯϩʔυ ᶅςετ࣮ߦ
Slide 40
Slide 40 text
ग़དྷ্͕ͬͨͷ 本番 APサーバ ステージング APサーバ $*αʔό HJUαʔό ˞ +FOLJOTΩοΫ ˞ ఆظ࣮ߦ
Slide 41
Slide 41 text
స৬φϏͷςετͷ ࣗಈςετΛೖΕͯΈͯ • Ϣʔβొॲཧͷ্࣭͕͕ͬͨ • ࢼݧ4MBDL͔Β࣮ߦͰ͖ΔͷͰ୭ͰࢼݧͰ͖ΔΑ͏ʹͳͬͨ • োൃੜ࣌ʹ࠷ݶͷαʔϏεੜଘ֬ೝ͕Ͱ͖ΔΑ͏ʹͳͬͨ • ొϑΥʔϜͷোʹૣ͘ؾͮ͘Α͏ʹͳͬͨ
Slide 42
Slide 42 text
స৬φϏͷςετͷ ࣗಈςετΛೖΕͯΈͯ • Ϣʔβొॲཧͷ্࣭͕͕ͬͨ • োൃੜ࣌ʹ࠷ݶͷαʔϏεੜଘ֬ೝ͕Ͱ͖ΔΑ͏ʹͳͬͨ • ొϑΥʔϜͷোʹૣ͘ؾͮ͘Α͏ʹͳͬͨ • ࢼݧ4MBDL͔Β࣮ߦͰ͖ΔͷͰ୭ͰࢼݧͰ͖ΔΑ͏ʹͳͬͨ Ұ݅མணʂ
Slide 43
Slide 43 text
ͨ͠Α͏ʹࢥ͚͑ͨͲɾɾɾ స৬φϏͷςετͷ
Slide 44
Slide 44 text
• ొϑΥʔϜ·Ͱͷܦ࿏ʢண࣌ͷύϥϝʔλόϦΤʔγϣϯʣ͕૿Ճ • αʔϏε֦ॆʹΑΔొόϦΤʔγϣϯʢࣅͯඇͳΔϑΥʔϜʣͷ૿Ճ • αΠτʢҰؾʹ̐̌̌ۙ͘·Ͱʣ૿Ճ ςετίʔυΛߏԽ͍ͯ͠ͳ͔ͬͨͨΊ ϝϯςφϯείετ૿Ճ స৬φϏͷςετͷ
Slide 45
Slide 45 text
͜͠ͷ··์ஔͨ͠Βɾɾɾ • ςετͷϝϯςφϯε͕͍͔ͭͳ͘ͳΔ • ఆతʹखಈͷςετ͕૿͑Δ స৬φϏͷςετͷ
Slide 46
Slide 46 text
͜͠ͷ··์ஔͨ͠Βɾɾɾ • ςετͷϝϯςφϯε͕͍͔ͭͳ͘ͳΔ • ఆతʹखಈͷςετ͕૿͑Δ ։ൃපΉ͚Ͳ ࠷ऴ֬ೝ͍ͯ͠Δ෦࣮֬ʹࢮ͵ స৬φϏͷςετͷ
Slide 47
Slide 47 text
͞Βʹ స৬φϏͷςετͷ
Slide 48
Slide 48 text
৽ϝϯόʔೖࣾ γεςϜΛཧղͰ͖͍ͯͳ͍ͷͰόάΛΑ͘ຒΊࠐΉ ͪΖΜ+BWB4DSJQUͳΜ͔ͯΒͳ͍ͷͰϝϯςͰ͖ͳ͍ า͘ώϡʔϚϯΤϥʔʹରͯ͠ ߄ͯΔ։ൃνʔϜ స৬φϏͷςετͷ
Slide 49
Slide 49 text
స৬φϏͷςετͷ
Slide 50
Slide 50 text
৭ʑͱݶքʹͳΓ ςετΛݟ͢͜ͱʹʂ స৬φϏͷςετͷ
Slide 51
Slide 51 text
స৬φϏͷςετͷ ؍ • طଘͷίʔυΛར༻ʢ։ൃͷϦιʔε͕ݶΒΕ͍ͯΔͨΊʣ • ϝϯςφϯείετΛ͑Δ • ςετίʔυͷߏԽ • ՄಡੑΛ্͛Δ • ୭ͰϝϯςͰ͖ΔΑ͏ʹ͢Δ • +BWB4DSJQUʹෆ׳ΕͳਓͰͰ͖Δ
Slide 52
Slide 52 text
స৬φϏͷςετͷ ؍ • طଘͷίʔυΛར༻ʢ։ൃͷϦιʔε͕ݶΒΕ͍ͯΔͨΊʣ • ϝϯςφϯείετΛ͑Δ • ςετίʔυͷߏԽ • ՄಡੑΛ্͛Δ • ୭ͰϝϯςͰ͖ΔΑ͏ʹ͢Δ • 4DSJQUݴޠʹෆ׳ΕͳਓͰͰ͖Δ 5ZQF4DSJQUʹܾఆʂ
Slide 53
Slide 53 text
5ZQF4DSJQUͷ • +BWB4DSJQUΛੜ • ੩తܕ͚ݴޠ • .JDSPTPGU͕։ൃ • Φʔϓϯιʔε • +BWB4DSJQUͰॻ͚Δ
Slide 54
Slide 54 text
5ZQF4DSJQUͷ • +BWB4DSJQU͕Ͱ͖Δ͜ͱʹՃ͑ҎԼ͕Ͱ͖Δ • ΠϯλʔϑΣʔε • ྻڍܕͷར༻ • λϓϧܕͷར༻ • .JYJO • δΣωϦοΫ FUD
Slide 55
Slide 55 text
5ZQF4DSJQUʹΑͬͯͨΒ͞Εͨͷ ొςετͷج൫ͱͳΔ நΫϥε ొϑΥʔϜͷ ܦ࿏ ・・・ +BWB4DSJQU ίʔυ 5ZQF4DSJQU ίʔυ ొϑΥʔϜͷ ܦ࿏
Slide 56
Slide 56 text
స৬φϏͷςετͷ ͜ΕʹΑΓ • طଘͷίʔυΛར༻Ͱ͖͍ͯΔ • ίʔυͷՄಡੑ্͕͕ͬͨ • Ճ࣮ɺվमָ͕ʹͳͬͨʂ • 4DBMBΤϯδχΞͰ࣮Ͱ͖ΔΑ͏ʹͳͬͨʂ • ԿΑΓɺ͕ϝϯςͰ͖Δʂ
Slide 57
Slide 57 text
స৬φϏͷςετͷ ͞Βʹʂ • େͷΤϥʔίϯύΠϧ࣌ʹݕग़ ͍͍࣮ͪͪߦ͠ͳͯ͘Τϥʔ͕ݕग़Ͱ͖ΔͷͰੜ࢈ੑ্͕ͨ͠
Slide 58
Slide 58 text
ग़དྷ্͕ͬͨͷʢ#FGPSFʣ $*αʔό HJUαʔό APサーバ ᶃϦΫΤετ ᶄμϯϩʔυ ᶅςετ࣮ߦ
Slide 59
Slide 59 text
ग़དྷ্͕ͬͨͷʢ"GUFSʣ $*αʔό HJUαʔό APサーバ ᶃϦΫΤετ ᶄμϯϩʔυ ᶆςετ࣮ߦ ᶅίϯύΠϧ
Slide 60
Slide 60 text
αΠτ͝ͱʹొϑΥʔϜΛग़͚ͯ͠ʂ ͦͷޙʙ ͦͷ̍ ʙ
Slide 61
Slide 61 text
ࢼݧɺ̐̌̌αΠτ͋ΔͰ͕͢ɾɾɾ ࠓ·ͰͳΒ
Slide 62
Slide 62 text
ࢼݧɺ̐̌̌αΠτ͋ΔͰ͕͢ɾɾɾ ࠓ·ͰͳΒ ࢮ
Slide 63
Slide 63 text
ͰɺࠓͳΒ ͳΜͱ͔͑ΒΕΔ
Slide 64
Slide 64 text
ొϑΥʔϜʹසൟʹվमೖΕΔΑʂ ͦͷޙʙ ͦͷ̎ ʙ
Slide 65
Slide 65 text
Ճͨ͠ػೳ͕ͪΌΜͱಈ͔͘ʁ ొϑΥʔϜͷग़͚͠Ͱ͖͍ͯΔ͔ʁ ࠓ·ͰͳΒ
Slide 66
Slide 66 text
Ճͨ͠ػೳ͕ͪΌΜͱಈ͔͘ʁ ొϑΥʔϜͷग़͚͠Ͱ͖͍ͯΔ͔ʁ ࠓ·ͰͳΒ ࢮ
Slide 67
Slide 67 text
ͰɺࠓͳΒ ͳΜͱ͔͑ΒΕΔ
Slide 68
Slide 68 text
ͦͯ͠ԿΑΓ ෦͕ੜ͖ͯΔʂ
Slide 69
Slide 69 text
5ZQF4DSJQUͷޮՌ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 PhantomJS 22 4678 212 TypeScript 25 2682 107 ஔ͖͑ޙͷεςοϓൺֱ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 TypeScript 30 7910 263 αΠτ͝ͱͷొϑΥʔϜग़͚͠ద༻ޙͷεςοϓ
Slide 70
Slide 70 text
5ZQF4DSJQUʹΑͬͯͨΒ͞Εͨͷ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 PhantomJS 22 4678 212 TypeScript 25 2682 107 ஔ͖͑ޙͷεςοϓൺֱ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 TypeScript 30 7910 263 αΠτ͝ͱͷొϑΥʔϜग़͚͠ద༻ޙͷεςοϓ ͍͍ײ͡
Slide 71
Slide 71 text
ܾͯ͠ɺ͍͍͜ͱ͔ΓͰͳ͍ • ࣮࣌ • +BWB4DSJQU͕Τϥʔͳ͘ੜ͞Εͯɺ1IBOUPN+4͕ಈ͘Θ͚Ͱͳ͍ • શମ • 1IBOUPN+4ͷ։ൃ͕ࢭ·͍ͬͯΔ 5ZQF4DSJQU 1IBOUPNF+4ͷσϝϦοτ
Slide 72
Slide 72 text
ࠓޙͷ՝ • 4FMFOJVN͘͠)FBEMFTT$ISPNFͷಋೖͱஔ͖͑ • ࣗಈςετͷ֦ॆ • ొϑΥʔϜҎ֎ͷػೳ
Slide 73
Slide 73 text
ฐࣾͰҰॹʹಇ͖·ͤΜ͔ʁ ΤϯδχΞɾσβΠφ࠾༻αΠτ IUUQSFDSVJUBTUBNVTFDPKQ BTUBNVTF -BCʢ։ൃϒϩάʣ IUUQMBCBTUBNVTFDPKQ
Slide 74
Slide 74 text
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠