資格道場 › レッスン一覧 › ソフトウェア開発管理技術
ソフトウェア開発管理技術・1/4・14分

開発規模と工数の見積り

ゴール

開発規模・生産性・工数の関係をつかみ、ファンクションポイント法の定義問題と、工数・総工数・要員数・期間を求める計算問題を自力で解けるようになる。

見積りの計算問題は、掛け算・割り算と「何に何%を掛けるか」の読み取りだけで解けるので、確実に取れる得点源です。実務でも「この案件は何人で何か月か」を説明する基本の考え方になります。

このレッスンで稽古する(用語チェック・過去問)

結論:工数=規模÷生産性。ここからすべてが始まる

見積りの公式はひとつだけです。工数=開発規模÷生産性。規模から工数を出すには、生産性(1人が一定期間にこなせる量)が必ず要ります。

  • 開発規模:作るものの大きさ。ファンクションポイント(FP)、プログラムの行数、画面数などで表す
  • 生産性:1人月あたりにこなせる規模。例「1人月で10FP」
  • 工数:仕事の量。単位は人月(1人が1か月働く量)や人日(1人が1日働く量)

たとえば引越しの段ボールが100箱(規模)あって、1人が1日20箱運べる(生産性)なら、作業量は5人日(工数)です。何日で終わるか(期間)や何人呼ぶか(要員数)は、工数が決まったあとで決めます。

開発規模100箱÷ 生産性1人1日20箱工数5人日工数=要員数×期間(面積が同じ)要員1人×期間5日→ 5日かかる面積はどちらも5人日要員5人×期間1日→ 1日で終わる
規模を生産性で割って工数が決まり、その工数(面積)を「1人×5日」にするか「5人×1日」にするかは後から決める。

全体の流れ(この順で計算する)

試験の計算問題は、次の流れのどこかを切り取って出題されます。

flowchart LR
  A["開発規模(FP・画面数)"] --> B["÷生産性 または ×1件あたり工数"]
  B --> C["開発工数"]
  C --> D["+レビュー・導入・教育など"]
  D --> E["+管理工数(合計の○%)"]
  E --> F["総工数"]
  F --> G["工程ごとに配分"]
  G --> H["要員数=工数÷期間"]

工数=要員数×期間なので、要員数=工数÷期間、期間=工数÷要員数と、どの向きにも変形できます。

ファンクションポイント法とは(最頻出)

ファンクションポイント法(FP法)は、ソフトウェアの機能の数を数えて点数化し、複雑さで補正して規模を見積もる方法です。行数ではなく、利用者から見た機能(入力画面、帳票、保存するデータなど)で測るのが特徴です。

数える機能は5種類あります。

種類 ざっくり言うと
外部入力 外からデータを受け取る機能(登録画面など)
外部出力 加工した結果を外へ出す機能(帳票など)
外部照会 入力に応じてそのまま検索結果を返す機能
内部論理ファイル そのシステム自身が持ち、更新するデータ
外部インタフェースファイル 他システムが持ち、参照だけするデータ

計算は FP値=Σ(個数×重み付け係数)×補正係数 です。補正前の合計を未調整FPと呼びます。

押さえるべき点は、FP法が出すのは規模であって、工数や工期そのものではないことです。工数は、そのFP値を生産性で割って出します。

機能を数える(5種類)外部入力外部出力外部照会内部論理ファイル外部インタフェースファイル利用者から見た機能で数える(行数ではない)Σ(個数×重み付け係数)=未調整FP×補正係数(複雑さ)FP値=開発規模FP法が出すのはここまで÷生産性工数(人月)工数は生産性で割ってから出る
5種類の機能を数えて重みを掛けた合計に補正係数を掛けると FP値(規模)が出る。工数はその先で生産性で割って初めて出る。

見積り手法の見分け方(選択肢はこの4つ)

FP法の定義問題では、他の見積り手法の説明が誤りの選択肢に並びます。キーワードで見分けます。

手法 何を使うか 選択肢の決め手となる言葉
ファンクションポイント法 入出力・ファイル数などの機能の数と複雑さ 「入出力データ数やファイル数」「複雑さで調整」→規模を出す
類推見積法 過去の似たシステムの実績 「過去の類似」「相違点を調べ」
標準タスク法(WBS積上げ) 作業を細かく分け、基準値を当てて合計 「単位作業項目まで分解」「基準値」「積算」
COCOMO 規模(行数)を式に入れる 「規模が分かっていることを前提」に「工数と工期」を出す
プログラムステップ法 プログラムの行数(ステップ数) 「ステップ数を積算」

FP法は規模を求める側、COCOMOは規模を入力にする側です。ここを逆に覚えないようにしましょう。

計算問題の型は4つ

  1. FP値を出す:個数×係数の合計に補正係数を掛ける(掛け忘れ注意)
  2. FPから総工数:FP÷生産性→開発工数。付帯作業を足し、管理○%を上乗せする
  3. 画面数から総工数:画面数×1画面あたり工数を合計(標準タスク法)。レビューを足し、管理○%を上乗せする
  4. 工程別の配分:工程ごとの工数÷その工程の期間=要員数。または工数÷要員数=期間

2と3で差がつくのは、管理○%を何に掛けるかです。問題文に「レビューを含めた」「開発と導入・教育を合わせた」とあれば、足し終わった合計に掛けます。

管理○%は足し終わった合計に掛ける○ 正しい開発工数レビュー・導入管理工数この合計×○%総工数=合計+合計×○%× よくある誤り開発工数レビュー・導入管理ここだけ×○%→ 誤りの選択肢になる値
管理○%は、開発工数にレビューや導入などを足し終えた合計に掛ける。開発工数だけに掛けると誤りの選択肢の値になる。

ピーク要員数は「工数最大の工程」とは限らない

要員数は工数÷期間です。工数が一番大きい工程でも、期間が長ければ1か月あたりの人数は少なくなります。

倉庫の荷物でたとえると、量が一番多い日より「量のわりに締切が短い日」のほうが人手が要ります。全工程について割り算をして、最大のものを選びましょう。

要員数(=工数÷期間)期間ピーク要員数はこちら工程A工数 最大・期間 長い工程B工数 小期間 短い面積=工数・高さ=1か月あたりの人数
箱の面積が工数、横幅が期間、高さが要員数。工数が最大の工程Aより、期間が短い工程Bのほうが高く、ピーク要員数になる。

試験での問われ方

  • 定義問題(FP法):4つの選択肢から「機能の数+複雑さの補正で規模」を選ぶ。類推法・標準タスク法・COCOMO・ステップ法が誤りの選択肢になる
  • 前提を問う問題:規模から工数を出すのに必要なのは生産性。期間・要員数・工程配分比率は工数を出したあとに使う
  • 計算問題:誤りの選択肢は「補正係数を掛け忘れた値」「管理工数を一部にしか掛けなかった値」「全体の数字で割った値」で作られる。途中の値がそのまま選択肢にあっても、すぐに選ばない
例題 1

FP値を求める(補正係数を忘れない)

あるソフトウェアにおいて,機能の個数と機能の複雑度に対する重み付け係数は表のとおりである。このソフトウェアのファンクションポイント値は幾らか。ここで,ソフトウェアの全体的な複雑さの補正係数は 0.75 とする。
ユーザファンクションタイプ個数重み付け係数
外部入力14
外部出力25
内部論理ファイル110

ア 18
イ 24
ウ 30
エ 32

出典:平成30年度 春期 基本情報技術者試験 午前 問54

解き方と答えを見る
  1. 個数×重み付け係数を機能ごとに出す:外部入力 1×4=4、外部出力 2×5=10、内部論理ファイル 1×10=10
  2. 合計して未調整FPを出す:4+10+10=24
  3. 補正係数を掛ける:24×0.75=18

答え:ア:18(24は補正係数を掛け忘れた値)

例題 2

FPから総工数を求める(管理○%を何に掛けるか)

ある新規システムの機能規模を見積もったところ,500FP(ファンクションポイント)であった。このシステムを構築するプロジェクトには,開発工数のほかに,システム導入と開発者教育の工数が,合計で 10 人月必要である。また,プロジェクト管理に,開発と導入・教育を合わせた工数の 10% を要する。このプロジェクトに要する全工数は何人月か。ここで,開発の生産性は 1 人月当たり 10FP とする。

ア 51
イ 60
ウ 65
エ 66

出典:平成30年度 秋期 基本情報技術者試験 午前 問54

解き方と答えを見る
  1. 開発工数=規模÷生産性=500FP÷10FP/人月=50人月
  2. 導入・教育を足す:50+10=60人月
  3. 管理工数は「開発と導入・教育を合わせた工数」の10%:60×0.1=6人月
  4. 全工数=60+6=66人月

答え:エ:66人月(60は管理を忘れた値、65は管理10%を開発50にだけ掛けた値)

例題 3

画面数と1画面あたり工数から総工数を求める

全部で 100 画面から構成されるシステムの画面を作成する。100 画面を規模と複雑度で分類したときの内訳は次のとおりである。 規模が“小”で,複雑度が“単純”である画面数:30 規模が“中”で,複雑度が“普通”である画面数:40 規模が“大”で,複雑度が“普通”である画面数:20 規模が“大”で,複雑度が“複雑”である画面数:10 全ての画面を作成する総工数を,表の作成工数を用いて見積もると何人日になるか。ここで,全部の画面のレビューと修正に 5 人日を要し,作業の管理にはレビューと修正の工数を含めた作業工数の 20%を要するものとする。
画面当たりの作成工数(単位 人日)
規模\複雑度単純普通複雑
小0.40.60.8
中0.60.91.0
大0.81.01.2

ア 80
イ 85
ウ 101
エ 102

出典:平成29年度 秋期 基本情報技術者試験 午前 問52

解き方と答えを見る
  1. 区分ごとに画面数×1画面あたり工数:小・単純 30×0.4=12、中・普通 40×0.9=36、大・普通 20×1.0=20、大・複雑 10×1.2=12
  2. 作成工数を合計:12+36+20+12=80人日
  3. レビューと修正を足す:80+5=85人日
  4. 管理工数はレビュー込みの85の20%:85×0.2=17人日
  5. 総工数=85+17=102人日

答え:エ:102人日(85は管理を忘れた値、101は管理20%を作成工数80にだけ掛けた値:80×1.2+5)

例題 4

工数配分と期間配分からピーク要員数を求める

開発期間 10 か月,開発工数 200 人月のプロジェクトを計画する。次の配分表を前提とすると,ピーク時の要員は何人か。ここで,各工程では開始から終了までの要員数は一定とする。
項目\工程名要件定義設計開発・テストシステムテスト
工数配分(%)1633429
期間配分(%)20304010

ア 18
イ 20
ウ 21
エ 22

出典:平成28年度 秋期 基本情報技術者試験 午前 問54

解き方と答えを見る
  1. 工程ごとの工数=200人月×工数配分:要件定義 32、設計 66、開発・テスト 84、システムテスト 18(人月)
  2. 工程ごとの期間=10か月×期間配分:要件定義 2、設計 3、開発・テスト 4、システムテスト 1(か月)
  3. 要員数=工数÷期間:要件定義 32÷2=16人、設計 66÷3=22人、開発・テスト 84÷4=21人、システムテスト 18÷1=18人
  4. 最大は設計の22人

答え:エ:22人(工数が最大の開発・テストは21人でピークではない)

例題 5

工数比率と要員数から開発期間を求める

ある会社におけるウォータフォールモデルによるシステム開発の標準では,開発工程ごとの工数比率を表 1 のとおりに配分することになっている。全体工数が 40 人月と見積もられるシステム開発に対し,表 2 に示す開発要員数を割り当てることになった。このシステム開発に要する期間は何か月になるか。
表 1
開発工程工数比率
基本設計10%
詳細設計20%
コーディング・単体テスト30%
結合テスト30%
総合テスト10%
表 2
開発工程開発要員数
基本設計2
詳細設計4
コーディング・単体テスト6
結合テスト2
総合テスト2

ア 2.5
イ 6.7
ウ 12
エ 14

出典:基本情報技術者試験 科目A免除 修了試験 20240728 実施分 問41

解き方と答えを見る
  1. 工程ごとの工数=40人月×工数比率:基本設計 4、詳細設計 8、コーディング・単体テスト 12、結合テスト 12、総合テスト 4(人月)
  2. 期間=工数÷要員数:基本設計 4÷2=2、詳細設計 8÷4=2、コーディング・単体テスト 12÷6=2、結合テスト 12÷2=6、総合テスト 4÷2=2(か月)
  3. 工程は順に進むので期間を合計:2+2+2+6+2=14か月

答え:エ:14か月(全体工数40を要員数6で割った6.7は誤り)

例題 6

特定工程に必要な要員数を求める

あるシステムの開発工数を見積もると 120 人月であった。このシステムの開発を 12 か月で終えるように表に示す計画を立てた。プログラム作成工程には,何名の要員を確保しておく必要があるか。
工程工数比率(%)期間比率(%)
仕様設計3550
プログラム作成4525
テスト2025

ア 7
イ 8
ウ 10
エ 18

出典:基本情報技術者試験 科目A免除 修了試験 20140727 実施分 問53

解き方と答えを見る
  1. プログラム作成の工数=120人月×45%=54人月
  2. プログラム作成の期間=12か月×25%=3か月
  3. 必要要員数=54÷3=18名

答え:エ:18名(全体の120÷12=10は工程ごとの比率を無視した値)

要点(試験直前に読む)

  • 工数=規模÷生産性。規模から工数を出すのに必要な情報は「生産性」。
  • FP法=入出力・照会・ファイルの数×重み、複雑さで補正して「規模」を出す方法。類推・標準タスク・COCOMO・ステップ法の説明は誤り。
  • FP値=Σ(個数×重み付け係数)×補正係数。補正係数を最後に必ず掛ける。
  • 総工数は「作成工数→付帯作業を足す→その合計に管理○%を上乗せ」の順で出す。
  • 要員数=工数÷期間、期間=工数÷要員数。工程ごとに計算し、ピークは全工程の割り算の最大で決める。

ひっかけ

  • 補正係数の掛け忘れ(FP問題の24)→ 合計を出したら最後に補正係数を掛けたか確かめる。
  • 管理○%を一部にしか掛けない(65や101)→ 問題文の「〜を含めた」「〜を合わせた」の範囲を読み、足し終えた合計に掛ける。
  • 工数が最大の工程をピーク要員と思い込む → 工程ごとに工数÷期間を計算して比べる。
  • 全体工数を特定の要員数(最大の6など)や全体期間で割らせる → 工程ごとに工数÷要員数(または工数÷期間)を出し、期間なら合計する。
  • FP法の説明に「規模が分かっている前提で工数と工期」(COCOMO)や「過去の類似」(類推法)を混ぜる → FP法は機能の数で「規模」を出す方法、と覚える。

用語(16)

工数 こうすう
仕事の量を「人数×期間」で表したもので、人月や人日で数える。
⚠ 期間(何か月かかるか)と混同しやすい。工数=要員数×期間で、10人月は「10人で1か月」でも「2人で5か月」でもよい。
人月 にんげつ
1人が1か月働いたときの作業量の単位。
⚠ 人日は1人が1日働く量。問題ごとにどちらの単位か確かめる。
開発規模 かいはつきぼ
作るソフトウェアの大きさで、FP値・行数・画面数などで表す。
⚠ 工数とは別物。規模を生産性で割ると工数になる。
生産性 せいさんせい
1人が単位期間あたりにこなせる規模で、例えば「1人月あたり10FP」のように表す。
⚠ 規模から工数を出すのに必要なのは生産性。開発期間・要員数・工程配分比率は工数を出したあとに使う。
ファンクションポイント法 Function Point法(FP法)
利用者から見た機能(入出力・照会・ファイル)の数と複雑さから点数を出し、補正してソフトウェアの規模を見積もる方法。
⚠ 類推見積法(過去の類似実績)、標準タスク法(作業分解して積算)、COCOMO(規模を前提に工数と工期を出す)と区別する。FP法が出すのは規模。
未調整FP みちょうせいエフピー
機能ごとの個数×重み付け係数を合計した、補正前のFP値。
⚠ 最終的なFP値はこれに補正係数を掛けた値。掛け忘れが定番のひっかけ。
補正係数 ほせいけいすう
システム全体の複雑さや特性に応じて未調整FPに掛ける調整用の倍率。
⚠ 重み付け係数は機能1個ごとの点数、補正係数は最後に全体へ掛ける倍率。
外部入力 がいぶにゅうりょく
システムの外からデータを受け取って処理する機能。
⚠ 外部照会は入力に応じて検索結果を加工せずに返す機能。
外部出力 がいぶしゅつりょく
計算や加工をした結果を、帳票や画面としてシステムの外へ出す機能。
⚠ 外部照会は加工せずにそのまま返す。加工があれば外部出力。
外部照会 がいぶしょうかい
入力をきっかけに、保存データを加工せずに取り出して返す機能。
⚠ 外部出力との違いは、計算などの加工をするかどうか。
内部論理ファイル ないぶろんりファイル
見積り対象のシステム自身が持ち、更新するデータのまとまり。
⚠ 外部インタフェースファイルは他システムが持ち、参照だけするデータ。
外部インタフェースファイル がいぶインタフェースファイル
他のシステムが管理していて、対象システムは参照だけするデータのまとまり。
⚠ 自分で更新するなら内部論理ファイル。
類推見積法 るいすいみつもりほう
過去の似たシステムの実績を基に、違う部分を調整して規模や工数を見積もる方法。
⚠ 選択肢で「過去の類似」「相違点」とあればこれ。FP法ではない。
標準タスク法 ひょうじゅんタスクほう
作業を単位作業まで分解し、それぞれに基準の工数を当てて積み上げる見積り方法。
⚠ 「単位作業項目まで分解」「基準値の積算」とあればこれ。画面数×1画面あたり工数の計算もこの考え方。
COCOMO Constructive Cost Model
開発規模(行数)が分かっていることを前提に、式で工数と工期を見積もる方法。
⚠ FP法は規模を求める方法、COCOMOは規模を入力にして工数・工期を求める方法。
プログラムステップ法 プログラムステップほう
作るプログラムの行数(ステップ数)を積算して開発規模を見積もる方法。
⚠ 選択肢で「ステップ数を積算」とあればこれ。FP法は行数ではなく機能の数で測る。

このレッスンの過去問

このレッスンで稽古する