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
[DevLove甲子園2014]インクリメンタルに設計・テストする スクラム初心者が取り組ん...
Search
Yasushi Hagai
August 23, 2014
0
44
[DevLove甲子園2014]インクリメンタルに 設計・テストする スクラム初心者が取り組んだ『中身』の話し
DevLove甲子園2014西日本大会
Yasushi Hagai
August 23, 2014
Tweet
Share
More Decks by Yasushi Hagai
See All by Yasushi Hagai
[ひとやさ] LEAN CHANGE MANAGEMENTをちょっと紹介
yas_hag
0
35
[ひとやさ]Team Decision Matrix
yas_hag
0
540
[スクフェス札幌2020]未経験者中⼼のチームとベテラン中⼼チーム Management 3.0 のプラクティスはどう作⽤したのか
yas_hag
1
3.7k
[名古屋アジャイル]因果関係図で問題の根本原因を突き止めよう
yas_hag
0
170
[DevLove Nagoya]Burnin’ Scrum始めました
yas_hag
0
28
[名古屋アジャイル]モデリング X アジャイル
yas_hag
0
49
Featured
See All Featured
Side Projects
sachag
452
42k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Into the Great Unknown - MozCon
thekraken
32
1.5k
How GitHub (no longer) Works
holman
310
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Designing for humans not robots
tammielis
250
25k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
For a Future-Friendly Web
brad_frost
175
9.4k
Automating Front-end Workflow
addyosmani
1366
200k
Transcript
インクリメンタルに 設計・テストする Aug 23 2014 Yasushi Hagai DevLove甲⼦園2014⻄⽇本⼤会 1 スクラム初⼼者が取り組んだ『中⾝』の話し
⽻飼 康(ハガイ ヤスシ) フリーランス DevLove名古屋スタッフ 名古屋アジャイル勉強会スタッフ @onestepbeyond_y 2
どんな話し︖ • スクラムで受託開発案件 • アジャイルプラクティス的な 話しはほぼナシ • どんなふうに設計・テストし たかというお話 •
割と普通ですすいません 3
スクラムで受託開発 4
納品のある受託開発案件 • 中⼩企業の基幹システム • 既存システム(vb6でOracle8)のリプレイス • ⼩規模 • 既存システムの事はよく知っている •
それなりの精度で⾒積もれる 5
アジャイルでやろうと思った • こういう(ある想定)メンバーで • 無駄な作業しないで • 常に最適化しながら 6 こんなふうにお仕事したら⼯数は半分以下 にはなるよなぁって⽇頃から思っていた
まじめに学んだ • 本を読む • 勉強会に参加 • SCRUM BOOT CAMP •
CSM研修 • ウマイやりかただと確信 7
チームメンバー⼀本釣り • メンバーA︓ – 広い知識 – アジャイルの事も良く知っている – アジャイルやったことはない •
メンバーB︓ – まじめ – アジャイルの事は良く知らない 8
まずはみんなでお勉強 • アジャイル、スクラムの事 – 『スクラム⼊⾨』とか使って説明 – 少なくともスクラムのやり⽅は理解する – マルチタレントになろう︕ •
技術的な事 – ビルド、テスト⾃動化、CI – 使う要素技術についてなどいろいろ 9
こうやってやることにした #1 • スクラムする – まずは“教義”を守る • スプリント計画(1,2) • デイリースクラム
• スプリントレビュー • ふりかえり • タスクボード • バーンダウンチャート • ベロシティの計測 • Etc. 10
こうやってやることにした #2 • 少⼈数でやりきる仕掛け – CI (Jenkins) – JavaScriptのUnit Testも⾃動化(PhantomJS)
– 体裁より中⾝ • モデリングツールのファイルを成果物とする • 美しく紙にならなくてもいい 11
だけど少し⼼配になったこと • 近い(⼩さい)ゴールに向かって作ることを繰 り返すことはとても効率が良さそうだけど全体 の俯瞰を忘れそう 12
沢⽥マンションになっちゃったら… 13
要求︓なにを作る︖ 14
幸いに作るべきモノは明確だった • リプレイスということもあり迷⾛せず • 現状業務の変えたいところ • 既存システムの変えたいところ を押さえれば基本的にはOK 15
バックログは普通にユーザーストーリー •As a 誰 •I want to なにする •So that
ビジネス価値 16
最初は正直ピンと来なかったけど • 既存システムを使った業務からユーザー ストーリーを起してみるとそれなりに使 えるかなと – よくある要求列挙の「〜できること」という書き⽅ より優れている点は • 誰がそうしたいんだっけ︖
• なんでそうしたいんだっけ︖ ってならない事 17
ユーザーストーリーを整理 • ストーリーの分類・パッケージ分けをす る – 基本的にはあらかじめ分類・整理されている はずだが改めて確認する 18
ユーザーストーリーの背後にあるものに注⽬ • パッケージ間依存・ストーリー間依存に 注⽬する – 依存関係は無いほうが良いが実際にはある 19
設計︓どう作る︖ 20
ユースケースモデリング • ユースケースを使って、ユーザーストーリーを システムの振る舞いとして表現する • 1Storyで1〜数個のユースケース • アクターはストーリーの “as a”から
• ユースケースも依存性をチェック • ユースケースもパッケージに分けて組織 化する 21
ユースケース図って⼤事 • システムを使って誰が何するかを簡単に 確認できる • 単なる⽬次では無く、ユースケース間の 依存関係も定義する • モデリングツールの機能を使ってスプリ ント毎に増えてゆくユースケース間の関
連を確認する 22
ユースケース間の関連が ややこしくなっていたら • ユースケース図で先⾏関係等を表現 • あまりにややこしい依存・関連がある場 合、その業務を回すことは困難かもしれ ない 23
ユースケースシナリオはもっと⼤事 • 実際の業務で使われている⾔葉でアクターと システムの振る舞いを記述 • 例外シナリオを抽出 • ユーザとシステムの対話の両側を記述 • 名詞
ー 名詞 ー 動詞 のスタイルで記述 1. 担当者はアレをどうする 2. システムはソレをこうする • これが作る物の元ネタとなり、テストの元 ネタとなる 24
こんなシナリオは危ない • やたら⻑い • 例外シナリオが多すぎ ユースケースの分割を検討しよう︕ 25
⻑くてややこしいシナリオって 26 沢⽥マンション化の 予兆かもしれない
ドメインモデリング • ユースケースシナリオで使われている⾔ 葉を使って、静的構造をモデリングする • このドメインモデルが、全体を俯瞰でき るとても重要なビッグピクチャとなる • ⽇々育ってゆく物であるが故に、気をつ けないと重複、⽭盾が⽣じる
27
ドメインモデリングで • 今作っている物が沢⽥マンションになっ ていないかをチェックしよう︕ 28
ドメインモデル ⇔ 実装 • モデリングに時間をかけすぎない • 実装時にモデルのまずさに気づくことが ある – 実装が困難なモデル
– 実装の都合に合わないモデル • そんなときはまたモデリングに戻る • モデルとコードの間を⾏ったり来たり • 実装できないモデルは無価値 29
インクリメンタルに設計するということ • 新たなストーリーが『加わる』ことが全 体の設計にどう影響するのかを常に チェックする • 沢⽥マンション化するくらいなら⼿戻り のほうが良い • 実際それほど⼤変な物では無かった
30
• どう作られているかを残す – 次への備えが第2のゴール • 第1のゴールは動くソフトウェア • ウソを残さない – 実装との乖離はちゃんと埋めようね
31 納品のある受託開発なので 作り終えたら チームは解散する 設計を『残す』ということ
活躍した道具 • 両⾯ホワイトボード • モデリングツール • プロジェクター • ホワイトボードはメンバーの近くに •
プロジェクターはいつでも使える位置に 32
テスト 33
最初に 全⼿動はムリ︕ 34 • ストーリーがテストされてDone • でも次のスプリントでまたそこ触るかも ね • 何度もテストをサクッとやりたい
まずは普通にUnit Test • JavaのコードはJunitでテスト • Java ScriptはSiestaというフレームワーク • CI利⽤(Jenkins) •
PhantomJSを使ってJSのテストもCI上で • プロジェクトが進んでゆけばテスト量が 増えるので実⾏時間も⻑くなる 35
ストーリーはどうテストする︖ • ストーリーにぶら下がってるユースケー スのシナリオをテスト – ユーザーストーリーはテスト仕様の元ネタと してはざっくりしすぎている 36
それ⾃動化したの︖ • ユースケース毎のテストを⾃動化 – Siesta利⽤ • ⼀気に複数のユースケースのテストを流せるよ うにはなっていなかった(半⾃動) – すればよかったと思う
• テストデータの準備からテスト結果の保 存まで⾃動化できたらステキね 37
UIテストの⾃動化は⼤変︖ • はい、⼤変 • でも⼿動でちゃんと網羅するのはもっと ⼤変 38
活躍した道具 • Junit • Siesta – Java Scriptのテスティングフレームワーク • Jenkins
• TestLink – テスト計画/実⾏結果管理 39
まとめ 40
やってみてどうだったの︖ • 実はそんな迷⾛せず、わりと普通にでき ました – 対象の業務をよく知っていた – そもそも移⾏前のシステムの担当者が私 • ⼩規模で少⼈数だったので意思疎通もス
ムース • ⼤規模の場合は⼤変そう 41
沢⽥マンションの恐怖 • 沢⽥マンションを設計してしまうという ことはアジャイルでもウォーターフォー ルでもあり得る • ただしウォーターフォールの場合は、実 装フェーズに⼊っていなければそれはま だ絵に描いた沢⽥マンションである •
しかしアジャイルの場合は絵である期間 が短い – すぐ作っちゃうからね 42
インクリメンタルに設計する 中で『沢⽥マンション化』の においを嗅ぎ取れ︕ 43
⽊も森も⾒る • ⽬の前のバックログに追われながらも全 体を⾒ることを忘れてはならない • ⽇々⼤きくなる森の姿を毎⽇眺める 44
便利な道具を使いこなす • ホワイトボード • モデリングツール • テスティングフレームワーク • CI •
ITS/BTS 45
いろいろ⾔いましたが 46 沢⽥マンション好きです 住みたいし
Q&A 47
ありがとうございました 48