サンプル問題 科目A 問41

問41  アジャイル開発のスクラムにおけるスプリントのルールのうち,適切なものはどれか。

ア  スプリントの期間を決定したら,スプリントの 1 回目には要件定義工程を,2 回目には設計工程を,3 回目にはコード作成工程を,4 回目にはテスト工程をそれぞれ割り当てる。 

イ  成果物の内容を確認するスプリントレビューを,スプリントの期間の中間時点で実施する。 

ウ  プロジェクトで設定したスプリントの期間でリリース判断が可能なプロダクトインクリメントができるように,スプリントゴールを設定する。 

エ  毎回のスプリントプランニングにおいて,スプリントの期間をゴールの難易度に応じて,1 週間から 1 か月までの範囲に設定する。 

出典:基本情報技術者試験 サンプル問題

アジャイル開発の基礎知識

私は、ちゃんとしたアジャイル開発を経験したことがなく、せっかくの機会なので調べてみます。

アジャイル開発とは

まず、アジャイル開発とは何でしょうか。

アジャイルソフトウェア開発は人間・迅速さ・顧客・適応性に価値をおくソフトウェア開発である。すなわち自己組織的なチームが対話の中で方向性・仮説を見出し、顧客へ価値を素早く届け、実践投入の学びから素早く改善をおこなう在り方に価値を置く。

この価値観を共有する開発がアジャイルソフトウェア開発であり、アジャイルソフトウェア開発という言葉はソフトウェア開発工程やソフトウェア開発方法論、またはその総称ではない。特定の開発工程に縛られることはないが、実態として多くのアジャイルソフトウェア開発でみられる典型的な開発工程が存在する。典型的にはまずアイデアを価値を生む範囲で小さく分割する(例: 新機能のコア部分)。その価値を実現する成果物を短いイテレーションの中で計画・実装・デプロイすることで(⇒反復型開発)、顧客へ迅速にプロダクトを届け価値の実証・学習・適応をおこなう。1つのイテレーションは小規模なソフトウェア開発プロジェクトに似ている。適応はプロジェクトにおける優先度の更新として可視化される。 

Wikipedia

この、「この価値観を共有する開発がアジャイルソフトウェア開発」というのが、グッときます。まず理念が先にあり、特定の手法を使うことではない、ということですね。

スクラムとは

次に、スクラムとは何でしょう。

プロダクト開発におけるスクラム(英: scrum)は複雑な問題への適応型ソリューションをチームで開発し価値を生み出すための軽量級フレームワークである。
複雑な問題に対する完璧なソリューションを1度で実現することは難しい。異なるアプローチとして、不完全なソリューションを素早く出しそこから学び改善する、適応型ソリューションがある。適応型ソリューションをチームで開発するために従うべき少数の規則・軽量フレームワークスクラムである。スクラムはソリューション開発のフレームワークであるため、その目的は開発したソリューションを介して価値を生み出すことである。

Wikipedia

「不完全なソリューションを素早く出しそこから学び改善する、適応型ソリューション」を実施するときの規則がスクラムということでしょうか。

確かに、プログラムを作り終わった時に、もともと何を作りたかったか分かる、というのはよくあります。そこで、不完全でも何かを作って、軌道修正しながら完成に近づける、という進め方は理解できます。ただし、それは1人か、ごく少人数で開発するならできるのですが、チームで取り組むのは難しそうです。それを進めるための規則ということなのでしょう。

スプリントとは

スプリントはアイデアを価値に変換する、すなわち実際に開発が行われる工程である。
スクラムは適応型プロダクトを開発する。つまりプロダクトは短期間で開発・実践投入・学習・適応を繰り返す必要がある。開発工程として計画・開発・日次見直し・レビュー・調整を含んだ一定期間の区切りがスプリント(英: Sprint)である。スプリントを設定することでプロダクトが目標とする価値へ定期的に適応するように誘導される。素早い適応のためにスプリント長は1ヶ月以下に設定される。
Wikipedia

繰り返し開発の1回分をスプリントと呼ぶのでしょうか。目標に向けて、計画を立てて実行しレビューして評価する、ということを行うのだと思いました。

選択肢を見る

なんとなく分かったつもりになってきたので、選択肢を見ていきます。

ア  スプリントの期間を決定したら,スプリントの 1 回目には要件定義工程を,2 回目には設計工程を,3 回目にはコード作成工程を,4 回目にはテスト工程をそれぞれ割り当てる。 

いや、これはウォーターフォール型開発です。全く違いますね。

イ  成果物の内容を確認するスプリントレビューを,スプリントの期間の中間時点で実施する。 

レビューはスプリントの最後に、計画したものを実現できたか確認し、問題があればどうするか考える場だと思いました。とすると、誤りです。

ウ  プロジェクトで設定したスプリントの期間でリリース判断が可能なプロダクトインクリメントができるように,スプリントゴールを設定する。 

これは正しそうな気がします。

エ  毎回のスプリントプランニングにおいて,スプリントの期間をゴールの難易度に応じて,1 週間から 1 か月までの範囲に設定する。 

スプリントプランニングとは何でしょうか。

スプリントプランニング: スプリント期間の最初に行われる。スクラムチームでスプリントバックログを生成する。この過程でチームメンバー間の認識差異がないことを最終確認する。

Wikipedia

スプリントプランニングでは、スプリントの期間を決めないような気がします。ただ、アやイに比べると、そんなに自信はありません。

これは宿題です。

こういうのは、実務でチームに入れてもらったらすぐに分かると思いますが、書いたものだけで理解するのは難しいです。