オブジェクトの広場は株式会社オージス総研グループのエンジニアによる技術発表サイトです

COSMIC法

ビジネスアプリ開発者のための機能規模測定手法COSMIC法入門(第1回)

機能規模とCOSMIC法
株式会社オージス総研 技術部 ソフトウェア工学センター
藤井 拓
2010年6月10日

ソフトウェアの規模をどのように測るかというのは従来から白熱した議論が展開された領域ですが、未だに1つの決定的な方法に収束していません。収束しない一因は、ソフトウェアの規模の測り方がこれまであまりオープンに紹介されてこなかったことにあるのではないかと筆者は考えています。このような状況に一石を投じようと、本連載ではオブジェクトの広場の読者のみなさんのようにモデリングの心得がある人を対象にして、モデルを作ってソフトウェアの規模を測る方法の 1 つである COSMIC (COmmon Software Measurement International Consortium) 法を紹介します。

COSMIC 法は、元々組み込み用のソフトウェアの規模を測るための方法として提案されたものですが、ビジネスアプリケーションの規模測定にも使える方法です。今回の記事では、規模を測定する目的と規模を測定する複数の方法を説明し、さらに機能規模測定手法 COSMIC 法の概要を説明します。

機能規模とは

機能規模とは、ソフトウェアを構成する機能の規模のことです。機能規模というとソフトウェアの細かい内部的な機能の規模まで測らないといけないのかなと思う人がいるかもしれませんが、そうではありません。基本的には、ユーザーの視点で見えるソフトウェアの機能の規模を測ればよいのです。ユーザーの視点で見える機能とは、ユーザーがソフトウェアを使って行える(行いたい)ことです。

UMLのユースケースは、このようなユーザー視点で機能のまとまりを表現したものです。従って、ソフトウェアが提供するユースケースの数を数えるというのは機能規模を測定する 1 つの方法だと言えます。また、画面や帳票やバッチ処理などもソフトウェアの大きな機能のかたまりであり、ユーザーの視点で見える機能だとみなすことができます。従って、画面や帳票やバッチ処理の数を数えるというのも、広い意味では機能規模を測るための方法の 1 つと言えます。

規模を測定する目的

規模を測定する目的はなんでしょうか?ソフトウェア開発を職業にしている人や、ソフトウェアの開発を依頼する人であれば、機能規模という言葉からすぐに思い浮かぶのは「見積もり」でしょう。つまり、ソフトウェアの規模が分かればそのソフトウェアを開発するための労力が見積もれるだろうということです。確かに、規模を測定する動機として「見積もり」は大きいと思います。でも、規模は「見積もり」のためだけのものではありません。機能規模測定手法は、ソフトウェアの規模を測るための「ものさし」を提供します。「ものさし」で測ったデータは様々な用途に利用することができます。

家を建てる場合を例にして「ものさし」がどんな役割を果たすかを考えてみましょう。家を建てる場合は、間取り図を書き、家族構成や家の使い方という観点で家についての要望を施主さんが建築会社の人に話をします。間取り図を正確に描くためには、図面上で様々な「長さ」を決める必要があります。間取り図が決まると、家の建坪や大雑把な仕様が決まります。また、家をどのような工法や建築会社で建てるかにより、建坪(面積)当たりの建築単価が大体決まります。家の建坪と建坪(面積)当たりの建築単価から概算の建築費用が決まります。逆に、建坪(面積)当たりの建築単価は建築会社や工法ごとに異なるので、このような建築単価を建築会社や工法を選ぶための判断基準として使うことができます。このように、「長さ」や「長さ」から求まる「面積」というものさしを使うことで、家を建築することの見積もりをしたり、建築会社や工法の比較を行ったりすることが可能になるのです。

ソフトウェア開発でこのような「ものさし」があると何がうれしいのでしょうか?筆者の興味に即して言うと、「ものさし」があることで、家を建てる例と同様に会社やプロジェクト毎の違いをより客観的に比較できるという点です。ソフトウェアの規模を測るための「ものさし」を使い、労力や欠陥数などの他の測定データと組み合わせることで以下のような値を求めることができます。

  • 開発生産性 = (開発したソフトウェアの規模)/(開発に要した労力)
  • 欠陥密度 = (開発したソフトウェアの欠陥数)/(開発したソフトウェアの規模)
  • ...

このような値を使えば、ソフトウェア開発会社やプロジェクトの比較(ベンチマーキング)を行うことができます。「家を建てる場合」と同様に、このような値はお客様にとってソフトウェア開発会社やプロジェクトを比較するための 1 つの手段になりえます。また、ソフトウェア開発会社やプロジェクトにとっては自分たちの現在の能力を評価し、それをさらに改善させるための参考データになります。

「お客様にとってソフトウェア開発会社やプロジェクトを比較する手段」という話をソフトウェア開発会社の人に話をした際に、「お客様にそんなことができたら怖い」という意見が返ってきたことがありました。ただ、日本の経済も縮小し、日本のソフトウェア開発の市場も縮小している現在、従来どおりのソフトウェア開発を続けるのではなく、もっと特長があり、お客様にとって納得感がある開発を行うことが求められているのではないでしょうか。そのためには、お客様と開発者の両方が先ほど述べたような「ものさし」で求まる値を共有し、よりよい開発を一緒に目指した方がよいのではないかと筆者は考えています。

これまでソフトウェアの規模を測るための「ものさし」と一括りでお話ししていましたが、ソフトウェアの規模の測定方法は複数あります。次節では、それらの測定方法の長所と短所について説明します。

ソフトウェアの規模を測る方法

ソフトウェアの規模を測る方法としては、大きく分けて以下の3つの方法があります。

  1. 要求のまとまりを数える方法
  2. 要求に対応する論理モデルを作って測定する方法
  3. コード行数を測る方法

A は、すでに前の節で言及しましたが、画面やユースケース数を数える方法です。B は、要求に対応するなんらかのモデルを作り、そのモデルに基づいて機能規模を求める方法です。C は、ソースコード中の命令コードの行数を数えたりすることで規模を求める方法です。

A の方法は、測定が簡単であるという点が長所です。その反面、画面やユースケースの大きさや複雑度のバラつきに左右される点が短所になります。例えば、シンクライアントやリッチクライアントのように複雑度が異なる画面を同じ 1 画面と数えてよいのかということです。

B の方法は、要求に対応する論理モデルを作るという点で A よりも測定が難しくなります。その反面、画面やユースケースそのものではなく、画面やユースケースから入力、参照されるデータなどを数えるので、画面やユースケースの複雑度の違いをある程度定量化することが可能になります。一般的には、B の方法を機能規模測定手法と呼びます。機能規模測定手法では、測定者毎の測定のバラつきを減らすことを目指した測定マニュアル等のドキュメントが提供されています。B の方法で、最も有名な方法は IFPUG 法、いわゆるファンクションポイント法です。機能規模測定手法には ISO や JIS 標準として認定されたものがあり、IFPUG 法も今回の連載で紹介する COSMIC法 も ISO や JIS 標準の機能規模測定手法です。

C の方法は、ソースコードから自動測定できる点が長所になります。その反面、ソースコードがない段階に規模の測定ができないという点が短所になります。また、同じ機能であっても冗長にもコンパクトにもソースコードは書けますし、開発言語やフレームワークの違いでもコード行数が変わる可能性があります。そのため、規模の測定としては実装の仕方や技術に依存し、どちらかというと開発者の視点で測る方法だと言えます。

これらの方法のいずれを使うべきかは、規模を測る目的によって変わるでしょう。筆者は以下の点で機能規模測定手法を選択しました。

  • プログラムコードを書く以前の段階で規模の測定が行いたい
  • プログラミング言語やプログラムコードの書き方に影響されない測定方法を使いたい

プログラミング言語やプログラムコードの書き方に影響されない測定方法を使いたいのは、開発依頼者から見ても納得感できるような測定を行いたいからです。

さらに、COSMIC 法はIFPUG 法と比較して以下の3点で魅力的です。

  • 測定方法が比較的単純である
  • システム間の通信などのやり取りも規模として測定できる
  • 測定マニュアル等のドキュメントが無償で提供されている

今後のビジネスシステムでは、サービス化や、ホストとアプリケーションサーバとの連携などシステム間の通信などのやり取りが増えてくると予想されます。そのような状況では、システム間の通信などのやり取りの規模が測定できることは非常に重要だと筆者は考えています。IFPUG 法では通信機能の有無による規模の増減を調整係数というもので間接的に取り込む方式を用いています。それと比べると COSMIC 法は通信による規模の増減をより直接的に測定しているといえます。

COSMIC 法が IFPUG 法と比べて弱い点は、現時点での普及度が低いという点です。本記事の冒頭で書いたように、その普及度が低いという状況を少しでも変えたいというのが本連載の狙いです。

COSMIC法とは

COSMIC 法は、データ移動の数を数えることで機能規模を測定する方法です。データの移動としては、以下の 2 種類を考えます。

  • システムの境界を通じた入力と出力
  • 永続ストレージに対する書き込みと読み出し
図 1 COSMIC法で数えるデータ移動
図 1 COSMIC法で数えるデータ移動
「COSMIC機能規模測定法 ver3.0 手法概要編」の図を引用

ビジネスアプリケーションの場合は、前者は画面を通じて入力されたり、表示されたりするデータや、通信を介して他のシステムとやり取りするデータになります。また、後者はデータベースの問い合わせやファイルの読み出し、書き込みになります。ここで、COSMIC 法で数えるデータ移動はデータの種類毎、大ざっぱに言えば論理データモデルのエンティティに相当するものになります。

「それで機能規模を測定できるの!」って思われる方もいるかもしれません。そうなんです!COSMIC 法の特徴の 1 つは IFPUG 法よりも測定が簡単な点です。論理データモデルが作れれば、簡単に機能規模を測ることができます。また、通信などに外部システムとの連携に関する機能規模を測ることもできることも特徴になります。

COSMIC 法のもう1つの大きな特徴は測定マニュアルやガイドラインなどのドキュメントが一般公開されており、誰でも利用できるという点です。英語版のドキュメントは COSMIC 法の公式サイト[1]で公開されており、その日本語訳は日本ファンクションポイントユーザ会 ( JFPUG ) の COSMIC 法のページ[2]から入手できます。

日本語訳ドキュメントについて:
本記事を掲載した時には日本語訳のドキュメントがリンク先で公開されていましたが、2016年2月現在はリンク先に存在しないようです。日本語訳としては、代わりにJIS規格「JISX0143 ソフトウェア-COSMIC機能規模測定手法」をご覧ください。JIS規格は、日本工業標準調査会JISCの公式サイトhttp://www.jisc.go.jp/のJIS検索ページにてJIS番号「X0143」で検索すると閲覧できます。(2016年2月追記)

COSMIC 法は、1997 年に Full Function Point ( FFP ) 法( ver1.0 )という名前でリアルタイム、技術、システムソフトウェアの機能規模を測定する手法として提案されました。さらに、1998 年に第 2 世代の機能規模測定手法のための原則を作るために FFP グループは COSMIC グループと一緒になりました。この努力の結果は、1999 年 10 月に COSMIC-FFP 測定手法 ver 2.0 として公開されました。その後、COSMIC-FFP 法は 2002 年 ISO や2006年に JIS 標準として承認されました。また、2007 年には ver3.0 のドキュメント群をリリースするともに COSMIC 法と名称を変更しました。

筆者は、2008 年に COSMIC 法のドキュメントに出会い、その中の "GUIDELINE FOR SIZING BUSINESS APPLICATION SOFTWARE USING COSMIC-FFP" というドキュメントを読むことで COSMIC 法によるビジネスアプリケーションの機能規模測定の実践方法を学びました。このドキュメントの日本語訳は[ 3 ]で提供されています。

COSMIC 法ってデータが少ないのでは

COSMIC 法の話をすると、よく出会う質問の 1 つとして「世の中で IFPUG 法に基づいた開発生産性のデータは見たことがあるが、COSMIC 法の開発生産性のデータは見たことがない。COSMIC 法に基づく開発生産性のデータで参照できるようなものはあるのか?」というものがあります。正直なところ、「 COSMIC 法に基づく開発生産性のデータ」として世の中に公表されているものは IFPUG 法のデータより、まだまだ少ないと思います。それでも、悲観することはありません。文献[ 4 ]には複数のプロジェクトで IFPUG 法での機能規模測定値と COSMIC 法での機能規模測定値の間の相関関係を研究した複数の文献データが掲載されており、このデータでは中規模ぐらいのプロジェクトでは IFPUG 法の機能規模測定値と COSMIC 法の機能規模の測定値が似たような値になることが示されています。

この結果から、COSMIC 法の測定データが少ない段階では IFPUG 法で求めた世の中のデータを流用してもよいのではないかと筆者は考えています。但し、IFPUG 法で求めた世の中のデータはあくまで世間一般のデータなので、自分たちのプロジェクトの特殊性にも留意し、どの程度当てはまるかを慎重に考えた方がよいでしょう。

終わりに

次回は、COSMIC 法の基本概念と測定プロセスの概要を説明する予定です。

参考文献

参考文献[2][3][4]について:
本記事を掲載した時には日本語訳のドキュメントがリンク先で公開されていましたが、2016年2月現在はリンク先に存在しないようです。日本語訳としては、代わりにJIS規格「JISX0143 ソフトウェア-COSMIC機能規模測定手法」をご覧ください。JIS規格は、日本工業標準調査会JISCの公式サイトhttp://www.jisc.go.jp/のJIS検索ページにてJIS番号「X0143」で検索すると閲覧できます。(2016年2月追記)