ファンクションポイント法の概要を説明する
皆さん、こんにちは。技術開発グループのn-ozawanです。
北アメリカ航空宇宙防衛司令部(NORAD)では、1955年から毎年のこの時期に、サンタクロースの追跡を行っています。日本語のHPもありますので、気になる方はどうぞ。
本題です。
システムの工数を正確に見積もることは、私たちシステムエンジニアにとっては非常に重要です。システムの工数見積には、多くの方法が提唱されています。ファンクションポイント法もその内の1つで、見積もり手法としては非常に有名です。今回はファンクションポイント法について簡単にお話しします。
目次
ファンクションポイント法
概要
ファンクションポイント法とは、そのソフトウェアが持つ機能や入出力ファイル、それらの複雑度から、そのソフトウェアの規模を計測する手法です。よく見積手法で紹介されるファンクションポイント法ですが、厳密には工数を見積もる手法ではありません。しかし、ファンクションポイント法で計測されたFP値と工数には相関関係があるため、工数の見積もりに利用されています。
ファンクションポイント法は、データファンクション (DF)と呼ばれる論理的なファイルもしくはエンティティと、トランザクションファンクション (TF)と呼ばれる要素処理を求めて、調整係数によりFP値を求めます。この求め方は厳密にルール化されており、人の意思や思惑などが介在する余地がなく、FP値は高い客観性により計測することが出来ると言われています。

データファンクション
データファンクションとは、アプリケーションが持つ論理的なファイルもしくはエンティティです。ファイルと言われるとHDDなどの記憶媒体に保存されるファイルをイメージするかと思います。しかし、「論理的な」とある通り、一貫性を持ったデータの集合体であり、記憶媒体に物理的に保存されるファイルと直接の関係がないことに注意が必要です。
ILFとEIF
データファンクションはILFとEIFに分けられます。

DETとRET
データファンクションをILFとEIFに分けたら、それぞれのデータ項目数(DET)とパターン数(RET)を数えます。
例えば、ユーザー情報というデータがあるとします。ユーザー情報は名前から性別、年齢などの項目で構成されています。DETはその項目数を数えます。

上記の例では個人法人区分があります。登録したユーザーが個人なのか法人なのかで、入力されるユーザー情報は異なります。例えば個人のユーザーは法人番号を入力しませんし、名前も個人名なのか商号なのかで異なってきます。RETはそういった違いをカウントします。

トランザクションファンクション
トランザクションファンクションは、アプリケーションが持つ要素処理です。要素処理とは、要素(この場合はデータファンクション)に対する何らかの処理のことです。例えば、ユーザーが入力した内容をDBに登録する、登録した内容をメールで送信する、などが要素処理に該当します。
EI、EO、EQ
トランザクションはその内容からEI、EO、EQに分類されます。そのアプリケーションのILFに登録/更新/削除を伴う処理はEIとなります。ILFもしくはEIFを参照する処理はEOもしくはEQになります。EOとEQの違いは、参照したデータを加工して返却するか否かです。

DETとFTR
要素処理を洗い出したら、それぞれのDETとFTRを数えます。DETはデータ項目数で、EIであればその要素処理で受け取るデータの項目数になります。上図の「ユーザー情報を登録」の要素処理で言えば、ユーザーが入力した項目の数になります。EOもしくはEQであれば、返却するデータの項目数になります。
FTRはその要素処理により登録/更新/削除/参照されるILFもしくはEIFの数です。
調整係数
そのアプリケーションの特性を勘案して調整係数を求めます。調整係数を求める項目は全部で14つあります。
NESMA法
データファンクションとトランザクションファンクションのDETやRET、FTRを数えることで、その要素の複雑度を決定します。しかし、この作業は非常に面倒で時間がかかります。そんな時間のかかる作業を省略することが出来ないか?もっとファンクションポイント法を簡単に扱えるようにしよう、ということで考案されたのがNESMA法です。NESMA法には以下の2つがあります。
FP試算法
FP試算法はデータファンクション (ILF、EIF) のみをインプットとして、未調整FP値を求めます。トランザクションファンクション (EI、EO、EQ) は以下と仮定して計算します。
- 1つの
ILFには、平均して3つのEI(追加、更新、削除)と、2つのEO、1つのEQがある - 1つの
EIFには、平均して1つのEO、1つのEQがある
FP概算法
FP概算法はデータファンクション (ILF、EIF)とトランザクションファンクション (EI、EO、EQ) をインプットとして、未調整FP値を求めます。この場合、複雑度は以下と仮定して計算します。
- すべてのデータファンクション(
ILF、EIF)の複雑度は「単純」である - すべてのトランザクションファンクション(
EI、EQ、EO)の複雑度は「普通」である
工数への変換
計測したFP値から、開発に必要な工数を見積もります。ここで大事なのが、1FPにかかる工数(人時)というのは、プロジェクトの特性や環境によって大きく異なってくる、ということです。例えば、その技術を十分に理解している要員を確保できなかった場合は、その技術を勉強しながら開発することになります。その場合は1FPにかかる工数は大きくなります。また、開発の多くが自動化されているようなプロジェクトであれば、1FPにかかる工数は小さくなります。
1FPにかかる工数(人時)がどれぐらいかは、過去の実績から決めていく必要があります。
おわりに
最近、初めてファンクションポイント法で工数を見積もってみたのですが、奥が深いですね。言うは易し、やるが難し、という言葉がぴったりです。ただもし顧客と対話する際に、お互いが納得できる生産性(FP/人時)があれば、工数の見積もりでのトラブルはなくなるかもしれませんね。
ではまた。
