Claudeに問う「スクラム開発のやり方を教えて」

システム開発の問題

いよいよスクラムの解説です

これまで、ウォーターフォールモデル・プロトタイピング・スパイラルモデルの解説をClaudeさんにしてもらいましたが、いよいよ本命のスクラムの解説をしてもらいます。
Claudeさんの解説では、スクラムは米国では58%の企業が導入している最も普及しているプロセスモデルだそうです。
日本でも遅かれ早かれ同様の状況になると思われます。
解説の終わりにスクラムの解説書籍もご紹介しています。
では、解説してもらいましょう。

Claudeに問う

ソフトウェア開発プロセスモデルのスクラム開発のやり方について、詳しく教えてください。

スクラム開発は、アジャイルソフトウェア開発の一つの手法です。反復的かつ漸進的にソフトウェアを開発する方法で、以下の特徴があります。

  1. スプリント 作業は一定期間(通常は2週間から4週間)のスプリントに分けられます。各スプリントの終わりにインクリメントの成果物が提供されます。
  2. プロダクトバックログ プロダクトバックログには、プロダクトの機能やユーザーストーリーが優先順位付けされてリストアップされます。
  3. スプリントバックログ 各スプリントの開始時に、プロダクトバックログから実装する項目を決め、それがスプリントバックログになります。
  4. スクラムチーム プロダクトオーナー、スクラムマスター、開発チームの3つの役割から構成されます。
  5. デイリースクラム 開発チームは毎日15分程度のミーティングを行い、進捗状況を共有します。
  6. スプリントレビュー 各スプリントの終了時に、ステークホルダーを交えてレビューを行います。
  7. スプリントレトロスペクティブ
    スプリントの改善点を振り返り、次のスプリントに活かします。

スクラムでは短期間の反復によってリスクを低減し、頻繁にフィードバックを得ることで、要件の変更に柔軟に対応できます。また、タスクの見積もりや進捗の視覚化などの実践も重視されます。

スプリントは原則として最初に決めた固定期間ということで良いですか。
最初だけ3ヶ月など長期間を取るケースはありますか。
また、何度かスプリントを反復した途中で、一時的に長期間のスプリントを取ることはありますか。

スプリントの期間は原則として固定されており、通常は2週間から4週間程度が一般的です。

最初だけ3ヶ月など長期間のスプリントを設定することは、スクラム開発の考え方から外れてしまうため、あまりお勧めできません。スクラムの目的は小さな反復を繰り返すことで適応力を高め、リスクを低減することにあります。長期間のスプリントだと、その間に要件変更が入った場合に対応が困難になる可能性があります。

しかし、状況によっては一時的に長期間のスプリントを設定する場合もあり得ます。例えば、プロジェクトの後半で安定化フェーズに入った場合など、頻繁な反復よりもむしろ集中して機能を実装する必要がある場合です。ただし、このような判断は経験豊富なスクラムマスターが状況を見極めて行う必要があります。

スクラム開発ではスプリントの期間は原則固定ですが、プロジェクトの進捗状況や要件、リスクなどを考慮して、柔軟に対応することが求められます。頻繁な反復を基本としつつ、適切な時期に長期スプリントを設定するなど、状況に合わせて調整するのがよいでしょう。

プロダクトバックログとはウォータフォールのおける要件定義書のようなものと認識しますが、その内容は要件定義書とどのように異なりますか。

プロダクトバックログは、ウォーターフォール開発における要件定義書とは異なる点が多くあります。

【プロダクトバックログの特徴】

  1. 優先順位付けされた粗粒度の機能リスト プロダクトバックログには、実装すべき機能がユーザーストーリーの形式で優先順位付けされて列挙されています。詳細な要件仕様までは記載されません。
  2. 絶えず進化する 要件変更に対応できるよう、プロダクトバックログは常に見直し、修正、追加が行われる生きたドキュメントです。
  3. プロダクトオーナーが管理 プロダクトオーナーが優先度をつけ、プロダクトバックログを管理します。

【要件定義書との違い】

  • 要件定義書は開発開始前に細かく固定された仕様書です。一方、プロダクトバックログは常に進化を続けます。
  • 要件定義書は一度確定すると変更が難しいのに対し、プロダクトバックログは柔軟に変更できます。
  • 要件定義書は分析者が作成しますが、プロダクトバックログはプロダクトオーナーが管理します。

つまり、プロダクトバックログは詳細よりも粗い大まかな機能リストであり、常に進化を続けられるように設計された、アジャイル開発に適したドキュメントなのです。

「優先順位付けされた粗粒度の機能リスト」という事は、最終完成目標となる機能を箇条書きにしたものと認識して良いですか。
体系立てられた要件定義書のようなものでは無く、もっと大雑把な機能のリストという認識で良いですか。

はい、その認識で正しいです。

プロダクトバックログは、最終的に実現したいプロダクトの機能を大まかに箇条書きにしたリストと捉えることができます。

体系立った要件定義書のように詳細に機能が階層化されたり、詳細な仕様が記述されているわけではありません。

プロダクトバックログの中身は、例えば以下のようなごく簡単な機能の一覧になります。

  • ユーザー登録機能
  • 商品検索機能
  • 決済機能
  • 管理者ページ
  • ヘルプ機能

このように、実装すべき機能の大まかな概要だけが書かれた、極めて大雑把なリストです。

詳細な要件の定義は、実際に各機能を実装する際に、そのスプリントのバックログ作成時に行われます。

プロダクトバックログ自体は、開発の道筋を示す機能の塊のリストという位置づけになります。要件を細かく定義し尽くすものではなく、あくまでも大まかな開発の方向性を示すものと理解するのが適切です。

プロダクトバックログから次のスプリントで実装を目指す機能を抜き出したリストが、スプリントバックログという認識で良いですか。
抜き出した内容は、プロダクトバックログと全く同じものという認識です。

はい、その認識で概ね正しいです。

スプリントバックログは、プロダクトバックログから次のスプリントで実装する機能を抜き出したリストになります。

ただし、抜き出した内容がプロダクトバックログと”全く同じ”というわけではありません。一般的には以下のようなプロセスを経ます。

  1. プロダクトバックログから、次のスプリントで実装する機能を選定する
  2. 選定した機能についてユーザーストーリーをさらに詳細化し、タスクに分解する
  3. 各タスクに対して作業時間の見積もりを行う
  4. これらの詳細化されたユーザーストーリーとタスク、見積もりの集合体がスプリントバックログになる

つまり、スプリントバックログはプロダクトバックログの粗い機能要求から、より具体的な作業内容にブレークダウンされた状態になっているのが一般的です。

ですので、スプリントバックログ中の機能要求の記述自体はプロダクトバックログから引き継がれますが、より詳細化され、作業単位に分割された形になっているのが特徴です。

プロダクトバックログからスプリントバックログへ転記する過程で、簡単な詳細設計を済ませて、タスク分解した結果をスプリントバックログへ書くということですか。

はい、その理解で正しいです。

プロダクトバックログからスプリントバックログへの移行プロセスでは、次のようなステップを経て、詳細設計とタスク分解が行われます。

  1. プロダクトバックログから次のスプリントで実装する機能を選定

  2. 選定した機能について、簡単な詳細設計を行う

    • ユーザーストーリーをさらに詳しく記述
    • 画面設計や処理フロー、データモデルなどの設計
  3. 設計した内容に基づき、実装が必要なタスクに分解する

  4. 各タスクの作業時間を見積もる

  5. この詳細化されたユーザーストーリー、タスク、見積もりの集合体がスプリントバックログになる

つまり、プロダクトバックログの粗い機能要求を、スプリントバックログでは実装に必要な程度に詳細化し、作業単位のタスクに分解した上で記載するのです。

このプロセスを経ることで、実際の開発作業が具体的に見えてくるため、適切なタスク割り当てと見積もりが可能になります。プロダクトバックログからスプリントバックログへの移行は、機能要件を実装に落とし込む重要なステップなのです。

スプリントバックログはスプリントの最初に必ず実施するという認識で良いですね。
スプリントの中に含まれる作業ということで。

はい、その理解で正しいです。

スプリントバックログの作成は、必ずスプリントの最初に実施されます。これはスプリントに含まれる作業内容を確定するための不可欠な作業なのです。

スプリントの一連の流れは概ね以下のようになります:

  1. スプリントプランニングミーティング

    • プロダクトバックログから次のスプリントで実装する機能を選定
    • 選定した機能の詳細設計、タスク分解、見積もりを行い、スプリントバックログを作成
  2. スプリント実施

    • 作成したスプリントバックログに従い、実際の開発作業を進める
    • デイリースクラムで進捗を共有
  3. スプリントレビュー

    • スプリント成果物をステークホルダーにレビューしてもらう
  4. スプリントレトロスペクティブ

    • スプリントを振り返り、次のスプリントに向けた改善点を洗い出す

つまり、スプリントの最初のプランニングミーティングで、次のスプリントで何を実装するかを決め、それをスプリントバックログとしてまとめるのです。この作業なしにスプリントを開始することはできません。

スプリントバックログはスプリントの「入力」であり、実装すべき機能とタスクを確定する重要な成果物なのです。

スクラムチームはスプリント以前に、プロジェクト開始前に決めてしまうという認識で良いですか。
また、原則として変更しないという認識です。

はい、その認識は正しいです。

スクラムチームのメンバー構成は、通常はプロジェクト開始前に決定されます。スクラムチームは以下の3つの役割から構成されます。

  • プロダクトオーナー
  • スクラムマスター
  • 開発チーム

プロダクトオーナーと開発チームのメンバーは、プロジェクト開始前に割り当てられます。スクラムマスターも同様に、プロジェクト立ち上げ時に決められることが一般的です。

そしてこのスクラムチームの構成は、原則として変更しないことが推奨されています。なぜなら、チームの密接なコミュニケーションとシナジーが大切とされるスクラム開発において、チームメンバーの入れ替わりは望ましくないからです。

ただし、やむを得ない事情でメンバーが交代する場合もあり得ます。その際は、新しいメンバーへの十分な引き継ぎと、チームとの馴染みを重視する必要があります。

スクラムチームは、プロジェクトに最適なメンバーで固定的に構成されることが理想です。頻繁な入れ替わりは、チームの生産性とパフォーマンスに悪影響を及ぼす可能性があるためです。

プロダクトオーナーとスクラムマスターの役割について解説してください。
また、関連する開発チームの働き方の特徴などもあれば解説をお願いします。

プロダクトオーナーとスクラムマスターの役割、および開発チームの働き方の特徴は以下のとおりです。

【プロダクトオーナー】

  • プロダクトバックログの管理者
  • プロダクトの要件を決定し、開発の優先順位を付ける
  • ステークホルダーの視点を開発チームに伝える
  • スプリントレビューで成果物を検査し、許可する

【スクラムマスター】

  • スクラムプロセスを理解し、チームにスクラムの価値観を浸透させる
  • スクラムイベント(ミーティングなど)を主催し、適切に進行する
  • スクラムチームの障害となる問題を特定し、解決を支援する
  • スクラムチーム以外とのインターフェースを円滑にする

【開発チーム】

  • 自己組織化かつクロスファンクショナルなチーム
  • 機能の実装はチーム内で分担して行う
  • デイリースクラムで進捗を共有し、協調する
  • 見積りやタスクの振り分けは自らの裁量で決める

スクラム開発の開発チームには以下の特徴があります。

  • 役割は存在せず、誰もが機能実装を担える(専門家ではない)
  • フルタイムでプロジェクトに専属し、ディストラクションがない
  • チームルームに常駐し、フェイストゥフェイスのコミュニケーションが可能
  • アジャイルなプラクティス(ユニットテスト、リファクタリングなど)を実践

このように、スクラムでは3つの役割が明確に定義されており、開発チームは自己組織化されたクロスファンクショナルなチームとして機能するのが理想とされています。

ウォーターフォールモデルにおけるアーキテクト該当するのはプロダクトオーナーになりますか。
自己組織化という事は、開発チーム全員がアーキテクチャ設計に関わるということになるのでしょうか。
ソフトウェア全体の設計に責任を持ち全体設計を行っているのが誰なのか、教えてください。

ウォーターフォールモデルにおけるアーキテクトの役割に直接対応する役割はスクラムにはありません。

プロダクトオーナーはあくまでもプロダクトの要件を決め、優先順位を付ける立場であり、技術的な全体設計を主導する役割ではありません。

自己組織化された開発チームが、ソフトウェア全体の設計に関わることになります。ただし、特定の全体アーキテクトがいるわけではありません。

スクラムにおけるアーキテクチャの設計プロセスは以下のようになります。

  1. プロダクトオーナーがプロダクトバックログに要件を記載する

  2. 開発チームがスプリントバックログ作成時に、その機能の詳細設計を行う

    • この時、チーム内の有識者がアーキテクチャの方向性を示唆する
  3. 機能開発を進めながら、必要に応じてアーキテクチャを検討し調整する

    • 設計の改善や課題は、スプリントレビュー等で確認
  4. アーキテクチャは進化を続け、プロダクトの完成に向けて徐々に形作られていく

つまり、スクラムではアーキテクチャの設計もタスクの1つと捉え、チーム全体で構築していくスタイルをとります。あらかじめ全体設計を決められるわけではありません。

ただし、参考となるアーキテクチャ設計の経験者がチームにいれば、その人が暗黙のアーキテクトのようにリードする場合もあります。しかし最終的には、開発チーム全員で合意形成しながらアーキテクチャを進化させていくのがスクラムのスタイルなのです。

「有識者がアーキテクチャの方向性を示唆する」となると、開発チーム全体の設計能力に格差があると、全体として設計能力の低い方に合わせることになりませんか。
「利口な設計」ができないのではないですか。

その指摘は正しく、スクラムにおいて開発チームの設計能力に格差があると、全体として最適なアーキテクチャを構築することが難しくなる可能性があります。

スクラムでは、以下のような課題が考えられます。

  1. 設計能力の高いメンバーの意見が反映されにくい

    • 自己組織化チームにおいて、意見の食い違いが生じる
    • 設計能力の低いメンバーに合わせざるを得なくなる
  2. 継続的な設計の改善が難しい

    • 新しい知見を取り入れる機会が少ない
    • レガシーな設計から脱却できない
  3. ベストプラクティスの共有が困難

    • 優れた設計パターンを横展開するのが難しい
    • チームスキルの Bottom-up が起きにくい

この点を補うために、実際には以下のようなアンチパターン対策が行われることがあります。

  • アーキテクチャオーナーを任命し、一定の設計方針を示す
  • アーキテクチャレビューボードを設置し、重要設計を審査する
  • 優秀なアーキテクト人材をコーチングロールで投入する

つまり、スクラムにおいても実質的に設計能力の高い人材を活用し、全体として最適なアーキテクチャを目指す仕組みが必要になってくるのです。

ただし、あくまでスクラムの理念を尊重しつつ、開発チームの自主性と納得性を大切にすることが重要です。トップダウンの設計を押し付けるのではなく、チームを支援する形が望ましいでしょう。

ウォーターフォールモデルにおけるマネージャに該当するのは、スクラムマスターになりますか。

はい、その認識で概ね正しいです。

ウォーターフォール型開発におけるプロジェクトマネージャに相当する役割が、スクラム開発のスクラムマスターです。

ただし、役割の内容や権限は異なる部分があります。

【プロジェクトマネージャの役割】

  • 開発プロセス全体を統括する
  • 作業の分担や進捗管理を行う
  • リソースの確保や課題対応など、プロジェクト運営を担う

【スクラムマスターの役割】

  • スクラムプロセスを適切に運用し、チームを支援する
  • 様々なミーティングを主催し、スムーズな進行を図る
  • チームの障害となる問題を特定し、解決を支援する
  • 開発作業自体には関与せず、プロセスの適正運用に専念する

つまり、プロジェクトマネージャが開発プロセス全体を管理・統括する立場であるのに対し、スクラムマスターはあくまでスクラムプロセスの適正な実施をサポートする役割に特化しています。

また、スクラムマスターには、開発作業への直接の指示や監督する権限はありません。開発チームは自己組織化されており、スクラムマスターは助言やファシリテートする立場に徹します。

このように役割は類似している部分もありますが、スクラムマスターは伝統的なプロジェクトマネージャほど権限や責任は大きくはありません。開発の自主性を重んじ、支援的な立場を保つことが重要な役割なのです。

スクラムでは開発メンバーは自己管理で主体的に働き、指揮命令は原則として受けないと聞いて事があります。
スクラムマスターの役割は「作業の障害の除去」にあると聞きましたが、この認識は正しいですか。

はい、その認識は正しいです。

スクラム開発においては、開発チームは自己組織化され、自らタスクを選択し進めていきます。スクラムマスターは、開発作業そのものに対する指揮命令系統の上位には立ちません。

スクラムマスターの主な役割は、開発チームが円滑に作業できる環境を整備し、障害となる問題を除去することにあります。具体的には以下のようなことが期待されています。

  • スクラムプロセスを適切に実施し、チームにスクラム理念を浸透させる
  • デイリースクラムなどのスクラムイベントを主催し、進行をサポートする
  • 開発を阻害する問題(技術的な課題、組織的な障壁など)を特定する
  • 特定した問題の解決に向けて、適切な支援やリソース確保を行う
  • 開発チームと他部門(経営層、他のチームなど)との調整を行う

つまり、スクラムマスターは開発作業の直接的な指揮命令ではなく、チームが作業に専念できるよう障害を除去し、環境を整備する役割を果たすのです。

開発チームは、管理者からの一方的な指示ではなく、自らの合意形成に基づいて自律的に作業を進めていきます。スクラムマスターはその自走を阻害しないよう、サポートと調整に徹することが求められます。

スクラムマスターの役割が「作業の障害の除去」にあるのなら、それを目的とした指揮命令は例外的に認められることになりませんか。
たとえば開発メンバーの意見が対立したとき、裁定を下すなど考えられます。

その通りです。スクラムマスターは原則として開発チームに直接指揮命令を下すことはありませんが、例外的な場面においては、ある程度の指示や裁定を下す権限を持っています。

具体的には、以下のようなケースが考えられます:

【障害となる問題への対処】

  • 開発チーム内での意見対立が解決できず、進捗に障害が生じている場合
  • 外部要因(組織の方針変更など)により、優先順位の見直しが必要になった場合

このような時、スクラムマスターは以下のような対応を行う可能性があります:

  • チームに対して最終的な意思決定を示す
  • プロダクトオーナーと協議し、プロダクトバックログの変更を指示する
  • リスクマネジメントなどの観点から、一時的に作業の見直しを命じる

ただし、このような権限は”最小限且つ一時的”なものでなければなりません。日常的に開発作業に介入したり、一方的な指示を繰り返したりするようでは、スクラムの理念から外れてしまいます。

つまり、スクラムマスターの指揮命令権限は、あくまで開発チームの自律性を阻害しない範囲内で、障害を除去する目的に限定されるべきなのです。チームの自走を妨げない最小限の関与が求められます。

デイリースクラムについて詳しく教えてください。

デイリースクラムは、スクラム開発における日々の重要なイベントです。

概要は以下の通りです。

【目的】

  • 開発チームの進捗を共有する
  • 次の24時間の作業計画を統一する
  • 問題点を発見し、解決方法を検討する

【実施方法】

  • 原則として毎日15分間程度

  • スタンドアップミーティング形式で行う

  • スクラムマスターがファシリテーターとなる

  • 各メンバーが以下の3点を発表する

    1. 前日までに終えた作業
    2. 今日行う予定の作業
    3. 障害となっている問題点

【特徴】

  • 短時間の打ち合わせなので、主題から外れない
  • メンバー間で情報を共有し、協調する
  • 問題が早期に可視化され、対策を立てやすい
  • メンバーのコミットメントを確認できる

デイリースクラムは、開発チーム内の調整を密に行う重要な機会です。各メンバーの作業状況を共有することで透明性が高まり、問題の特定と対策検討が容易になります。

また、相互の作業を把握しあうことで、タスクの分担の見直しなども行えます。加えて、朝一番にメンバー全員が集まることで、モチベーションの向上やチームのコミットメントを再確認する効果もあります。

このようにデイリースクラムは、開発チームの円滑なコミュニケーションと進捗管理に不可欠なイベントなのです。

スプリントの最後にやるスプリントレビューについて教えてください。

スプリントレビューは、スクラム開発における重要なイベントの一つです。各スプリントの終了時に行われ、以下のような目的があります。

【目的】

  1. スプリント期間中に完成した成果物をレビューする

    • 開発チームは、動作するソフトウェアを実際に示す
    • プロダクトオーナーは、要件への合致を確認する
  2. ステークホルダーからフィードバックを得る

    • 利用者の視点から、成果物の評価を受ける
    • 次のスプリントに向けた改善点を洗い出す
  3. プロダクトバックログの最新化を行う

    • レビューを受けて、優先順位や要件の見直しを行う
    • 次のスプリントで実装する範囲を決める

【実施方法】

  • 原則としてスプリントが終了したタイミングで4時間程度実施
  • プロダクトオーナー、ステークホルダー、開発チーム、スクラムマスターなどが参加
  • スクラムマスターがファシリテーターとなる
  • 実際の成果物(デモ、プロトタイプなど)を示しながらレビューする

スプリントレビューは、短期間で開発された成果を確認し、次のスプリントに向けた調整を行う、スクラム開発の肝となる重要なイベントです。この場で、進捗状況を関係者に共有し、フィードバックを得ることができます。

また、ステークホルダーの意見を反映しながらプロダクトバックログを最新化することで、要件の変更にも柔軟に対応できるようになります。レビューを経て、開発の方向性を常に最適化していくことが可能になるのです。

スプリントレトロスペクティブについて、教えてください。

スプリントレトロスペクティブは、各スプリントの終了後に行われる、振り返りと改善のためのイベントです。

【目的】

  • 直前のスプリントを振り返り、良かった点や問題点を洗い出す
  • 次のスプリントに向けて、プロセスやプラクティスを改善する施策を立てる
  • チームの成熟度を高め、パフォーマンスを継続的に向上させる

【実施方法】

  • スプリントレビュー終了後に1~3時間程度実施する

  • スクラムマスターがファシリテーターとなる

  • 開発チームのみが参加し、率直な意見交換ができる環境を確保する

  • 以下の3つの観点から振り返りを行う

    • 良かった点は何か
    • 問題があった点は何か
    • 次にどのように改善するか

【特徴】

  • 短期間の反復を活かし、継続的な改善サイクルを実現する
  • 開発チームの自己評価と改善意識を促進する
  • プロセスの最適化を図り、生産性を高めることができる
  • チームの一体感や信頼関係を深める効果もある

レトロスペクティブは、スクラム開発における”検査と調整”の重要な機会です。チームは自らのプロセスを分析し、次への改善点を明確にすることができます。

さらに、このイベントを通じてチームビルディングや価値観の共有も実現できます。レトロスペクティブは、スクラム開発を最適化し、チームを成熟させていく上で欠かせないプラクティスなのです。

スクラムの基本的なやり方とサイクルは分かりましたが、スクラム開発において、詳細設計に該当するのはスプリントバックログ作成にあたるという理解ですが、
最初の基本設計や、後工程の単体テストや結合テストとデバッグの工程を、どうやるのか良く分かりません。
スプリントの中の期間の開発工程が見えてきません。
教えてください。

スクラム開発における設計やテスト、デバッグ作業は、スプリントの中で以下のように行われます。

【基本設計】

  • プロダクトバックログには大まかな機能要件のみが記載されている

  • スプリント開始時に、そのスプリントで実装する機能の基本設計を行う

    • アーキテクチャ、コンポーネント構成、API設計など

【詳細設計】

  • スプリントバックログ作成時に、実装する機能の詳細設計を行う

    • 画面設計、データモデル、処理フロー、テスト観点の検討など

【実装作業】

  • 設計に基づき、スプリントの期間中に実装作業を行う

    • 開発チームでタスクを分担し、協力しながら進める

【単体テスト】

  • 実装と並行して、単体テストの作成と実行を行う

    • スクラムではユニットテストの徹底が推奨されている

【結合テスト】

  • 機能単位で結合テストを行い、インクリメントを構築する

    • 必要に応じてスタブやモックを作成する

【デバッグ】

  • 単体テスト、結合テスト、レビューを通して不具合を発見
  • 発見した不具合は、そのスプリント中にデバッグ対応する

つまり、基本設計からデバッグに至る一連の開発作業は、すべてスプリントの期間内に完結するように行われます。特に詳細設計、単体テストは、スプリントバックログ作業の一部として確実に実施されます。

各スプリントでインクリメントが構築され、スプリントレビューで成果物が検査されるため、開発プロセスが1つのサイクルとして回ることになります。この反復を重ねることで、徐々に要件を実現していくのがスクラムの開発スタイルです。

「スプリントレビューの直前に全体の結合テストを必ず実施する」というようなルールは無いのですか。
スプリントの終了間際に不具合が発見されたらどうするのですか。

スクラム開発においては、全体の結合テストを必ずスプリントレビューの直前に実施するというルールはありません。

ただし、各スプリントでインクリメントを構築し、それをレビューの場で示すことは求められています。つまり、スプリント期間中に部分的な結合テストと、インクリメントの動作確認は必ず行われます。

具体的な進め方としては、以下のようになるでしょう:

  1. スプリントの途中で、機能単位の結合テストを継続的に実施
  2. スプリント後半に、構築したインクリメントの動作確認と部分的な結合テストを実施
  3. その過程で発見した不具合は、そのスプリント内でデバッグを実施
  4. スプリントレビューの時点で、インクリメントを実際に動作させてデモを行う

このように、全体の本格的な結合テストを必ずレビュー直前に実施するわけではありません。代わりに、継続的にインクリメントを統合し、部分的な結合テストを重ねながら、徐々に全体を組み上げていきます。

ただし、スプリントレビュー直前に重大な不具合が発見された場合は、次の対応が考えられます:

  • 軽微であれば、そのスプリント内に修正する

  • 重大な場合は、次のスプリントに修正対応を回す

    • その際、プロダクトバックログの優先順位を調整する

このように、スクラムではスプリント内で問題を解決することが理想ですが、状況に応じて柔軟に対処することになります。開発の流れを止めずに、次のサイクルへスムーズに移行することが肝心なのです。

「重大な場合は、次のスプリントに修正対応を回す」ということは、重大なデバッグ自体が独立したタスクであり、次のスプリントバックログの項目なのですね。
スプリント完了時に重大なバグを有したまま、スプリントを終了する場合もあるのですね。

はい、その理解で正しいです。

スクラム開発においては、スプリント期間内に発見された重大な不具合に関して、デバッグ作業自体を次のスプリントバックログの項目として計上し、対応することがあります。

その場合、次のようなプロセスになります:

  1. 当初のスプリントで重大な不具合が発見される
  2. そのスプリント内での修正が間に合わない場合
  3. 不具合修正のタスクをプロダクトバックログに追加
  4. 優先度を調整し、次のスプリントバックログに組み込む
  5. 次のスプリントでその不具合に対応する

つまり、スプリントの期限内に間に合わない重大な課題は、次のサイクルに持ち越して対処するということです。

スクラムでは、スプリントの期間を過ぎた時点で、その時点での成果物をそのままレビューし、次のスプリントに切り替えることが原則となっています。

不具合が残っていても、スケジュールからは強制的にスプリントを区切ります。その代わり、発見された問題は次のサイクルで確実に対応することになります。

このように、スクラムでは完全に完了するまで待たずに、部分的な成果を出し続けながら、課題を次のステップに引き継いでいく開発スタイルをとるのです。

プロダクトバックログの機能開発が達成されるまで、本番リリースはしないのですよね。

はい、その理解で正しいです。

スクラム開発においては、プロダクトバックログに列挙された全ての機能要件が実装され、検査に合格するまでは本番リリースは行われません。

本番リリースの条件としては、以下が満たされる必要があります。

  • プロダクトバックログの全ての機能要件が実装済みであること
  • スプリントレビューで、すべての機能が受け入れ基準(許容条件)を満たしていると確認されていること
  • 十分な検査(テスト、レビューなど)が行われ、リリース品質が確保されていること

スクラム開発では、機能要件を徐々にインクリメントとして実現してゆきますが、すべての要件が完全に実装されるまでは本番リリースはできません。

プロダクトバックログに記載されたすべての要件が実装され、検査に合格して初めて、本格的なリリースが可能になるのです。

ただし、場合によってはユーザーにプロトタイプを事前に提供したり、部分的な機能のリリースを行う場合もあります。しかし、最終的な完全リリースが可能になるのは、プロダクトバックログの全要件を満たした時点になります。

つまり、スクラム開発では要件全体の実現が完了するまでは本番リリースはされず、その全体が完成した時点で製品がリリースされるという開発スタイルをとるわけです。

スプリントバックログの内容が達成出来なかった場合は、達成できなかった項目は、次のスプリントバックログへ記載するという認識で良いですか。

はい、その認識で正しいです。

スプリントバックログで計画した内容が、そのスプリント期間内に完了できなかった場合、残った項目は次のスプリントバックログに持ち越されます。

具体的には以下のようになります:

  1. スプリント期間内に完了できなかった項目を確認する
  2. それらの項目をプロダクトバックログに戻す
  3. 次のスプリントプランニングで、プロダクトバックログから優先度の高い項目を選択
  4. 選択した項目と、前スプリントから持ち越した項目を、次のスプリントバックログに組み込む

つまり、前スプリントで完了できなかった分の項目は、プロダクトバックログに”戻された”うえで、次のスプリントバックログに改めて計上されることになります。

スクラムでは、スプリントの期間内にコミットした内容を完了することが理想です。 しかし現実には見積もり超過などにより、すべての項目を消化できないことがあります。

そういった場合に、残った項目を次のスプリントに持ち越すことで、要件の実現を確実に果たせるようになっています。

このように、スクラムでは柔軟に計画を見直しながら、徐々に製品の完成度を高めていく開発サイクルが回されていくのです。

大がかりなソフトウェアのアップグレードが行われる場合は、そのアップグレード自体が独立したプロダクトバックログになるという認識で良いですか。

はい、その理解で正しいです。

大規模なソフトウェアのアップグレードを行う場合は、その作業自体が1つの独立したプロダクトバックログとして扱われることが一般的です。

具体的には、以下のようなプロセスが考えられます:

  1. アップグレードの目的や対象範囲、期待される機能などを定義する
  2. これらの要件をプロダクトバックログの項目として整理する
  3. 優先順位をつけ、適切なスプリント期間を設定する
  4. 複数のスプリントを設け、計画的にアップグレード作業を実施する
  5. 最終的にリリース基準を満たせば、アップグレードを本番に適用する

つまり、通常の新規開発と同様に、アップグレードという1つの”プロダクト”に対してプロダクトバックログを作成し、スプリントを繰り返して要件を実現していくことになります。

アップグレードの規模が大きい場合、さらにその下にリリースバックログなどを設け、アップグレード自体をより細かく分割して管理することもあります。

このように、大きな変更作業であっても、スクラムのプラクティスに則ってバックログとスプリントを用意し、段階的かつ反復的に実装を進めていくことが可能なのです。

アップグレードであっても新規開発であっても、スクラム開発の基本的なアプローチに従いながら、作業全体をプロダクトとしてバックログに落とし込む点では共通しています。

ソフトウェア開発の不確定性

ソフトウェア受託開発の世界では、ユーザー側の人々は「要件変更なんてあって当たり前だ」と豪語されて、際限なく仕様変更を繰り返す事が当たり前の慣習になっています。
ウォーターフォールモデル開発では仕様変更は想定していないことは、以前のウォーターフォールモデルの解説でClaudeが説明したと思います。
本来、仕様変更してはいけないウォーターフォールモデルで仕様変更を繰り返すのだから、開発プロジェクトが失敗するのは当然でしょう。 成功する方が不思議なぐらいです。
また、この際限の無い仕様変更が、最も仕様変更の悪影響を受けやすい後工程のプログラマーの負担を増大させ、精神疾患患者を量産する一つの原因となっています。 プログラマーがSIer業界から流出するのも当然と思います。

ソフトウェア開発は「やってみなければ分からない」部分が非常に多く、ユーザーが「要件変更なんてあって当たり前だ」と豪語するもの理解できます。
同時に、仮に要件が定まっていても、ITシステム開発者の方でも「やってみたら予想していたより難しく時間が掛かってしまった」という事がいくつも出てきます。
つまり、仮に要件が定まっていても正確な見積もりを出すのは不可能なのです。
ユーザーが要件を確定できないように、ITベンダーも見積もり工数を確定できません。
SIer業界は、この「できないこと、不可能なこと」という現実を、「できて当たり前のこと」という幻想に置き換えて、あり得ない幻想を遂行している非現実的な商売ということになると思います。

これまでいくつもの記事で、生成AIのClaudeにソフトウェア開発プロセスモデルについて解説してもらいましたが、米国のソフトウェア開発では既にウォーターフォールモデル開発が時代遅れになっている事が解りました。
ソフトウェア開発プロセスモデルはアジャイル意外にも複数あり、既にウォーターフォールモデルの「仕様変更ができない」問題を克服する方法がいくつも存在する事がわかったと思います。
現在の日本のソフトウェア開発では、ウォーターフォールモデルの問題から目を背け、ウォーターフォールモデルの「仕様変更ができない」問題を克服する方法を無視し続けているのが現状です。

経産省からもDXレポートで、アジャイル開発への移行を推奨され「尻を叩かれる」状態にあるにも関わらず、相も変わらず多重請負ウォーターフォールモデル開発を継続しています。
多重請負の足下からは、プログラマーが他業種や外資へと流失しており、このウォーターフォールモデル多重請負構造が、長期的に持続可能とは、私には思えません。
SIer業界に開発を外注しているユーザー企業の方々も、この問題を自分事として考えてみるべきだと私は思いますね。

今日は、簡単にアジャイル開発の一つであるスクラム開発の進め方を、Claudeに解説して貰いました。

ではまた。

関連書籍

ユーザー向けのスクラム開発の解説本としては、以前もご紹介した「スクラム 仕事が4倍速くなる“世界標準”のチーム戦術 (早川書房)」があります。

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術 (早川書房)

また、IT担当者向けのスクラム解説本としては、「小さな会社のスクラム実践講座」が非常に平易で分かりやすく、お進めてすね。

小さな会社のスクラム実践講座

リモートワーク時代にあわせてオンラインでも完結できる方法論として解説されているところが、アフターコロナらしい内容です。 基本的にスクラムは最大でチームの総数が9人以下で編成するもので、それ以上の規模が必要ならシステムを分割して、複数チームで開発すべきという考え方です。 スクラム開発それ自体は、大規模開発を想定していません。

アジァイル開発周辺には、「そもそも大規模開発が必要になること自体が、何かを間違えている」という考え方もあます。 「大規模開発が必要になるなら、もっとモジュール分割を考えることに時間を掛けるべきではないか」という考え方です。 この理想論が現実に通用するかどうかは別にして、ソフトウェア開発は大規模になるほど生産性が落ちて、ある程度以上大規模になると、開発遂行不可能なレベルまで生産性が落ちてしまう性質があるのは、事実としてあります。 ソフトウェア開発チームは小規模チームで編成できるようにモジュールを分割すべきなのです。 「小さな会社のスクラム実践」とは、要するに正しい規模のスクラム実践でもあるわけです。 大きな会社の人も読んで見るべきだと思いますね。

スクラムは米国で最も普及しているソフトウェア開発プロセスモデルですから、解説本もたくさん出版されています。 ユーザー側の人でも解説本の二冊三冊は読んで見た方が良いかもしれません。

あとは、ユーザーさん側にお勧めの本としては、「システムを作らせる技術 エンジニアではないあなたへ (日本経済新聞出版)」という本があります。

システムを作らせる技術 エンジニアではないあなたへ (日本経済新聞出版)

こちらは、システム開発の依頼をするユーザー側がシステムをITエンジニアに作って貰う為のノウハウをまとめた書籍です。 基本的にSIerへの外注は推奨せず、内製でアジャイル開発する事を薦めています。

この様なシステム開発についての解説本を読み進めていけば、なぜ経産省があのように日本企業の尻を叩くのか理解できると思います。

以上、書籍のご紹介でした。

タイトルとURLをコピーしました