システム開発に必要な人数を「人日」から求める方法
システム開発に関する問題では、プログラムの本数や作業日数から、開発に必要な人数を求めることがあります。
この種類の問題で大切なのは、いきなり人数を求めるのではなく、最初に開発全体の工数を人日で求めることです。
今回は、コーディングだけでなく、設計とテストに必要な工数も含めて計算します。
また、3人が1日ずつ作業した場合も、
3\text{人} \times 1\text{日} = 3\text{人日}
となります。
つまり、人日は次の式で表せます。
\text{人日} = \text{人数} \times \text{作業日数}
反対に、必要な人数を求める場合は、全体の工数を作業日数で割ります。
\text{必要人数} = \frac{\text{全体の工数}}{\text{開発日数}}
この問題では、まず開発全体で何人日の作業が必要なのかを求め、その後で95日で割ります。
- 1. 問題
- 2. 手順1:コーディング工数を求める
- 3. 手順2:設計及びテストの工数を求める
- 4. 手順3:開発全体の工数を求める
- 5. 手順4:95日間で終わらせるための人数を求める
- 6. 答え
- 7. イラストで計算の流れを確認しよう
- 8. よくある間違い1:コーディング工数だけを95日で割る
- 9. よくある間違い2:8倍した工数だけを全体工数にする
- 10. よくある間違い3:設計とテストの両方に8倍を掛ける
- 11. 別の考え方:開発全体はコーディング工数の9倍
- 12. なぜ答えがすぐ9人になるのか
- 13. 試験で使える解き方
- 14. まとめ
- 15. なぜ工程表にならないのか
- 16. この問題が暗黙に置いている仮定
- 17. 実際に工程表を作るために必要な情報
- 18. 9人いれば95日で終わるとは限らない
- 19. この問題の正しい位置付け
問題
システムを構成するプログラムの本数と、プログラム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+45 | 95人日 |
手順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本当たりの工数を掛ける
- コーディング工数を合計する
- 設計及びテストの工数を求める
- 開発全体の工数を求める
- 開発全体の工数を開発日数で割る
今回の問題を一つの式でまとめると、次のようになります。
\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日で完成する」という意味ではありません。












ディスカッション
コメント一覧
まだ、コメントがありません