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
2.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
agile459-feedback
Agile Japan 2018 高知サテライト
https://agile459.connpass.com/event/96027/
eiji.ienaga
September 08, 2018
More Decks by eiji.ienaga
See All by eiji.ienaga
tdd-hajime-no-ippo
haru01
0
230
テストオートメーションと末長くお付き合いするための17のこと
haru01
3
930
20240913知識ポートフォリオ
haru01
0
66
Agile Studioウェビナー~モブプログラミング&テスト駆動開発はじめの一歩~
haru01
0
390
XP祭り2022 xUnit Test Patterns勉強会
haru01
0
980
心理的安全性とリファクタリングステップでモブプログラミングはめっちゃ輝く
haru01
4
2.2k
書籍『テスト駆動開発』の紹介(みんなのPython勉強会#37 の発表資料)
haru01
2
8.1k
書籍『テスト駆動開発』7つの魅力のご紹介
haru01
1
1.3k
いえぴょんによる弾丸特急フィードバック講座
haru01
5
670
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
200
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
Chasing Engaging Ingredients in Design
codingconduct
0
220
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
320
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Visualization
eitanlees
152
17k
Docker and Python
trallard
47
3.9k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
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