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.8k
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
110
テストオートメーションと末長くお付き合いするための17のこと
haru01
3
540
20240913知識ポートフォリオ
haru01
0
22
Agile Studioウェビナー~モブプログラミング&テスト駆動開発はじめの一歩~
haru01
0
270
XP祭り2022 xUnit Test Patterns勉強会
haru01
0
740
心理的安全性とリファクタリングステップでモブプログラミングはめっちゃ輝く
haru01
4
2k
書籍『テスト駆動開発』の紹介(みんなのPython勉強会#37 の発表資料)
haru01
2
7.6k
書籍『テスト駆動開発』7つの魅力のご紹介
haru01
1
1.1k
いえぴょんによる弾丸特急フィードバック講座
haru01
5
600
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Embracing the Ebb and Flow
colly
84
4.6k
Done Done
chrislema
182
16k
Building an army of robots
kneath
303
45k
Being A Developer After 40
akosma
89
590k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Building Applications with DynamoDB
mza
93
6.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
330
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Designing for humans not robots
tammielis
250
25k
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