« 消費税の6つの落とし穴 | トップページ | WindowsクライアントアプリRedmine Desktop Client »

2014/01/29

ハイブリッドアジャイル開発・変形WF型開発のプロセスパターン

以下の記事にインスピレーションを受けて、ハイブリッドアジャイル開発・変形WF型開発のプロセスパターンを洗練させてみた。
ラフなメモ書き。

【元ネタ】
サルでも分かるアジャイルとウォーターフォールをハイブリッドしたマネジメント・デザインパターン - プロマネブログ

ウォーターフォール開発とアジャイルの本質 - プロマネブログ

UMTP Japan - 第9回UMTPモデリング技術ワークショップ 議論詳細

【概要】

【1】ハイブリッド・アジャイル開発は、WF型開発とアジャイル開発を組み合わせた開発プロセス。
和風ブレンド(!)の変形アジャイル型開発と言っていい。

ハイブリッド・アジャイル開発で最も使われている開発プロセスは、「ウォーター・スクラム・フォール」。
要件定義、システムテスト、リリースというV字モデルの上流部分はWF型開発として残し、設計・開発・テスト工程というV字モデルの下流部分はAgile開発を取り入れる手法。

ハイブリッドアジャイルの実践」の本が有名。

IMPACT MAPPING」にも、「ウォーター・スクラム・フォール」の用語が出てくる。
(ただし、「IMPACT MAPPING」では、要件定義をウォーターフォール型開発でしか運用できない事象を問題として、解決策を提示している)

なぜ、ハイブリッド・アジャイル開発をわざわざ作って、運用したいのか?
その理由は、WF型開発にもアジャイル開発の利点を取り入れたい動機があるから。

自社では、標準プロセスとしてWF型開発がガッチリと決められており、内部統制やシステム監査とも絡んでいるために、従来のプロセスを抜本的に変えることは難しい現状がある。
でも、「チケット駆動開発」の適用について考える|コラム「ITよもやま話」|特集│株式会社JSOLにも書かれているが、アジャイル開発の利点である俊敏さ、ツール連携による自動化などの利点を取り入れたいのだ。

つまり、自社独自のWF型開発にAgileの要素をブレンドした変形Agile型開発(純粋なAgile開発ではないので、Agile型、Agile風味とわざと呼んでいる)をカスタマイズしているわけだ。

【2】ハイブリッド・アジャイル開発にはいくつかのパターンがある。
サルでも分かるアジャイルとウォーターフォールをハイブリッドしたマネジメント・デザインパターン - プロマネブログにインスピレーションを受けて、自分が今までに経験してきたプロセスをまとめてみた。

(1)ウォーター・スクラム・フォール

 ハイブリッド・アジャイル開発の中で、もっともよく使われているプロセス。
 「ハイブリッドアジャイルの実践」の元ネタとなる記事が以前から掲載されていた。

グラス片手にアジャイル開発 第1回 ― 実践的アジャイル開発とは (1/5):CodeZine

グラス片手にアジャイル開発 第2回 - アジャイルの主な実践手法とその取捨選択 (1/3):CodeZine

グラス片手にアジャイル開発 第3回 - アジャイル開発における計画と運営サイクル (1/6):CodeZine

グラス片手にアジャイル開発 第4回 - ハイブリッドアジャイルの実践法 (1/2):CodeZine

グラス片手にアジャイル開発 第5回(前編) - イテレーション単位のアクティビティ (1/3):CodeZine

 ウォーター・スクラム・フォールの利点は、要件定義で開発スコープをガッチリ固めることができれば、製造工程に関わる作業をAgile風味の開発スタイルで実施することにより、スピーディに開発できることだろう。
 やはり、一つの機能でもまず画面で確認できるようになれば、設計者も開発者もイメージがわきやすいし、フィードバックを生かして、次の機能の品質を高めることもできる。
 しかし、本番リリースは1回しかないので、Agile開発の最大の強みである「頻繁にリリースしながら品質や機能をVerUpしていく」戦略は取れない。

(2)リーン・WF

 ウォーター・スクラム・フォールとは逆に、要件定義工程をプロダクトバックログとして要件(ストーリー)を優先順位づけした後、WF型開発で順次リリースしていく開発プロセス。
 適用場面は、変更の多い小規模案件だろう。

 特に、業務システムの細かな運用保守でよく使われるだろう。
 なぜなら、1~5MDくらいの小さな保守案件では、機能改善や障害修正の重要度や難易度を設計者が十分に調査した後、リリース計画を作ると、それがプロダクトバックログのようになっているから。
 普通は、定期的にプロダクトバックログを棚卸しして、優先順位やリリース時期を修正している。
 もちろん、突発的に発生した本番障害があれば、他の要件をそっちのけで、最優先で暫定対応しなくてはならないから、頻繁に変わりやすい。

 リーンWF型開発をやっているなら、完全にAgile開発を運用してしまえばいいと思うだろうが、内部統制やシステム監査で承認された自社独自のWF型開発を見直すのは、調整にとても手間がかかるので、できない状況があるのだ。
 その意味では、割と現実的なカスタマイズされたアジャイル型開発だろう。

(3)コデザイン・WF(協調設計型WF)

 WF型開発のチームとAgile開発のチームが並行開発しながら、協調して開発するプロセス。
 適用場面は、ハードウェアチーム(WF)とソフトウェアチーム(Agile)が成果物を提供・共有しながら、開発する組み込み製品開発が多いだろう。
 
 ハードウェアチームは、設計して金型から作り、部品を組み立てながら、ソフトウェアを流し込んで、少しずつ動作させていく。
 その時に、ソフトウェアチームは先回りして、必要なソフトウェア部品を作っておき、ハードウェアチームに提供して、動作不備があればフィードバックを受けて修正していく流れになるだろう。

 逆に、業務システム開発ならば、インフラチームがWF型開発風に基盤設計→基盤構築→基盤テストを実施するときに、ソフトウェアチームのスプリント終了時に基盤の情報を連携するパターンもあるだろう。
 このパターンも、割と現実的によくある。

(4)アダプタブル・WF

 @sakaba37さんが提唱している限定的なAgile風味のWF型開発。
 
 WF型開発の各工程の管理は標準プロセス通りに行うが、どうしても管理しづらい作業はある。
 課題管理や障害管理のように、突発的に発生して、それらを取りまとめてもすぐに変更が発生してしまうために、従来型の手法では管理しづらいのだ。
 その場面では、標準プロセスを適用しにくい作業に対して、チケット駆動開発を取り入れて、アジャイルの効果を出す。
 これが、補完型チケット駆動開発と呼ばれるスタイル。

 補完型チケット駆動開発を運用した事例が、「チケット駆動開発」の適用について考える|コラム「ITよもやま話」|特集│株式会社JSOLに相当する。

【3】WF型開発も、変形されたパターンがいくつかある。

(1)パラレルWF

 WF型開発の工程のうち、V字型モデルの下流部分(設計→開発→テスト)を分割して並行に走らせる開発プロセス。
 大規模案件で一括請負の場合、サブシステム単位にチームが分かれ、チーム単位にWF型開発を運用する事例に相当するだろう。
 このパターンでは、製造工程を並行開発できる分、納期を短縮できそうに見えるが、実際は、結合テストがビッグバンテストになってしまうので、普通は破綻しやすい。

 大規模な受託案件は大抵、このパターンに当てはまり、本番リリースできても、たくさんの障害修正と改善要望に追われやすい。
 典型的なデスマーチプロジェクトになりやすいと思う。

(2)五月雨式WF(インクリメンタル・漸進型)

 WF型開発でやる大規模案件だとしても、分割納品が可能な場合、機能単位に分割して順次リリースしていく開発プロセス。
 いわゆる段階リリースとも呼ばれる。

 Agile開発に割と近いが、Agile開発では工程という明確な作業単位がないのに対し、五月雨式WFでは、工程が明確に意識され、工程ごとに役割を持つ人がいるのが違う。
 
 経験のあるプロマネならば、大規模な新規開発案件は一発リリースだとリスクが大きいので、最初は基本的機能の部分稼働で納期を間に合わせて、その後、段階的に機能追加しては順次リリースしていくように、プロジェクト計画を組み立てるだろう。
 そうでなければ、大規模案件をWF型開発でやる場合、リスクヘッジできないと思う。

(3)スパイラル(イテレーティブ・反復型)

 プロトタイプを作って、少しずつ作りながら、成果物のスコープを広げていく開発プロセス。
 リリースされる成果物は、動かないプロトタイプでもよい点がAgile開発とは違う。

 割と昔から提唱されていた、改良されたWF型開発。
 RUPがこのパターンに相当する。
 このやり方を採用できる場合、リスクの大小によって、早めに作る部分と後回しする部分に分けておくことができる。
 リスクが高いものを先に試して、そのノウハウを生かして、次のイテレーションでWF型開発で作りこむことができる。
 XPで言うアーキテクチャスパイクをスパイラル開発でもやっている。

 ただし、このパターンを成功させるには、開発のリスクをきちんと把握してプロジェクト計画に反映して、予実管理していくのが重要になる。
 そうでなければ、いつまで経っても、肝心の成果物の品質が向上しない。
 動かない成果物を作っても無意味。

【4】ハイブリッドアジャイル開発や変形WF型開発のように、WF型開発やAgile開発をカスタマイズして変形するプロセスパターンは、日本のSIならほとんど経験しているのではないだろうか。
 そして、それぞれのプロセスパターンの特徴や利点、弱点、適用状況を十分に把握できているだろう。

 単純なWF型開発では、大規模案件ほど失敗が怖い。
 だからと言って、自社独自の標準プロセスを修正するのはできない。
 そこで、プロジェクトを成功させるために、標準のWF型開発をカスタマイズしてハイブリッドアジャイル開発で作業する。
 
 その動機や手法は理解できるし、いいだろう。
 でも、何となく腑に落ちないのはなぜか?
 その理由は、WF型開発を実践していると標榜しながら、裏プロセスという表面に出てこないプロセスを故意に作っているからだろう。
 裏プロセスは表面に出さないからこそ、従来のWF型開発と同じであるかのように、システム監査も通る。
 しかし、裏プロセスを表面に出さなければ、そこで得られた知見をプロセス改善として使うことがやりにくい。

 その辺りの違和感については、下記の記事が詳しい。

「現状のソフトウェア開発は間違っていないか?」(プロセス編) - @IT自分戦略研究所

裏プロセスは並行プロセス: プログラマの思索

 いろいろ考えてみる。

|

« 消費税の6つの落とし穴 | トップページ | WindowsクライアントアプリRedmine Desktop Client »

Agile」カテゴリの記事

ソフトウェア工学」カテゴリの記事

チケット駆動開発」カテゴリの記事

プロジェクトマネジメント」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 消費税の6つの落とし穴 | トップページ | WindowsクライアントアプリRedmine Desktop Client »