(57)【要約】【課題】精度よく開発行数を測定できるソフトウェア開発行数測定装置を提供する。【解決手段】ソフトウェア開発行数測定装置１００では、プロジェクト情報入力部１０２から入力された、開発行数を測定する測定対象のプロジェクト情報、および比較対象のプロジェクト情報から、ソフトウェア構成情報抽出部１０３でソフトウェア構成情報が抽出される。実効コード抽出部１０６において、両プロジェクトの実効プログラムコードが抽出され、開発行数比較部１０７においてこれらが比較されることで測定対象のプロジェクトについての開発行数が測定される。開発行数集計部１０８は、測定された開発行数をプロジェクトの保有する機能別に集計し、開発行数検査部１０９は、当該ソフトウェアの開発に用いた機能と開発行数が集計された機能とを比較することで、測定の有効性を検査する。【選択図】図１
2010277576.tif 000002
【特許請求の範囲】
【請求項１】
プロジェクト情報を入力するためのプロジェクト情報入力手段と、
前記入力されたプロジェクト情報から、当該プロジェクトのソフトウェア構成に関する情報であって、当該プロジェクトのプログラムコードを構成するファイルを表わすファイルリストと、前記ファイルのそれぞれについてのファイル情報とを含んだソフトウェア構成情報を抽出するためのソフトウェア構成情報抽出手段と、
前記ソフトウェア構成情報に追加する情報として、前記ファイルごとに対応する機能に関する情報を入力するための機能情報入力手段と、
前記ソフトウェア構成情報に追加する情報として、前記プログラムコードのうち、前記開発行数の測定を行なわない部分を特定する除外判定情報を入力するための除外判定情報入力手段と、
前記ソフトウェア構成情報を記憶するためのソフトウェア構成情報記憶手段と、
前記プロジェクトのプログラムコードから、前記ファイルごとに実効プログラムコードを抽出するための実効コード抽出手段と、
第１のプロジェクト情報および第２のプロジェクト情報のそれぞれについて前記抽出された実効コードを、前記第１のプロジェクトの前記除外判定情報で特定される前記部分の他の部分について、対応するファイルごとに比較することで、前記第１のプロジェクトの開発行数を前記ファイルごとに測定するための開発行数比較手段と、
前記ソフトウェア構成情報で特定される、前記開発行数が測定された前記ファイルに対応する機能に基づいて、前記測定された開発行数を、前記第１のプロジェクトの前記プロジェクト情報で特定される、当該プロジェクトのプログラムコードの特徴機能ごとに集計するための開発行数集計手段と、
前記集計の結果に基づいて、前記開発行数の測定の有効性を検査するための開発行数検査手段とを備え、
前記ソフトウェア構成情報抽出手段は、
前記プロジェクト情報を走査して前記プログラムコードを構成するファイルを抽出することで前記ファイルリストを作成するためのファイルリスト作成手段と、
前記抽出されたファイルのそれぞれについてのファイルの内容を読み込むことで前記プロジェクトについての前記ファイル情報を取得するためのファイル情報取得手段とを含む、ソフトウェア開発行数測定装置。
【請求項２】
前記開発行数検査手段は、前記開発行数が集計された機能と、前記第１のプロジェクトの前記プロジェクト情報で特定される、当該プロジェクトの開発に用いられた機能とを比較することで、前記開発行数の測定の有効性を検査する、請求項１に記載のソフトウェア開発行数測定装置。
【請求項３】
前記ソフトウェア構成情報には、さらに、前記ファイルと対応付いている他のプロジェクトのファイルを表わすファイル組情報が含まれ、
前記プロジェクトと前記他のプロジェクトとのそれぞれの前記抽出されたファイルを比較し、前記プロジェクトのファイルが、前記他のプロジェクトの、前記プロジェクトでの構成位置とは異なる位置にも含まれる場合に、前記ファイルに関する情報を、前記プロジェクトについてのファイル組情報として取得するためのファイル組情報取得手段をさらに備える、請求項１または２に記載のソフトウェア開発行数測定装置。
【請求項４】
前記開発行数検査手段は、前記開発行数が集計された機能と、前記第１のプロジェクトの前記プロジェクト情報で特定される、当該プロジェクトの開発に用いられた機能とを比較し、
前記入力されたプロジェクト情報を記憶するためのプロジェクト情報記憶手段と、
前記開発行数検査手段での比較結果に基づいて、前記開発行数比較手段で前記第１のプロジェクトと実効コードを比較する第３のプロジェクトのプロジェクト情報を前記プロジェクト情報記憶手段から読み出すための記憶処理手段とをさらに備える、請求項１〜３のいずれかに記載のソフトウェア開発行数測定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はソフトウェア開発行数測定装置に関し、特に、ソフトウェアの生産性を測定するために用いられる開発行数を測定するソフトウェア開発行数測定装置に関する。
【背景技術】
【０００２】
ソフトウェアの開発効率を評価する指標として、ソフトウェアの生産性がある。ソフトウェア生産性は、一般的に、開発したプログラムコードの規模を開発に要した時間で割ることによって算出する方法を用いて測定される。この時、当該ソフトウェアを開発するに当たって新規に追加した行数である開発行数は、比較対象のプロジェクトと測定対象のプロジェクトとの、プログラムコードの行数の増加分を測定することによって求められる。生産性を精度よく測定するためには、開発行数を正しく測定することが必要となる。
【０００３】
開発行数を測定する技術として、本願出願人は、特開２００８−１２３３４３号公報（以下、特許文献１）においてソフトウェア差分測定装置を提案している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１２３３４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１に開示されている装置では、並行して開発しているソフトウェアの中の、新規に作成されたプログラムコードの行数が正確に集計される。しかしながら、ソフトウェア中に、開発行数を測定する対象の開発者が作成したものでないファイルが存在する場合や、開発者がツールなどを用いて自動的に作成したファイルが存在する場合など、プログラムコードに生産性を測定する対象ではないファイルが存在する場合、生産性を測定するために必要な開発行数の測定が正確になされない、という問題があった。
【０００６】
また、比較対象のプロジェクトと測定対象のプロジェクトとの間で、プログラムファイルの管理場所が移動した場合にも、開発行数の測定が正確になされない、という問題があった。
【０００７】
また、測定対象のプロジェクトのプログラムコードが複数のプロジェクトから流用されている時、また、測定に際し、比較対象とするべきプロジェクトが不足している場合にも、開発行数の測定が正確になされない、という問題があった。
【０００８】
このような理由によって開発行数が正確に測定されないと、測定された開発行数に基づいて算出される生産性も正確ではないという問題がある。
【０００９】
本発明はこのような問題に鑑みてなされたものであって、ソフトウェアの生産性を測定するために用いられる開発行数を、精度よく測定できるソフトウェア開発行数測定装置を提供することを目的の１つとする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明のある局面に従うと、ソフトウェア開発行数測定装置は、プロジェクト情報を入力するためのプロジェクト情報入力手段と、入力されたプロジェクト情報から、当該プロジェクトのソフトウェア構成に関する情報であって、当該プロジェクトのプログラムコードを構成するファイルを表わすファイルリストと、ファイルのそれぞれについてのファイル情報とを含んだソフトウェア構成情報を抽出するためのソフトウェア構成情報抽出手段と、ソフトウェア構成情報に追加する情報として、ファイルごとに対応する機能に関する情報を入力するための機能情報入力手段と、ソフトウェア構成情報に追加する情報として、プログラムコードのうち、開発行数の測定を行なわない部分を特定する除外判定情報を入力するための除外判定情報入力手段と、ソフトウェア構成情報を記憶するためのソフトウェア構成情報記憶手段と、プロジェクトのプログラムコードから、ファイルごとに実効プログラムコードを抽出するための実効コード抽出手段と、第１のプロジェクト情報および第２のプロジェクト情報のそれぞれについて抽出された実効コードを、第１のプロジェクトの除外判定情報で特定される部分の他の部分について、対応するファイルごとに比較することで、第１のプロジェクトの開発行数をファイルごとに測定するための開発行数比較手段と、ソフトウェア構成情報で特定される、開発行数が測定されたファイルに対応する機能に基づいて、測定された開発行数を、第１のプロジェクトのプロジェクト情報で特定される、当該プロジェクトのプログラムコードの特徴機能ごとに集計するための開発行数集計手段と、集計の結果に基づいて、開発行数の測定の有効性を検査するための開発行数検査手段とを備え、ソフトウェア構成情報は、プロジェクトのプログラムコードを構成するファイルを表わすファイルリストと、ファイルのそれぞれについてのファイル情報と、ファイルと対応付いている他のプロジェクトのファイルを表わすファイル組情報とを含み、ソフトウェア構成情報抽出手段は、プロジェクト情報を走査しプログラムコードを構成するファイルを抽出することで前記ファイルリストを作成するためのファイルリスト作成手段と、抽出されたファイルのそれぞれについてのファイルの内容を読み込むことで当該プロジェクトについてのファイル情報を取得するためのファイル情報取得手段とを含む。
【００１１】
好ましくは、開発行数検査手段は、開発行数が集計された機能と、第１のプロジェクトのプロジェクト情報で特定される、当該プロジェクトの開発に用いられた機能とを比較することで、開発行数の測定の有効性を検査する。
【００１２】
好ましくは、ソフトウェア構成情報には、さらに、ファイルと対応付いている他のプロジェクトのファイルを表わすファイル組情報が含まれ、ソフトウェア開発行数測定装置は、プロジェクトと他のプロジェクトとのそれぞれの抽出されたファイルを比較し、当該プロジェクトのファイルが、他のプロジェクトの、当該プロジェクトでの構成位置とは異なる位置にも含まれる場合に、ファイルに関する情報を、当該プロジェクトについてのファイル組情報として取得するためのファイル組情報取得手段をさらに備える。
【００１３】
好ましくは、開発行数検査手段は、開発行数が集計された機能と、第１のプロジェクトのプロジェクト情報で特定される、当該プロジェクトの開発に用いられた機能とを比較し、ソフトウェア開発行数測定装置は、入力されたプロジェクト情報を記憶するためのプロジェクト情報記憶手段と、開発行数検査手段での比較結果に基づいて、開発行数比較手段で第１のプロジェクトと実効コードを比較する第３のプロジェクトのプロジェクト情報をプロジェクト情報記憶手段から読み出すための記憶処理手段とをさらに備える。
【発明の効果】
【００１４】
この発明のある局面によると、プログラムコードに生産性を測定する対象ではないファイルが存在する場合でも、比較対象のプロジェクトと測定対象のプロジェクトとの間でプログラムファイルの管理場所が変更された場合でも、開発行数の測定対象であるプロジェクトが不足している場合でも、精度よく開発行数が測定される。これにより、生産性測定のための開発行数測定の精度が向上する。
【図面の簡単な説明】
【００１５】
【図１】実施の形態にかかるソフトウェア開発行数測定装置の機能構成の具体例を示すブロック図である。
【図２】図１のソフトウェア開発行数測定装置の、ハードウェア構成の具体例を示すブロック図である。
【図３】図１のソフトウェア開発行数測定装置の、プロジェクト情報のデータ構成の具体例を示す図である。
【図４】図１のソフトウェア開発行数測定装置の、ソフトウェア構成情報のデータ構成の具体例を示す図である。
【図５】実施の形態にかかるソフトウェア開発行数測定装置の、動作の流れの具体例を示すフローチャートである。
【図６】図１のソフトウェア開発行数測定装置の、ソフトウェア構成情報抽出部での動作の流れの具体例を示すフローチャートである。
【図７】図１のソフトウェア開発行数測定装置の、開発行数検査部での動作の流れの具体例を示すフローチャートである。
【図８】プロジェクトの比較関係の具体例を示す図である。
【図９】図８のプロジェクト１の、プロジェクト情報の具体例を示す図である。
【図１０】図８のプロジェクト２の、プロジェクト情報の具体例を示す図である。
【図１１】図８のプロジェクト３の、プロジェクト情報の具体例を示す図である。
【図１２】図８のプロジェクト４の、比較対象プロジェクト修正前のプロジェクト情報の具体例を示す図である。
【図１３】図８のプロジェクト４の、比較対象プロジェクト修正後のプロジェクト情報の具体例を示す図である。
【図１４】図８のプロジェクト１の、ソースツリーを示す図である。
【図１５】図８のプロジェクト２の、ソースツリーを示す図である。
【図１６】図８のプロジェクト３の、ソースツリーを示す図である。
【図１７】図８のプロジェクト４の、ソースツリーを示す図である。
【図１８】測定対象外の所有者プログラムの具体例を示す図である。
【図１９】測定対象外のデータプログラムの具体例を示す図である。
【図２０】図８のプロジェクト１の、ソフトウェア構成情報抽出後のソフトウェア構成情報の具体例を示す図である。
【図２１】図８のプロジェクト１の、除外判定情報および機能情報入力後のソフトウェア構成情報の具体例を示す図である。
【図２２】図８のプロジェクト２の、ソフトウェア構成情報の具体例を示す図である。
【図２３】図８のプロジェクト２の、開発行数測定前の具体例を示す図である。
【図２４】図８のプロジェクト２の、開発行数測定後の具体例を示す図である。
【図２５】図８のプロジェクト２の、開発行数集計後の具体例を示す図である。
【図２６】図８のプロジェクト３の、除外判定情報および機能情報入力後のソフトウェア構成情報の具体例を示す図である。
【図２７】図８のプロジェクト３の、ファイル組情報入力前の開発行数測定の具体例を示す図である。
【図２８】図８のプロジェクト３の、ファイル組情報入力前の開発行数集計の具体例を示す図である。
【図２９】図８のプロジェクト３の、ファイル組情報入力後のソフトウェア構成情報の具体例を示す図である。
【図３０】図８のプロジェクト３の、ファイル組情報入力後の開発行数測定の具体例を示す図である。
【図３１】図８のプロジェクト３の、ファイル組情報入力後の開発行数集計の具体例を示す図である。
【図３２】図８のプロジェクト４の、プロジェクト３と比較した開発行数測定の具体例を示す図である。
【図３３】図８のプロジェクト４の、プロジェクト３と比較した開発行数集計の具体例を示す図である。
【図３４】図８のプロジェクト４の、プロジェクト２と比較した開発行数測定の具体例を示す図である。
【図３５】図８のプロジェクト４の、プロジェクト３およびプロジェクト２と比較した開発行数測定の具体例を示す図である。
【図３６】図８のプロジェクト４の、プロジェクト３およびプロジェクト２と比較した開発行数集計の具体例を示す図である。
【図３７】図８のプロジェクト１の、ビルドツール情報の具体例を示す図である。
【図３８】図８のプロジェクト１の、実行可能なプログラムの作成の具体例を示す図である。
【図３９】図８のプロジェクト１の、プロジェクトを構成するファイルリスト出力の具体例を示す図である。
【図４０】図８のプロジェクト１の、ファイル構成の具体例を示す図である。
【図４１】図８のプロジェクト１の、ファイル組情報追加後のソフトウェア構成情報の具体例を示す図である。
【図４２】図８のプロジェクト２の、機能情報ごとの開発行数確認のための出力の具体例を示す図である。
【図４３】図８のプロジェクト２の、ファイル単位の開発行数確認のための出力の具体例を示す図である。
【図４４】図８のプロジェクト２の、ソフトウェア構成情報修正の具体例を示す図である。
【図４５】図８のプロジェクト２の、ソフトウェア構成情報修正後の、開発行数集計の具体例を示す図である。
【発明を実施するための形態】
【００１６】
以下に、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。
【００１７】
図１を参照して、本実施の形態にかかるソフトウェア開発行数測定装置１００は、制御部１０１と、プロジェクト情報入力部１０２と、ソフトウェア構成情報抽出部１０３と、ソフトウェア構成情報入力部１０４と、記憶処理部１０５と、実効コード抽出部１０６と、開発行数比較部１０７と、開発行数集計部１０８と、開発行数検査部１０９とを含む。ソフトウェア構成情報抽出部１０３は、さらに、ファイルリスト作成部１０３１と、ファイル情報取得部１０３２と、ファイル組情報取得部１０３３とを含む。ソフトウェア構成情報入力部１０４は、さらに、機能情報入力部１０４１および除外判定情報入力部１０４２を含む。ここで、「開発行」とは、あるソフトウェアについて、該ソフトウェアを開発するに当たって新規に追加した行を指す。
【００１８】
図２に示されるように、ソフトウェア開発行数測定装置１００のハードウェア構成は、一般的なパーソナルコンピュータのハードウェア構成と同様である。具体的には、図２を参照して、ソフトウェア開発行数測定装置１００は、全体を制御するＣＰＵ（Central Processing Unit）などで構成される演算部２０１、ＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）やＨＤ（Hard Disk）などの記憶装置２０２、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）などの記録媒体から情報を読取る読取装置やキーボードやマウスや通信装置などの情報を入力する入力装置２０３、および通信装置や表示装置などの演算結果を出力する出力装置２０４を含む。これらはバス２０５で接続される。または、ソフトウェア開発行数測定装置１００は独立した複数の装置から構成されて、専用回線や無線通信回線などで接続されてもよい。
【００１９】
記憶装置２０２は、所定の記憶領域として、入力装置２０３から入力される、プロジェクトに関する情報であるプロジェクト情報を記憶するためのプロジェクト情報記憶部２０２１と、ＣＰＵで実行されるプログラムを記憶するためのプログラム記憶部２０２２と、ソフトウェア開発行数測定装置１００で抽出される、当該プロジェクトのソフトウェア構成に関する情報であるソフトウェア構成情報を記憶するためのソフトウェア構成情報記憶部２０２３とを含む。
【００２０】
図１に示されるソフトウェア開発行数測定装置１００の構成は、ＣＰＵがプログラム記憶部２０２２に記憶される上記プログラムを実行することで主にＣＰＵに形成される。ただし、少なくとも一部の機能がハードウェア構成で形成されてもよい。
【００２１】
「プロジェクト情報」は、ソフトウェア開発プロジェクトと、それを構成するソフトウェアとの関連を示す情報であり、ソフトウェア開発時に、主に開発者によって対応するプロジェクト情報に記述され、図３のようなデータ構成とする。すなわち、図３を参照して、プロジェクト情報３００は、プロジェクト名３０１と、プログラムコード３０２と、マクロ情報からプロジェクトで使用するプログラムコードの範囲を特定することを可能とする、コンパイル設定情報３０３と、プロジェクトを構成するプログラムコードの特徴機能を示し、後述の開発機能情報の選択候補となる保有機能情報３０４と、当該プロジェクトの行数を比較する対象とするプロジェクト（以下、比較対象プロジェクト）に関する情報である比較対象プロジェクト情報３０５と、プロジェクトが保有する機能情報のうち、開発を行なった機能を示す開発機能情報３０６と、ビルドツール情報３０７とを含む。ビルドツール情報３０７は、プロジェクトを構成するファイルリスト情報を含み、当該ファイルリスト情報から実行可能なプログラムを作成するための情報である。
【００２２】
「ソフトウェア構成情報」は、プロジェクトの開発行数を測定する際に自動的に生成され、一部情報が測定者などによって入力される情報であり、図４のようなデータ構成とする。すなわち、図４を参照して、ソフトウェア構成情報４００は、ファイルリスト４０１と、ファイル所有者情報４０２と、データ情報４０３と、除外判定情報４０４と、機能情報４０５と、ファイル組情報４０６とを含む。
【００２３】
ファイル所有情報４０２は、ファイルの所有者を示す情報であり、プロジェクト外で作成された等、開発行数測定の対象ファイルから除外するための判断要素として使用される。
【００２４】
データ情報４０３は、ファイルの内容を示す情報であり、ツールを用いて作成したデータファイル等、開発行数測定の対象ファイルから除外するための判断要素として使用される。
【００２５】
除外判定情報４０４は、主に測定者などによって入力または指定された情報に基づいて生成される情報であって、当該プロジェクトを構成するファイルごとの、開発行数を測定する対象から除外する部分を特定する情報を指す。除外判定情報４０４は、ファイル単位で開発行数を測定する対象から除外することを指定する「ファイル除外」と、データ部と認識した行を、開発行数を測定する対象から除外することを指定する「データ部除外」とを含む。
【００２６】
機能情報４０５は、主に測定者などによって入力または指定された情報に基づいて生成される情報であって、当該プロジェクトを構成するファイルごとの、当該ファイルが依存する機能を特定する情報を指す。機能情報で特定される機能は、プロジェクト情報３００の保有機能情報３０４で特定される機能のうちのいずれかに該当する。
【００２７】
ファイル組情報４０６は、当該ファイルが、他のプロジェクトでは、異なるファイル名となっていた場合において、当該他のプロジェクトとファイル名とを示す情報であり、プロジェクト間で比較して開発行数を測定する際に比較ファイルとして使用される。
【００２８】
ソフトウェア構成情報入力部１０４は、ソフトウェア構成情報抽出部１０３において自動的に抽出されたファイル情報に対する、主に測定者からの入力を受付けて、ソフトウェア構成情報を確定する。ソフトウェア構成情報入力部１０４の機能情報入力部１０４１は、ソフトウェア構成情報の各項目のうちの機能情報４０５を、測定者からの入力を受付けて、決定する。ソフトウェア構成情報入力部１０４の除外判定情報入力部１０４２は、ソフトウェア構成情報の各項目のうちの除外判定情報４０４を、測定者からの入力を受付けて、決定する。
【００２９】
ソフトウェア構成情報抽出部１０３は、ソフトウェア構成情報の各項目のうち、ファイルリスト４０１、ファイル所有者情報４０２、データ情報４０３、およびファイル組情報４０６を自動的に抽出する。すなわち、入力装置２０３を用いて、比較対象プロジェクトのプロジェクト情報が入力されると、プロジェクト情報入力部１０２は、入力装置２０３からの上記プロジェクト情報を受付ける。ソフトウェア構成情報抽出部１０３は、比較対象プロジェクトのプロジェクト情報３００を解析し、ソフトウェア構成情報４００を抽出する。抽出の際、ファイルリスト作成部１０３１は、プログラムコード３０２からファイルリスト４０１を作成する。ファイルリスト４０１には、プログラムコード３０２から抽出される当該プロジェクトを構成するファイルを特定する情報（ファイル名）が記述される。
【００３０】
ファイル情報取得部１０３２は、ファイルリスト４０１の各ファイルを走査してそれぞれのヘッダ部を読み込むことで、各ファイルのファイル所有者情報４０２を読み込む。また、ファイル情報取得部１０３２は、ファイルリスト４０１の各ファイルを走査してそれぞれの本体部を読み込むことで、各ファイル内の数値データの行数と、その割合とを、データ情報４０３として特定する。ファイル組情報取得部１０３３は、同一ファイル名でディレクトリ間を移動したファイルや、ファイル名の一部が同一の別ファイルや、別ディレクトリに移動したファイルなど、行数を比較する対象とするプロジェクト間で移動したファイルを、ファイル組情報４０６として特定する。
【００３１】
記憶装置２０２の記憶領域であるプロジェクト情報記憶部２０２１は、プロジェクト情報を記憶する。ソフトウェア構成情報記憶部２０２３は、プロジェクト情報に関連付けてソフトウェア構成情報を記憶する。記憶処理部１０５は、プロジェクト情報記憶部２０２１やソフトウェア構成情報記憶部２０２３にアクセスし、これら記憶領域に情報を記憶させる処理、およびこれら記憶領域から必要な情報を読み出す処理を行なう。すなわち、記憶処理部１０５は、プロジェクト情報記憶部２０２１にアクセスして、入力されたプロジェクト情報を記憶させる。また、必要なプロジェクト情報を読み出す。記憶処理部１０５は、ソフトウェア構成情報記憶部２０２３にアクセスして、入力された、または抽出されたソフトウェア構成情報をプロジェクト情報と関連付けて記憶させる。また、指定されたプロジェクト情報に関連付けられているソフトウェア構成情報を読み出す。
【００３２】
実効コード抽出部１０６は、プロジェクト情報３００のプログラムコードから実効コードを抽出する。詳しくは、実効コード抽出部１０６は、プロジェクト情報３００のプログラムコードとコンパイル設定情報３０３とを読み込み、コンパイル設定情報３０３から、プログラムコードのある部分が実効コードかどうかの判定に影響するマクロ定義の内容を抽出する。実効コード抽出部１０６は、読込まれたプログラムコードを解析し、抽出されたマクロ定義の内容を適用することによってコードごとに実効コードかどうかを判断し、実効コードと判定したコードを開発行数比較部１０７に出力する。ここで、「実効コード」とは、その環境に対応したプログラムを生成するために実際に利用されるプログラムコードを指す。たとえば、プログラムコードがＣ言語で記述されている場合であれば、プリプロセッサによる前処理によって削除される、または空白に置換えられることなくコンパイラに渡される文字列を含む部分を指す。
【００３３】
開発行数比較部１０７は、実効コード抽出部１０６から入力された測定対象プロジェクトの実効コードと比較対象プロジェクトの実効コードとの行数を比較し、比較結果として、測定対象プロジェクトの実効コードに対して比較対象プロジェクトの実効コードから追加された行と、測定対象プロジェクトの実効コードで測定された行数とを得る。開発行数比較部１０７は、測定対象プロジェクトに追加された行に対して測定対象プロジェクトの除外判定情報４０４を適用することによって、測定対象プロジェクトの開発行数を算出する。算出結果は開発行数集計部１０８および制御部１０１に入力される。
【００３４】
開発行数集計部１０８は、算出された開発行数を、保有機能情報３０４で特定される機能ごとに集計し、開発行数検査部１０９に入力する。開発行数検査部１０９は、測定対象プロジェクトの開発機能情報３０６で特定される機能と、開発行数で行数が発生した機能
とを比較してこれらが一致するか否かを確認することで、開発行数の測定の有効性を検査する。開発行数検査部１０９は、測定の有効性が高い旨を示す一致の場合は「測定完了」（有効性高）、測定の有効性が低い旨を示す不一致の場合は「測定未完了」（有効性低）を、検査結果として制御部１０１に入力する。
【００３５】
制御部１０１は、図１の各機能を制御すると共に、開発行数検査部１０９からの検査結果が「測定完了」の場合には、開発行数比較部１０７で算出された開発行数を測定結果として出力装置２０４で出力（たとえばディスプレイ表示）するための処理を行なう。開発行数検査部１０９からの検査結果が「測定未完了」または、後述する、検査の後の確認において「測定未完了」と判断された場合には、再度開発行数の測定を実行させるための各部を制御する。また、「測定未完了」である旨を出力装置２０４で出力（たとえばディスプレイ表示）するための処理を行なってもよい。
【００３６】
［第１の実施の形態］
図５のフローチャートを用いて、ソフトウェア開発行数測定装置１００の、第１の実施の形態にかかる、開発行数の測定動作について説明する。図５のフローチャートに示される動作は、ソフトウェア開発行数測定装置１００のＣＰＵがプログラム記憶部２０２２に記憶される上記プログラムを読み出して実行することで、制御部１０１によって図１の各機能が制御されて実現される。
【００３７】
ここでは、具体的に、図８に示される比較関係を用いて動作を説明する。図８の比較関係では、プロジェクト２（Project2）の開発行数がプロジェクト１（Project1）を比較対象プロジェクトとして測定され、プロジェクト３（Project3）の開発行数がプロジェクト１（Project1）を比較対象プロジェクトとして測定され、プロジェクト４（Project4）の開発行数がプロジェクト３（Project3）を比較対象プロジェクトとして測定される。なお、図８中、Project2からProject4への点線は、プロジェクト４（Project4）の開発行数が、プロジェクト２（Project2）も比較対象プロジェクトとして測定されることを示している。
【００３８】
このうち、以降の説明では、具体的に、プロジェクト２（Project2）の開発行数をプロジェクト１（Project1）を比較対象プロジェクトとして測定する場合の動作を例にして説明する。なお、Project1のプロジェクト情報は図９に、Project2のプロジェクト情報は図１０に、Project1のプロジェクト情報のプログラムコードのソースツリーは図１４に、Project2のソースツリーは図１５に示されるものとする。
【００３９】
はじめに、比較対象プロジェクトに対する処理について説明する。図５を参照して、ステップ（以下、Ｓ）５０２でプロジェクト情報入力部１０２は、ソフトウェア開発行数測定装置１００に対して入力装置２０３を用いて入力された、図９に示される、比較対象プロジェクトであるProject1のプロジェクト情報を受付ける。
【００４０】
記憶処理部１０５はプロジェクト情報記憶部２０２１にアクセスし、入力されたProject1のプロジェクト情報が、過去に測定され、登録済みであるか否かを確認する。その結果、Project1のプロジェクト情報がプロジェクト情報記憶部２０２１に登録済みであると確認された場合（Ｓ５０３でＹＥＳ）、Ｓ５０５で記憶処理部１０５は、ソフトウェア構成情報記憶部２０２３にアクセスし、Project1のソフトウェア構成情報を読み出す。
【００４１】
上記確認の結果、入力されたProject1のプロジェクト情報がプロジェクト情報記憶部２０２１に未登録であると確認された場合は（Ｓ５０３でＮＯ）、Ｓ５０４でソフトウェア構成情報抽出部１０３は、Project1のプロジェクト情報からソフトウェア構成情報を抽出する。Ｓ５０４で、Project1について図２０のソフトウェア構成情報が抽出されたものとする。なお、Ｓ５０４での抽出動作については、後に、図６のフローチャートを用いて説明する。入力されたプロジェクト情報は、記憶処理部１０５によってプロジェクト情報記憶部２０２１に記憶される。
【００４２】
次に、制御部１０１は、ソフトウェア構成情報を修正するか否かを判断する。除外判定情報や機能情報はプロジェクト情報から抽出される情報ではなく測定者等の入力によって生成される情報であるため、入力された比較対象プロジェクトのプロジェクト情報からＳ５０４で初めてソフトウェア構成情報が抽出された場合、抽出されたソフトウェア構成情報にはこれら情報が不足している。そのため、好ましくは、制御部１０１は、Ｓ５０４で抽出動作が行なわれた場合に、抽出されたソフトウェア構成情報を修正すると判断する。または、制御部１０１は、ソフトウェア構成情報を修正するか否かを、入力装置２０３からの指示入力に基づいて判断してもよい。第１の実施の形態では、Ｓ５０４でProject1について図２０のソフトウェア構成情報が抽出されるため、制御部１０１は、Project1のソフトウェア構成情報を修正すると判断する。
【００４３】
Project1のソフトウェア構成情報を修正する場合（Ｓ５０６でＹＥＳ）、Ｓ５０７で除外判定情報入力部１０４２および機能情報入力部１０４１は、それぞれ、入力装置２０３から、ソフトウェア構成情報のうちの除外判定情報および機能情報の入力を受付ける。Ｓ５０７で、具体的に、図２１に示される除外判定情報および機能情報が入力されたものとする。Ｓ５０７で除外判定情報入力部１０４２および機能情報入力部１０４１は、たとえば、Project1を構成するファイルを示して各ファイルについての機能情報を入力するための画面（不図示）を出力装置２０４に表示するなどして、入力装置２０３において測定者から除外判定情報および機能情報の直接の入力を受付けてもよい。または、制御部１０１がProject1のソフトウェア構成情報のファイル所有者情報やデータ情報を基に予め規定されているルールに従って除外判定情報の入力候補を出力装置２０４に示すことで、入力装置２０３において測定者から入力する除外判定情報の確定の指示を受付けてもよい。また、制御部１０１が、比較対象プロジェクトの各ファイルの管理場所（ディレクトリ）に対応する機能を割り当てる、などの予め規定されているルールに従って、ファイルごとに依存する機能の候補を出力装置２０４に示すことで、入力装置２０３において測定者から入力する機能情報の確定の指示を受付けてもよい。たとえば、図２１の例では、Drv以下のディレクトリで管理されている（格納されている）ファイルに対しては「ハード」を自動的に対応付け、その他のディレクトリで管理されているファイルについては依存する機能の入力を受付けてもよい。
【００４４】
図２１の除外判定情報は、ファイル所有者情報が「SHARP CORPORATION」以外のファイルについては「ファイル除外」として開発行数を測定する対象からファイル単位で除外し、データ情報が４０％〜９０％のファイルについては「データ部除外」としてデータ部と認識した行を開発行数を測定する対象から除外し、データ情報が９１％以上のファイルについては「ファイル除外」として開発行数を測定する対象からファイル単位で除外することを指定している。また、図２１の機能情報は、図９に示されるように、Project1の保有機能情報３０４では「ハード」「ラインアップ」および「仕向け」がプログラムコードの保有する機能として特定されているところ、その中から、Project1のファイルProject1/Out/outcome.hの依存する機能を「ハード」、Project1/Apl/control.cの依存する機能を「ラインアップ」、Project1/Apl/main.cの依存する機能を「仕向け」と特定している。
【００４５】
Ｓ５０７で除外判定情報および機能情報が入力されると、制御部１０１は入力された情報によって比較対象プロジェクトであるProject1のソフトウェア構成情報を更新し、Ｓ５０８で記憶処理部１０５がProject1のプロジェクト情報と関連付けてソフトウェア構成情報記憶部２０２３に記憶する。
【００４６】
Ｓ５０９で実効コード抽出部１０６は、行数比較を行なうために、Project1のプロジェクト情報のコンパイル設定情報から抽出されるマクロ定義を適用して、Project1のプログラムコードから実効コードを抽出する。
【００４７】
続いて、Ｓ５１０〜Ｓ５１７で、測定対象プロジェクトに対しても、それぞれＳ５０２〜Ｓ５０９と同様の処理が行なわれる。すなわち、Ｓ５１０でプロジェクト情報入力部１０２は、ソフトウェア開発行数測定装置１００に対して入力装置２０３を用いて入力された、図１０に示される、行数を測定する対象プロジェクトであるProject2のプロジェクト情報を受付ける。
【００４８】
記憶処理部１０５はプロジェクト情報記憶部２０２１にアクセスし、入力されたProject2のプロジェクト情報が、過去に測定したことがあり、登録済みであるか否かを確認する。その結果、Project2のプロジェクト情報がプロジェクト情報記憶部２０２１に登録済みであると確認された場合（Ｓ５１１でＹＥＳ）、Ｓ５１２で記憶処理部１０５は、ソフトウェア構成情報記憶部２０２３にアクセスし、Project2のソフトウェア構成情報を読み出す。Ｓ５１２で、Project2について図２２のソフトウェア構成情報が読み出されたものとする。
【００４９】
上記確認の結果、入力されたProject2のプロジェクト情報がプロジェクト情報記憶部２０２１に未登録であると確認された場合は（Ｓ５１１でＮＯ）、Ｓ５１３でソフトウェア構成情報抽出部１０３は、Project2のプロジェクト情報からソフトウェア構成情報を抽出する。
【００５０】
次に、制御部１０１は、上述と同様にして、ソフトウェア構成情報を修正するか否かを判断する。Project2のソフトウェア構成情報を修正する場合（Ｓ５１４でＹＥＳ）、Ｓ５１５で除外判定情報入力部１０４２および機能情報入力部１０４１は、それぞれ、入力装置２０３から、ソフトウェア構成情報のうちの除外判定情報および機能情報の入力を受付ける。
【００５１】
Ｓ５１５において、Ｓ５０７と同様に除外判定情報入力部１０４２および機能情報入力部１０４１は、それぞれ、入力装置２０３において測定者から除外判定情報および機能情報の直接の入力を受付けてもよい。または、制御部１０１がProject2のソフトウェア構成情報のファイル所有者情報やデータ情報を基に予め規定されているルールに従って除外判定情報の入力候補を出力装置２０４に示すことで、入力装置２０３において測定者から入力する除外判定情報の確定の指示を受付けてもよい。また、制御部１０１が、比較対象プロジェクトの各ファイルの管理場所（ディレクトリ）に対応する機能を割り当てる、などの予め規定されているルールに従って、ファイルごとに依存する機能の候補を出力装置２０４に示すことで、入力装置２０３において測定者から入力する機能情報の確定の指示を受付けてもよい。さらに、Project2のプロジェクト情報がプロジェクト情報記憶部２０２１に登録済みのプロジェクトと同様であれば、登録済みのプロジェクトに関連してソフトウェア構成情報記憶部２０２３に記憶されているソフトウェア構成情報の除外判定情報および機能情報を、Project2の除外判定情報および機能情報としてそのまま流用してもよい。図２２では、先の処理で登録されたProject1のソフトウェア構成情報（図２１）のうちの除外判定情報および機能情報がProject2の除外判定情報および機能情報として流用された例が示されている。
【００５２】
Ｓ５１５で除外判定情報および機能情報が入力されると、制御部１０１は入力された情報によって測定対象プロジェクトであるProject2のソフトウェア構成情報を更新し、Ｓ５１６で記憶処理部１０５がProject2のプロジェクト情報と関連付けてソフトウェア構成情報記憶部２０２３に記憶する。
【００５３】
Ｓ５１７で実効コード抽出部１０６は、行数比較を行なうために、Project2のプロジェクト情報のコンパイル設定情報から抽出されるマクロ定義を適用して、Project1のプログラムコードから実効コードを抽出する。
【００５４】
上記Ｓ５０９，Ｓ５１７で比較対象のProject1の実効コードおよび測定対象のProject2の実効コードが抽出されると、Ｓ５１８で開発行数比較部１０７は、図２３に示されるように、対応するファイルごとにこれらの行数を比較する。図２３において、追加行数には、対応するファイルごとに、Project1と比較してProject2に対して追加された行の行数が示されている。さらに、Ｓ５１８で開発行数比較部１０７は、この追加行数に対し、測定対象のProject2の除外判定情報を適用することによって、Project2の開発行数を算出する。すなわち、Project2の除外判定情報で除外されている部分の他の部分についての追加行数に基づいて、Project2の開発行数を算出する。Ｓ５１８では、Project2について図２４のように開発行数が算出されたものとする。
【００５５】
ここで、対応するファイルを比較する際、ファイル組情報が設定されている場合は対応するファイルを検索する。図２２では、Project2ではファイル"Project2/Opt/jp/option.c"および"Project2/Opt/lang-jp.c"にはそれぞれ"Opt/us/option.c"および"Opt/lang-us.c"がファイル組情報として設定されている。しかしながら、図２１に示されるように、Project1では対応するファイルとしてProject2のファイルと同一名のファイル"Project1/Opt/jp/option.c"および"Project1/Opt/lang-jp.c"は存在するが、Project2のファイル組情報に設定されているファイルは存在しない。この場合は、同一名のファイルを比較対象ファイルとする。ファイル組情報に設定されているファイルが存在する場合は後述する。
【００５６】
Ｓ５１９で開発行数集計部１０８は、Ｓ５１８で算出されたProject2の開発行数を、Project2の機能ごとに集計する。図１０のProject2の保有機能情報では、「仕向け」「ハード」および「ラインアップ」の機能が特定されている。そこで、Ｓ５１９で開発行数集計部１０８は、「仕向け」「ハード」および「ラインアップ」のそれぞれについてＳ５１８で算出された開発行数を集計する。Ｓ５１９では、図２４に示された開発行数の算出結果から、図２５のような集計結果が得られる。図２５を参照して、図２４に示された開発行数の算出結果からは、「仕向け」に関する開発行数として０行、「ハード」に関する開発行数として３０２行、「ラインアップ」に関する開発行数として０行の開発行数が発生したことが集計される。
【００５７】
Ｓ５２０で開発行数検査部１０９は、Project2のプロジェクトの開発機能情報で特定される機能と、開発行数で行数が発生した機能とが一致しているか否かを検査する。図１０に示されるように、Project2のプロジェクト情報の開発機能情報では「ハード」が特定されている。また、図２５に示される集計結果よりProject2には「ハード」に関してのみ開発行数が発生している。したがって、Ｓ５２０で開発行数検査部１０９は、これらを比較することで、Project2について、プロジェクト情報の開発機能情報で特定される機能と、開発行数で行数が発生した機能とが一致していると判断する。この場合、開発行数検査部１０９は「測定完了」を出力する。
【００５８】
次に、Ｓ５２１で出力装置２０４は、Ｓ５２０で検査した結果に対して開発行数を確認する。Ｓ５２１で制御部１０１は出力装置２０４に、図４２に示すように機能情報ごとに開発行数を表示してもよいし、さらに、機能情報ごとの開発工数を追加して表示してもよい。その際制御部１０１は、機能情報ごとに開発工数あたりの開発行数を比較することによって、他の機能より開発行数が高い機能情報を特定し、詳細を確認することができる。図４２では、仕向けに関する機能情報の開発工数あたりの開発行数が、他の機能情報の開発行数より高いことが分かる。開発行数の詳細を確認する場合、制御部１０１は、図４３に示すように、ファイルごとに比較した結果を表示してもよい。その際制御部１０１は、図４３の警告列に示されるように、例えば、追加行数が１０００行以上のファイルは警告として、「追加行数大」と出力装置２０４に表示することによって、ファイルが除外対象であることを確認することを促してもよい。また、例えば、ファイル行数が１００００行以上のファイルは警告として、「ファイル行数大」と出力装置２０４に表示することによって、ファイルが除外対象であることを確認することを促してもよい。図４３では、"Project2/Out/unknown.c"が"追加行数大"と警告され、"Project2/Drv/bigfile.c"が"ファイル行数大"と警告されていることが示されている。これら警告情報を元に制御部１０１はファイル内容を確認することにより、ソフトウェア構成情報を修正して再測定が必要な場合は、開発行数検査部１０９で出力した「測定完了」を取り下げ、「測定未完了」とする。制御部１０１でのファイル内容の確認は、上述のＳ５０３以降の処理を再度繰り返すことで行なわれてもよいし、そのうちのいくつかの処理で行なわれてもよいし、その他の処理で行なわれてもよい。
【００５９】
測定対象プロジェクトのソフトウェア構成情報を修正する場合は、制御部１０１はＳ５１５と同様の処理を行なう。この例の場合、制御部１０１は図４３の警告情報に基づいて、図４４に示されるように、"Project2/Opt/unknown.c"の除外判定情報を、"測定対象"から"ファイル除外"へ変更し、"Project2/Drv/bigfile.c"の除外判定情報を、"測定対象"から"データ部除外"へ変更する。制御部１０１でこのように修正されることによって図４５に示されるように、開発行数が集計される。すなわち、図４５に示されるように、このような修正を行なうことによって、保有機能情報でハードの開発行数が精度よく測定されるようになる。
【００６０】
このように、開発機能情報で特定される機能と、開発行数で行数が発生した機能とが一致しているか確認後、さらに、追加行数の大きいファイルや、同様にしてファイルサイズの大きいファイルを確認することによって、例え機能情報が一致していても、除外ファイルを特定することができ、ソフトウェア構成情報を修正することができる。これにより、開発量測定の精度を高めることができる。
【００６１】
制御部１０１は、Ｓ５２０での検査結果とＳ５２１での開発行数の確認結果とに応じて、Project2の開発行数を再度測定するか否かを判断する。すなわち、Ｓ５２０での検査結果が「測定未完了」である場合、またはＳ５２１での確認結果が「測定未完了」である場合、制御部１０１は再度開発行数の測定を行なうとして、Ｓ５０２に動作を戻す（Ｓ５２２でＹＥＳ）。Ｓ５２０での検査結果もＳ５２１での確認結果も「測定完了」である場合、一連の測定動作を終了する（Ｓ５２２でＮＯ）。
【００６２】
次に、図６のフローチャートを参照して、ソフトウェア構成情報抽出部１０３におけるソフトウェア構成情報の抽出動作を説明する。
【００６３】
図６を参照して、Ｓ６０２でファイルリスト作成部１０３１は、図３のプロジェクト情報に示されたビルドツール情報からビルドツールを起動してプロジェクトを構成するファイルリストを取得し、ファイルリストを作成する。図３７は、図８のProject1の、ビルドツールの具体例を示す図である。ビルドツールは実行可能なプログラムを作成する他、実行可能なプログラムを作成するために必要なファイルリスト情報を出力する。図３８はビルドツールを使用して実行可能なプログラムを作成する具体例を示す。ビルドツールに対しコマンド名として"make compile"を指定することにより、プロジェクトを構成するファイルリストに対するコンパイルが開始され、実行可能なプログラムが作成される。図３９はビルドツールを使用してプロジェクトを構成するファイルリストを作成する具体例を示す。ビルドツールに対しコマンド名として"make printlist"を指定することにより、プロジェクトを構成するファイルリストが[Target file list]以下に出力される。また、プロジェクト間で比較すべきファイルリストが[Compare file list]以下に出力される。
【００６４】
ここで、ビルドツールでは、実行可能なプログラムを作成するために必要なファイルだけをファイルリストとして出力する。図４０はProject1のファイル構成の具体例を示す図である。Project1の全ファイルとしては、Optディレクトリの配下の"Opt/jp/option.c","Opt/us/option.c","Opt/lang-jp.c",および"Opt/lang-us.c"の４ファイルが存在する。しかしながら、図３７に記載のように、LANGがJPを指定されている時は"Opt/jp/option.c","Opt/lang-jp.c"の２ファイルだけが実行可能なプログラムを作成するために使用され、LANGがUSを指定されている場合は"Opt/us/option.c","Opt/lang-us.c"の２ファイルだけが実行可能なプログラムを作成するために使用される。したがって、Optディレクトリ以下には４ファイルが存在するが、LANGの指定によって実際には２ファイルしか使用されない。図９のProject1のプロジェクト情報によると保有機能情報で仕向けは日本で指定されており、ビルドツールでのLANGはJPに指定され、図３９に示される実行可能なプログラムを構成するファイルだけが出力され、ソフトウェア構成情報に追加される。
【００６５】
さらに、図３９では[Compare file list]以下に、プロジェクト間で比較すべきファイルリストを出力する。プロジェクト間で比較すべきファイルリストは、開発行数測定の際に比較対象とするファイルリストを表し、図４１に示されるファイル組情報に追加される。ファイル組情報はＳ５１９で開発行数集計部１０８によって集計する時に再び参照される。ファイル組情報の集計については後述する。
【００６６】
Ｓ６０３でファイル情報取得部１０３２は、Ｓ６０２で作成されたファイルリストに記述される、プログラムコードから抽出された各ファイルを走査して、各ファイルの内容を読み込む。ファイルの内容は、図１８に示されるように、ファイルの先頭部を形成するファイルヘッダ部と、それ以外のファイル本体部とに分けられる。そして、Ｓ６０４でファイル情報取得部１０３２は、各ファイルのヘッダ部を読み込み、それぞれのファイルのヘッダ部に記述されている当該ファイルの所有者情報を示すキーワードを特定して、そのキーワードを元にファイルごとに所有者情報を読み込む。図１８に示されるファイルには、ファイルのヘッダ部に、キーワード"Copyright(c)"に続いて、コピーライトの発行年、著作権者が記述されている。ファイル情報取得部１０３２は、図１８に示されるファイルのヘッダ部からは、著作権者をファイルの所有者情報として読み込む。キーワードは"Author"など他のキーワードでもよいし、ファイルの属性や、構成管理ツールのファイル情報から読み込んでもよい。Ｓ６０４で読み込まれたファイル所有者情報は、Ｓ６０５でProject1のソフトウェア構成情報に追加される。
【００６７】
次に、Ｓ６０６でファイル情報取得部１０３２は、各ファイルの本体部を読み込み、ファイルごとに、ファイル内の数値データの行数と、その割合とを測定する。詳しくは、ファイル情報取得部１０３２は、予め数値データとしてキーワードを用意し、読み込んだ行がそのキーワードから構成される時、数値データ行として扱う。図１９には、主に数値データから構成されるプログラムファイルの例が示される。ファイル情報取得部１０３２が、数値データのキーワードとして、数字「０」〜「９」、１６進表記「0x」、数値の区切りを示すカンマ「,」、および空白「  」を記憶しているものとすると、ファイルの本体部に図１９のプログラムファイルで含まれる場合、ファイル情報取得部１０３２では、当該ファイルについて、本体部２２行のうち１６行が数値データで占められていることが測定される。Ｓ６０６で測定されたファイルごとの数値データの行数と、その割合とは、Ｓ６０７でProject1のソフトウェア構成情報にデータ情報として追加される。
【００６８】
以上に示された測定動作により、ソフトウェア開発行数測定装置１００では、開発行数の測定対象のプロジェクトのプログラムコード中に、開発行数を測定する対象となる開発者が作成したものでないファイルがあった場合や、開発者がツールなどを用いて自動的に作成したファイルがあった場合など、生産性を測定する対象ではないファイルが含まれる場合であっても、精度よく当該プロジェクトの開発行数を測定することができる。
【００６９】
［第２の実施の形態］
図８に示される比較関係に基づいて、プロジェクト３（Project3）の開発行数をプロジェクト１（Project1）を比較対象プロジェクトとして測定する場合の動作を例として、ソフトウェア開発行数測定装置１００の、第２の実施の形態にかかる開発行数の測定動作を説明する。Project3のプロジェクト情報は図１１に、Project3のプロジェクト情報のプログラムコードのソースツリーは図１６に示されるものとする。
【００７０】
ソフトウェア開発行数測定装置１００での、第２の実施の形態にかかる、開発行数の測定動作のメインの動作は、図５のフローチャートに示された第１の実施の形態にかかる動作と同じである。
【００７１】
すなわち、Ｓ５０２でプロジェクト情報入力部１０２から比較対象のProject1が入力され、Ｓ５０３〜Ｓ５０８の動作を経てＳ５０９で実効コード抽出部１０６においてProject1の実効コードが抽出される。また、Ｓ５１０でプロジェクト情報入力部１０２から測定対象のProject3が入力され、Ｓ５１１〜Ｓ５１６の動作が実行される。Ｓ５１１〜Ｓ５１６の動作で抽出され、除外判定情報および機能情報が入力されたProject3のソフトウェア構成情報が図２６に示されるものとする。Ｓ５１７で実効コード抽出部１０６においてProject3の実効コードが抽出される。
【００７２】
Ｓ５１８で、開発行数比較部１０７において抽出された比較対象プロジェクトの実効コードと測定対象プロジェクトの実効コードとの行数が、図２７に示されるように対応するファイルごとに比較され、Project1と比較してProject3に対して追加された行の行数が特定される。この追加行数に対し、測定対象のProject3の除外判定情報が適用されてProject3の開発行数が算出される。
【００７３】
ここで、対応するファイルを比較する際、ファイル組情報が設定されている場合には対応するファイルを検索する。図２６では、Project3ではファイル"Project3/Opt/us/option.c"および"Project3/Opt/lang-us.c"にはそれぞれ"Opt/jp/option.c"および"Opt/lang-jp.c"がファイル組情報として設定されている。図２１に示されるようにProject1では、ファイル"Project1/Opt/us/option.c"および"Project1/Opt/lang-us.c"は存在しないが、ファイル組情報に設定されている"Opt/jp/option.c"および"Opt/lang-jp.c"が存在する。この場合は、ファイル組情報に設定されているファイルを比較対象ファイルとする。こうしてソフトウェア構成情報からプロジェクト間のファイル行数を比較した結果を図２７に示す。このように、ビルドツールからファイルリストを取得するようにすることによって、開発対象外のファイルを除外でき、比較対象とするファイル組を選択することができ、開発量測定の精度を高めることができる。
【００７４】
Ｓ５１９で開発行数は、開発行数集計部１０８によってProject3の保有機能情報で特定される機能ごとに集計される。図１１に示されるように、Project3のプロジェクト情報の保有機能情報では、「仕向け」「ハード」および「ラインアップ」の機能が特定されている。そこで、開発行数集計部１０８では、「仕向け」「ハード」および「ラインアップ」のそれぞれについて図２７に示される開発行数が集計され、図２８のような集計結果が得られる。図２８を参照して、図２７に示された開発行数の算出結果からは、「仕向け」に関する開発行数として５５行、「ハード」に関する開発行数として０行、「ラインアップ」に関する開発行数として６０行の開発行数が発生したことが集計される。
【００７５】
Ｓ５２０で開発行数検査部１０９によって、Project3の開発機能情報で特定される機能と、開発行数で行数が発生した機能とが一致しているか否かが検査される。ここで、図７を用いて、第２の実施の形態にかかる測定動作における、Ｓ５２０での検査動作について説明する。
【００７６】
図７を参照して、Ｓ７０２で開発行数検査部１０９は、Project3のプロジェクト情報の開発機能情報で特定される機能と、開発行数で行数が発生した機能とを比較する。図１１に示されるProject3のプロジェクト情報の開発機能情報では「仕向け」が特定されているのに対して、図２８の集計結果では、開発行数が発生した機能は「仕向け」と「ラインアップ」とである。そこで、Ｓ７０２で開発行数検査部１０９は、Project3の開発機能情報で特定される機能と、開発行数が発生した機能とが一致しないと判断する（Ｓ７０３でＮＯ）。測定対象のプロジェクトの開発機能情報で特定される機能と、開発行数が発生した機能とが一致する場合には（Ｓ７０３でＹＥＳ）、以降の動作をスキップしてＳ５２０での検査動作が終了する。
【００７７】
この場合、Ｓ７０４でファイル組情報取得部１０３３は、プロジェクト間で移動したファイルを特定する。ここで「移動」とは、一方のプロジェクトのプログラムコードを構成するファイルが、他方のプロジェクトのプログラムコードの、異なる管理場所（構成位置：ディレクトリ）にも組み込まれていることを指す。Ｓ７０４でファイル組情報取得部１０３３は、両プロジェクトのすべてのディレクトリを走査して、両プロジェクトの異なるディレクトリに同一ファイル名のファイルが存在するか否かで、プロジェクト間で移動したファイルを特定する。具体的に、図１４のProject1のプロジェクト情報のプログラムコードのソースツリーと、図１６のProject3のプログラムコードのソースツリーとを比較すると、Project1の構成位置「Apl」のファイルcontrol.c（Project1/Apl/control.c）が、Project3の構成位置「Mid」に移動（Project3/Mid/control.c）している。移動ファイルは図１６において矢印で表わされている。そこで、第２の実施の形態にかかる動作では、Ｓ７０４でファイル組情報取得部１０３３が、プロジェクト間で移動したファイルとして上記ファイルを特定する。
【００７８】
Ｓ７０４の調査の結果、プロジェクト間で移動したファイルが存在する場合（Ｓ７０５でＹＥＳ）、制御部１０１においてファイルの内容が確認された後、Ｓ７０６で記憶処理部１０５が、特定されたファイルを測定対象プロジェクトのソフトウェア構成情報の組情報に追加する。図１６の例ではcontrol.cが移動したファイルと特定され、Ｓ７０６では、図２９に示されるように、Project3のソフトウェア構成情報のファイル組情報に当該ファイルを特定する情報が追加される。
【００７９】
なお、Ｓ７０４の調査の結果、プロジェクト間で移動したファイルが存在しない場合（Ｓ７０５でＮＯ）の以降のＳ７０７〜Ｓ７１０の動作については、第３の実施の形態にかかる動作として、他の具体例を用いて後に説明する。
【００８０】
第２の実施の形態にかかる動作では、Ｓ５２０での検査動作において、測定対象のプロジェクトの開発機能情報で特定される機能と、開発行数が発生した機能とが一致しないと判断されて上記Ｓ７０４〜Ｓ７０６の動作が実行されるため、検査結果として「測定未完了」が返される。この場合、再度開発行数の測定を行なうとして、Ｓ５０２に動作が戻る。
【００８１】
２回目の測定動作においては、Ｓ５１８で開発行数比較部１０７が、抽出した比較対象のProject1の実効コードと測定対象のProject3の実効コードとの行数を対応するファイルごとに比較する際、図３０に示されるように、ファイル組情報に追加された移動したファイルと特定された２つのファイル（Project1/Apl/control.cおよびProject3/Mid/control.c）が対応するファイルとされ、これらファイルの実効コードの行数が比較される。移動したファイルが特定されていなかった１回目の比較でProject3/Mid/control.cについて追加行数が抽出されていたのに対し（図２７）、上述の移動したファイルを特定する動作によってファイルの対応関係が特定されるため、図３０に示される２回目の比較では、Project3/Mid/control.cについて追加行数が抽出されなくなる。したがって、Ｓ５１９で開発行数集計部１０８によって機能ごとに算出された開発行数が集計されると、図３１に示されるように、「ラインアップ」に関する開発行数の集計結果が０行となる。これにより、Ｓ５２０で開発行数検査部１０９によって、Project3の開発機能情報で特定される機能と、開発行数で行数が発生した機能とが一致していると判断されて、検査結果として「測定完了」が返されることになる。
【００８２】
以上に示された測定動作により、ソフトウェア開発行数測定装置１００では、開発行数の測定対象のプロジェクトのプログラムファイルの管理場所が変更された場合でも、精度よく当該プロジェクトの開発行数を測定することができる。
【００８３】
［第３の実施の形態］
図８に示される比較関係に基づいて、プロジェクト４（Project4）の開発行数を測定する場合の動作を例として、ソフトウェア開発行数測定装置１００の、第３の実施の形態にかかる開発行数の測定動作を説明する。Project4のプロジェクト情報は図１２に、Project4のソースツリーは図１７に示されるものとする。
【００８４】
ソフトウェア開発行数測定装置１００での、第３の実施の形態にかかる、開発行数の測定動作のメインの動作は、図５のフローチャートに示された第１の実施の形態にかかる動作と同じである。
【００８５】
すなわち、Ｓ５０２でプロジェクト情報入力部１０２から比較対象のProject3が入力され、Ｓ５０３〜Ｓ５０８の動作を経てＳ５０９で実効コード抽出部１０６においてProject3の実効コードが抽出される。また、Ｓ５１０でプロジェクト情報入力部１０２から測定対象のProject4が入力され、Ｓ５１１〜Ｓ５１６の動作を経てＳ５１７で実効コード抽出部１０６においてProject4から実効コードが抽出される。
【００８６】
Ｓ５１８で、開発行数比較部１０７において抽出された比較対象プロジェクトの実効コードと測定対象プロジェクトの実効コードとの行数が、図３２に示されるように対応するファイルごとに比較され、Project3と比較してProject4に対して追加された行の行数が特定される。この追加行数に対し、測定対象のProject4の除外判定情報が適用されてProject4の開発行数が算出される。
【００８７】
Ｓ５１９で開発行数は、開発行数集計部１０８によってProject4の保有機能情報で特定される情報ごとに集計される。図１２に示されるように、Project4のプロジェクト情報の保有機能情報では、「仕向け」「ハード」および「ラインアップ」の機能が特定されている。そこで、開発行数集計部１０８では、「仕向け」「ハード」および「ラインアップ」のそれぞれについて図３２に示される開発行数が集計され、図３３のような集計結果が得られる。図３３を参照して、図３２に示された開発行数の算出結果からは、「仕向け」に関する開発行数として０行、「ハード」に関する開発行数として２行、「ラインアップ」に関する開発行数として６０行の開発行数が発生したことが集計される。
【００８８】
Ｓ５２０で開発行数検査部１０９によって、Project4のプロジェクト情報の開発機能情報で特定される機能と、開発行数で行数が発生した機能とが一致しているか否かが検査される。ここで、再度図７を用いて、第３の実施の形態にかかる測定動作における、Ｓ５２０での検査動作について説明する。第３の実施の形態にかかる検査動作のうち、Ｓ７０２からＳ７０５までは第２の実施の形態で説明された動作と同じである。
【００８９】
すなわち、Ｓ７０２で開発行数検査部１０９は、Project4のプロジェクト情報の開発機能情報で特定されると、開発行数で行数が発生した機能とを比較する。図１３に示されるProject4のプロジェクト情報の開発機能情報では「ラインアップ」が特定されているのに対して、図３３の集計結果では、開発行数が発生した機能は「ハード」と「ラインアップ」とであることが示されている。そこで、Ｓ７０２で開発行数検査部１０９は、Project4の開発機能情報で特定される機能と、開発行数が発生した機能とが一致しないと判断する（Ｓ７０３でＮＯ）。
【００９０】
この場合、Ｓ７０４でファイル組情報取得部１０３３は、第２の実施の形態で説明されたように、プロジェクト間で移動したファイルを調査する。図１６のProject3のプロジェクト情報のプログラムコードのソースツリーと、図１７のProject4のソースツリーとを比較すると、これらプロジェクト間の異なるディレクトリに存在する同一ファイル名のファイルは検出されない。そのため、第３の実施の形態にかかる動作では、Ｓ７０４で、プロジェクト間で移動したファイルが存在しないと判断される。
【００９１】
プロジェクト間で移動したファイルが存在しない場合（Ｓ７０５でＮＯ）、Ｓ７０７で記憶処理部１０５は、上の実効ファイルの比較動作で用いられなかった比較対象プロジェクトについての情報を、不足プロジェクト情報として、プロジェクト情報記憶部２０２１から取得する。図１２の、測定対象のProject4の比較対象プロジェクト情報では、Project3のみが規定されている。しかしながら、図１７に矢印で表わされているように、Project4のプログラムコードには、Project2からdevice3.cおよびdevice4.cの２ファイルが流用されている。そのため、図８に点線で示されているように、Project4の開発行数はProject2も比較対象として測定される。
【００９２】
具体的に、開発行数検査部１０９は、Ｓ７０２で測定対象のプロジェクトの開発機能情報で特定される機能と、開発行数が発生した機能とが一致しないと判断すると（Ｓ７０３でＮＯ）、Project4の開発機能情報で特定される機能と一致していない、開発行数で行数が発生した「ハード」の開発行数が算出されたProject4のファイル（Project4/Drv/device3.c）を特定し、記憶処理部１０５に入力する。Ｓ７０４で記憶処理部１０５は、プロジェクト情報記憶部２０２１を走査して、上記ファイルを含むプロジェクトを特定し、該プロジェクト情報を不足プロジェクト情報として読み出す。ここでは、図１５のソースツリーに示されるように、Drv/device3.cを有するProject2が不足プロジェクトとしてProject2のプロジェクト情報が不足プロジェクト情報として読み出される。
【００９３】
制御部１０１は、Ｓ７０７で取得された不足プロジェクト情報をProject4のプロジェクト情報の測定対象プロジェクトに追加するか否かを判断する。制御部１０１は、Ｓ７０７で不足プロジェクト情報が取得されると自動的に測定対象プロジェクトに追加すると判断してもよいし、測定対象プロジェクトに追加するか否かの入力を受付けるための画面などを出力装置２０４で出力して、入力装置２０３からの指示入力に基づいて判断してもよい。
【００９４】
Ｓ７０７で取得された不足プロジェクト情報を測定対象プロジェクトに追加する場合（Ｓ７０８でＹＥＳ）、制御部１０１が比較対象に追加するProject2の内容を確認した上で、Ｓ７０９でプロジェクト情報入力部１０２は、測定対象のProject4のプロジェクト情報の比較対象プロジェクト情報にProject2を追加し、図１２のプロジェクト情報を、図１３に示されるプロジェクト情報に更新する。
【００９５】
Ｓ７０７で取得された不足プロジェクト情報を測定対象プロジェクトに追加しない場合（Ｓ７０８でＮＯ）、Ｓ７１０で制御部１０１は、他に機能が一致しない原因を追跡するための動作を実行し、その動作結果に基づいて対策を行なう。ここでの具体的な動作および対策については限定されない。
【００９６】
第３の実施の形態にかかる動作では、Ｓ５２０での検査動作において、測定対象のプロジェクトの開発機能情報で特定される機能と、開発行数が発生した機能とが一致しないと判断されて上記Ｓ７０４〜Ｓ７０６の動作が実行されるため、検査結果として「測定未完了」が返される。この場合、再度開発行数の測定を行なうとして、Ｓ５０２に動作が戻る。
【００９７】
２回目の測定動作においては、Ｓ５０２で比較対象プロジェクトとして上記動作で追加されたProject2が入力され、Ｓ５０３〜Ｓ５０８の動作を経てＳ５０９で実効コード抽出部１０６においてProject2の実効コードが抽出される。Ｓ５１８では開発行数比較部１０７によって、抽出した比較対象のProject2の実効コードと測定対象のProject4の実効コードとの行数が対応するファイルごとに比較される。そのため、１回目の測定動作では対応するファイルがないとされて測定対象のProject4のdevice3.cおよびdevice4.cについて追加行数が抽出されていたのに対し（図３２）、Project3を比較対象プロジェクトに追加した後の２回目の測定動作においては、上記ファイルの実効コードの行数が、それぞれ、新たな比較対象のProject2中のdevice3.cおよびdevice4.cの実効コードの行数が比較され、図３４に示される２回目の比較では、これらファイルについて追加行数が抽出されなくなる。
【００９８】
２回目以降のＳ５１８では、開発行数比較部１０７は、複数の比較対象のプロジェクトを比較する。すなわち、測定対象プロジェクトの比較対象プロジェクト情報で複数のプロジェクトが指定される場合、測定対象プロジェクトの実効コードと比較対象プロジェクトの実効コードとの比較の結果を、複数の比較対象プロジェクトのそれぞれについてファイルごとに比較して、抽出される追加行数の少ない比較対象プロジェクトのファイルを比較対象として採用する。具体的には、１回目の測定動作でProject2との比較の結果図３２に示される追加行数が抽出され、２回目の測定動作でProject3との比較の結果図３４に示される追加行数が抽出されているため、Ｓ５１８で開発行数比較部１０７はこれらを比較して、測定対象のProject4と比較対象プロジェクト群との比較の結果として、図３５に示される比較結果を返す。すなわち、Project4/Drv/device3.cについてはProject2との比較結果（図３４）の方の追加行数が少ないことから比較対象プロジェクトとしてProject2を採用し、Project4/Drv/device3.cおよびProject4/Mid/control.cについてはProject3との比較結果（図３２）の方の追加行数が少ないことから比較対象プロジェクトとしてProject3を採用している。したがって、Ｓ５１９で開発行数集計部１０８によって機能ごとに算出された開発行数が集計されると、図３６に示されるように、「ハード」に関する開発行数の集計結果が０行となる。これにより、Ｓ５２０で開発行数検査部１０９によって、Project4の開発機能情報で特定される機能と、開発行数で行数が発生した機能とが一致していると判断されて、検査結果として「測定完了」が返されることになる。
【００９９】
以上示された測定動作により、ソフトウェア開発行数測定装置１００では、開発行数の測定対象のプロジェクトの、比較対象とするプロジェクトに関する情報が不足している場合でも、精度よく当該プロジェクトの開発行数を測定することができる。
【０１００】
さらに、上述の測定動作をコンピュータに実行させるプログラム自体を提供することもできる。このようなプログラムは、コンピュータに付属するフレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）およびメモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【０１０１】
なお、提供するプログラムは、コンピュータのオペレーティングシステム（ＯＳ）の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずＯＳと協働して処理が実行される。このようなモジュールを含まないプログラムも、本発明にかかるプログラムに含まれ得る。
【０１０２】
また、プログラムは他のプログラムの一部に組込まれた形で提供されてもよい。その場合にも、プログラム自体には上記他のプログラムに含まれるモジュールが含まれず、他のプログラムと協働して処理が実行される。このような他のプログラムに組込まれたプログラムも、本発明にかかるプログラムに含まれ得る。
【０１０３】
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
【０１０４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１０５】
１００  ソフトウェア開発行数測定装置、１０１  制御部、１０２  プロジェクト情報入力部、１０３  ソフトウェア構成情報抽出部、１０４  ソフトウェア構成情報入力部、１０５  記憶処理部、１０６  実効コード抽出部、１０７  開発行数比較部、１０８  開発行数集計部、１０９  開発行数検査部、２０１  演算部、２０２  記憶装置、２０３  入力装置、２０４  出力装置、２０５  バス、３００  プロジェクト情報、３０１  プロジェクト名、３０２  プログラムコード、３０３  コンパイル設定情報、３０４  保有機能情報、３０５  比較対象プロジェクト情報、３０６  開発機能情報、３０７  ビルドツール情報、４００  ソフトウェア構成情報、４０１  ファイルリスト、４０２  ファイル所有者情報、４０３  データ情報、４０４  除外判定情報、４０５  機能情報、４０６  ファイル組情報、１０３１  ファイルリスト作成部、１０３２  ファイル情報取得部、１０３３  ファイル組情報取得部、１０４１  機能情報入力部、１０４２  除外判定情報入力部、２０２１  プロジェクト情報記憶部、２０２２  プログラム記憶部、２０２３  ソフトウェア構成情報記憶部。
【図１】
2010277576.tif 000003
【図２】
2010277576.tif 000004
【図３】
2010277576.tif 000005
【図４】
2010277576.tif 000006
【図５】
2010277576.tif 000007
【図６】
2010277576.tif 000008
【図７】
2010277576.tif 000009
【図８】
2010277576.tif 000010
【図９】
2010277576.tif 000011
【図１０】
2010277576.tif 000012
【図１１】
2010277576.tif 000013
【図１２】
2010277576.tif 000014
【図１３】
2010277576.tif 000015
【図１４】
2010277576.tif 000016
【図１５】
2010277576.tif 000017
【図１６】
2010277576.tif 000018
【図１７】
2010277576.tif 000019
【図１８】
2010277576.tif 000020
【図１９】
2010277576.tif 000021
【図２０】
2010277576.tif 000022
【図２１】
2010277576.tif 000023
【図２２】
2010277576.tif 000024
【図２３】
2010277576.tif 000025
【図２４】
2010277576.tif 000026
【図２５】
2010277576.tif 000027
【図２６】
2010277576.tif 000028
【図２７】
2010277576.tif 000029
【図２８】
2010277576.tif 000030
【図２９】
2010277576.tif 000031
【図３０】
2010277576.tif 000032
【図３１】
2010277576.tif 000033
【図３２】
2010277576.tif 000034
【図３３】
2010277576.tif 000035
【図３４】
2010277576.tif 000036
【図３５】
2010277576.tif 000037
【図３６】
2010277576.tif 000038
【図３７】
2010277576.tif 000039
【図３８】
2010277576.tif 000040
【図３９】
2010277576.tif 000041
【図４０】
2010277576.tif 000042
【図４１】
2010277576.tif 000043
【図４２】
2010277576.tif 000044
【図４３】
2010277576.tif 000045
【図４４】
2010277576.tif 000046
【図４５】
2010277576.tif 000047