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 Iterative Development: Lessons from 2...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yasunobu Kawaguchi
PRO
September 16, 2023
Technology
7k
23
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Agile and Iterative Development: Lessons from 20 Years of Ninja-style Testing
Yasunobu Kawaguchi
PRO
September 16, 2023
More Decks by Yasunobu Kawaguchi
See All by Yasunobu Kawaguchi
Claude Code x Accounting
kawaguti
PRO
1
360
Every Conversation Counts
kawaguti
PRO
0
380
Why we keep our community?
kawaguti
PRO
1
880
Scrum Fest Morioka 2026
kawaguti
PRO
3
1k
Claude Code for NOT Programming
kawaguti
PRO
2
450
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
3
460
Git in Team
kawaguti
PRO
4
690
from Sakichi Toyoda to Agile
kawaguti
PRO
2
260
Agile PBL at New Grads Trainings
kawaguti
PRO
1
1.6k
Other Decks in Technology
See All in Technology
Mastering Ruby Box
tagomoris
3
150
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
1.8k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
50k
Unlocking the Apps
pimterry
0
250
protovalidate-es を導入してみた
bengo4com
0
140
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
210
EventBridge Connection
_kensh
4
620
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
290
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
0
230
生成 AI × MCP で切り拓く次世代 SRE!自律型運用への挑戦と開発者体験の進化
_awache
0
160
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
430
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
760
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
The Spectacular Lies of Maps
axbom
PRO
1
790
The Cost Of JavaScript in 2023
addyosmani
55
10k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Side Projects
sachag
455
43k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
380
Navigating Weather and Climate Data
rabernat
0
210
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
アジャイルと反復開発 ~忍者式テスト20年の実践から~ キヤノンメディカルシステムズ株式会社 深谷美和 関将俊 September 2023
➢ 私たちのチームはX線CT装置をXPで開発しています ➢ 反復開発に有効なプラクティス「忍者式テスト」を紹 介し、20年以上にわたるアジャイル開発の豊富な経 験から、反復開発をうまくやるためのヒントを伝えます 今日の話 2 XP:エクストリームプログラミング September
2023
➢ 深谷美和 ⚫ 医療機器(自社製品)のソフトウェア開発に従事 ⚫ eXtremeなチームのテスター ⚫ 動かして試すのが好き ➢ 関将俊
⚫ 医療機器(自社製品)のソフトウェア開発に従事 ⚫ eXtremeなチームのプログラマ ⚫ Ruby Core Committer 私たちについて 3 September 2023
➢ SS2023 ⚫ 忍者式テスト基礎編 • 「テストからはじめよ」~忍者式テスト20年の実践から~ • https://www.sea.jp/ss2023/programme.php ➢ SQiP2023
⚫ 忍者式テスト応用編(反復開発をうまくやるためのヒント) SS2023/SQiP2023 4 September 2023
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 5 September 2023
➢ ソフトウェア開発 ⚫ 企画・仕様、設計の問題を、その工程で見つけるのは難しい ⚫ 試さずに会議やレビューだけですべての問題を発見するのは難しい ⚫ 試してみたほうが効率が良い(ソフトウェアの特徴のひとつ:安く試せる) 大規模ソフトウェア開発の難しさ 6
September 2023 不具合の原因工程と不具合の発見工程 (独立行政法人情報処理推進機構 2012 年度「ソフトウェア産業の実態把握に関する調査」 調査報告書 pp. 78 2013)
➢ 大規模開発は作り出す工程と確認する工程が離れてしまう ⚫ プロジェクトの最終段階で問題が見つかっても対策が間に合わない ⚫ 確認する工程でより良い仕様や設計を思いついても対応できない 大規模ソフトウェア開発の難しさ 7 September 2023
小規模開発 大規模開発
➢ 反復開発 ⚫ 大きな要求を数日程度の小さな単位にわけて開発する ⚫ 確認する工程をより早く、ぎりぎりまで仕様や設計を調整できるようにする ⚫ 反復開発の利点 • 一度に扱うスコープが小さいので細部にまで目が届きやすくなる
• 次のV字に前回のV字で発見した問題や違和感、知見をフィードバックできる 大規模ソフトウェア開発の難しさ 8 t September 2023
➢ 頻繁にシステムテスト、運用・実機テストを実施しなくてはならない ⚫ 新しい反復により改定された仕様の確認 ⚫ それまでに搭載されたものがすべて問題なく動作することの確認 大規模ソフトウェア開発の難しさ 9 t September
2023 小規模開発なら最後に1回やればよかったのに・・・
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 10 September 2023
➢ テスト駆動開発(TDD)を受け入れテストのレベルで行うプラクティス ⚫ xUnitを使ったTDDのように、受け入れテストからはじめる開発 ⚫ テストコードに導かれてプログラムを開発するように、受け入れテストに導かれてストー リーを実現する ⚫ ストーリーが増えるたびに、それまでに作ったすべてのストーリーの受け入れテストをやり 直す
忍者式テスト 11 September 2023 名前は「テスト」ですがテストだけでなく、ソフトウェア開発全体の活動です
➢ 受け入れテストからはじめる ⚫ どう作るのか?ではなく、どう試すのか?から考える • どう試せば、ユーザーが困っていることが解決できたと分かるのか • どう試せば、意図したとおりに作れたと言えるのか ⚫ テストを起点として、ソフトウェア開発全体を考え、問い続ける
• 本当によいシステムとなっているのか? 忍者式テスト 12 September 2023 命名の由来:忍者が毎日成長する麻や竹の上を飛び越える修行に由来。毎日増えるテストケースの束を毎日全部やり直す様子が似ている
【図解】忍者式テスト 13 September 2023 実際の開発では1イテレーションで複数のストーリーを扱っている Day1 V1 Story1
【図解】忍者式テスト 14 September 2023 実際の開発では1イテレーションで複数のストーリーを扱っている Day1 V1 Story1 Day2 V2
Story2
【図解】忍者式テスト 15 September 2023 実際の開発では1イテレーションで複数のストーリーを扱っている Day1 V1 Story1 Day2 V2
Day3 V3 Story2 Story3
➢ ストーリーはXPなどのアジャイル開発で製品を変更する単位 ⚫ 受け入れテストで確認する ⚫ ユーザーにとってシステムがどのように変化するか ➢ 製品はたくさんのストーリーの集まりでできている 忍者式テスト 16
September 2023
➢ ストーリーはチケットで管理している ⚫ 概要、要求の背景 ⚫ テストケース • システムの具体的な変化と確認方法 ⚫ 開発日記
• 毎日の試行錯誤の様子、実験した内容や結果 など • 設計や実装の根拠がわかる ➢ ストーリーは数日で完成する大きさ ⚫ 大きな要求を適切な大きさのストーリーに変換するのは技術と訓練が必要 ➢ 開発中に見つけたバグもストーリーと同様に扱う 忍者式テスト 17 September 2023 開発日記は毎朝全員で読み合わせている(その様子は設計レビューに近い)
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 18 September 2023
➢ 「スクラムはうまくできているのに、開発がうまくいかない」 ⚫ V字の底あたり(ソフトウェア設計、実装・デバッグ)をずっとやっている ⚫ 複数イテレーションのあとに、テスト担当がまとめて受け入れテストする アジャイル開発がうまくいかないケース 19 September 2023
t
➢ 「スクラムはうまくできているのに、開発がうまくいかない」 ⚫ V字の底あたり(ソフトウェア設計、実装・デバッグ)をずっとやっている ⚫ 複数イテレーションのあとに、テスト担当がまとめて受け入れテストする アジャイル開発がうまくいかないケース 20 September 2023
作業は進んでいるように見えるが、製品としては試せてないので、作業の確からしさはわからないまま進んでいる t
➢ 「スクラムはうまくできているのに、開発がうまくいかない」 ⚫ V字の底あたり(ソフトウェア設計、実装・デバッグ)をずっとやっている ⚫ 複数イテレーションのあとに、テスト担当がまとめて受け入れテストする アジャイル開発がうまくいかないケース 21 September 2023
プログラミングに近い領域をイテレーションに区切っただけで、大きな1つのV字の開発と変わらない t
➢ 反復ごとにV字のすべてのステップを行う ➢ 全員が開発者 ⚫ すべての工程を行うプログラマー ⚫ プログラミング以外のすべての工程を行うテスター 私たちのチーム 22
September 2023 t
➢ よい製品になっているかどうかに興味がある ⚫ 短い周期でできばえを見たい → 反復ごとの受け入れテスト ⚫ 短い周期で製品の仕様や設計をチューニングしたい ⚫ ぎりぎりまで製品を磨きたい
私たちのチーム 23 September 2023 作業の進捗は「製品」で見るぜ!という態度です t
➢ よい製品になっているかどうかに興味がある ⚫ 短い周期でできばえを見たい → 反復ごとの受け入れテスト ⚫ 短い周期で製品の仕様や設計をチューニングしたい ⚫ ぎりぎりまで製品を磨きたい
私たちのチーム 24 September 2023 t
ストーリーを考えるときのヒント 25 September 2023 「じわじわ開発」に陥ってしまい困っているチームへのアドバイス
➢ 「スクラムはうまくできているのに、開発がうまくいかない」 ⚫ V字の底あたり(ソフトウェア設計、実装・デバッグ)をずっとやっている ⚫ 複数イテレーションのあとに、テスト担当がまとめて受け入れテストする じわじわ開発を誘う要因 26 September 2023
t
➢ ストーリーを複数のタスクで構成することが多いのでは? ⚫ すべてのタスクが揃わないとストーリーを試すことができない ➢ 結合を先延ばしにするスタイル ストーリーを入れ子のチケットにしている 27 Story Task
1 Task 2 Task 3 Task 4 September 2023 作業は進んでいるように見えるが、部品ばかり作っていて製品では確認できていない t
➢ ストーリーを入れ子にしない ⚫ ストーリーを複数のタスクに分けるのではなく、ストーリー自体を小さくする ⚫ 小さな変更であってもシステム全体でできばえを確かめる ➢ 絶えず結合するスタイル 私たちのチーム 28
September 2023 製品で確認したものだけを進捗として考える t Story Story Story Story
➢ ストーリーを入れ子にしない ⚫ ストーリーを複数のタスクに分けるのではなく、ストーリー自体を小さくする ⚫ 小さな変更であってもシステム全体でできばえを確かめる ➢ 絶えず結合するスタイル 私たちのチーム 29
September 2023 t Story Story Story Story これができないと「じわじわ開発」に陥ってしまう
ケーススタディ:レポートを表示する 30 Base System Report Base System Report Close Report
September 2023 入れ子にする作戦と入れ子にしない作戦を見ていきましょう
レポート機能を作ってからシステムに統合する作戦 31 t ➢ ストーリーを複数のタスクで構成する Story September 2023 入れ子にする作戦
レポート機能を作ってからシステムに統合する作戦 32 t ➢ 各タスクで部品を作る Story September 2023 それぞれのタスクがうまくできたかどうかは一番最後の受け入れテストまでわからない
レポート機能を作ってからシステムに統合する作戦 33 t ➢ 部品がすべて揃ったらシステムと結合してレポート機能を確認する Story September 2023 ここまできてやっと各タスクがうまくできたかどうかがわかる
私たちのストーリーの作り方 34 September 2023 入れ子にしない作戦 ➢ 「システムで試せる一番小さな変化はどこか」 を考える
➢ 「既存のシステムにボタンをつけて中身のない画面を表示する」から開始 システムで試せる一番小さな変化はどこか 35 Story t Base System Report Base
System Report Close September 2023 完璧な「中身のない画面」を作るぞ!
➢ 「既存のシステムにボタンをつけて中身のない画面を表示する」から開始 システムで試せる一番小さな変化はどこか 36 t Base System Report Base System
Report Close September 2023 こんなに小さな変化でも考えることがたくさんあります ✓ システム側が機能を拡張できるようになっているか ✓ どんなときに起動できるのか ✓ 終了したらどんな画面になっているべきか ✓ 起動に関わる設定ファイル(システム全体、機能別) ✓ 起動方法をどうするのか(メニュー、ボタン) ✓ 二重起動を許す(制御方法)/許さない ✓ ウィンドウのZオーダー、モーダル/モードレス ✓ 画面(ウィンドウ/ダイアログ)が動く/動かない ✓ スクリーンセーバーなどが動いたときの挙動 ✓ キーボードショートカットの割り当て ✓ 他の機能との並行動作 ✓ 機能の起動中にできることはなにか ✓ 起動中にシステムを終了したらどうなるのか ✓ システムを再起動したときどうなってほしいか Story
➢ 「既存のシステムにボタンをつけて中身のない画面を表示する」 ⚫ 中身のない画面を表示してもシステムが壊れないことは価値である ⚫ 最初からシステムに統合した状態で開発ができるのは価値である ⚫ 懸念点を実際にシステムで確かめられたことは価値である 小さな変化に価値があるのか 37
September 2023 「価値」があるのだろうか・・・と、不安にならなくても大丈夫!
➢ ユーザーの視点で書かれたストーリーをそのまま扱わなくてもよい ⚫ ストーリーをシステムや実装や製品のドメインの視点で解釈しなおす ⚫ ユーザーに見えているものだけで考えると開発の実体に合ってないことがある ➢ どんなに小さなストーリーでも守ること ⚫ システム全体で試せるようにストーリーを作る
⚫ ストーリーのテーマの中での完璧を目指す ⚫ ストーリーを搭載してもシステムを破綻させない ストーリーを作るときのヒント 38 September 2023 システムで試せる一番小さな変化はどこか
➢ 試し方が思いつかない ➢ ストーリーがなかなか完成しない ➢ 制約が多すぎて本来のストーリーのテーマが試せない ➢ ストーリーの分割や順序が適切でないかもしれない ➢ 計画の見直しやストーリーを再構築してみよう
こんなシグナルがあがったら 39 September 2023 ストーリーの作り方が間違っていることも早く分かって便利!
➢ 既存のシステムにボタンをつけて中身のない画面を表示する システムで試せる一番小さな変化はどこか 40 Story t Base System Report Base
System Report Close September 2023 システムで試せる一番小さな変化はどこかな?
システムで試せる一番小さな変化はどこか 41 Base System Report Base System Report Close Story
Close Report t September 2023 完璧な「中身のない画面」 +完璧な「レイアウト」 ➢ レイアウトを表示する
システムで試せる一番小さな変化はどこか 42 Base System Report Base System Report Close Story
Close Report t September 2023 完璧な「中身のない画面」 +完璧な「レイアウト」+完璧な「グラフ」 ➢ グラフを表示する
システムで試せる一番小さな変化はどこか 43 Base System Report Base System Report Close Story
Close Report t September 2023 完璧な「中身のない画面」 +完璧な「レイアウト」+完璧な「グラフ」 +完璧な「画像」 ➢ 画像を表示する
システムで試せる一番小さな変化はどこか 44 Base System Report Base System Report Close Story
Close Report t September 2023 完璧な「中身のない画面」 +完璧な「レイアウト」+完璧な「グラフ」 +完璧な「画像」+完璧な「計測値」 ➢ 計測値を表示する
➢ 小さな変更でもシステムで結合して試す ➢ 結合は混乱を伴うが、すこしずつ結合することで混乱を小さくできる ➢ 難しくてもやる(難しいからやる) システムと結合する難しさを後回しにしない 45 September 2023
大量の結合は混乱をまねきます(ビックバン)
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 46 September 2023
➢ バグを見つけたら原因がわかるまではストーリーの開発を止める ⚫ 見かけの現象だけで深刻さを判断しない ⚫ バグは問題の一部分が見えただけに過ぎないので本当の問題を探す ➢ 後回しにするとバグがある状態で開発することになり、速度が落ちる ⚫ バグを避けて開発/テストしなければならない
⚫ バグがどんどん増える状態になる バグの修正を後回しにしない 47 September 2023 バグを直す過程でシステムの理解が深まる→ さらに開発がうまくなる
➢ 調速装置 ⚫ チームが一度に作れる量には限界があり、限界を超えると問題が増える ⚫ 問題解決を優先し、ストーリーの開発量を減らすと、徐々に問題の量が減っていき、 再び、ストーリーの開発量を増やせる • 適切な開発速度に自然に調整される ➢
心配容量は一定 ⚫ いまある問題を解決しなければ、もっと高度な問題を見つけられない ⚫ チームで扱える心配の量は一定 バグの修正を後回しにしない 48 September 2023
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 49 September 2023
➢ 大きなシステムは全員同じペースではないかもしれない ➢ ペースの違いから衝突が起こりがち ⚫ サブシステム別チーム ⚫ ソフトウェアとハードウェア ⚫ 自分のチームととなりのチーム
ペースの違いをどう考えるか 50 September 2023 小さなシステムの話ではないです
➢ 私たちのチーム ⚫ 人数が多く、1イテレーション中に作るストーリーも多い場合、つまり、十分複雑な開 発をしている場合、ストーリーの完了が揃わない ⚫ 無理にイテレーションの切れ目に合わせると待ちばかりになってしまう。ほどほどでいい 人数が多いと全然あわない 51 September
2023 イテレーションは番地になった
➢ 結合した状態で確認するという原則を守っていれば、ノイズ程度 ➢ まだ結合してない部分は「何か問題があるかも」と認識しておく ➢ チーム間でも反復がきれいに揃うことは重要でない 実はペースを混ぜても大丈夫 52 September 2023
自分たちの経験からそう言える
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 53 September 2023
【図解】忍者式テスト 54 September 2023 これは初日から3日間の様子ですが、これが1か月、1年になると・・・ Day1 V1 Story1 Day2 V2
Day3 V3 Story2 Story3
たいへんなことになります 55 September 2023 でもやるんだよ Day n+1 Vn+1 Story n+1
Day n+2 Vn+2 Day n+3 Vn+3 Story n+2 Story n+3 Day n Vn Day n+ Vn+4 Story n+4
➢ 直近の変更は早く確かめたい/すべてのテストケースを確かめたい ➢ 一日ではなく、ある期間でテストケースをすべて回す作戦に切り替えた ➢ まんべんなく、かつ、効果の高いテストケースを抽出するアルゴリズムの開発 ⚫ 新しいストーリー、修正したばかりのチケットのテストケースを最優先 ⚫ 前回のテスト結果がパスしたテストケースの出現頻度を徐々に落とす
⚫ 開発の状況に応じて機能ごとに出現頻度を調整 ⚫ ある期間で見ると、すべてのテストケースが実行できる ➢ アルゴリズムにより抽出した今日のテストスイート → 「本日のおすすめテスト」 ⚫ 一日にできそうな量のテストケースしか表示しない(量に圧倒されないようにする) 規模と向き合う 56 September 2023 次は、20年分のテスト実施の記録を見てみましょう
テスト実施の記録(20年分) 57 営業日 チケット番号 September 2023 NGの点はよく見えるように強調しています
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 58 September 2023
開発の難しさに釣り合うように、チームの開発能力も向上 59 ⚫ チケットの数がリニアに増えている ⚫ システムが複雑になり、要求も高度になっているが 同じペースで開発している ⚫ 規模が大きくなっても変更コストは一定である チケット番号
営業日 想定される線 September 2023 NGの点はよく見えるように強調しています
➢ 難しそうな問題も躊躇せずに修正できるようになった ➢ 不具合や性能などの実装レベルの問題に積極的に対応できるようになった ➢ 直せる幅が広がった ➢ 理想の製品をイメージして、それとの差分も積極的に探しだす者が現れた ➢ 全員がずっと「良い製品とは何か」を問いながら開発するようになった
➢ あとからチームに参加した開発者にも同様の変化が起きた ➢ この効果が開発能力の向上に寄与している 忍者式テストの効果 60 September 2023
➢ 大規模ソフトウェア開発の難しさ ➢ 忍者式テスト ➢ 反復開発をうまくやるには ⚫ ストーリーを考えるときのヒント ⚫ バグの修正を後回しにしない
⚫ ペースの違いをどう考えるか ⚫ 規模と向き合う ➢ 忍者式テストの効果 今日の話 61 September 2023
➢ 結合して試すのを後回しにしない ➢ 後回しを誘う入れ子を避ける ➢ 「システムで試せる一番小さな変化はどこか」を探す ➢ すぐに結合して試せるよう小さなストーリーに解釈しなおす ➢ バグの修正を最優先にしても開発のペースは遅くならない
➢ 大規模で複雑になると完成のペースが揃わなくなるが無理に同期しなくてもよい ヒントのまとめ 62 September 2023
患者さんのために、あなたのために、そして、ともに歩むために。 人々の健やかな生活の実現のために、「いのち」と向き合う。 「Made for Life」はキヤノンメディカルシステムズの経営理念を象徴するスローガンです。