反復型ソフトウェア開発の勘所

58
Summit Developers Developers Summit 2013 Action ! 反復型ソフトウェア開発の勘所 15-B-7 #devsumiB マイクロソフトディベロップメント IPX Team 津田 義史

description

反復型ソフトウェア開発とは、複数のアジャイルな開発手法に共通の基盤となっている開発モデルです。その特徴として、タイムボックスとよばれる期間を繰り返しながら開発をすすめること、プロジェクトの早期から継続してインテグレーション(結合)して実行可能なソフトウェアを構築すること、の2点があげられます。本セッションでは、タイムボックスの運用方法とインテグレーションの技術から導出できる、ソフトウェア開発における重要な原則を説明したいと思います。

Transcript of 反復型ソフトウェア開発の勘所

Page 1: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

反復型ソフトウェア開発の勘所

15-B-7#devsumiB マイクロソフトディベロップメント

IPX Team

津田 義史

Page 2: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

宣伝。

[目次]

1. ソフトウェアを育てる準備

2. チームの役割と責務

3. タイムボックスとビルドの運用

4. 構成管理とブランチの戦略

5. 再現可能なビルドの実現

6. バグの追跡と解決

7. テストケースの自動化

8. 開発プロセスの構築

Page 3: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

反復型の開発モデルとは

• 多くのアジャイルな手法に共通の基盤

• タイムボックスを繰り返しながら、 少しずつ機能を追加

• 早い時期から、 継続的にインテグレーション

最後にインテグレーション(結合)するのはウォーターフォールモデル

Page 4: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

アジェンダ

• タイムボックス

• 継続的インテグレーション

Page 5: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

タイムボックス

• タイムボックスとタイムボクシング

• 3つの制約

• タイムボックスの構成と計画

• フィーチャーボックス

• まとめ

Page 6: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

タイムボックスとは

開発プロジェクトの期間を表す箱

入口 出口

全開発期間

Page 7: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

タイムボクシングとは

作業を箱に詰めること

全開発期間

作業

作業

作業

作業

作業

作業

作業

作業

作業

作業

作業

作業

作業

全開発期間

Page 8: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

正解は?

1. 無理やり詰め込む。

2. 箱を大きいものに取り替える。

3. 全部入れることを諦める。

Page 9: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

正解は?

1. 無理やり詰め込む。

2. 箱を大きいものに取り替える。

3. 全部入れることを諦める。

Page 10: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

3つの制約

1. 無理やり詰め込む。(品質)

2. 箱を大きいものに取り替える。(納期)

3. 全部入れることを諦める。(範囲)

Page 11: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

タイムボックスの適切な長さは?

1年? 1ヶ月? 1週間? 15分?

入れたい作業の

大きさによる

Page 12: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

マイルストーン: 1~数ヵ月間の箱

イテレーション: 数日~数週間の箱

全開発期間

イ テ レ ー

マイルストーン

シ ョ ン ・

マイルストーン

イ テ レ ー

マイルストーン

全開発期間

タイムボックスの構成

反復を階層的に構成する!

Page 13: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

タイムボックスの計画

• 入口と出口の設定

• バックログの作成

• 出口条件の定義

バックログ

作業

作業

作業

作業

作業 マイルストーン

出口入口

出口条件

Page 14: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

バックログの作成

• 作業内容

– 作業完了の定義、条件

• 工数の見積もり

• 優先度 バックログ

作業

作業

作業

作業

作業

Page 15: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

途中で、バックログを増やす

基本的には

やらない

Page 16: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ゴールを動かすべきではない

Page 17: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

途中で、バックログを減らす

作業から手を離して

次のタイムボックスに

蹴り入れる

Page 18: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

パントする

Page 19: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

出口条件

• 残作業がゼロ

• バグがゼロ (ZBB)

• 出荷可能 (potentially shippable)

など

マイルストーン

出口入口

出口条件

Page 20: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

出口条件の一例(ゼロ・バグ・バウンス)

各マイルストーンの出口で、バグの数をゼロにする

Page 21: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

出口条件の一例(ゼロ・バグ・バウンス)

各マイルストーンの出口で、バグの数をゼロにする

Page 22: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

出口条件の一例(ゼロ・バグ・バウンス)

各マイルストーンの出口で、バグの数をゼロにする

Page 23: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

出口で、出口条件への到達を確認するのでは遅い!

出口条件への到達を継続的に観察(バーンダウンチャート)

Page 24: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

成果物

• 出口条件を満たしたビルド

–マイルストーンビルド

–スプリントビルド

など

Page 25: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

フィーチャーボックス

• 実装する 機能 (範囲) を固定

• 優先度をつける必要なし!

• ただし、いつ仕事が終わるのかは分からない…

納期 (時間) を固定するタイムボックスでは、優先度が重要!

フィーチャー スコープ

Page 26: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

タイムボックスのまとめ

• ウォーターフォール型: 遠距離走

–正しいゴールなのか、実際に着くまで不明

• 反復型: 短距離走

–ゴールに着くたびに軌道修正が可能

ス プ リ ン ト

Page 27: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

アジェンダ

•タイムボックス

•継続的インテグレーション

Page 28: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

継続的インテグレーション

• Continuous Integrationとは

• CIの歴史

• ビルドを料理するコツ

• まとめ

Page 29: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

Continuous Integrationとは

• 継続的に 統 合 ビルドを構築

• XPのプラクティスの1つ、と紹介されることが多いが…

インテグレーション

Page 30: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CI の歴史

• 書籍: Object Solutions– 1995 グラディ・ブーチ

– At regular intervals, the process of ‘continuous integration’ yields executable releases that grow in functionality at every release.

– 定期的な「継続的インテグレーション」のプロセスが、リリースのたびに機能を成長させ、実行可能なリリースを生み出す。

Page 31: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CI の歴史

• Web記事: Daily Build and Smoke Test– 1996 スティーブ・マコネル

– Treat daily build as theheartbeat of the project.If there's no heartbeat,the project is dead.

– デイリービルドをプロジェクトの心拍とすべし。心拍がないプロジェクトは死んでいる。

Page 32: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CI の歴史

• Web記事: Continuous Integration– 2000 マーチン・ファウラー

– The practice has been aroundfor a long time and is used byplenty of folks that wouldnever consider XP for their work.

– このプラクティスはずっと以前からあり、XPなど使いそうもない多くの人々により使われてきた。

Page 33: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CI の歴史

• Web記事: Daily builds are your friends

– 2001 ジョエル・スポルスキ

– A daily build is an automatic,daily, complete build of theentire source tree.

– デイリービルドとは、ソースツリー全体の完全なビルドを自動化し、毎日行うことだ。

33

Page 34: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ビルドとは

1. 実行可能なソフトウェア (名詞)

2. 実行可能なソフトウェアを構築する (動詞)

ビルドをビルドする

料理を料理する

Page 35: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

料理をビルドする

• 料理をお届けするときに大切なことは?

–おいしい

–早い、安い

–食べやすい

–品数が多い

–虫が入っていない

–いつも同じ

デ リ バ リ

Page 36: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ビルドを料理する

• ビルドをお届けするときに大切なことは?

–価値がある

–早い、安い

–使いやすい

–機能が多い

–バグが入っていない

–いつも同じ

デ リ バ リ

Page 37: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

いつも同じビルド

• いつ誰がビルドしても、同じビルドができる

• 以前と同じビルドを、もう一度ビルドできる

ビルドの再現性を確保する

Page 38: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CRISPなビルド

• Complete: ゼロからビルド可能

• Repeatable: 再現可能

• Informative: 情報を提供可能

• Schedulable: スケジュール可能

• Portable: そこかしこでビルド可能

CRISP

書籍 「達人プログラマー」より。

Page 39: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CRISPなビルドは「さしすせそ」で料理

• さとう: 再現可能 (Repeatable)

• しお: 情報を提供可能 (Informative)

• す: スケジュール可能 (Schedulable)

• せうゆ: ゼロからビルド可能 (Complete)

• みそ: そこかしこでビルド可能 (Portable)

さしCRISP すせそ

書籍 「実践 反復型ソフトウェア開発」より。

Page 40: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

料理の再現に必要なものは?

• 材料一式

– ソース (Sauce)

• レシピ

– 料理の手順書

• 清潔な厨房

– キッチン

• 調理器具

– コンロ、フライパンなど

Page 41: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ビルドの再現に必要なものは?

• 材料一式

– ソース (Source)

• レシピ

– ビルドの手順書

• 清潔な厨房

– ビルドマシン

• 調理器具

– コンパイラ、ビルドサーバなど

Page 42: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

材料一式: ブランチで管理

統合ブランチ ベンダーライン リリースブランチ

開発ブランチユーザーブランチリリース準備ライン

タスクブランチ 段階的統合ブランチ リモートライン

Page 43: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

レシピ: 作業の依存関係

複数の作業を、正しい順序で実施する

Page 44: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ビルドの構成

• Unix版とWindows版

• 32bit版と64bit版

• リリース版とデバッグ版

• 日本語版、英語版、韓国語版、…

このようなビルドの構成の種類を、ビルドのフレーバーという

Page 45: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

清潔な厨房: ビルドマシン

ビルドマシン

リポジトリ

更新

コミット

サンドボックス

Page 46: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

清潔な厨房で料理する

• サンドボックスで作った料理には、虫が入る

• 統合ビルドは、必ず清潔なビルドマシンで!

サンドボックス ビルドマシン

砂場で作った料理をお客様に出しますか?

バグ

Page 47: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

調理器具の進歩

• ひと昔前まで

–製品ごとに、固有のビルドシステムを構築していた

• 現在

–高機能かつ汎用的なビルドシステムが利用可能になった

Page 48: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CIのフィードバック・サイクル

ビルドマシンサンドボックス

リポジトリ

あまり嬉しくない。

更新

フィードバック

コミット

Page 49: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

バディビルドの自動化

2) バディビルドとオートメーションを実行

6) 手元の差分を破棄

リポジトリ

4) コミット完了を通知

3) コミット5) 更新

1) コミット依頼

バディビルドとは、バディ(相棒、同僚)に作ってもらうビルドのこと

Page 50: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ビルドの再現に必要なものは?

• 材料一式

– ソース (Source)

• レシピ

– ビルドの手順書

• 清潔な厨房

– ビルドマシン

• 調理器具

– コンパイラ、ビルドサーバなど

Page 51: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ビルドの焼き上げ

• 安定化

• 品質熟成期間

• Bake Time

• バグ修正スプリント

安定化

CodeComplete

CodeFreeze

Entrance Exit

Page 52: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

ビルドしては直しモデル

最初のバージョンを

ビルド

引退

保守・運用

顧客が満足するまで

修正

開発

保守

最悪。

Page 53: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action ! 短い時間で焼き上げる!

Page 54: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

CIのまとめ

• 継続的に統合しながら開発

• 頻繁・不定期なビルドで、開発者に素早いフィードバック

• 品質の基準を満たした定期的なビルドも必要

Page 55: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

Call to Action

Page 56: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

Action#1

計画駆動な

アジャイル

をして下さい

Page 57: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

拙著「実践 反復型

ソフトウェア開発」

を買って下さい¥2,940 (税込)

Action#2

Page 58: 反復型ソフトウェア開発の勘所

Summit

Developers

Developers Summit 2013 Action !

It’s your turn.