s4na's blog

s4naのテックブログ

ファーストペンギン

アジャイルソフトウェア開発とスクラムについてまとめた

まえがき

今週からフィヨルドブートキャンプのスクラムチームに参加します。
そのため、スクラムチームに参加する前に、「アジャイルソフトウェア開発とは?」「スクラムとは?」という概念について、知っていることを調べ補足しつつまとめたので公開します。

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

  • ソフトウェア開発手法の一種
  • 通称アジャイル
  • アジャイルソフトウェア開発はソフトウェア開発手法群の総称であり、スクラム、XP開発など複数の開発手法が属する。そのため、スクラムだけがアジャイルではない
  • ウォーターフォール開発手法とよく比較される
  • ウォーターフォール開発手法が「計画、設計〜テスト、リリース」までのフェーズを1段階ずつこなしていく手法。動くソフトウェアは一番最後にならないと見れない
  • 動くソフトウェアとは、フィーチャ(ユーザー側の視点で記述された、ユーザーにとってのソフトウェアの価値を表現したもの)を提供するソフトウェア。1レイヤー単位の実装(モジュール単位など)ではなく、1部分だけでもいいので、全レイヤーを通したソフトウェアを作成すること
  • アジャイルは1イテレーション(開発単位)ごとに動くソフトウェアをインクリメント(成果物)として出していく
  • アジャイルは1イテレーションごとにインクリメントを出すことで、適宜計画や方針を検討できる
  • アジャイルはプロダクトオーナーと開発チームとの情報非対称性を減らす
  • アジャイルはチーム内での情報非対称性を減少させる

価値観と原則

  • アジャイルの考え方は価値観と原則により規定されている
  • アジャイルアジャイルのチーム全員が価値観と原則を共有し実践することで、品質の高いソフトウェア開発が行える
  • ここでいう品質とは、ユーザーに対して価値を提供できるソフトウェア開発のことを指し、絶対的な価値観ではない

4つの価値(左より右に価値を置く。※左に価値がないということではない)

  • 「プロセスやツール」よりも「個人と対話」
    • アジャイルでは、プロセスやツールにのったコミュニケーションではなく、個人を一個人として尊敬し尊重し対話することに重きが置かれる。また、対面でのコミュニケーションによる相互理解で、より良いチームが作られる
  • 「包括的なドキュメント」より「動くソフトウェア」
    • 例えばウォーターフォールでは、工程毎に包括的なドキュメントが作成できる。アジャイルでは、それよりも実際に動くソフトウェアをインクリメントとして提示していく
  • 「契約交渉」より「顧客との協調」
  • 「計画に従うこと」よりも「変化への対応」
    • 計画していた当初と前提条件が変化することもある。アジャイルでは、変化に合わせて顧客にフィーチャを提供していく

12の原則

  • 顧客の満足を求め続ける
  • 要求の本質を見抜き、変更を前向きに
  • 成果物を2,3週間で、リリースし続ける
  • 全員で共通の目標に向かおう
  • 人の意欲は信頼から
  • 顧客も開発チームも直接対話で
  • 進捗も品質も現物で
  • 一定のペースでプロジェクトにリズムを
  • よい技術、よい設計、よい品質の追求
  • 無駄=価値を生まない、を探してやめる
  • よいモノはよいチームから
  • 自分たちのやり方を毎週、調整する

スクラム

  • アジャイルソフトウェア開発の一種
  • アジャイルの価値観、原則に則った上で、具体的なソフトウェア開発手法がまとまっている
  • スクラムの考え方は「スクラムを支える3本柱」と「価値基準」によって規定されている

スクラムを支える3本柱

価値基準

  • 確約
    • 個人はスクラムチームのゴールの達成を確約しなければならない
  • 勇気
    • スクラムチームのメンバーは正しいことをする勇気を持ち、困難な問題に取り組まなければならない
  • 集中
  • 公開
  • 尊敬
    • スクラムチームのメンバーはお互いを能力のある独立した個人として尊敬しなければならない

スクラムチームの役割

  • プロダクトオーナー
  • スクラムマスター
    • プロジェクトを円滑に進める責任を持つ人
  • 開発チーム
    • 動くソフトウェアを開発する人
    • 1チームは10人以下が望ましい
  • スクラムチーム

スクラム開発の流れ

  1. プロダクトバックログからバックログを選び、スプリントバックログに入れる
  2. スプリントバックログをもとにスプリント

  3. プロダクトバックログの意味: プロダクトの機能を記述したもの。プロダクトオーナーが優先順位を変更する

  4. スプリントバックログの意味: スプリント期間中に行うタスクのリスト

スプリントの流れ

注意

  • スプリント期間中タスクの追加はできない

スプリントの流れ

  1. スプリントプランニング
    1. スプリント期間中に何を行うか決める
  2. デイリースクラム
    1. 毎日1日の作業開始前に開発チームで行う活動
    2. 誰がどのスプリントバックログに着手するか、問題が発生していないかを15分で行う
  3. スプリント実施
    1. スプリントバックログを消化する
  4. スプリントレビュー
    1. スプリントで作成したインクリメントの検査、プロダクトバックログの適応を行う
  5. スプリントレトロスペクティブ
    1. チームの成長、プロセスの改善を目的に、振り返りを行う
  6. リファインメント(旧名称: グルーミング)
    1. 優先順位の見積もり、修正を行う

作業単位

  • スクラムではユーザーストーリー単位で作業を行う
  • 結局チームはユーザーストーリーをタスクに分解するが、分解するのはストーリー開発を開始するイテレーションの開始時点

ユーザーストーリー

  • ユーザーにとって実現したいこと、価値のあること

ストーリーの書き方

  • ユーザーストーリー
  • DONEの定義(完了の定義)
  • ストーリーポイント

タスク

  • ユーザーストーリーを実現するために分解したもの
  • タスクをこなすことでユーザーストーリーの実現に近くが、ユーザーストーリー全体を完了させなければユーザーにとって価値が生まれない

タスクの書き方

  • タイトル
  • 作業内容
  • 割り込みかどうか
  • 誰が担当するか
  • ポイント

見積もり方法

  • 見積もりは複数作らない。

  • プランニングポーカー

    • やり方
      • 参加者にフィボナッチ数列が書かれたカードを配布
      • 基準となる数値を決めるため、簡単なタスクに1を割り当て、共通の基準とする
      • タスクを一つ選び、仕様がわからない人がいれば、その場で説明
      • 他のタスクは基準のポイントを基準に、一斉にカードを出す
      • 最小値、最大値を出した人の意見に聞く
      • 全員が納得できるまで続ける
  • ポイント振りが難しい場合、スパイクする

    • スパイクの意味: タスクを分解すること

参考