システム開発に必要な人数を「人日」から求める方法

広告

システム開発に関する問題では、プログラムの本数や作業日数から、開発に必要な人数を求めることがあります。

この種類の問題で大切なのは、いきなり人数を求めるのではなく、最初に開発全体の工数を人日で求めることです。

今回は、コーディングだけでなく、設計とテストに必要な工数も含めて計算します。

また、3人が1日ずつ作業した場合も、

3\text{人} \times 1\text{日} = 3\text{人日}

となります。

つまり、人日は次の式で表せます。

\text{人日} = \text{人数} \times \text{作業日数}

反対に、必要な人数を求める場合は、全体の工数を作業日数で割ります。

\text{必要人数} = \frac{\text{全体の工数}}{\text{開発日数}}

この問題では、まず開発全体で何人日の作業が必要なのかを求め、その後で95日で割ります。

問題

システムを構成するプログラムの本数と、プログラム1本当たりのコーディング所要工数が、次の表のとおりである。

処理の種類プログラムの本数1本当たりのコーディング所要工数
入力処理20本1人日
出力処理10本3人日
計算処理5本9人日

このシステムを95日間で開発するには、少なくとも何人の要員が必要か。

なお、このシステムの開発には、コーディングのほかに設計及びテストの作業が必要であり、それらの作業には、コーディング所要工数の8倍の工数が掛かるものとする。

  • ア.8人
  • イ.9人
  • ウ.12人
  • エ.13人

この問題では、設計・コーディング・テストの前後関係や、担当者ごとの技能差、打合せ、レビュー、手戻りなどは考慮していません。
総工数を95日間に均等配分できるものとして、理論上必要な人数を求めています。
実際の開発工程表を作る場合は、作業の依存関係、担当者の技能、並行作業の可否などを考慮する必要があります。

手順1:コーディング工数を求める

最初に、それぞれの処理について、次の計算をします。

\text{プログラムの本数} \times \text{1本当たりの工数}

入力処理

入力処理は20本あり、1本につき1人日掛かります。

20\text{本} \times 1\text{人日/本} = 20\text{人日}

したがって、入力処理のコーディング工数は20人日です。

出力処理

出力処理は10本あり、1本につき3人日掛かります。

10\text{本} \times 3\text{人日/本} = 30\text{人日}

したがって、出力処理のコーディング工数は30人日です。

計算処理

計算処理は5本あり、1本につき9人日掛かります。

5\text{本} \times 9\text{人日/本} = 45\text{人日}

したがって、計算処理のコーディング工数は45人日です。

コーディング工数を合計する

入力処理、出力処理、計算処理の工数を合計します。

20\text{人日} + 30\text{人日} + 45\text{人日} = 95\text{人日}

したがって、コーディング全体には95人日の工数が必要です。

表に整理すると、次のようになります。

処理の種類計算コーディング工数
入力処理20本 × 1人日/本20人日
出力処理10本 × 3人日/本30人日
計算処理5本 × 9人日/本45人日
合計20+30+4595人日

手順2:設計及びテストの工数を求める

問題文には、次のように書かれています。

設計及びテストの作業には、コーディング所要工数の8倍の工数が掛かる。

コーディング工数は95人日です。

したがって、設計及びテストの工数は次のように求めます。

95\text{人日} \times 8 = 760\text{人日}

設計及びテストを合わせた工数は760人日です。

「8倍」の読み方に注意する

この問題で特に間違えやすいのが、「設計及びテスト」と「8倍」の関係です。

問題文には、

それらの作業には、コーディング所要工数の8倍の工数が掛かる

と書かれています。

ここでいう「それらの作業」とは、設計とテストを合わせた作業を指します。

したがって、正しい考え方は次のとおりです。

\text{設計及びテストの合計} = \text{コーディング工数} \times 8

今回の数値を入れると、

\text{設計及びテストの合計} = 95\text{人日} \times 8 = 760\text{人日}

となります。

設計に760人日、さらにテストにも760人日が掛かるという意味ではありません。

設計とテストを合わせて760人日です。

手順3:開発全体の工数を求める

開発全体には、次の二つの工数が必要です。

  • コーディング:95人日
  • 設計及びテスト:760人日

したがって、開発全体の工数は次のようになります。

95\text{人日} + 760\text{人日} = 855\text{人日}

開発全体では855人日の作業が必要です。

ここで注意したいのは、設計及びテストの760人日だけを開発全体の工数にしないことです。

760人日は、設計及びテストだけの工数です。

これに、元のコーディング工数である95人日を加える必要があります。

手順4:95日間で終わらせるための人数を求める

開発全体の工数は855人日です。

この作業を95日間で終わらせるため、全体の工数を開発日数で割ります。

\text{必要人数} = \frac{855\text{人日}}{95\text{日}}

計算すると、

\text{必要人数} = 9\text{人}

となります。

人日を日数で割ると、単位は人になります。

\frac{\text{人日}}{\text{日}} = \text{人}

したがって、必要な要員は9人です。

答え

イ.9人

イラストで計算の流れを確認しよう

計算の流れを整理すると、次のようになります。

1.コーディング工数を求める

20\text{人日} + 30\text{人日} + 45\text{人日} = 95\text{人日}

2.設計及びテストの工数を求める

95\text{人日} \times 8 = 760\text{人日}

3.開発全体の工数を求める

95\text{人日} + 760\text{人日} = 855\text{人日}

4.95日で割って必要人数を求める

\frac{855\text{人日}}{95\text{日}} = 9\text{人}

よくある間違い1:コーディング工数だけを95日で割る

コーディング工数は95人日なので、次のように計算したくなるかもしれません。

\frac{95\text{人日}}{95\text{日}} = 1\text{人}

しかし、開発にはコーディングだけでなく、設計とテストも必要です。

この計算では、設計及びテストの工数が含まれていません。

そのため、答えは1人ではありません。

よくある間違い2:8倍した工数だけを全体工数にする

次のように計算すると、選択肢の「ア.8人」になります。

95\text{人日} \times 8 = 760\text{人日}

\frac{760\text{人日}}{95\text{日}} = 8\text{人}

しかし、この計算ではコーディング工数の95人日が抜けています。

760人日は、設計及びテストだけの工数です。

開発全体では、コーディング工数も加えます。

95\text{人日} + 760\text{人日} = 855\text{人日}

したがって、答えは8人ではなく9人です。

選択肢の「ア.8人」は、この間違いをした場合に選びやすい選択肢です。

よくある間違い3:設計とテストの両方に8倍を掛ける

設計とテストについて、それぞれ8倍と考えると、次のようになります。

95\text{人日} + 760\text{人日} + 760\text{人日} = 1615\text{人日}

しかし、問題文の「それらの作業」は、設計及びテストを合わせた作業を指しています。

そのため、8倍するのは1回だけです。

別の考え方:開発全体はコーディング工数の9倍

この問題は、より短い方法でも解けます。

コーディング工数を1倍とすると、設計及びテストの工数は8倍です。

  • コーディング:1倍
  • 設計及びテスト:8倍

したがって、開発全体では次のようになります。

1 + 8 = 9

つまり、開発全体の工数は、コーディング工数の9倍です。

\text{開発全体の工数} = 95\text{人日} \times 9 = 855\text{人日}

さらに、95日で割ります。

\frac{855\text{人日}}{95\text{日}} = 9\text{人}

この方法なら、設計及びテストの760人日を個別に求めなくても解けます。

なぜ答えがすぐ9人になるのか

今回の問題では、コーディング工数が95人日で、開発期間も95日です。

コーディングだけなら、1人で95日作業すれば完成します。

\frac{95\text{人日}}{95\text{日}} = 1\text{人}

設計及びテストには、コーディングの8倍の工数が必要です。

したがって、95日間で考えると、

  • コーディング分:1人
  • 設計及びテスト分:8人

と考えることもできます。

1\text{人} + 8\text{人} = 9\text{人}

この問題では、コーディング工数の95人日と開発期間の95日が同じ数字なので、この考え方でも答えを求められます。

ただし、数字が同じになるのは今回の問題だけです。

ほかの問題でも使える基本的な解き方は、開発全体の工数を求めてから日数で割る方法です。

試験で使える解き方

この種類の問題では、次の順番で解くと安定します。

  1. プログラムの本数と1本当たりの工数を掛ける
  2. コーディング工数を合計する
  3. 設計及びテストの工数を求める
  4. 開発全体の工数を求める
  5. 開発全体の工数を開発日数で割る

今回の問題を一つの式でまとめると、次のようになります。

\text{必要人数} = \frac{ 95\text{人日} + \left( 95\text{人日} \times 8 \right) }{ 95\text{日} }

分子を計算すると、

\text{必要人数} = \frac{855\text{人日}}{95\text{日}} = 9\text{人}

となります。

まとめ

最初に、コーディング工数を求めます。

20\text{本} \times 1\text{人日/本} = 20\text{人日}

10\text{本} \times 3\text{人日/本} = 30\text{人日}

5\text{本} \times 9\text{人日/本} = 45\text{人日}

これらを合計します。

20\text{人日} + 30\text{人日} + 45\text{人日} = 95\text{人日}

設計及びテストの工数は、コーディング工数の8倍です。

95\text{人日} \times 8 = 760\text{人日}

開発全体の工数は、コーディングと設計及びテストの合計です。

95\text{人日} + 760\text{人日} = 855\text{人日}

これを95日で割ります。

\frac{855\text{人日}}{95\text{日}} = 9\text{人}

したがって、答えは次のとおりです。

イ.9人

その感覚で正しいです。

この問題で求めているのは、現実の工程表を作るための人数ではなく、総工数を期間で割った理論上の必要人数です。

計算しているのは、実質的に次の式だけです。

\text{必要人数}=\frac{\text{総工数}}{\text{開発期間}}

今回なら、

\frac{855\text{人日}}{95\text{日}}=9\text{人}

となります。

しかし、これだけでは実際の工程表は作れません。

なぜ工程表にならないのか

現場では、設計・コーディング・テストを自由に同時進行できるわけではありません。

例えば、一般的には次のような順序関係があります。

設計 → コーディング → 単体テスト → 結合テスト → システムテスト

設計が終わっていない機能は、原則としてコーディングできません。

コーディングが終わっていない機能は、テストできません。

つまり、工数が855人日あるからといって、9人が初日から95日間、常に同じ密度で働けるとは限りません。

この問題が暗黙に置いている仮定

この問題では、次のような現実にはかなり強い仮定を置いています。

  • 全作業を都合よく分割できる
  • 9人全員が同じ能力を持つ
  • 設計者、プログラマ、テスト担当者を区別しない
  • 作業の前後関係を考えない
  • 人を増やしても効率が落ちない
  • 打合せ、レビュー、教育、管理工数がない
  • 手戻りや不具合修正が発生しない
  • 休日、欠勤、待ち時間がない
  • 9人全員が95日間、常に作業できる

この条件がすべて成立するなら、9人という計算は成り立ちます。

ただし、現実の開発ではほぼ成立しません。

実際に工程表を作るために必要な情報

現場で工程表を作るなら、少なくとも作業を細かく分解する必要があります。

例えば、次のような情報です。

必要な情報内容
作業の分解入力、出力、計算処理をさらに機能単位へ分ける
作業の順序どの作業が終わらないと次へ進めないか
担当者の技能設計、開発、テストを誰が担当できるか
並行作業の可否同時に進められる作業は何か
レビュー設計レビュー、コードレビューの日数
テスト環境環境構築やデータ準備に必要な期間
手戻り修正や再テストに必要な余裕
休日営業日、祝日、有給休暇
リスク仕様変更、担当者不在、技術的問題

これらを基に、WBSやガントチャート、PERT図などを作成します。

9人いれば95日で終わるとは限らない

例えば、設計工程を最初の30日間で行い、設計を担当できる人が2人しかいないとします。

設計工数が760人日の一部を占めていても、設計者が2人しかいなければ、ほかの7人を配置しただけでは作業が進みません。

また、テストはコーディング後に始まるため、初日からテスト担当者がフル稼働することもできません。

その結果、総工数を人数で割った数字は9人でも、実際には、

  • 前半は設計者が不足する
  • 中盤はプログラマが集中する
  • 後半はテスト担当者が不足する

ということが起こります。

この問題の正しい位置付け

この問題は、次のように捉えるのが適切です。

工程計画を作る問題ではなく、工数・期間・人数の基本関係を確認する計算問題

つまり、答えの9人は、

理想的に工数を配分できると仮定した場合の、平均的かつ理論上の最低人数

です。

「9人を集めれば必ず95日で完成する」という意味ではありません。

訪問数 1 回, 今日の訪問数 2回

広告