バックログの基礎知識
不透明で混沌してしまう開発の現場では、プロジェクトの透明度を高めて業務を可視化し、メンバーの創造性を高める手法が考案されています。ここではそのキーワードとなる『バックログ』について解説します。
バックログとは
『ソフトウェア開発』の現場で、クライアントから開発要求がありながら『未着手・未達成』であるシステムや案件のことを『バックログ』(Backlog)と呼びます。
また先進的な『アジャイル開発』などのソフトウェア開発方法論(SDM)においては、プロジェクトに携わるチームとして『達成すべき課題』や『実現すべき機能』を一覧したリストを指す語でもあります。
バックログリファインメントとは
『バックログリファインメント』は、課題リストとしてのバックログを採用している開発方法において使われる用語です。
プロジェクトチームはクライアントとのコミュニケーションのなかで『ユーザーストーリー』(顧客の要望)を明らかにし、これを個別に仕分け、バックログ内の『アイテム』(項目)としてリスト化します。
アイテムには達成すべき『優先順位』があり、要求をクリアにして詳細に記述されているものほどリストの上に表示させます。
このアイテムに対して『詳細の追加』『見積もり』『並び替え』を行うことをバックログの『リファインメント』と呼びます。
特に『スクラム開発』においてはバックログを情報源として開発を進めるため、リファインメントは『開発の拠りどころ』をクリアにする非常に重要な作業です。
このためリファインメントの実施にあたってはクライアントを交えたミーティングが密に行われ、リファインメントを行える権限を持つメンバーを限定します。
こうして開発中にアイテムの『レビューと改定』は継続的に行われることになり、これをいつ・どのように行うかは、チーム全体で決定します。
ソフトウェア開発の主な手法
バックログについて理解するために、ソフトウェア開発手法の種類について押さえておきましょう。
『ソフトウェア工学』における開発思想を『SDM』と呼び、ソフトウェア開発の工程を構造化・制御する『フレームワーク』(開発手法の枠組み)を形成します。
情報技術の歴史のなかで、さまざまなSDMが考案されてきました。それぞれがメリット・デメリットを持ち、プロジェクトの性格によって最適なワークフレームは異なります。
ここでは主なソフトウェア開発の種類を解説します。
ウォーターフォール開発
『ウォーターフォール開発』は古典的な開発手法であり、慣習的に多くのプロジェクトで採用されてきました。
ウォーターフォールとは『滝』を意味し、開発工程が『不可逆的に上から下へ』流れるさまを表しています。
『家を建てる』などの物理的なモノづくりの手法を、ソフトウェア工学に適用したもので、基本的に『工程の後戻り(手戻り)』は予定されていません。
しかしソフトウェア開発においてはプロジェクト初期段階での『システム全体の定義は困難』であり『要求仕様の変更』もしばしば行われます。
そのため『より柔軟な開発手法』が求められ、さまざまなフレームワークが生まれた、という経緯があります。
スパイラル開発
『スパイラル開発』は開発工程の一連の流れを『設計・開発・テスト・評価』という小さな単位にまとめ、これをひとつの『サイクル』として反復するスタイルです。
一回のサイクルでひとつの機能を完成させたり、システム全体の改良を行ったりなど、一つの目標を達成します。予測不能な問題に対処しやすい『柔軟なフレームワーク』です。
プロトタイプ開発
『プロトタイプ開発』は、完全なシステムを作るのではなく不完全なバージョンの『プロトタイプ』(試作品)を作る開発手法です。
使い捨てのプログラムを作る『ラピッドプロトタイピング』と、試作品を改良して完成形にしていく『進化的プロトタイピング』に大別されます。
プロトタイプはクライアントに完成形をイメージさせることで、開発の初期段階でフィードバックが得られることがメリットとして挙げられます。
また開発者としても試作品を作ってみることで正確な見積もりが可能となり、計画の妥当性を早期に判断できます。
ここで注意したいのは、プロトタイプ開発が扱う開発手法は『プロジェクトの一部』であり、プロジェクト全体のフレームワークとしては機能しないということです。
そのため、他のフレームワークと組み合わせて運用することが前提となります。
アジャイル開発
『アジャイル開発』は単一の開発手法を指す語ではなく、小規模なチームでの運用を想定した開発手法の総称です。
その多くは『イテレーション』(反復)と呼ばれる1~4週間程度の短い開発サイクルを繰り返すスタイルをとります。
アジャイル開発の主な手法
いくつかあるアジャイル開発の種類の中でも、代表的な4種類を紹介します。
スクラム
『スクラム』はスポーツのラグビーにおけるスクラムから取られた語で、スポーツのようにチーム全体が共通のゴールに向かって創造性を最大化することを目的としています。
チームは『プロダクトオーナー』『スクラムマスター』『開発チーム』からなり、全体の人数は5~9名ほどが適当とされています。
開発プロセスは『反復的』で『スプリント』と呼ばれる1~4週間という『タイムボックス』の『固定周期』を繰り返していきます。
このスプリントに先立って作られるのが『プロダクトバックログ』で、ここに『達成すべきゴール』のリストを一覧します。
またスプリント中に更新される『スプリントバックログ』もあります。プロダクトバックログの中から、スプリント期間中に達成すべきものを抜き出して詳細化したものです。
カンバン
『カンバン』では壁を『ステージ』(縦の列)に分け、タスク内容を記入した『カード』を貼り付けます。
ステージは『準備』『承認』『開発』『テスト』『完了』などと分けておき、カードは必ずいずれかのステージに貼り付けられます。
作業者はここからカードを取ってタスクに取り掛かり、終了すれば『次のステージ』に貼り付けます。
一つのステージに含められるカード数をあらかじめ制限しておくことで『WIP(進行中の作業)の制限』を実現可能です。
カンバン方式ではスクラム開発のようなタイムボックスは存在せず、チーム内の特別な役職や明確な開発手法も規定されていません。『すべての地位でのリーダーシップ』を促進させることが求められています。
XPとは
XP(エクストリーム・プログラミング)は、アジャイル開発の先駆けとされる手法で、小規模な開発サイクルを繰り返しながら進めていきます。
開発者が守るべき19の『プラクティス』(実践)を提示し、チームの各自がそれらを意識して行動することが求められます。
全てのプラクティスを実践するのは困難であるため、実際には19のうち2~3のプラクティスが採用されていることが多いですね。以下に主なプラクティスを紹介します。
『テスト駆動開発』とは
実装より先にテストを作成するプラクティスであり『テストを通過するコードを書く』ことを目的とします。
テストは部品単位での正確性を測るための『ユニットテスト』(ホワイトボックステスト)と、システム全体がクライアントの要求を満たすか確認する『受け入れテスト』(ブラックボックステスト)の2種類に大別されます。
『リファクタリング』とは
将来的な機能追加や変更の作業が不具合を起こさずスムーズに行えるよう、プログラムの『内部構造を事前に整理』することを指します。
『継続的インテグレーション』は、ユニットテストをパスするコードが完成する度に『結合テスト』を行い、問題点・改善点の早期発見を目指すプラクティスです。少なくとも1日に1回は結合テストを行うことが規定されており、継続的インテグレーションのためのコンピュータを用意することが推奨されています。
FDD
FDD(ユーザー機能駆動開発)はアジャイル開発の中でも、クライアントにとっての『機能価値(feature)』を中心に据えた開発スタイルです。
開発する機能ごとにチームを分け、『計画・設計・構築』などの開発プロセスを繰り返していきます。
ツールによるバックログ管理
さまざまな開発手法を見てきましたが、実際の開発現場では、ツールを利用して、バックログを管理している場合が多いです。
代表的なツールである『Jira Software』を使って、バックログを管理する方法を見てみましょう。Jira Softwareは、スクラムやカンバンなどの開発手法のために、多くの企業が採用しているソフトウェアです。
プロジェクトの作成
Jira Softwareでプロジェクトをセットアップする場合、ユーザーが『Jira管理者』であることが必要ですので注意してください。
まず『ソフトウェアプロジェクト』を作成し、次にプロジェクトの詳細を設定します。
次に『ボード』を設定しますが、これがスクラムやカンバン方式の開発で使用するバックログやボードの機能です。
権限の設定やツールの準備
ボードの設定が完了したら、次はメンバー管理に移りましょう。
Jira Softwareではチームメンバーごとにボードへのアクセス権を設定でき、ここで『プロジェクトロール(役割)』がプロダクトオーナーなのかスクラムマスターなのかといった設定ができます。
また、メンバーを関連付けることで、ボード上の変更が特定のメンバーだけに通知される、といった設定もできます。
また、Jira Softwareと外部ツールの連携も可能ですので必要であれば関連付けましょう。
チャットツールの『Hipchat』、オンラインドキュメントツールの『Confluence』、カレンダーツールの『Team Calendars for Confluence』などをJira Softwareに接続すれば、ボード通知をチャットに送ることができたり、振り返りメモを書くことができたりと、チームのイベントをカレンダーに共有できます。
バックログの作成
メンバー設定とツールの準備が整ったなら、バックログの作成に入りましょう。
スクラムでの作成
スクラムでのバックログには、プロダクトオーナーが管理する『プロダクトバックログ』と、開発チームが管理する『スプリントバックログ』の2種類があります。
スクラムにおいては、プロダクトバックログで提示されたゴールをどのように達成するかを『実施可能な単位に分割』して、スプリントバックログに表示させます。
Jira Softwareではドラッグ&ドロップのような直感的な操作で、簡単に課題をスプリントに送ることが可能です。
カンバンでの作成
カンバンでバックログを作成する場合でも、優先順位は重要になります。
カードは『上部に貼ってあるほど重要性が高く』なるように管理します。緊急の案件では特別なステージに貼り付ける必要もあるでしょう。
Jira Softwareでは『課題の追加・ランク付け・カテゴリー分類』が容易に行えますので、カンバンにおける優先順位の管理がしやすいです。
バージョンの計画
Jira Softwareでは『バージョン管理』もできます。バージョンとは、1回分の機能アップデート内容をまとめたセットのことです。
そしていくつかのバージョンをリリースすることで、『エピック』というさらに大きな目標を達成することが、プロジェクトの目指すところとなります。
ここでは、Jira Softwareによるバージョンとエピックの管理について解説します。
バージョンの設定
Jira Softwareのスクラムプロジェクトで、バージョンを新規作成するには、『バックログ』に移動し、『バージョン』をクリックします。次に『バージョンの作成』をクリックして開始日や終了日を入力して新たなバージョンを作成します。
スクラムにおいては1回のスプリントで1つのバージョンをリリースすることを基本としていますので、スプリント単位での管理に役立つでしょう。
一方、カンバンの場合はスプリントの概念がありませんので、カンバンボードでバージョンを利用する際には、進捗状況に合わせて適時バージョンを更新する形になります。
エピックとブランチ戦略
『エピック』とは複数のバージョンやバックログで構成される、大きなユーザーストーリーです。
エピックの内容はボード上の複数プロジェクトに同時に表示させることができるので、開発を同時並行して進める『ブランチ戦略』を考える際に有効です。
カンバンにおいても、テストフェーズで複数名が別方法で機能検査する場合などにも有効活用できるでしょう。
バックログをもとに作業開始
バックログの設定ができたなら、いよいよ実際の作業に取り掛かる段階です。具体的な進め方を見てみましょう。
スクラムでの作業
スクラムボードを設定している場合はJira Software上でスプリントを開始することができます。
まずは『スクラムマスター』が中心となって計画ミーティングを行い、スプリントの実施内容を計画します。計画に従って、開発チームはスプリント終了までに一つのリリースを完成させます。
スプリント中は、毎日決まった時間に短時間の『スクラム会議』を行い、チームの各自が、自分の作業内容やゴールに向けた作業計画を発表するのが基本です。
スプリントの最後にはリリースの評価などを話し合う『スプリントレビュー』を行い、振り返りを行なって次のスプリントに備えます。
カンバンでの作業
カンバンではイテレーションやスプリントの概念がありません。ボードを利用する際にはプロジェクト全体の『進捗状況管理』や、WIP制限などの『制約が守られているかを監視』することで業務の効率化を図ります。
リリースとレポート
バックログを消化し、プロジェクトやスプリントが終了すると、『リリース』の段階になります。
バージョンのリリース
バージョンをリリースするにあたって、課題が全てにおいてクリアしているかを確認する必要があります。
Jira Softwareでは、リリースに必要な課題の達成状況を、リリースハブ1カ所にまとめて表示されるので、確認しやすくなっています。『警告』タブに、問題を引き起こす可能性のある項目が表示されるように設定することも可能です。
レポート
ボードに関する『レポート』はプロジェクト中いつでもワンクリックで表示させることができますので、作業の進行状況を確認するのに役立ちます。
またリリースの後もレポートを活用することで、作業内容をふり返り、次回の作業効率を上げるためなど、さまざまな分析・検証に利用可能です。
まとめ
ソフトウェア開発の現場は刻々と変化しています。今すぐ動く機能が欲しいという要望も増えており、またスマートフォンなど『機能追加や仕様変更が前提』とされた精密なデバイスにも対応していかなければいけません。
さまざまなプロジェクトがあるなかで、クオリティーの高い開発を続けていくには、最適な開発手法の理解が重要です。バックログという考え方を理解し、さまざまな開発手法を把握することで、効率的な開発を進めましょう。