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
アジャイルとテスト / Agile and Testing
Search
imtnd
December 15, 2019
Programming
1
1.9k
アジャイルとテスト / Agile and Testing
in WACATE 2019 Winter
https://wacate.jp/workshops/2019winter/
imtnd
December 15, 2019
Tweet
Share
More Decks by imtnd
See All by imtnd
WACATE 2022 夏 ワークショップの目的
imtnd
0
910
テスト設計技法をなぜ&どのように使うのか体験しよう!
imtnd
0
1.4k
analyze the behavior with decision table
imtnd
0
3.9k
WACATE流テスト分析のワークショップを体感してみよう
imtnd
0
190
テスト技法作成のアプローチを考える
imtnd
0
680
テストの目的を考えよう
imtnd
0
750
やってみよう状態遷移テスト #xpjug
imtnd
0
1k
Agile Japan 2019 Report
imtnd
0
1k
Let's consider about Test Levels
imtnd
1
760
Other Decks in Programming
See All in Programming
Jakarta EE meets AI
ivargrimstad
1
430
REXML改善のその後
naitoh
0
190
いまから追い上げる、Jetpack Compose トレーニング
nyafunta9858
0
330
XStateでReactに秩序を与えたい
gizm000
0
720
2024 컴포즈 정원사
jisungbin
0
150
What we keep in mind when migrating from Serverless Framework to AWS CDK and AWS SAM
kasacchiful
1
140
Ruby Parser progress report 2024
yui_knk
2
220
Amazon BedrockでサーバレスなAIお料理ボットを作成する!!
tosuri13
0
220
Kotlin 2.0 and Beyond
antonarhipov
2
150
rails_girls_is_my_gate_to_join_the_ruby_commuinty
maimux2x
0
200
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
530
Using Livebook to build and deploy internal tools @ ElixirConf 2024
hugobarauna
0
250
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Done Done
chrislema
180
16k
Into the Great Unknown - MozCon
thekraken
29
1.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
30
2.3k
Rails Girls Zürich Keynote
gr2m
93
13k
RailsConf 2023
tenderlove
28
810
Optimising Largest Contentful Paint
csswizardry
30
2.8k
Bash Introduction
62gerente
608
210k
WebSockets: Embracing the real-time Web
robhawkes
59
7.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
322
23k
Designing for Performance
lara
604
68k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
227
52k
Transcript
ΞδϟΠϧͱςετ 8"$"5&8JOUFS
ࣗݾհ • ֯ా ढ़ • ιϑτΣΞ։ൃऀ • ίϛϡχςΟ׆ಈ • 8"$"5&࣮ߦҕһ
• /B*5& ࡚*5ٕज़ऀձ ӡӦҕһ
͜ͷηογϣϯʹ͍ͭͯ •ΞδϟΠϧͷ֓೦ͷઆ໌ •ΞδϟΠϧ։ൃͷதͰςετʹؔΘΔࣄͷҰ෦Λ հ • ςετͷߟ͑ํ • ςετͷΓํ
࣍ •ΞδϟΠϧʹ͍ͭͯ •ΞδϟΠϧͷςετʹ͍ͭͯ •ϫʔΫ
ΞδϟΠϧͱςετ
ੈͷதͷྲྀΕ •ੈͷதͷมԽ͕ૣ͍ • ιϑτΣΞٕज़ͷมԽ • ιϑτΣΞͷχʔζ •χʔζΛͦͦᘳʹ֬ఆ͢Δͷ͕͍͠ • ιϑτΣΞͷࣾձͷ͕Γ •
ιϑτΣΞར༻ऀͷ֦େ
仕様変更や、要求の変更があまりない外部要因に左右されず、 新しい技術も使⽤していないような不確実性があまりないシステム 外部要因に⼤きく影響を受け、 新しい技術やなどを使⽤する不確実性が⾼いシステム ↑ アジャイル向きなシステム
https://agilemanifesto.org/iso/ja/manifesto.html
None
→ まだソフトウェアを完璧に開発できる⽅法論は⾒つかっていない
→ ⽅法論は⾒つかっていないけれど、⽅向性は⾒えてきた
None
→ 対話してどうしていくのがベストかを話し合おう
→ 完璧なドキュメントを作るよりも動くものを早く作ろう
→ 関係者みんなで協⼒して良いものを作ろう
→ 想定外の変化はあるし、変化へ対応できるようにしていこう
→ 左側も価値があること。だけど、右側をより重視する。
ソフトウェア開発をより良くするため考え⽅の提案
None
顧客満⾜を最優先し、 価値のあるソフトウェアを早く継続的に提供します。 → ソフトウェアを使う⼈を優先に考える。 価値を⽣むソフトウェアを早く提供するようにする。 また、ソフトウェアを継続的に改善していく。
要求の変更はたとえ開発の後期であっても歓迎します。 変化を味⽅につけることによって、 お客様の競争⼒を引き上げます。 → 競争⼒を上げるような仕様変更は歓迎する。 ソフトウェアの価値を第⼀に考える。
動くソフトウェアを、2-3週間から2-3ヶ⽉という できるだけ短い時間間隔でリリースします。 → 半年、1年という⻑期開発ではなく、 短いサイクルでソフトウェアを提供する。
ビジネス側の⼈と開発者は、プロジェクトを通して ⽇々⼀緒に働かなければなりません。 → ビジネスを達成するためにみんなで協⼒して ソフトウェアを開発していく。
意欲に満ちた⼈々を集めてプロジェクトを構成します。 環境と⽀援を与え仕事が無事終わるまで彼らを信頼します。 → 意欲のある⼈達を集めてチームを構成する。 開発者を信頼する。
情報を伝えるもっとも効率的で効果的な⽅法は フェイス・トゥ・フェイスで話をすることです。 → 対⾯でのコミュニケーションを⼤切にする。
動くソフトウェアこそが進捗の最も重要な尺度です。 → 動作するソフトウェアを確認することで 開発の進捗を判断する
アジャイル・プロセスは持続可能な開発を促進します。 ⼀定のペースを 継続的に維持できるようにしなければなりません。 → ⼀定のペースで開発していく。 詰め込んだり、だらだらした開発はしない。
技術的卓越性と優れた設計に対する 不断の注意が機敏さを⾼めます。 → 技術的に優れた設計をしていくことで、 変更強いソフトウェアを開発する。
シンプルさ(ムダなく作れる量を最⼤限にすること) が本質です。 → ムダを排除し、価値あるソフトウェアを より多く作れるようにする。
最良のアーキテクチャ・要求・設計は、 ⾃⼰組織的なチームから⽣み出されます。 → チームは⾃⼰組織的なチームを⽬指す (⾃⼰組織的=⾃律的でリーダーに依存しない)
チームがもっと効率を⾼めることができるかを 定期的に振り返り、 それに基づいて⾃分たちのやり⽅を最適に調整します。 → 振り返りにより、効率を更に上げて最適を⽬指す。
要求分析 設計 テスト 実装 ウォータフォールモデル アジャイル的開発モデル リリース リリース リリース リリース
半年、1年以上でリリース ⼯程はほぼ同時で⾛り 短期間でリリース 要求分析 設計 実装 テスト
https://www.industriallogic.com/blog/evolutionary-design/
アジャイル宣⾔ アジャイル プロセスモデル アジャイル プラクティス 原則 (ルール) 技術 価値 ・・・
より良いソフトウェアの開発⽅法論を⽬指しているのがアジャイル宣⾔ アジャイル宣⾔がより良くしようとしている分野は多岐に渡る
アジャイル プロセスモデル アジャイル プラクティス 原則 (ルール) 技術 価値 ・・・ アジャイル
プロセスモデルよらず、適応可能なものもある
ΞδϟΠϧํ๏ •91 F9UFBN 1SPHSBNJOH •εΫϥϜ •'%% ػೳۦಈܗ։ൃʣ •ΫϦελϧ •ϦʔϯιϑτΣΞ •Χϯόϯ
•ϞμϯΞδϟΠϧ
91 F9SFBN 1SPHSBNJOH •ϓϩάϥϛϯάٕ๏ɺ໌֬ͳίϛϡχέʔγϣϯɺ νʔϜϫʔΫͳͲΛΈʹར༻ͯ͠ɺΑΓྑ͘ι ϑτΣΞΛ։ൃ͢Δ։ൃελΠϧ •ᐆດͰٸʹมԽ͢Δཁ݅ʹ͖߹͏தখنͷ ιϑτΣΞ։ൃνʔϜͷͨΊͷܰྔڃͷํ๏
Ձ •ίϛϡχέʔγϣϯ •γϯϓϦγςΟ •ϑΟʔυόοΫ •༐ؾ •ϦεϖΫτ
ݪଇ •ਓؒੑ •ܦࡁੑ •૬ޓརӹ •ࣗݾ૬ࣅੑ •վળ •ଟ༷ੑ •;Γ͔͑Γ •ྲྀΕ •ػձ
•ੑ •ࣦഊ •࣭ •ϕΠϏʔεςοϓ •ͷҾ͖ड͚
ओཁͳϓϥΫςΟε •શһಉ੮ •νʔϜશମ •ใຬࡌͷ ϫʔΫεϖʔε •͍͖͍͖ͱͨ͠ࣄ •ϖΞϓϩάϥϛϯά •ετʔϦʔ • ि࣍αΠΫϧ
• ࢛ظαΠΫϧ • ΏͱΓ • ̍̌Ϗϧυ • ܧଓత ΠϯςάϨʔγϣϯ • ςετϑΝʔετ ϓϩάϥϛϯά • ΠϯΫϦϝϯλϧͳઃܭ
εΫϥϜͱ •ෳࡶͰมԽͷܹ͍͠ʹରԠ͢ΔͨΊͷϓϩ δΣΫτͷਐΊํͷϑϨʔϜϫʔΫ •ՄೳͳݶΓՁ ͷߴ͍ϓϩμΫτΛੜ࢈త͔ͭ తʹಧ͚Δ͜ͱΛతͱ͍ͯ͠Δ
εΫϥϜͷཧ •ಁաੑ •ݕࠪ •దԠ
ಁաੑ •ࢀՃऀશһ͕ڞ௨ೝࣝΛ࣋ͭ͜ͱ ྫɿ wϓϩηεͷ༻ޠΛࢀՃऀશһͰڞ༗͍ͯ͠Δɻ w࡞ۀͷʮʯͷఆٛΛڞ༗͍ͯ͠Δɻ
ݕࠪ •࡞εϓϦϯτΰʔϧͷਐḿΛසൟʹݕࠪ͠ɺ ·͘͠ͳ͍มԽΛݕ͢Δ •ݕࠪΛසൟʹߦ͍࡞ۀΛ͛ͳ͍Α͏ʹ͢Δ
దԠ •ϓϩμΫτΛड͚ೖΕΒΕͳ͍ͱݕࠪ୲ऀ͕அ ͨ͠߹ɺϓϩηεͦͷߏཁૉΛௐ͢Δ •ௐͰ͖Δ͚ͩૣ͘ߦ͏
εΫϥϜνʔϜ •ϓϩμΫτΦʔφʔ •։ൃνʔϜ •εΫϥϜϚελʔ
εΫϥϜΠϕϯτ •εϓϦϯτϓϥϯχϯά •σΠϦʔεΫϥϜ •εϓϦϯτϨϏϡʔ •εϓϦϯτϨτϩεϖΫςΟϒ
プロダクトバックログ スプリントバックログ スプリントプランニング 開発 スプリントレビュー デイリースクラム スプリントレトロスペクティブ
ΞδϟΠϧͱςετ
ΞδϟΠϧ։ൃͰͷςετҐஔ͚ •ΞδϟΠϧͰͷςετʹϑΟʔυόοΫΛಘΔ ͱ͍͏త͕͋Δ • ࣗୡ͕࡞͍ͬͯΔͷͷํੑ͍͋ͬͯΔ͔ • ࡞ͬͨͷҙਤ௨Γಈ࡞͢Δ͔ • ఆ֎ͷ͜ͱى͖ͳ͍͔ •ಈ͘ιϑτΣΞͱ࣮ͯ͠ࡍʹݟͯϑΟʔυόο
Ϋ͕ಘΒΕΔ
հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ͚۠ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը
հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ͚۠ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը
සൟͳίϛϡχέʔγϣϯ •ੵۃతͳൃݴ • ΠςϨʔγϣϯΛ௨ͯ͠ͷεςʔΫϗϧμʔνʔ Ϝϝϯόͱੵۃతʹର • ༷ʹର͢Δ࣭؍Ͱͷҙݟ • ෆेͳςετϕʔεʹରԠ͢ΔͨΊͷೝࣝ߹Θͤ •
վળͷఏҊ • ٙݒ೦ૣΊʹฉ͘ • ΠςϨʔγϣϯظؒʹґΔ͕࣌ؒͰϩε͕େ͖͍
հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ͚۠ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը
ϖΞϓϩάϥϛϯά https://ja.wikipedia.org/wiki/ペアプログラミング Driver Navigator
Ϟϒϓϩάϥϛϯά https://ja.wikipedia.org/wiki/Mob_programming Navigator Driver
खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ 作業 レビュー 作業 レビュー 時間 フィードバックが遅れると ⼿戻りが多くなりムダな作業が 多くなる
ෳਓಉ࣌࡞ۀͰͷςετ • /BWJHBUPSͰ։ൃऀͷಉ࣌ฒߦϨϏϡʔ • ςετ؍ • ࣭؍ • ͦͷଞɺΑΓྑ͍ΞΠσΞ •
ෳਓಉ࣌Ͱͷςετ࡞ۀ • ςετܭը • ςετઃܭɺςετੳ • ϋΠϨϕϧςετέʔεΛϕʔεͱͨ͠ςετ࣮ߦ • ୳ࡧతςετ
հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ͚۠ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը
ςετϑΝʔετΞϓϩʔν •ϓϩάϥϜΛ։ൃ͢ΔલʹςετઃܭΛߦ͏ • 5%%ʢςετۦಈ։ൃʣ • #%%ʢৼΔ͍ۦಈ։ൃʣ • ड͚ೖΕςετۦಈ։ൃ • ϢʔβετʔϦʔ
•࡞ۀͷୡ͢Δ͖ඪͷ໌֬Խ • είʔϓ • ࡞ۀΰʔϧ
ड͚ೖΕج४ͷ໌֬Խ •͍ΠςϨʔγϣϯͰͷΰʔϧΛ໌֬Խ͢Δ • ࣮͖͢ػೳͷ֬ೝ • ݱΠςϨʔγϣϯͰ࣮͠ͳ͍ػೳͷ֬ೝ • ୡ͢Δ͖ඇػೳཁ݅ •͜ΕΒͯ͢ςετέʔεͱඥ͘͜ͱʹͳΔ
ඇςετϑΝʔετΞϓϩʔνͱ ςετϑΝʔετΞϓϩʔν 開発 テスト設計 テスト実⾏ テスト設計 開発 テスト実⾏ テストが通るように開発を⾏う 時間
テスト設計で開発していた内容の 間違いに気が付くことがある
͍αΠΫϧͰͷ ςετϑΝʔετΞϓϩʔν テスト設計 開発 テスト実⾏ 時間 テスト実⾏で失敗すると原因の特定を⾏わなれないけない 対象となる範囲が広いと時間がかかる
https://en.wikipedia.org/wiki/Extreme_programming
http://www.agilemodeling.com/essays/costOfChange.htm
հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ͚۠ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը
ࣗಈςετ •ΞδϟΠϧͰ܁Γฦ͠ૣ͘ϦϦʔε͢Δʹࣗಈ ςετ͕ඞཁʹͳΔ •ςετΛੵΈॏͶΔͱ͍͏ߟ͑ํ • ςετͷίʔυͱಉ͡Α͏ʹੵΈॏͶ͍ͯ͘ • ࣭ͷѱ͍ςετΛੵΈॏͶͳ͍
ࣗಈςετͷׂ߹ TestPyramid https://martinfowler.com/bliki/TestPyramid.html
https://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/
୳ࡧతςετ テスト設計 テスト実⾏ 学習 フィードバック
୳ࡧతςετ •ࣝΛ࣋ͬͨςελʔ͕ߦ͏ख๏ • ςετͷٕज़ࣝ • ϓϩμΫτͷࣝ •ςετνϟʔλΛ༻ҙͯ͠ςετઃܭɺςετ࣮ ߦΛಉ࣌ʹߦ͏ •ηογϣϯϕʔεͳ୳ࡧతςετͰ͖ͬͪΓ࣌ ؒΛܾΊΔ
•ΞυϗοΫςετʹͳΒ͍ͳ͍Α͏ʹҙ͢Δ
հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ͚۠ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը
ܧଓతΠϯςάϨʔγϣϯ ・静的解析 ・コンパイル ・テスト実⾏ ・デプロイ ・レポートの表⽰ コードリポジトリ ソースコードの コミット 結果の通知
ܧଓతΠϯςάϨʔγϣϯͰͷ ϑΟʔυόοΫ •ܧଓతΠϯςάϨʔγϣϯͰɺఆظతʹ੩తղ ੳɺϏϧυɺࣗಈςετͳͲ͕࣮ߦ͞ΕΔ •࣭͕ѱ͘ͳͬͨ͜ͱΛ։ൃऀʹૉૣ͘ϑΟʔυ όοΫ͢Δ͜ͱ͕େ • ੩తղੳͷߴϨϕϧΞϥʔτͷ૿Ճ • ࣗಈςετͷࣦഊ
•ܯࠂΛड৴ͯ͠ɺܯࠂΛ์ஔ͠ͳ͍͜ͱ͕େ
ׂΕ૭ཧ 「建物の窓が壊れているのを放置すると、誰も注意を払っていないという象徴になり、 やがて他の窓もまもなく全て壊される」という考え⽅ https://ja.wikipedia.org/wiki/割れ窓理論 継続的インテグレーションの静的解析やテスト実⾏失敗のアラートを無視し続けると その状況は蔓延していく
հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •खΓΛݮΒͨ͢Ίͷෳਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ͚۠ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը
スプリント ΠςϨʔγϣϯͱςετܭը スプリントゼロ スプリント スプリント (リリーススプリント)
εϓϦϯτθϩ •࡞͢ΔγεςϜΛཧղ͢Δ •ϓϩμΫτͷϦϦʔεܭըΛ֬ೝͯ͠શମͷςε τܭըΛߟ͑Δ •ϢʔβετʔϦʔͷଥੑΛ֬ೝ͢Δ •༻͢ΔπʔϧڥΛ४උ͢Δ •ϦεΫੳΛߦ͏
εϓϦϯτ •εϓϦϯτͰ࡞͠Α͏ͱ͍ͯ͠Δͷͷ ςελϏϦςΟΛߟ͑Δ •εϓϦϯτͰͷςετܭըΛߦ͏ •εϓϦϯτͰͷϦεΫੳΛ࣮ࢪ͢Δ •ςετ؍ɺ࣭؍Ͱͷҙݟग़͠Λߦ͏
εϓϦϯτΛ௨ͯ͠ͷςετ •શମΛ௨ͯ͠ͷςετܭըΛৗʹݟ͢ •:"(/*Ͱ࣮ݱ͞Ε͍ͯͳ͍ͷΛ͍࣮ͭݱ͢Δ ͔ߟ͑Δ ˞:"(/*:PVBJObU HPOOB OFFEJU ඇػೳཁ݅ͳͲޙճ͠ʹͳΓ͕͕ͪͩɺͲͷ͘ Β͍ͷ࣌ظͷεϓϦϯτͰղܾ͖͢ͳͷ͔Λ໌ ֬ʹ͢Δ
•ϦϦʔεલ·ͰʹΔ͖͜ͱΛݕ౼͢Δ ผ్ɺϦϦʔεεϓϦϯτΛઃ͚Δ͔ݕ౼͢Δ
ϫʔΫ
લఏ •ΞδϟΠϧʹܾ·ͬͨϓϩηε͋Γ·ͤΜɻ •ࣗͨͪͰࣗୡʹ͋ͬͨϓϩηεΛݟ͚ͭͯߦ ͘͜ͱ͕େ
ৼΓฦΓϫʔΫ •ΞδϟΠϧએݴͱɺͷݪଇΛݩʹࣗͷۀ ͷΓํΛݟͯ͠ΈΑ͏ •ͲΜͳখ͞ͳࣄͰ͍͍ͷͰɺվળΛݟ͚ͭΑ ͏ • ݸਓϫʔΫ • άϧʔϓڞ༗
/&95
%FW0QT https://ja.wikipedia.org/wiki/DevOps
ϚΠΫϩαʔϏεΞʔΩςΫνϟ https://microservices.io/
ࢀߟจݙ • 'PVOEBUJPO-FWFM&YUFOTJPOγϥόε ΞδϟΠϧς ετ୲ऀ IUUQKTURCKQEM+452#4ZMMBCVT'PVOEBUJPO "HJMF&YU@7FSTJPO+QEG • ΞδϟΠϧιϑτΣΞ։ൃએݴ IUUQTBHJMFNBOJGFTUPPSHJTPKBNBOJGFTUPIUNM
• ΤΫετϦʔϜϓϩάϥϛϯά ΦʔϜࣾ • εΫϥϜΨΠυ IUUQTXXXTDSVNHVJEFTPSHEPDTTDSVNHVJEF W4DSVN(VJEF+BQBOFTFQEG