Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
COOKPAD and Test Automation
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Naoto Takai
May 25, 2014
Programming
2.9k
19
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
COOKPAD and Test Automation
ソフトウェアテストシンポジウム 2014 東北(JaSST'14 Tohoku)
2014年5月23日(金)
Naoto Takai
May 25, 2014
More Decks by Naoto Takai
See All by Naoto Takai
Building the Perfect Custom Keyboard
takai
2
900
キースイッチ潤滑入門 / A Brief Introduction to Lube MX Switches
takai
2
900
みなさん、分かっていますか / What is a difference?
takai
1
1k
The Design Philosophy of Kuroko2
takai
3
2.4k
Agile and DevOps with Ruby
takai
2
1.3k
Software Quality and Testing #1
takai
6
750
Microservices in Action
takai
36
5.5k
Ruby App on Netflix Microservices Stack
takai
6
1.2k
How We Use Jenkins?
takai
21
8.6k
Other Decks in Programming
See All in Programming
mrbgem 三角測量 開発
ogom
0
220
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2k
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
120
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
150
すこし踏み込む CancellationToken
htkym
2
1.6k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
最近”作らせてる” ローカルAIアプリの話
akit37
0
400
AWSに止められる覚悟してますか?
morizo_1984
2
520
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
190
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
120
JRuby: Past, Present, and Future
headius
0
220
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
170
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
10k
We Have a Design System, Now What?
morganepeng
55
8.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Become a Pro
speakerdeck
PRO
31
6.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Accessibility Awareness
sabderemane
1
240
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
620
Agile that works and the tools we love
rasmusluckow
331
22k
HDC tutorial
michielstock
2
950
The Invisible Side of Design
smashingmag
301
52k
Transcript
ΫοΫύουͱςετࣗಈԽ JaSST’14 Tohoku
ߴҪਓ ΫοΫύουגࣜձࣾ
ࢲͷཤྺॻ ʙ ϝʔΧʔܥൢࣾ ʙ Σϒ੍࡞ձࣾ ʙ େखγεςϜΠϯςάϨʔλʔ
ʙ ωοταʔϏεӡӦձࣾ
ιϑτΣΞ࣭ͱͷग़ձ͍ Σϒ੍࡞ձࣾͰडୗ։ൃʹैࣄ͍ͯͨ͠ ࢲ3VCZͷීٴɾൃలͷͨΊʹେखγε ςϜΠϯςάϨʔλͱస৬ͨ͠ͷ͕ͩɺ ԿͷҼՌ͔ιϑτΣΞඪ४Խ෦ʹଐ ͞ΕΔ͜ͱʹͳͬͨͷͩͬͨʜʜɻ
None
None
݄ؒϢχʔΫϒϥβ ສ ສ ສ ສ ສ
ສ ݄ ݄ ݄ ݄ ݄ ݄ ݄ ݄ ݄ ݄ ݄ ݄ ݄ 1$ ϞόΠϧ ສ6# ʢ݄ظୈ࢛ظܾࢉิઆ໌ࢿྉʣ
εϚϗΞϓϦྦྷܭ%- ύζυϥ ສɺࠇೣ ສ J04 ສ "OESPJEສ ʢ݄࣌ʣ
ߘϨγϐ ສ ສ ສ ສ ສ ສ ສ ݄ ݄
݄ ݄ ݄ ݄ ݄ Ϩγϐ ສ ʢ݄ظୈ࢛ظܾࢉิઆ໌ࢿྉʣ
ΫοΫύουͷϢʔβʔ உੑ ঁੑ ঁੑ உੑ ੑผ Ҏ্
ҎԼ ҎԼ Ҏ্ ʢঁੑʣ ʢ݄࣌ʣ
. . . . . 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 ձһࣄۀ ࠂࣄۀ ͦͷଞ ࢛ظച্ߴ ඦສԁʢ࿈݁ʣ ʢ݄ظୈ࢛ظܾࢉิઆ໌ࢿྉʣ
ΞϓϦέʔγϣϯߏʢ8FCʣ MySQL Redis Memcached Unicorn Rails 3.2 Ruby 2.0 nginx
Amazon Web Service Apache
ΞϓϦέʔγϣϯنʢ8FCʣ w Ϟσϧɹɹɹɹɹɹɹʜ Ϋϥε w ίϯτϩʔϥʔɹɹɹʜΫϥε w ϏϡʔςϯϓϨʔτɹʜ ϑΝΠϧ w
ϧʔςΟϯάఆٛɹɹʜ ߦ w 34QFD&YBNQMFɹɹʜ ݸ w σϓϩΠճɹɹɹɹʜճҎ্ʗ ʢ݄࣌ʣ
None
࠷ߴʹ͓͍͍͠ʮνϣίϨʔτέʔΩʯ Ͳ͏ͬͨΒͰ͖Δ͔Λߟ͍͑ͯͩ͘͞ɻ
None
ʮຖͷྉཧΛָ͠Έʹʯ Ͳ͏ͬͨΒͰ͖Δ͔Λߟ͍͑ͯͩ͘͞ɻ
ࣦഊ͢ΔΓํ ָ͠ΈʹͳΔͨΊͷཁ݅Λఆٛ͢Δ ্هΛຬͨ͢ػೳΛઃܭ͢Δ ιϑτΣΞΛ࣮͠ɺςετ͢Δ
ͳࣦͥഊ͢Δͷ͔ʁ ָ͠ΈʹͳΔͨΊͷཁ݅Λఆٛ͢Δ ্هΛຬͨ͢ػೳΛઃܭ͢Δ ιϑτΣΞΛ࣮͠ɺςετ͢Δ ʮଥੑ֬ೝʯͷϓϩηε͕ͳ͍
̫ˍ̫ʢݕূͱଥੑ֬ೝʣ w ݕূ ٬؍తূڌΛఏࣔ͢Δ͜ͱʹΑͬͯɺنఆཁٻࣄ߲ ͕ຬͨ͞Ε͍ͯΔ͜ͱΛ֬ೝ͢Δ͜ͱɻ w ଥੑ֬ೝ ٬؍తূڌΛఏࣔ͢Δ͜ͱʹΑͬͯɺಛఆͷҙਤ͞ Εͨ༻్ຢద༻ʹؔ͢Δཁٻࣄ߲͕ຬͨ͞Ε͍ͯ Δ͜ͱΛ֬ೝ͢Δ͜ͱɻ
̫ࣈϞσϧͱ̫ˍ̫ ଥੑ֬ೝ ཁ݅ఆٛ جຊઃܭ ৄࡉઃܭ ࣮ɾ୯ମςετ ݁߹ςετ γεςϜςετ ड͚ೖΕςετ اը
ධՁ ݕূ
̫ࣈϞσϧͱքʢ༨ஊʣ ൃଆൣғ ཁ݅ఆٛ جຊઃܭ ৄࡉઃܭ ࣮ɾ୯ମςετ ݁߹ςετ γεςϜςετ ड͚ೖΕςετ اը
ධՁ डୗଆൣғ डୗ։ൃͰଥੑ֬ೝ͕ ʹͳΒͳ͍ཧ༝ ਖ਼֬ʹཁ݅ఆٛɾड͚ೖ Εςετൃଆ
ޭ͢ΔΓํ ιϑτΣΞΛ͔ͭͬͯΒ͏ ָ͠Έʹͳ͔ͬͨΛௐΔ Ͳ͏ͬͨΒͬͱָ͠ΈʹͳΔ ιϑτΣΞΛͭ͘ΕΔ͔ߟ͑Δ
σΠϒɾτʔϚεᐌ͘ɺ " 8IFSFEPXFXBOUUPCF # 8IFSFBSFXF $ )PXEPXFJNQSPWFPVSQSPDFTT 5IJTJT"HJMJUZ5IFSFJTOPNPSF
ཁٻຬͷࣄޙੑ ιϑτΣΞ͕ཁٻΛຬ͍ͨͯ͠Δ͔ɺ ιϑτΣΞΛΘͳ͍ͱஅͰ͖ͳ͍ɻ
͠ɺ͓٬͞·ʹΉͷΛฉ͍͍ͯͨΒɺ ͓٬͞·ʮͬͱ͍അ͕ཉ͍͠ʯͱ ͍͑ͯͨͩΖ͏ɻ ϔϯϦʔɾϑΥʔυʦཁग़యʧ
୭͕ސ٬ͳͷ͔͕Θ͔Βͳ͚ΕɺԿ͕ ࣭ͳͷ͔Θ͔Βͳ͍ɻ ΤϦοΫɾϦʔεʰϦʔϯελʔτΞοϓʱ ࣭୭͔ʹͱͬͯͷՁͰ͋Δɻ δΣϥϧυɾϫΠϯόʔάʰιϑτΣΞจԽΛΔ̍ʱ
ߏங͢Δ ܭଌ͢Δ ֶͿ σʔλ ΞΠσΞ ߏஙɾܭଌɾֶशͷϧʔϓ ͜ͷϧʔϓʹཁ͢Δ࣌ؒΛ࠷খԽ͢Δ
ϧʔϓʹཁ͢Δ࣌ؒΛ࠷খԽ͢Δʹʁ ʢʹιϑτΣΞͷͭ͘Γํͷվળʣ
ࣦഊ͢ΔΓํ ։ൃϓϩηεඪ४Λఆٛ͢Δɻ ։ൃϓϩηεඪ४ΛϓϩδΣΫτຖʹ ςʔϥϦϯά͢Δɻ
ͳࣦͥഊ͢Δͷ͔ʁ ։ൃϓϩηεඪ४Λఆٛ͢Δɻ ։ൃϓϩηεඪ४ΛϓϩδΣΫτຖʹ ςʔϥϦϯά͢Δɻ ݱ࣮ͷ։ൃϓϩηεͷվળͰͳ͍
ޭ͢ΔΓํ ϦϦʔεՄೳͳঢ়ଶʹ͢Δ ιϑτΣΞΛ։ൃ͢Δ มߋΛՃ͔͑ͯΒϦϦʔεՄೳͳ ঢ়ଶʹͳΔ·ͰͷແବΛͳ͘͢
ιϑτΣΞੜ࢈ੑ ιϑτΣΞͷੜ࢈ੑΛ্ͤ͞ΔͨΊͷ ޮՌతͳख๏͓Αͦࡾͭʹྨ͞ΕΔɻ w ෦Խʜͭ͘Βͳ͍Α͏ʹ͢Δ w ࣗಈԽʜ͠ͳ͍Α͏ʹ͢Δ w ՄࢹԽʜΘ͔ΔΑ͏ʹ͢Δ
ܧଓతσϦόϦʔ ܧଓతσϦόϦʔιϑτΣΞ։ൃʹ͓ ͚ΔنͷͻͱͭͩɻʜʜܧଓతσϦό ϦʔΛ࣮ݱ͢Δʹɺ։ൃνʔϜ͕ιϑτ ΣΞΛܧଓతʹ౷߹͠ɺ࣮ߦϑΝΠϧΛ Ϗϧυ͠ɺ͞ΒʹͦΕΛࣗಈతʹςετ ͯ͠Λݕग़͢Ε͍͍ɻ IUUQDBQTDUSMRVFKQLENTOSXJLJCMJLJ $POUJOVPVT%FMJWFSZ
ࣗಈςετͱඅ༻ରޮՌʢ༨ஊʣ ςετࣗಈԽ։ൃϓϩηεͷϜμऔΓͰ ͋ΓɺͦͦϜμऔΓʹඅ༻ରޮՌͱ͍ ͏֓೦͏·Εͳ͍ʢΩϦοʣ
σϓϩΠϝϯτύΠϓϥΠϯ ՌϦϙδτϦ όʔδϣϯίϯτϩʔϧ ιʔείʔυ ઃఆ ίϛοτεςʔδ ड͚ೖΕεςʔδ ड͚ೖΕςετ ڥઃఆɺσϓϩΠɺ εϞʔΫςετ
ੑೳςετ ڥઃఆɺσϓϩΠɺ εϞʔΫςετ ຊ൪ڥ ڥઃఆɺσϓϩΠɺ εϞʔΫςετ ίϯύΠϧ ίϛοτςετ Ռ࡞ ίʔυղੳ ڥઃఆ σϓϩΠ εϞʔΫςετ ड͚ೖΕςετ ઃఆ +F[)VNCMFɺ%BWJE'BSMFZʰܧଓతσϦόϦʔʱ
ΫοΫύουͷύΠϓϥΠϯ Source Code Review Continuous Integration Production Test Developement Production
GitHub Git Repository merge pull req pull tag deploy deploy
Developer Machine Redis Shared Development MySQL EC2 Ruby on Rails
memcached Remote Spec Workers remote_spec worker remote_spec worker GitHub Enterprise LAN Tokyo Tyrant Development App Server push rspec deploy HipChat ϩʔΧϧͷ։ൃڥ
։ൃऀʹΑΔςετ 34QFDʹΑΔςετ ୯ମςετπʔϧʹΑͬͯɺσʔλϕ ʔεؚΊͨςετΛ͢Δ $BQZCBSBʹΑΔςετ ը໘ͳ͠ͷΣϒϒϥβΛ༻͍ͯɺ γφϦΦϕʔεͷςετΛ͢Δ
։ൃऀςετɾ2"ςετʢ༨ஊʣ ։ൃऀςετͱ2"ςετରཱతͳ֓೦ Ͱͳ͘ɺςετͷ͋Δଆ໘ʹ͗͢ͳ͍ɻ ྨ͋Γ͖Ͱߟ͑ΔͷͰͳ͘ɺϦϦʔε ·ͰʹԿ͕ඞཁ͔Λߟ͑Α͏ɻ
34QFDͷಛ ;Δ·͍ۦಈ։ൃʢ#%%ʣͷͨΊͷςες ΟϯάϑϨʔϜϫʔΫɻ w σϑΝΫτελϯμʔυͰ͋Δ w ςετίʔυΛߏԽ͍͢͠ w ΤίγεςϜ͕ॆ࣮͍ͯ͠Δ
34QFDʹΑΔςετ describe SymbolStack do ... context 'when stack is empty'
do subject(:empty_stack) { SymbolStack.new } describe '#size' do it { expect(empty_stack.size).to eq 0 } end
$BQZCBSBʹΑΔςετ feature 'User login' do scenario 'successful login' do visit
login_path fill_in 'Login', with: '
[email protected]
' fill_in 'Password', with: 'password' click_link 'Submit' expect(current_path).to root_path end
LAN EC2 CI Server Git Repository Production Test HipChat tag
pull notify deploy Development DB schema Remote Spec distribute Git Repository clone pusher service hook pull push Developer merge ιʔείʔυͷྲྀΕ
ίʔυϨϏϡʔ Team Pull Request Owner Developer Developer review open merge
review ίʔυϨϏϡʔνʔϜ୯ҐͰߦͳ͏͕ɺ શһ͕ϨϏϡʔ͢Δ͜ͱͰ͖Δɻ
None
None
None
None
Repository Product Support Product Manager Issue Developer UI/UX Designer Pull
Request file file review open open (JU)VC&OUFSQSJTFͷར༻ ΤϯδχΞҎ֎ʹσβΠφʔ৬ɺσΟϨ Ϋλʔ৬ɺαϙʔτ৬ͳͲ
LAN EC2 CI Server Git Repository Production Test HipChat tag
pull notify deploy Development DB schema Remote Spec distribute Git Repository clone pusher service hook pull push Developer merge ιʔείʔυͷྲྀΕ
$*αʔόʮ͓Ή͖Μ͢ʯ IUUQTHJUIVCDPNNBTBOPCVJNBJFNPUJPOBMKFOLJOTQMVHJO
$*࣌ؒʹؔ͢Δܦݧଇ ։ൃऀेʹၗຫͳͷͰɺ ͰΠϥΠϥ͠ɺͰΩϨΔɻ
$*Λૣ͘͢Δ ϚϧνϓϩηεԽʢQBSBMMFM@UFTUTʣ ࢄԽ ୈ̍ੈSFNPUF@TQFD ୈ̎ੈSFNPUF@TQFD
ୈ̏ੈ3334QFD
3334QFDͷಛ εϙοτΠϯελϯεΛར༻ ϓϩηεఀࢭ͔Βͷࣗಈ෮ؼ ࣦഊͨ͠ςετͷࣗಈ࠶࣮ߦ ςετ࣮ߦॱংͷ࠷దԽ
͍ςετͷػత࣮ߦ Φʔϓϯιʔε IUUQTHJUIVCDPNDPPLQBESSSTQFDCMPCNBTUFS%&4*(/NE
Master Slave Worker Slave Slave Worker ʜ ʜ DB 3334QFDͷߏ
&YBNQMFʜ εϨʔϒʜ ϫʔΧʔʜฒྻ ࣮ߦ࣌ؒɹʜ
ςετͷ࣭ ػೳͷՁϦϦʔεͯ͠ॳΊͯΘ͔Δ ʹςετʹաͳઌߦࢿͰ͖ͳ͍ w ςετઃܭఔΛಠཱͯ͠ઃ͚ͳ͍ w ։ൃఔͷ͋ͱͷςετఔͳ͍ ຊ൪ڥͰͷμϝʔδίϯτϩʔϧ͕ॏཁ
None
None
None
None
None
σϕϩούʔͱϢʔβʔͷίϛϡχέʔγ ϣϯίϥϘϨʔγϣϯΛ્Ήนͳ͘ͳ ͬͨɻόάͷण໋ɺϲ݄͔Βʹ ॖ͞Εͨɻ ̟ɾΟςΧʔɺ̟ɾΞʔϘϯɺ̟ɾΩϟϩʔϩ ʰςετ͔Βݟ͑ͯ͘ΔάʔάϧͷιϑτΣΞ։ൃʱ
ͱɺ͍͏͓ͩͬͨͷ͞ʜʜ
ϞόΠϧΞϓϦέʔγϣϯ w ΑΓϢʔβʔΤΫεϖϦΤϯε͕ॏཁʹ w Ϧονͳ6*ɺෳࡶͳঢ়ଶͷςετ w ΞϓϦέʔγϣϯσϦόϦʔ͕࠶೩ w ෳόʔδϣϯ͕ซଘ w
ϦϦʔεϑϩʔͷ࠶ߏங w ϦϦʔεظؒɺςετϑΣʔζ
෮श ສճʹճɺສԁ͕ͨΔεϩοτϚ γϯ͕͋Δͷͱ͠·͢ɻ͜ͷεϩοτϚ γϯͰ༡Ϳͱ͖ɺճ͋ͨΓ͍͘Βίετ Λ͔͚Δ͖͔ߟ͍͑ͯͩ͘͞ɻ
·ͱΊ w ϢʔβʔͷཁٻɺϦϦʔεͯ͠ॳΊͯ ͔Δɻ w ߏஙɾܭଌɾֶशͷϧʔϓʹཁ͢Δ࣌ؒ Λ࠷খԽ͠ͳ͚ΕͳΒͳ͍ɻ w ϦϦʔε·ͰͷϓϩηεΛఆٛ͠ɺͦ͜ ͔ΒແବΛऔΓআ͘ɻ