demystifying agile software development

158
角谷 信太郎 KAKUTANI Shintaro; Eiwa System Management,Inc. (株)永和システムマネジメント [email protected] 第6回プログラマーズカンファレンス; 2009-11-13(金) アジャイルな ソフトウェア開発 の基本と実践 Demystifying Agile Software Development

Upload: eiwa-system-management-inc

Post on 30-Oct-2014

1.572 views

Category:

Business


1 download

DESCRIPTION

2009-11-13, bandainamcogames

TRANSCRIPT

Page 1: Demystifying Agile Software Development

角谷 信太郎KAKUTANI Shintaro; Eiwa System Management,Inc.

(株)永和システムマネジメント [email protected]

第6回プログラマーズカンファレンス; 2009-11-13(金)

アジャイルなソフトウェア開発の基本と実践Demystifying Agile Software Development

Page 2: Demystifying Agile Software Development

角谷信太郎kakutani.com!"!#$"%&'()*+,-./

Page 3: Demystifying Agile Software Development
Page 4: Demystifying Agile Software Development

角谷 信太郎! 日本Rubyの会理事! RubyKaigi! Regional RubyKaigi! アジャイル関連技術書翻訳

Page 5: Demystifying Agile Software Development
Page 6: Demystifying Agile Software Development

提 供

情報化技術を通じて社会と共生する

Page 7: Demystifying Agile Software Development

永和システムマネジメント!受託開発の会社です! ゲームは未経験ですが業務システムは得意です :)

!Rubyのお仕事承ります! JRubyでの納品実績もあります

!アジャイルな開発のご支援! 認定Scrumマスターが4人います

Page 11: Demystifying Agile Software Development

“5つの世界”!パッケージ!インターナル!組み込み!ゲーム!使い捨て

Page 12: Demystifying Agile Software Development

“5つの世界”!パッケージ!インターナル!組み込み!ゲーム!使い捨て

Page 13: Demystifying Agile Software Development

ゲーム開発のことはさっぱりわからない

Page 14: Demystifying Agile Software Development

The Nature of

Software

Page 16: Demystifying Agile Software Development

Nature of Software1.人とソフトウェアのあいだに価値がある

2.“システム”全体を構成する3.変更に対応できることが求められている

Page 17: Demystifying Agile Software Development

人とソフトウェアのあいだに価値がある!使うことで価値が生まれる!使ってみないとわからない!使ったからといってわかるとも限らない

Page 18: Demystifying Agile Software Development

“システム全体”を構成する!ハードウェア!実行環境!ドキュメント!保守・運用プロセス!使う人

Page 19: Demystifying Agile Software Development

変化に対応できることが求められている!実際そうなのかは別として!ソフトウェアは育てるもの! “技術的負債”との格闘! Technical Debt

Page 20: Demystifying Agile Software Development

Nature of Software1.人とソフトウェアのあいだに価値がある

2.“システム”全体を構成する3.変更に対応できることが求められている

Page 22: Demystifying Agile Software Development

最後に出てくるケーススタディがゲーム開発だったり

Page 23: Demystifying Agile Software Development

今日は違いを気にするよりも似てるところや同じところを見つけてもらえるといいなと思ってます。

Page 24: Demystifying Agile Software Development

よろしくお願いします

Page 25: Demystifying Agile Software Development

角谷 信太郎KAKUTANI Shintaro; Eiwa System Management,Inc.

(株)永和システムマネジメント [email protected]

第6回プログラマーズカンファレンス; 2009-11-13(金)

アジャイルなソフトウェア開発の基本と実践Demystifying Agile Software Development

Page 26: Demystifying Agile Software Development

あまり一般的な話をしても面白くないと思うので(本に書いてあることは本を読めば良いので)背景にある考え方を話します

Page 27: Demystifying Agile Software Development

! アジャイル開発はソフトウェアの本質に逆らわない

! 人が中心ということを忘れてはいけない

! 名前に惑わされてはいけない

まとめ

Page 28: Demystifying Agile Software Development

The Nature of

Software

Development

Page 33: Demystifying Agile Software Development

鋼鉄の三角形

Page 34: Demystifying Agile Software Development

品質

Page 36: Demystifying Agile Software Development

“いち開発者である自分には企業資産(つまりコードベース全体)の価値を低下させるような権限はない

ーーVenkat & Andy『アジャイルプラクティス』

Page 38: Demystifying Agile Software Development

品質スコープ(フィーチャ、機能)

Page 39: Demystifying Agile Software Development

品質スコープ

リソース

(フィーチャ、機能)

(コスト、予算)

Page 40: Demystifying Agile Software Development

品質スコープ

リソース

(フィーチャ、機能)

(コスト、予算)時間

(スケジュール)

Page 41: Demystifying Agile Software Development

鋼鉄の三角形でリソースと時間は独立して操作可能か?

Page 42: Demystifying Agile Software Development

たとえば思考実験! 3つの頂点のうち、!スコープ・リソース・時間!リソースと時間の2つが“制御可能”なら、

!どうなるだろうか?

Page 43: Demystifying Agile Software Development

思考実験(1)!予算は無限で!すべてのフィーチャを提供!ただし、即日納品

Page 44: Demystifying Agile Software Development

思考実験(2)!予算は1ドルで!すべてのフィーチャを提供!納期はいつでもよい

Page 45: Demystifying Agile Software Development

Martin Fowlersays:

Page 46: Demystifying Agile Software Development

“女の人を9人集めても、赤ん坊を1ヶ月では生めないーーMartin Fowler

Page 47: Demystifying Agile Software Development

リソースと時間は不可分!リソースと時間を完全に分けて考えられるとは思わないほうがよいのでは?

!考える速度!進みすぎる危険

Page 48: Demystifying Agile Software Development

“リソースと時間”

Page 49: Demystifying Agile Software Development

クライアントとしての思い!欲しいもの(スコープ)は、コントロールしたい(当然)

!いくら使うか(リソース)もコントロールしたい(当然)

!でも“リソースと時間”

Page 50: Demystifying Agile Software Development

つまり、こうなる:

Page 51: Demystifying Agile Software Development

品質スコープ

リソース

(フィーチャ、機能)

(コスト、予算)時間

(スケジュール)

Page 52: Demystifying Agile Software Development

リソースと時間

スコープ

Page 53: Demystifying Agile Software Development

鋼鉄の一本線

Page 54: Demystifying Agile Software Development

!三角形よりもシンプル :-)!ひとつの視点として!じゃあどうすれば?

“鋼鉄の一本線”

Page 55: Demystifying Agile Software Development

“If you have a good working

relationship with your

client,you can instead,

use Iron Line as a scale...

http://www.codesqueeze.com/the-broken-iron-triangle-is-broken/

Page 56: Demystifying Agile Software Development

リソースと時間が固定でかつスコープも固定の場合、品質に影響が出るか、3つのうち1つ以上を守れなくなるリスクがある。

“鋼鉄の一本線”

Page 57: Demystifying Agile Software Development

“リソースと時間”は限られているが、スコープは“調整可能”なのであれば、提供するスコープの範囲内については品質を確保できる可能がある

“鋼鉄の一本線”

Page 58: Demystifying Agile Software Development

スコープ

リソースと時間

(70%)

Page 59: Demystifying Agile Software Development

アジャイルなソフトウェア開発

Page 60: Demystifying Agile Software Development

!変化する環境に、!適応しながら、!ビジネス価値のある!ソフトウェアを!提供し続けるための作戦

アジャイルな開発とは

Page 61: Demystifying Agile Software Development

アジャイルソフトウェア開発宣言

Page 62: Demystifying Agile Software Development

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

Manifesto for

Agile Software Development

Page 63: Demystifying Agile Software Development

アジャイル開発手法! eXtreme Programming(XP)! ムーブメントの先駆けにして最強。今年10周年! 技術とビジネスのあいだに調和をもたらす

! Scrum! プロジェクト運営と心構えのフレームワーク! 北米でアジャイルといえば今はこれ。大流行。

! Lean! ソフトウェアを活用したビジネスのムダをなくす

Page 67: Demystifying Agile Software Development

アジャイル開発手法!インクリメンタル! Incremental! 漸進的! 少しずつ積み重ねていく

!イテレーティブ! Iterative! 繰り返し! 2週間~1ヶ月単位でのタイムボックス

Page 68: Demystifying Agile Software Development

インクリメンタル

Page 69: Demystifying Agile Software Development

要求

TDD 受入

フィードバック

Page 70: Demystifying Agile Software Development

要求

TDD 受入

フィードバック

Page 71: Demystifying Agile Software Development

要求

TDD 受入

フィードバック

Page 72: Demystifying Agile Software Development

要求

TDD 受入

フィードバック

Page 73: Demystifying Agile Software Development

イテレーティブ

Page 74: Demystifying Agile Software Development

半年とか1年

要求TDD

受入フィードバック?

Page 75: Demystifying Agile Software Development

要求

TDD

フィードバック

半年とか1年

受入!!!

Page 76: Demystifying Agile Software Development

半年とか1年

Page 77: Demystifying Agile Software Development

アジャイル開発手法!インクリメンタルかつイテレーティブ

!少しずつの積み重ねを繰り返していく

!フィードバック重要

Page 78: Demystifying Agile Software Development

インクリメンタル開発の流れ

バックログ

リリース計画

本番環境

受入テスト

受入テストケース

タスク

テスト

コード

フィードバック

優先順位づけ 分解

完了条件

テスト駆動開発

満足条件

統合

実施

検証

デプロイ

2週間でnバックログをこなす

Page 79: Demystifying Agile Software Development

インクリメンタル開発の流れマイルストーン1 マイルストーン2

...

イテレーション

マイルストーン: マイルストーンは契約の単位です。1つのマイルストーンにつき、1回以上リリースするものとします。リリース: リリースプランニングを通じて、リリースに含める内容を優先順位にしたがって各イテレーションに割り当てます。含められる分量は、過去のイテレーション実績をもとに決定します。イテレーション: 1~2週間をタイムボックスとして、リリース計画で割り当てられた作業を実施します。状況の変化に応じて優先順位の変更に適応します。

リリース1 リリース2 リリース31 2 3 4 5 6 7 8 9

リリース4

イテレーション イテレーション10 11 ...イテレーション

Page 80: Demystifying Agile Software Development

アジャイル開発手法!インクリメンタル! Incremental! 漸進的! 少しずつ積み重ねていく

!イテレーティブ! Iterative! 繰り返し! 2週間~1ヶ月単位でのタイムボックス

Page 81: Demystifying Agile Software Development

手法や名前に惑わされてはいけない!!

Page 83: Demystifying Agile Software Development

『Head First ソフトウェア開発』

“プロセスとは、どのような図、文書、テストを実行すべきかに関する形式的な一連の規則というよりも…実は実行すべきことや実行すべきときを表すものにすぎないのです。また、頭文字も必要ありません…適切に機能すればよいのです。

Page 84: Demystifying Agile Software Development

『Head First ソフトウェア開発』

“自分のチームと自分のプロジェクトに役立つプロセスを選び…そのプロセスが生み出した成果物を自分の顧客の要望に合うように調整します。

Page 86: Demystifying Agile Software Development

『アジャイルな 見積りと計画づくり』!見積り(Estimating)!計画づくり(Planning)!アジャイルな(Agile)

Page 87: Demystifying Agile Software Development

見積り

Page 88: Demystifying Agile Software Development

見積り! Estimating!見積もること!× 見積(御見積書)!プロセス = 「過程」

Page 89: Demystifying Agile Software Development

計画づくり

Page 90: Demystifying Agile Software Development

計画づくり! Planning!計画を立てること!× 計画(計画書)!プロセス = 「過程」

Page 91: Demystifying Agile Software Development

見積りと計画づくりのいずれもがプロセス、すなわち“それ”を実行することと、それを実行する主体についての話題である。

Page 92: Demystifying Agile Software Development

そしてプロセス、すなわち実行することと、その実行主体(つまり人)は既に遍在し実践され続けている。

Page 93: Demystifying Agile Software Development

つまり“プロセス”とはソフトウェアをつくっている活動そのもの、すなわちソフトウェアづくりである。

Page 94: Demystifying Agile Software Development

アジャイル

Page 95: Demystifying Agile Software Development
Page 96: Demystifying Agile Software Development

形容詞

Page 98: Demystifying Agile Software Development
Page 100: Demystifying Agile Software Development
Page 101: Demystifying Agile Software Development

“アジャイル”とは既に遍在 す る プ ロ セ ス の “ アジャイルさ”を形容するものであり、どれだけ “アジャイルであるか”を示す“度合い”なのだ。

Page 102: Demystifying Agile Software Development

アジャイルなプロセス! プロセス、つまり私たちの“ソフトウェアづくり”の過程がアジャイルであることの度合いを言っている(形容詞)

! “アジャイルプロセス”というモノは無い (名詞)

Page 103: Demystifying Agile Software Development

0123456789:;<=>?@ABCBCDEBFGHIJKLBMNFO

“Agility” is degree.

ー Kakutani Shintaro

Page 104: Demystifying Agile Software Development

アジャイルなプロセスとは何か?

Page 106: Demystifying Agile Software Development

開発がアジャイルであるということは、協調性を重んじる環境で、フィードバックに基づいた調整を行い続けることである。

Page 107: Demystifying Agile Software Development

フィードバック

Page 108: Demystifying Agile Software Development

学び

Page 109: Demystifying Agile Software Development

! 2つの知識の獲得!プロダクトに関する知識!なにをつくるのか?!プロジェクトに関する知識!どうやってつくるのか?

フィードバック = 学び

Page 110: Demystifying Agile Software Development

学びとは何か?

Page 112: Demystifying Agile Software Development

“学びとは“人に対して”行われることではない。“人が”行うことである。

ー Andy Hunt

Page 113: Demystifying Agile Software Development

だから、アジャイルなソフトウェアづくりの中心にはプロセスの実践主体である “人”が据えられねばならない。

Page 114: Demystifying Agile Software Development

“経験の伴わない、知識のみの習得は、効果がない。ー Andy Hunt

Page 115: Demystifying Agile Software Development

だ か ら 、 イテ レ ーション終了時点までにストーリーを「リリース可能なソフトウェア」へと変換せねばならない。

Page 116: Demystifying Agile Software Development

“目的やフィードバックのない無計画なやり方は、一貫性のない結果を招きがちである。

ー Andy Hunt

Page 117: Demystifying Agile Software Development

だから、安定したフィードバックを継続させるためには計画が必要であり、信頼のおける計画のためには見積りが欠かせない。

Page 118: Demystifying Agile Software Development

そして、信頼のおける見積りを出せるようになるには2つの知識を獲得できるフィードバックが欠かせない。

Page 119: Demystifying Agile Software Development

“見積りのコツは、見積もり続けること。ー Masatoshi SEKI (id:m_seki)

Page 120: Demystifying Agile Software Development

Page 121: Demystifying Agile Software Development

人について何を本当に信じているか?

Page 123: Demystifying Agile Software Development

リーン活動(ソフトウェア開発をアジャイルにしようとすること)に着手する前に答えるべき最後の問い:

Page 124: Demystifying Agile Software Development

“人について、何を本当に信じているか?ー Mr. & Mrs. Poppendieck

Page 125: Demystifying Agile Software Development

チームの一人ひとりがプロジェクトを通じて学び、うまくなっていけることを本当に信じられますか?本当に?

Page 126: Demystifying Agile Software Development

アジャイルなソフトウェアづくり!見積もるのは人!計画を立てるのは人!開発するのは人!使うのは人

Page 128: Demystifying Agile Software Development

XPの5つの価値!コミュニケーション!シンプル!フィードバック!勇気!敬意

Page 130: Demystifying Agile Software Development

XPのプラクティスの数

Page 131: Demystifying Agile Software Development

1.ペアプログラミング2.活き活きとした仕事3.情報満載の仕事場4.根本原因分析5.ふりかえり6.信頼7.全員同席8.真の顧客の参加9.ユビキタス言語10. スタンドアップ ミーティング11.コーディング標準12.イテレーションデモ13.報告14.「完全Done」

15. バグなし16. バージョン管理17. 10分ビルド18. 継続的インテグレーション19. コードの共同所有20. ドキュメント21. ビジョン22. リリース計画23. 計画ゲーム24. リスク管理25. イテレーション管理26.ゆとり27.ストーリー28.見積り

29. インクリメンタルな 要件30.顧客テスト31.テスト駆動開発32.リファクタリング33.シンプルな設計34.インクリメンタルな 設計とアーキテクチャ35.スパイク ソリューション36.パフォーマンスの 最適化37.探索的テスト

Page 132: Demystifying Agile Software Development

開発風景

Page 133: Demystifying Agile Software Development

インクリメンタル開発の流れ

バックログ

リリース計画

本番環境

受入テスト

受入テストケース

タスク

テスト

コード

フィードバック

優先順位づけ 分解

完了条件

テスト駆動開発

満足条件

統合

実施

検証

デプロイ

2週間でnバックログをこなす

Page 134: Demystifying Agile Software Development

見積り

Page 135: Demystifying Agile Software Development

見積り

Page 136: Demystifying Agile Software Development

ストーリーカード

Page 137: Demystifying Agile Software Development

ストーリーカード

Page 138: Demystifying Agile Software Development

スタンドアップミーティング(朝会)

Page 139: Demystifying Agile Software Development

ペアプログラミング

Page 140: Demystifying Agile Software Development

バーンダウンチャート

Page 141: Demystifying Agile Software Development

ふりかえり

Page 142: Demystifying Agile Software Development

まとめ

Page 143: Demystifying Agile Software Development

! アジャイル開発はソフトウェアの本質に逆らわない

! 人が中心ということを忘れてはいけない

! 名前に惑わされてはいけない

まとめ

Page 144: Demystifying Agile Software Development

参考文献

Page 150: Demystifying Agile Software Development

コミュニティ

Page 151: Demystifying Agile Software Development

http://objectclub.jp/

Page 154: Demystifying Agile Software Development

提 供

情報化技術を通じて社会と共生する

Page 155: Demystifying Agile Software Development

永和システムマネジメント!受託開発の会社です! ゲームは未経験ですが業務システムは得意です :)

!Rubyのお仕事承ります! JRubyでの納品実績もあります

!アジャイルな開発のご支援! 認定Scrumマスターが4人います

Page 156: Demystifying Agile Software Development

0123456789:;<=>?@ABCBCDEBFGHIJKLBMNFO

“Agility” is degree.

ー Kakutani Shintaro

Page 157: Demystifying Agile Software Development

ご清聴ありがとうございました

Page 158: Demystifying Agile Software Development

! アジャイル開発はソフトウェアの本質に逆らわない

! 人が中心ということを忘れてはいけない

! 名前に惑わされてはいけない

まとめ