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
agile459-feedback
Search
eiji.ienaga
September 08, 2018
1
1.9k
agile459-feedback
Agile Japan 2018 高知サテライト
https://agile459.connpass.com/event/96027/
eiji.ienaga
September 08, 2018
Tweet
Share
More Decks by eiji.ienaga
See All by eiji.ienaga
tdd-hajime-no-ippo
haru01
0
160
テストオートメーションと末長くお付き合いするための17のこと
haru01
3
680
20240913知識ポートフォリオ
haru01
0
30
Agile Studioウェビナー~モブプログラミング&テスト駆動開発はじめの一歩~
haru01
0
320
XP祭り2022 xUnit Test Patterns勉強会
haru01
0
790
心理的安全性とリファクタリングステップでモブプログラミングはめっちゃ輝く
haru01
4
2.1k
書籍『テスト駆動開発』の紹介(みんなのPython勉強会#37 の発表資料)
haru01
2
7.9k
書籍『テスト駆動開発』7つの魅力のご紹介
haru01
1
1.2k
いえぴょんによる弾丸特急フィードバック講座
haru01
5
630
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
540
Large-scale JavaScript Application Architecture
addyosmani
512
110k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
750
Faster Mobile Websites
deanohume
308
31k
Code Reviewing Like a Champion
maltzj
524
40k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
Art, The Web, and Tiny UX
lynnandtonic
301
21k
Rails Girls Zürich Keynote
gr2m
95
14k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
For a Future-Friendly Web
brad_frost
179
9.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Transcript
' $ &% Expected
- Actual = 0 " Agile Japan 2018 !)(#
• =GE> • Tiwtter: @haru01 • G<!%-,( .5& •
/3# • ScrumC 0'$&%!& 2 )"25 TDD …B D • +41, • 8;Java 6@Ruby A PythonHF9?GoI:7 • *4 https://twop.agile.esm.co.jp/ 2
3 https://agile.esm.co.jp/
(.+"#63F8. ,-)$B5 0!1-%;4:?2<97 F8. ,-)$&* E@
'/!,100C = D > A !!
*0 IN ,'=;(XWAH*B:6!O 8)CF*9?LJZYQP2&/E-7 6!@5<"+I3 QP%#1$D4TM 1$RVUKSK.>G
etc…. (#+ ! "/$4.1% 35206)', *-&
= -X;6$ H #%N$ YO ?. ,)<* % EU
GJ1HD@' R[ !"%^+C2 Flow++LK + 894 _T > IV] /0 /0 /0 W5 /0 /0 F7:S ZQ 4&(A \ P B M 3 B
! % % ' &
Expected22℃ Actual3℃ ℃ Time ExpectedActual "# $ Expected22℃ Actual3℃
P Action Expected Actual People ≒
Expected: Happy!! Actual:Sad!!
N C Expected: Build OK! I N Actual:
Build Fail! G expected actual
! −−
* $& !) + "
% #' (
"!
"! "!
l͋ͱ͔ΒௐͯΈΕɺ ຊʹΛղ͍ͯ΄͔ͬͨ͠ਓ ͦΜͳʹ͍ͳ͍ͷͩ M
Fail First P?FL\X)# QN \XS 1/@0 5G QN
,!?R9VZ &*- H3 =K >MYC B (AE :62 OYC B (AE %"' (A E 7J4W[D.[D$+ U8 >MYC …;T <I
!#% & $ "
Customer Discovery Customer Validation Customer Creation Customer Building
"! $ # TDD−ATDD
$ #(%!" '&*) $
l࣭ͱ୭͔ʹͱͬͯͷՁ Ͱ͋Δ M
UP UP Xxx
UP UP
− UP People( ) UP
UP UP -> -> UP
(' QA
(' &#)$"!%" etc….
) ( ( 1 *20/. )#!$-&' 1 ",(+#%
lΤΫετϦʔϜϓϩάϥϛϯά ͱιʔγϟϧνΣϯδͰ͋Δ
# $ ! "
! ! ! ! !
! ! ! !
PeopleHappy 2+0!.4* %-4*& :;<7 8',65
@? " 89>/$)1-(=3#
”No
lγϯϓϧ͞ʢϜμͳ͘࡞ΕΔ ྔΛ࠷େݶʹ͢Δ͜ͱʣ͕ຊ ࣭Ͱ͢ɻ
$ ! No #"
* %&" No! $ * # No! $ * # No! $
lͱ ·Εͨࣄฑͱೝࣝ͞Εͨࣄฑͷ૬ҧͰ͋Δ M
Expected – Actual =
0 people.reduce(0){ |diff, person| diff + (person.expteced - person.actual).abs }
assertEquals(expected, actual);
None
Expected Actual UP
Actual Expected
Expected Actual
" $ ! #
A A
A XXX "!
#
" !
Expected Actual
!
%"!' & + $ *(#)
!"" #%& ') 0+,.- $(/*
! $( %) #& " ! '*
http://bliki-ja.github.io/ConversationalStories/ Who
What Why Who What Why
%"CRC " &# People$ !
http://gc.sfc.keio.ac.jp/class/2006_23636/slides/05/5.html −
−
T DCA t C A ,) ( E A A
c AC t e C T c c R () .
"#%%!( +!'8A<74 : 23 ;> B: -
&0*&/16$) ? ?= .1,58A<7@9 https://www.slideshare.net/kkd/user-story-mapping-for-agile-team http://gc.sfc.keio.ac.jp/class/2006_23636/slides/05/5.html
l࠷ྑͷΞʔΩςΫνϟɾཁ ٻɾઃܭɺࣗݾ৫తͳ νʔϜ͔ΒੜΈग़͞Ε·͢ɻ
ü '+*(,B79RG@ ü 0T=P3CIU% ü )YO X ü
;> %A< ü .Z[`#&!/_ ü V%0T3C: JV ü 7 H4 ü ?-28M^ %SKWQ6 " $5DL\NF1E #&!/_] Expected Actual
Red Green or Expected Actual
,/ GUI .*" +%6
#&7 ' GUI Spy 3) 1 ,/ (- ! 90$ 25 assert execute 80$ .*" 4 Expected Actual
& ( !#$ ' … void
printOwing(double amount) { printBanner(); // %" System.out.println("name:" + name); System.out.println("amount:" + amount); } void printOwing(double amount) { printBanner(); printDetails(amount); } private void printDetails(double amount) { // System.out.println("name:" + name); System.out.println("amount:" + amount); } ಈ࡞͢Δ͕ෆ٢ͳष͍ ͕͢Δίʔυ ಡΜͰཧղ͢Δ·Ͱͷ͕࣌ؒେ ػೳͷՃमਖ਼ʹ͕͔͔࣌ؒΔɾෆՄೳ ίʔυʹ͖߹͏ͱਏ͍ ಈ࡞͢Δ͖Ε͍ͳίʔυ ಡΜͰཧղ͢Δ·Ͱͷ͕࣌ؒখ ػೳͷՃमਖ਼͕Ͱ͖Δ ίʔυʹ͖߹͏ͷָ͕͍͠ Expected Actual
() ਓ͕ଟ͗ͯ͢ௐίετߴ ৽ϝϯόʔ͕ࢀՃͯ͠ཧղ͢Δ·Ͱ͕࣌ؒେ టஂࢠΞʔΩςΫτͰσϓϩΠ͕͍͠ Τϥʔղੳ͕͍͠
దͳνʔϜαΠζͰௐίετখ ৽ϝϯόʔ͕ࢀՃͯ͠ཧղ͢Δ·Ͱͷ͕࣌ؒখ ୯ҰతαʔϏεͰಠཱͯ͠σϓϩΠ͠ݕূ͍͢͠ ہॴԽͰΤϥʔղੳ͍͢͠ ҙɿৗʹαʔϏεͷநग़͕ྑ͠ͱݶΒͳ͍ɻϞδϡʔϧύʔέʔδׂʹཹΊΔɺ ٯʹαʔϏεͷΠϯϥΠϯԽͯ͠·ͱΊΔͷબࢶͱτϨʔυΦϑஅ Expected Actual
People
lٕज़తӽੑͱ༏Εͨઃܭʹ ର͢Δෆஅͷҙ͕ػහ͞Λ ߴΊ·͢ɻ
# &+(0%' ". !#" )*$/,-
9/(%#!% ?< )' 4; expected actual +, 32=> .657*
%!%NG "NG NG ,2 80/ %!%OK "OK OK $OK :1 -&
0 1 5
lνʔϜ͕ͬͱޮΛߴΊΔ͜ͱ͕ Ͱ͖Δ͔ΛఆظతʹৼΓฦΓɺ ͦΕʹج͍ͮͯࣗͨͪͷΓํΛ ࠷దʹௐ͠·͢ɻ
lࢲຊʹͦΕΛղ͖͍͔ͨʁ M
lͷग़ॴͬͱ͠͠ΘΕΘ Εࣗͷதʹ͋Δ M
None
None
. 3 . 2 1 84 1 .
#"!
None
Change!!
Expected Expected Actual
A A E E P
E A
% ! $#"
z91ͱɺ͋ͳ͕ͨࣗͷཧʹ͍ͭͯߟ͑ɺͦͷཧ ʹͱ͍ͮͯߦಈ͢ΔͨΊͷํ๏ͩɻ
) * Expected "−$( * Actual#
%−' * 2 !& aE 2 c lE 2 E 2 Epo A d E 2 d E 2 d E 2 : E E E 2 E E S E e2
l91ͷ伴࣮ੑʢJOUFHSJUZʣͩɻຊͷՁͱௐͷ ͱΕͨߦಈΛ͢Δ͜ͱͩɻ
*0 IN ,'=;(XWAH*B:6!O 8)CF*9?LJZYQP2&/E-7 6!@5<"+I3 QP%#1$D4TM 1$RVUKSK.>G
etc…. $(& , 1+.! 02/-3%#) ' *"
(%/1'0-4 #)& *#
"0# "352 . !$ ,+
= -X;6$ H #%N$ YO ?. ,)<* % EU
GJ1HD@' R[ !"%^+C2 Flow++LK + 894 _T > IV] /0 /0 /0 W5 /0 /0 F7:S ZQ 4&(A \ P B M 3 B