オブジェクトの広場はオージス総研グループのエンジニアによる技術発表サイトです

アジャイル

ウォーターフォール、アジャイル及びかんばんを併用し、あなたの開発を成功させる

Hansoftでスタートするアジャイル開発 第2回
オージス総研 技術部 アジャイル開発センター 張 嵐
2016年2月9日

Hansoftは開発内容、開発計画と進捗及び品質管理機能によって、開発目標の達成を強力にサポートする柔軟性のあるプロジェクト管理ツールです。本記事では1つの開発の中で、一部はウォーターフォール開発が適用され、一部はアジャイル開発が導入され、また、かんばんも一部の開発に利用されるというような複雑な開発で、Hansoftがどのように開発の管理に役に立つかについてご紹介します。

はじめに

2014年12月号に「 Hansoftでスタートするアジャイル開発 第1回 」の記事を掲載しました。その後1年ほどが経ち、現在ではHansoftの最新版Hansoft9.1がリリースされています。

前の記事でご紹介したように、Hansoftは開発内容、開発計画と進捗及び品質管理機能によって、開発目標の達成を強力にサポートする柔軟性のあるプロジェクト管理ツールです。

本記事では、その続編として、1つの開発の中で、一部はウォーターフォール開発が適用され、一部はアジャイル開発が導入され、また、かんばんも一部の開発に利用されるというような複雑な開発で、Hansoftがどのように開発の管理に役に立つかについてご紹介します。

我々の開発には常に複雑さが伴いますので、一律に1つの開発手法でまかなうことは難しい場面によく出会います。そのような場合には、適切な開発手法を選択して迅速に開発することが求められています。 手法の選択と開発の進め方に関しては、一般的には以下のような考え方があります。

  1. ウォーターフォール開発

    開発の前提として、変更があまり発生しない、また開発と比べ変更の割合が少ない場合、すなわち、開発内容の確実性が高い場合に主に選択される手法です。

  2. アジャイル開発

    開発内容の不確実性が高い場合、すなわち開発中に変更が頻繁に発生することを見込んで進める場合に主に選択される手法です。

  3. かんばん

    開発フローを制御し、価値のストリームのサイクル時間を短縮することを狙う場合に選択肢となり得る手法です。かんばんは単独でも利用できますが、ウォーターフォール開発やアジャイル開発のツールとしても利用できます。

    用語注:価値のストリーム
    注文から納品までを実行するための一連の業務の流れのこと。価値のストリームの注文(開始)から納品(終了)までの時間をサイクル時間と呼ぶ。

本記事では上記3つの開発方法を1つの仮想の開発場面に織り込んで、Hansoftを用いて、ウォーターフォール(ガントチャート)、アジャイル及びかんばん方式開発のプロジェクト計画の作成を示します。以降では次のトピックをそれぞれご紹介します。

今日、ウォーターフォール、アジャイル及びかんばんが混在する開発はよくあることだ

開発者としての我々の責務は適切なシステム(ソフトウェア、サービスや製品など)を正しく開発することです。

20年前までは、システムは業務を助けるための1つの手段として開発されました。顧客の要求を満たしている、予算がオーバーしていない、不具合でシステム停止させないというのは、開発が成功しているかどうかの重要な基準となっていました。システムの開発は工場の生産ラインや建築物作りとたとえて作業の役割を明確にし、開発も複数の段階に分けていました。綿密な計画を立て、まず要求に合意し、設計が作成され、そしてコードが作成されます。最後に、システムが要求や設計の通りに作成されているかどうかを検証します。このような計画に基づくウォーターフォール開発方法が70年代に紹介され、開発の予測性と制御可能性を高めることによって開発の成功を狙っていました。

しかし、過去の20年間において、技術の進歩によって我々のビジネス環境が大きく変化し、システムはビジネスを引っ張るための手段となりはじめています。より価値が高く、品質が高いシステムをより速く提供することはシステム開発の目指すところになっています。そのため、少し開発し、少し提供し、素早く検証するという適応型のアジャイル開発が徐々に導入されていきました。現在では、スクラムはアジャイル開発の代表手法として知られています。図1で示すように、ウォーターフォール開発と比べ、アジャイル開発はより迅速なフィードバックを可能にし、開発リスクの低減と迅速な価値の提供が期待できます。

ウォーターフォールとアジャイル開発の歴史

[図1 ウォーターフォールとアジャイル開発の歴史]

トヨタ生産管理システムに由来するかんばん開発方式は、開発の中の無駄を除去し、サイクル時間を短縮するための手段として最近注目を浴びています。

図2では、左から右へ向かって流れていく価値提供のフローの中で、分析、レビュー作成、検証、受け入れといった開発の各ステップが可視化されています。付箋に記述されている各開発作業項目は、各ステップを通じ、完成させていきます。また、各列にWIP制限(仕掛作業の上限)を設定することによって、フローの流れのよどみを無くして、サイクル時間を短縮できます。[ 1

かんばんの利用例

[図2 かんばんの利用例]

ウォーターフォールであれ、アジャイルであれ、かんばんであれ、いずれも我々の開発経験から生まれたベストプラクティスに基づく開発手法です。ビジネス環境の激しい変化に対応するため、今日では多くの開発プロジェクトでアジャイル開発が導入されはじめています。一方、変化に素早く対応することに緩い分野では依然としてウォーターフォールが主流で、一部でアジャイル開発ベストプラクティスの取り込みが試みられている状況と言えます。

例えば、我々のシステム開発では以下のような開発場面によく直面するのではないかと思います。

  1. ハイブリッドアジャイル開発:アジャイル開発+ウォーターフォール開発

    組織はアジャイル開発の導入を始めて間もない状態です。あるシステムの開発に関して、一部のサブシステムは変更が多いと見込んで、この部分をアジャイルチームに任せます。一方、開発内容が安定している部分について、従来型のウォーターフォール型開発を実践し、ガントチャートで進捗を管理します。

  2. 協調型製品開発:ソフトウェア開発+ハードウェア開発+アウトソーシング

    製品を迅速に市場に投入するために、ソフトウェア開発チーム、ハードウェア開発チーム及びパートナーの間の協力が必要となります。ソフトウェア開発チームはリスクを低減するためアジャイル開発を導入し、シミュレーターを用いて短い反復で開発します。ハードウェア開発チームは長い期間の反復を組み、定期的に試作品を提供し、ソフトウェアとの結合を行います。一部の切り出し可能な機能やコンポーネントの開発についてはパートナーに委託し、ある時点で要求を提示し、納期後に検収を行い、他の部分との結合を行います。

上記のような開発の場合、開発内容、開発の計画と進捗、及び品質状況を1つのツールで見ることができると、開発方法毎にツールを切り替える必要がなく、管理者にとっても開発チームにとっても、とても嬉しいことだと思います。

Hansoftで開発内容の管理を構造化する

人間の思考は、時間とともに明確になっていく傾向があります。何を開発するかについて、初期の企画や構想段階ではかなり曖昧です。顧客、開発チーム及びシステム利用者などの利害関係者との議論・検討・調査・試作などを通じて、開発内容の全体像が徐々に明確になり、開発内容も次第に詳細化されます。

Hansoftでは、フィーチャーリスト(アジャイル開発ではバックログと呼ばれます)の形式で開発の内容を管理します。開発内容を階層化することによって、検討過程や詳細化過程を反映できます。また、大きな開発の場合、管理された開発内容の項目数が数千個にのぼりますので、開発チーム単位、リリース単位、エピック(大きな開発取り組み)単位、サブプロジェクト単位あるいはフェイズ単位などで、階層化機能を使って、グルーピングすることをお勧めします。

製品の構成例

[図3 製品の構成例]

図3では1つの製品の構成を示します。この例の場合、今回の開発では、アジャイル開発を行うソフトウェアチーム、かんばんを利用するキャラクター開発チーム及びウォーターフォール開発のサウンド開発とハードウェア開発チームが協力し合い、製品の開発を行います。まず、図4で示すように、Hansoftのフィーチャーリストで、この4つのチームを上位の階層として作ります。

チーム毎の開発内容をそれぞれまず高いレベルで検討し、次第に階層を利用し、詳細化していきます。アジャイル開発チームはユーザーストーリーを識別します。かんばんを利用するチームやウォーターフォール開発チームは納品するものを識別します。

このように、開発内容の構造化管理が実現できます。

開発内容の構造化管理

[図4 開発内容の構造化管理(図をクリックすると拡大します)]

図4で示したように、Hansoftでは、1つのフィーチャーリスト(バックログ)で複数のチームの開発内容を管理できます。チーム間で情報共有できる一方、お互いの開発に悪い影響が出ないよう、開発内容に対するアクセス権限をコントロールできます。具体的に、開発内容に対し権限を持つ人が、権限委譲したい開発内容を選択し、コンテキストメニューの「委任」機能を利用し、適切に権限委譲先を選択します。

例えば、キャラクターの開発内容はすべてのチームが閲覧できますが、編集できるのはキャラクター開発チームのみです。一方、サウンドチームの開発内容はキャラクター開発チームにもアイディアを貢献してもらいたいので、キャラクター開発チームが編集できるように権限を付与します。

Hansoftで大まかな開発計画を作成する

ここでは、Hansoftを用いる初期の大まかな開発計画の作成例を示します。

計画は1回限りの活動ではなく、開発とともに進化する必要なプロセスであるため、初期には大まかな計画を作成し、その後、チーム(サブチーム)に任せ、チーム毎の開発計画へと進化させていくほうが効率がよいでしょう。

Hansoftを利用し、開発計画を作成するとき、既存のプロジェクト計画をインポートしたり、コピー&ペーストによって取り入れることができます。また、管理をしやすくするため、階層化をうまく利用することをお勧めします。

図5の例の場合、リリース/マイルストーンと開発チームの計画を分けて管理します。Hansoftのコンテキストメニューにある「リリースにタグを付ける」機能を利用し、個々の開発チームの開発項目と対応するリリースの関連付けができます。すなわち、どのような開発項目を実行することで、このリリースを実現できるかが関連付けられます。

大まかな開発計画の例

[図5 大まかな開発計画の例(図をクリックすると拡大します)]

個々のチームの計画はチーム自身が作成していきますので、各チームが予定している開発開始日と完了日を目安として入力します。その後、ソフトウェア開発チーム、キャラクター開発チーム、サウンド開発チーム及びハードウェア開発チームはそれぞれ自分のこれからの開発実態に合わせ、計画します。

Hansoftでアジャイル開発計画を作成する

ガントスケジュールとアジャイルスケジュールの切り替えは「CTRL-W」で簡単にできます。

アジャイル開発計画を作成した場合は、「アジャイルスケジュール」に切り替えます。具体的な作成方法については、第1回の記事に詳しく紹介しましたので、そちらをご参照ください。

基本的に、イテレーション(スプリント)期間を設定し、個々のバックログ項目を優先順位が高い順から各イテレーションにコミットします。その後、個々のバックログ項目を実現するためのタスクを洗い出して、見積もりを行い、割り当てを行います。また、リリースする内容に合わせ、イテレーション単位、バックログ項目単位またはタスク単位でリリースと関連付けを行います。

図6はソフトウェア開発チームの計画を示したものです。

ソフトウェア開発チームの計画例

[図6 ソフトウェア開発チームの計画例(図をクリックすると拡大します)]

Hansoftでウォーターフォール開発計画を作成する

ウォーターフォール開発の場合、WBS(Work Breakdown Structureの略で作業分解図)とガントチャートでの進捗管理が基本です。

図7はWBSの構成に関する考え方を示します[ 2 ]。成果物に基づくWBSの作成方法や作業に基づくWBSの作成方法がありますが、基本的には、まず、開発の全体を大項目レベルに分解し、その後、それぞれの大項目について、細かい単位に分解し階層化していきます。最下層には小さな管理できるレベルの成果物や具体的な作業項目(タスク)が並びます。

WBSで開発全体の成果物や作業項目を洗い出すことで、開発の漏れがあるかどうかを確認できます。

WBSの作成方法

[図7 WBSの作成方法]

図8にHansoftを利用したガントチャートの例を示します。WBS作成後に、個々の作業に対し作業工数の見積もりを行い、メンバーのスキルに応じて作業の割り当てを行い、作業期間を決めます。また、作業間の依存関係を識別し、作業順番を決めます。このようにガントチャートが作成され、計画作成が終了します。

ガントチャートの例

[図8 ガントチャートの例(図をクリックすると拡大します)]

Hansoftではガントチャートの作成しやすさと見やすさのため、タスクの関連付けや自動配置、タスクごとの色の設定など便利な機能を備えています。また、タスクの数が多くなる場合や、関心事のタスクのみを見たい場合は、「検索」を利用し、検索条件に合うタスクだけを表示することができます。

Hansoftでガントチャートを作成する場合、項目数や階層の深さには制限がありません。しかし、見やすく管理可能なガントチャートを作成するためには、以下の3つのルールを守りましょう。

  1. 100%ルール: 親子関係にあるWBS要素は、親要素を下の階層にある複数の子要素に分解するとき、親要素=Σ子要素 の関係(子要素をすべて集めると親要素になる)が成り立つようにします。
  2. 80時間(2週間)ルール: どこまで分解していくのかの目安は「作業や成果物の規模が8時間以上、かつ80時間以内であること」です。
  3. 7×7ルール: WBSの広さと深さの目安として、1つ親階層の要素にぶら下がる子階層の要素の数は7程度までで、WBS全体の階層の深さも7階層までです。

Hansoftでかんばんを用いて開発フローを可視化する

もし、個々の開発作業項目(バックログ項目)を完成させるために、ある標準的なプロセスを適用する場合、すなわち、同じ順番で同じステップを踏まえて遂行させる場合、かんばんは非常に役に立ちます。

図9はHansoftで定義されたかんばんの例です。かんばんは「ボード」ビューに切り替えることで表示できます。この例では、すべてのキャラクターの開発は7つのステップで完成していきます。かんばんを利用し、キャラクターがどのステップで作業されているか、また、ステップごとに、どのキャラクターに関する作業が行われているかを可視化できます。WIP制限の設定によって、現在「内部配置」のステップがボトルネックになっている状況が赤色で警告されています。ボトルネックの状況が一目瞭然です。

かんばんの例

[図9 かんばんの例(図をクリックすると拡大します)]

Hansoftでは上記のかんばんを以下の手順で作成できます。

1) まず、図10で示すように、「More」のメニューから、「パイプライン/かんばん、ワークフロー」機能を選択します。

2) 次に、「パイプライン/かんばんを作成」ボタンをクリックし、作成するかんばんの名前を入力し、このかんばんを示すためのアイコンを選択し、かんばんを登録します。

かんばんを作成する

[図10 かんばんを作成する(図をクリックすると拡大します)]

3) 最後に、登録したかんばんをクリックで選択し、「編集」ボタンをクリックし、図11で示すパイプライン/かんばんを定義するビューでかんばんの定義を行います。このビューで、自分がタスク(ステップ)を組み立てて一から作成することができますが、すでに定義されたかんばんを流用する場合、「XML形式でインポート/エクスポート」機能を利用できます。また、ゲーム開発で利用できるサンプルもいくつか提供されています。

かんばんを定義するためのビュー

[図11 かんばんを定義するためのビュー(図をクリックすると拡大します)]

作成したかんばんをフィーチャーや作業項目に適用し、かんばんで管理できます。今回のキャラクター開発の場合、図12のように設定します。

かんばんを適用する

[図12 かんばんを適用する]

1) フィーチャーリストを開いて、キャラクター開発の内容を選択し、コンテキストメニューの「イテレーションにコミットする」やドラッグ&ドロップ操作で、開発内容を「アジャイルスケジュール」や「ガントスケジュール」にコミットします。

2) かんばんを適用するために、「パイプライン/かんばん、ワークフロー」列が必要なので、「More」の「プロジェクトのカスタマイズ」機能を利用しこの列を表示させます。

3) 開発内容に対し、「パイプライン/かんばん、ワークフロー」の該当列をダブルクリックし、ポップアップメニューから、適用するかんばんを選択します。

4) 「アジャイルスケジュール」や「ガントスケジュール」を「ボード」ビューに切り替え、図9で示すように、カラムから定義された「キャラクター開発かんばん」を選択し、かんばんを表示させます。かんばんを利用しキャラクターを開発するチームは、このビューを利用し、進捗状況を可視化します。

すでにおわかりの通り、Hansoftではパイプライン/かんばんと、ワークフローの作成は、1つの「パイプライン/かんばん、ワークフロー」機能にまとめられています。チームは自由度の高い利用ができますが、基本的に、以下のような考え方で使い分けます。

  • パイプライン:複数のメンバー間で、小さなタスクを順番に完成していくという流れを管理するための目的で利用します。沢山の開発内容を同じタスク・同じ順番で完成させたい場合、しばしばパイプラインが利用されます。
  • かんばん:ステップごとに、開発内容の状態を示すために利用します。本記事では、キャラクター開発チームの開発をかんばんで管理する例を示しました。
  • ワークフロー:1つの作業が複数の状態を持ち、その状態の変化を管理するために利用します。承認やレビューのプロセスは、よくワークフローで管理します。

パイプライン/かんばんやワークフローを利用する際、いずれかを先に定義し、その後、関連する開発内容に適用していきます。また、パイプラインにワークフロー、かんばんにパイプラインやワークフローと組み合わせて利用します。しかし、長いパイプライン、複雑なかんばんや、煩雑なワークフローは、ツールで実現することはできますが、管理コストが掛かりますのでお勧めできません。目的を明確にし、それに見合った使い方をしましょう。

まとめ

システム開発は複雑です。ツールの導入の重要な目的の1つは、その複雑さを可視化し、管理することと言えます。

本記事では1つの開発中に、アジャイル開発、従来のウォーターフォール開発及びかんばん方式を用いる開発が同時に存在するという複雑な開発場面を想定し、Hansoftでどのようにプロジェクト管理を効果的に行うかを示すために、開発計画の作成方法を紹介しました。日々、個々の作業を担当しているメンバー達が自分の作業状況をHansoftに反映し、リアルタイムに最新の開発状況を共有できます。

Hansoftを利用し、複数の開発スタイルの情報共有ができる上、それぞれのチームは自分たちの開発スタイルに合う計画に基づいて、開発内容、進捗及び不具合の管理ができます。また、チームに権限を委譲することによって、チームローカルの管理ができますので、開発の全般にわたる意思決定の速度を向上できます。ぜひ、ご活用ください。

参考文献

[1].Jesper Boeg, Priming KANBAN - A 10 step guide to optimizing flow in your software delivery system, Trifork Agile Excellence Mini Book Series, 2011

[2].PMI, A Guide to the Project Management Body of Knowledge (PMBOK GUIDE) 5th Edition, 2012