基本情報技術者を体験しよう!コンソールアプリでファンクションポイント計算機を作る
基本情報技術者試験では、ソフトウェア開発の規模を見積もる方法として「ファンクションポイント法」が出題されます。
教科書では計算式を覚えるだけになりがちですが、実際にプログラムを作ってみると理解が深まります。
今回は Visual Studio のコンソールアプリ を使って、ファンクションポイントを計算するプログラムを作ってみましょう。
ファンクションポイント法とは?
ファンクションポイント法は、プログラムの行数ではなく、「システムが持つ機能の数」から開発規模を見積もる方法です。
試験では、次の5種類の機能が登場します。
| 機能 | 意味 |
|---|---|
| 外部入力(EI) | データを入力する機能 |
| 外部出力(EO) | 帳票などを出力する機能 |
| 内部論理ファイル(ILF) | システム内で管理するデータ |
| 外部インタフェースファイル(EIF) | 他システムのデータ |
| 外部照会(EQ) | 検索・参照する機能 |
| 略称 | 英語 | 日本語の意味 |
|---|---|---|
| EI | External Input | 外部入力(システムへデータを入力する機能) |
| EO | External Output | 外部出力(帳票や画面などへ出力する機能) |
| ILF | Internal Logical File | 内部論理ファイル(システム内で管理するデータ) |
| EIF | External Interface File | 外部インタフェースファイル(他システムが管理するデータ) |
| EQ | External Inquiry | 外部照会(検索・参照する機能) |
身近な例
| 略称 | 身近な例 |
|---|---|
| EI | 会員登録画面で名前を入力する |
| EO | 請求書や成績表を表示・印刷する |
| ILF | 会員名簿や商品マスタを保存する |
| EIF | 銀行や配送会社など他システムのデータを利用する |
| EQ | 会員番号を入力して会員情報を検索する |
それぞれに重み付け係数が決められており、
個数 × 重み付け係数
を計算して合計します。
最後に、
複雑さの補正係数
を掛けることで、最終的なファンクションポイント値を求めます。
今回の問題
今回は教科書と同じ問題をプログラムで計算します。
| 項目 | 個数 |
|---|---|
| 外部入力(EI) | 1 |
| 外部出力(EO) | 2 |
| 内部論理ファイル(ILF) | 1 |
| 外部インタフェースファイル(EIF) | 0 |
| 外部照会(EQ) | 0 |
| 補正係数 | 0.75 |
教科書では、この問題の答えは 18 になります。
今回はその計算をコンピュータにやってもらいます。
新しいプロジェクトを作ろう
Visual Studio を起動します。
[新しいプロジェクトの作成]
↓
コンソールアプリ(C#)
↓
プロジェクト名を
FunctionPointCalculator
にします。
プログラムを入力しよう
次のプログラムを入力してみましょう。
Console.Write("外部入力(EI):");
int ei = Convert.ToInt32(Console.ReadLine());
Console.Write("外部出力(EO):");
int eo = Convert.ToInt32(Console.ReadLine());
Console.Write("内部論理ファイル(ILF):");
int ilf = Convert.ToInt32(Console.ReadLine());
Console.Write("外部インタフェースファイル(EIF):");
int eif = Convert.ToInt32(Console.ReadLine());
Console.Write("外部照会(EQ):");
int eq = Convert.ToInt32(Console.ReadLine());
Console.Write("補正係数:");
double coef = Convert.ToDouble(Console.ReadLine());
int total =
ei * 4 +
eo * 5 +
ilf * 10 +
eif * 7 +
eq * 4;
double fp = total * coef;
Console.WriteLine();
Console.WriteLine($"重み付け合計:{total}");
Console.WriteLine($"ファンクションポイント:{fp:F2}");
プログラムの解説
このプログラムでは、キーボードから入力した値を使って、ファンクションポイントを計算しています。
Console.Write()
画面に文字を表示します。
Console.Write("外部入力(EI):");
Console.ReadLine()
キーボードから入力した文字を受け取ります。
Console.ReadLine();
ただし、このままでは文字列なので計算はできません。
Convert.ToInt32()
文字列を整数に変換します。
int ei = Convert.ToInt32(Console.ReadLine());
これで数値として計算できるようになります。
int と double
整数を扱うときは
int
小数を扱うときは
double
を使います。
補正係数は 0.75 のような小数なので、double を使っています。
計算
各項目に重み付け係数を掛けて合計しています。
int total =
ei * 4 +
eo * 5 +
ilf * 10 +
eif * 7 +
eq * 4;
最後に補正係数を掛けます。
double fp = total * coef;
実行してみよう
次の値を入力します。
外部入力(EI):1
外部出力(EO):2
内部論理ファイル(ILF):1
外部インタフェースファイル(EIF):0
外部照会(EQ):0
補正係数:0.75
実行結果
重み付け合計:24
ファンクションポイント:18
教科書と同じ答えになれば成功です。
今日のチャレンジ
プログラムはそのままで、入力する数字だけを変えて実行してみましょう。
| EI | EO | ILF | EIF | EQ | 補正係数 |
|---|---|---|---|---|---|
| 2 | 3 | 1 | 1 | 2 | 0.80 |
| 5 | 2 | 4 | 1 | 3 | 0.65 |
| 0 | 1 | 1 | 0 | 2 | 1.00 |
結果がどのように変わるか予想してから実行してみると、プログラムの動きをより理解できます。
パターン1
| 項目 | 計算 |
|---|---|
| 重み付け合計 | 2×4 + 3×5 + 1×10 + 1×7 + 2×4 = 48 |
| ファンクションポイント | 48 × 0.80 = 38.4 |
パターン2
| 項目 | 計算 |
|---|---|
| 重み付け合計 | 5×4 + 2×5 + 4×10 + 1×7 + 3×4 = 89 |
| ファンクションポイント | 89 × 0.65 = 57.85 |
パターン3
| 項目 | 計算 |
|---|---|
| 重み付け合計 | 0×4 + 1×5 + 1×10 + 0×7 + 2×4 = 23 |
| ファンクションポイント | 23 × 1.00 = 23 |
まとめ
今回は、基本情報技術者試験で学ぶファンクションポイント法を、コンソールアプリでプログラムにしました。
この体験を通して、
- コンソールアプリの作成
- キーボード入力
- 変数
intとdouble- 数値への変換
- 四則演算
- 計算結果の表示
を体験することができました。
コンソールアプリは画面作成が不要なため、プログラムの基本的な流れである「入力 → 計算 → 出力」を学ぶのに最適です。
まずは教科書と同じ答えが表示されることを確認し、その後は入力する数字を自由に変えながら、プログラムの動きを確かめてみましょう。そうすることで、教科書で学んだ内容が「実際に動くプログラム」として理解できるようになります。








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