Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Startup Spock #javajo
Search
kyonmm
PRO
March 25, 2017
Technology
2.6k
0
Share
Startup Spock #javajo
Java女子部でSpockのハンズオンをしたときのスライドです。
kyonmm
PRO
March 25, 2017
More Decks by kyonmm
See All by kyonmm
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
1.4k
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
850
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
4
1.8k
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
5
3.4k
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
630
IT子会社のグローバルトレンド #scrumsendai / Global Trends in IT Subsidiaries
kyonmm
PRO
3
1.5k
AIのグローバルトレンド 2025 / ai global trend 2025
kyonmm
PRO
1
310
AI時代における変革の入口-100年後も語られる25年のために- #scrumosaka / The entry point to transformation in the AI era For 25 years that will be talked about 100 years from now
kyonmm
PRO
6
2.1k
地方中小企業のエンジニアから大企業の執行役員になるまで #phpcon_niigata / road to executive
kyonmm
PRO
7
15k
Other Decks in Technology
See All in Technology
「誰一人取り残されない」 AIエージェント時代のプロダクト設計思想 Product Management Summit 2026
mizushimac
1
3k
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
3.8k
知ってた?JavaScriptの"正しさ"を検証するテストが5万以上もあること(Test262)
riyaamemiya
1
150
Agents CLI と Gemini Enterprise Agent Platform で マルチエージェント開発が楽しくなる!
kaz1437
0
250
エンタープライズの厳格な制約を開発者に意識させない:クラウドネイティブ開発基盤設計/cloudnative-kaigi-golden-path
mhrtech
0
250
ハーネスエンジニアリング入門
hatyibei
0
100
独断と偏見で試してみる、 シングル or マルチエージェント どっちがいいの?
shichijoyuhi
1
240
Google Cloud Next '26 の裏でこっそりリリースされたCloud Number Registry & Cloud Hub コスト分析 を試してみた
hikaru1001
0
160
「QA=テスト」「シフトレフト=スクラムイベントの参加者の一員」の呪縛を解く。アジャイルな開発を止めないために、10Xで挑んだ「右側のしわ寄せ」解消記 #scrumniigata
nihonbuson
PRO
3
880
古今東西SRE
okaru
1
130
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
4
1.1k
GitHub Copilot CLI と VS Code Agent Mode の使い分け
tomokusaba
0
140
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
240
Documentation Writing (for coders)
carmenintech
77
5.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Scaling GitHub
holman
464
140k
Bash Introduction
62gerente
615
210k
A designer walks into a library…
pauljervisheath
211
24k
Crafting Experiences
bethany
1
140
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
210
Accessibility Awareness
sabderemane
1
110
Transcript
STARTUP SPOCK #JAVAJO kyon_mm 2017/03/25 1
SELF INTRODUCTION • ͖ΐΜ : @kyon_mm גࣜձࣾΦϯβϩʔυ • ςετΞʔΩςΫτɺδΣωϥϦετ •
Groovy, F#, C#, Scala • جૅษڧձ, TDDBootCamp, ͳ͔͝Scrum 2
THIS SESSION : TARGET • Javaݴޠͷجຊจ๏ͳΜͱͳ͘Θ͔͍ͬͯ ͯɺίʔυΛ͔͍ͨΓͰ͖Δɻ • Can you
code FizzBuzz ? 3
THIS SESSION : GOAL • SpockͰ؆୯ͳίʔυΛॻ͚ΔΑ͏ʹͳΔɻ 4
NO • Groovy LanguageΛ͍͜ͳ͢ • SexyͳCodeΛٻ͢Δ 5
MENU • https://github.com/kyonmm/startup-spock • Groovy Language for Java Language User
• Getting Start Spock • Spock with TDD 6
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 7
GROOVYͱ • ਐతܕ͖(੩తܕݕࠪΦϓγϣϯ) • JVMͰಈ࡞͢Δɻgroovy-all.jarͱҰॹʹ͏ɻ • GradleɺJenkinsfileGroovyͷDSLɻ 8
GROOVYͱ • Java6ͱ΄΅ޓੑΛ͍ͨͬͯΔ͕ɺ Java7,Java8ͷ৽ػೳͱҰ෦ޓੑ͕ͳ͍ɻ (Java6Ҏલ͔ΒಠࣗͰ࣮͍ͯͨ͠Γͱ͔) • IntelliJ IDEA + Gradle
+ Spock͕ఆ൪ • OO͕ϕʔεɻޠኮRubyɺPythonͬΆ͞ɻ 9
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 10
Ҏ߱ͷηογϣϯͷͨΊʹ ڥߏங • ιʔείʔυΛߋ৽ͨ͠ͷͰɺGitHub͔Β࠷৽ͷιʔείʔυΛམ ͱ͖͍ͯͯͩ͘͠͞ɻ(git reset --hard; git pull;) •
IntelliJ IDEAͷ࣍ͷઃఆΛ͠·͠ΐ͏ɻ • Plugins -> Spock -> Install • Build Project Automatically • Edit Configurations -> Defaults -> JUnit -> Before LaunchͷBuildΛબ ͯ͠আ( - ϘλϯΛΫϦοΫ) 11
JAVA8ͱඇޓͳͷ • ϥϜμͷΘΓʹΫϩʔδϟΛ͏ • ϝιουࢀরɺίϯετϥΫλࢀর͕ͳ͍ • try-with-resource͕͑ͳ͍ • ྻϦςϥϧ͕͑ͳ͍ 12
ϥϜμͷΘΓʹΫϩʔδϟ Λ͏ • ϥϜμ • ࣜɻJava7·ͰؔΦϒδΣΫτͰ࣮ݱ͍ͯͨ͠Γɻ • GroovyͰϥϜμͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • GroovyͰΫϩʔδϟͰ࣮ݱ͢Δɻ
• src/test/groovy/example/startup/incompatible/java8/ Lambda.groovy 13
ϝιουࢀরɺ ίϯετϥΫλࢀর͕ͳ͍ • ϝιουࢀর • Ϋϥε໊::ϝιου໊,ΦϒδΣΫτ໊::ϝιου໊ (ಛʹ)ϥϜμͱͷซ༻Ͱ؆ܿͳهड़Λ࣮ݱͰ͖Δɻ Stream.of("javajo", "jjug", "kyon_mm").forEach(System.out::println)
• GroovyͰϝιουࢀরɺίϯετϥΫλࢀরͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • GroovyͷΫϩʔδϟͰҾΛ໌ࣔ͠ͳ͍ͱ͖ݩͷΦϒδΣΫτ͕ it ͰΘͨͬ ͯ͘ΔͷͰɺ{ println(it) }ͷΑ͏ʹ͏ɻ • src/test/groovy/example/startup/incompatible/java8/MethodReference.groovy 14
TRY-WITH-RESOURCE • try-with-resource • ྫ֎Λߟྀͨ͠Ϧιʔε(IO)ͷΫϩʔζΛࣗಈతʹͬͯ͘ΕΔ • GroovyͰtry-with-resourceͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • ͨͩ͠ɺସखஈͱͯ͠ withCloseable
ϝιουΛ͏͜ͱ͕Ͱ͖ Δɻ • src/test/groovy/example/startup/incompatible/java8/ TryWithResource.groovy 15
ྻϦςϥϧ͕ͳ͍ • ྻϦςϥϧ • int[] xs = new int[]{1,2,3}; •
GroovyͰ{}ΫϩʔδϟͳͷͰΤϥʔʹͳΔ • ϦετϦςϥϧͰArrayListΛੜͯ͠ɺޙΖʹas int[] Λه͢ Δɻ • src/test/groovy/example/startup/incompatible/java8/ ArrayLiteral.groovy 16
Α͘ΈΔͰ͋Ζ͏ Τϥʔϝοηʔδ • groovy.lang.MissingMethodException: No signature of method: example.startup.groovy.Keyword.newMethod() •
example.startup.groovy.Keyword.newMethod͍ͬͯ͏ϝ ιουͳ͔ͬͨΑ • groovy.lang.MissingPropertyException: No such property: y for class: example.startup.groovy.Keyword • KeyWordΫϥεʹy͍ͬͯ͏ϓϩύςΟͳ͔ͬͨΑ 17
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 18
͓֮͑ͯ͘ͱศརͳͷ • ϦετϦςϥϧ • ϚοϓϦςϥϧ • จࣈྻϦςϥϧ • ਖ਼نදݱϦςϥϧ •
GroovyͷίϨΫγϣϯૢ࡞ϝιουͱJavaͷstreamͱͷൺֱ 19
GROOVYͰΑ͔ͭ͘͏ॻ͖ํ • defͰએݴ • ςετϝιου໊จࣈྻએݴ 20
ͦͷଞҙ • booleanΛظ͞ΕΔॴ(ex. if(x))ʹɺBoolean Ҏ֎ͷࢀরܕ͕͍ͬͨ߹ͳ͍߹ ࣍ͷنଇͰఆ͞Ε·͢ɻ • "", [], [:],
0, null -> false • ͦΕΒҎ֎ -> true 21
MENU • Groovy Language for Java Language User • Getting
Start Spock • Spock with TDD 22
• Spockͱ • JUnitͱͷൺֱ • Spockͷ͍͔ͨ 23
SPOCKͱ • JUnit4ϕʔεͷGroovyͷςεςΟϯάϑϨʔ ϜϫʔΫ • BDDΛҙ͍ࣝͯ͠Δ • powerassert Spock͕ΦϦδϯ(ͩͱࢥ͏) 24
JUNITͱͷൺֱ 25 JUnit Spock Specification Ϋϥε spock.lang.SpecificationΛܧঝ Feature Method @Test
SpockͷϥϕϧΛ༻͢Δϝιου Helper Method ϝιουએݴ @Share Fixture Method @Before setupϝιου Fixture Method @After cleanupϝιου Fixture Method @BeforeClass setupSpecϝιου Fixture Method @AfterClass cleanupSpecϝιου
SPOCKͷ͍͔ͨ • Specification • given, when, then, and, where •
power assert • setup, teardown, setupSpec, cleanupSpec • @Unroll, @Shared, @Ignore 26 src/test/groovy/example/startup/spock ԼΛΈͳ͕Β
MENU • Groovy Language for Java Language User • Getting
Start Spock • Spock with TDD 27
SPOCK WITH TDD • SpockͰTDDΛϖΞϓϩάϥϛϯάͰͬͯΈ· ͠ΐ͏ɻ • ͓ʮλεΫϦετ(λεΫཧπʔϧ)ʯͷ։ൃ Ͱ͢ɻ •
ࠓճγεςϜͷೖྗ෦লུ͠·͢ɻ(CUI, GUI ͷ։ൃলུ͠·͢ɻ) 28
λεΫϦετ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷ ͷΛࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ 29
TaskList ---------------------- add(Task) : TaskList delete(Task) : TaskList list(Task) :
List<Task> search(String) : List<Task> search(Date, Date) : List<Task> searchFrom(Date) : List<Task> searchTo(Date) : List<Task> Task ---------------------- title : String dueTo : Date * 30
TDD • ςετۦಈ։ൃ(Test Driven Development) • ςετ࣮ -> ϓϩμΫτ࣮ ->
ϦϑΝΫλ Ϧϯά ͷ܁Γฦ͠Ͱ։ൃ͢Δɻ • ઃܭ͓Αͼੳͷख๏ 31
TDD3ݪଇ • ϓϩμΫτίʔυࣦഊ͢ΔςετίʔυΛ ޭͤ͞ΔͨΊ͚ͩʹॻ͘ • ςετίʔυࣦഊͤ͞ΔͨΊ͚ͩʹॻ͘ • ෳͷςετΛޭͤ͞ΔΑ͏ͳϓϩμΫτ ίʔυΛॻ͍͍͚ͯͳ͍ 32
ࠓΔTDDϥΠΫͳ։ൃ ςετ࣮ฤ 1. (͠ɺ͍·͔Β࣮͠Α͏ͱ͍ͯ͠Δͷطʹ୭͔͕࣮͠ ͯ͘Ε͍ͯͨΒ) ͲΜͳखॱͰɺͦΕΛ͏ͷ͔? 2. 1Ͱࢥ͍͍͍ͭͨํΛຊޠͰɺٙࣅίʔυͰ͍͍ͷͰς Ωετʹ͢Δɻ 3.
ͦΕΛSpockͷgiven, when, thenʹ͋ͯΊΔɻ 4. ਖ਼͍͠Groovyίʔυʹ͢Δɻ 33
ࠓΔTDDϥΠΫͳ։ൃ ϓϩμΫτ࣮ฤ 1. ςετΛ࣮ͨ͠Βςετ͕ಈ࡞͢ΔΑ͏ͳϓϩ μΫτΛ࣮͢Δɻ 2. ͠ɺ15ͨͬͯςετ͕ޭ͠ͳ͔ͬͨΒɺ͍ ·࣮ݱ͠Α͏ͱ͍ͯ͠ΔςετίʔυΛ@Ignore͠ ͯɺ͏͢͜͠খ͍͞ৼ͍Λ࣮ݱ͢Δςετίʔ υΛهड़ͯ͠ɺ࠶ϓϩμΫτ࣮ʹઓ͢Δɻ
34
ࠓΔTDDϥΠΫͳ։ൃ ϦϑΝΫλϦϯάฤ 1. ϓϩμΫτίʔυͷॏෳ͕͋Εڞ௨Խ 2. ςετίʔυͷॏෳ͕͋Εڞ௨Խ 3. ໊લʹҧײ͕͋ΕϦωʔϜϝιου ͷҠಈɺநग़ 35
λεΫϦετ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷ ͷΛࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ 36
TaskList ---------------------- add(Task) : TaskList delete(Task) : TaskList list(Task) :
List<Task> search(String) : List<Task> search(Date, Date) : List<Task> searchFrom(Date) : List<Task> searchTo(Date) : List<Task> Task ---------------------- title : String dueTo : Date * 37
λεΫϦετ:Ճ͓ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷͷΛ ࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ • λεΫΛӬଓԽ͓ͯ͘͜͠ͱͰɺΞϓϦ͕ऴྃ͠ ͯλεΫΛ͓͚ͯ͠Δ(JSONͱ͔CSVʹग़ྗ͠ ͯಡΈͩͤΔΑ͏ʹ͢Δ)
38