(57)【要約】【課題】ソフトウェアプロダクトの保守コストを見積ること。【解決手段】作業コスト算出部１１０がソフトウェアプロダクトを構成する各モジュールを保守する場合のそれぞれの作業コストを算出し、プロダクトモデル作成部１２０がモジュ−ルの制御フローおよびデータフローを解析してソフトウェアプロダクトのプロダクトモデルを作成し、保守ポイント算出部１３０が各モジュールの作業コストおよびプロダクトモデルを用いて保守要求に対する保守ポイントを算出するよう構成する。また、一般化保守ポイント算出部１４０がモジュールｒの保守要求の確率分布Ｒdを均等な１／ｎにして一般化保守ポイントを算出する。【選択図】        図２
2007156820.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプロダクトの保守コストを見積る保守コスト見積プログラムであって、
前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出手順
をコンピュータに実行させることを特徴とする保守コスト見積プログラム。
【請求項２】
前記保守コスト算出手順は、前記エンティティのうち保守要求があるエンティティの保守に必要な保守コストを算出することを特徴とする請求項１に記載の保守コスト見積プログラム。
【請求項３】
前記保守コスト算出手順は、前記エンティティの保守要求についての確率分布に基づいて、前記ソフトウェアプロダクトについて保守対象のエンティティを特定しない一般的な保守コストを算出することを特徴とする請求項１に記載の保守コスト見積プログラム。
【請求項４】
ソフトウェアプロダクトの保守コストを見積る保守コスト見積方法であって、
前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出工程
を含んだことを特徴とする保守コスト見積方法。
【請求項５】
ソフトウェアプロダクトの保守コストを見積る保守コスト見積装置であって、
前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出手段
を備えたことを特徴とする保守コスト見積装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソフトウェアプロダクトの保守コストを見積る保守コスト見積プログラム、保守コスト見積方法および保守コスト見積装置に関し、特に、ソフトウェアプロダクトの保守を新規に請け負う場合にも保守コストを見積ることができる保守コスト見積プログラム、保守コスト見積方法および保守コスト見積装置に関するものである。
【背景技術】
【０００２】
近年、保守困難になったソフトウェアプロダクトの保守を、第三者が請け負うサービスが一般化している。このような保守サービス請負時には、ソフトウェアプロダクトの保守に必要なコストの見積を行う必要がある。
【０００３】
そこで、例えば、特許文献１に記載されているように、大規模な情報システムに用いられている既存ソフトウェアの保守作業に要する工数の見積を行うシステムが開発されている。
【０００４】
【特許文献１】特開平７−１３４６４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載されたシステムでは、指定入力される保守内容に対応する保守作業項目を予め登録した保守作業詳細情報ファイルと、各保守作業者の保守作業の処理能力レベルを表す情報を予め登録した保守作業者情報ファイルと、上記各処理能力レベルで対処可能な上記保守作業項目に対する単位当たりの処理量を予め登録した保守見積基準値ファイルが必要であり、これまで、継続的に保守をしてきたシステム向けには適用可能であるが、新規に保守を請け負う場合には見積りが不可能であるという問題がある。
【０００６】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、ソフトウェアプロダクトの保守を新規に請け負う場合にも保守コストを見積ることができる保守コスト見積プログラム、保守コスト見積方法および保守コスト見積装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、請求項１の発明に係る保守コスト見積プログラムは、ソフトウェアプロダクトの保守コストを見積る保守コスト見積プログラムであって、前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出手順をコンピュータに実行させることを特徴とする。
【０００８】
この請求項１の発明によれば、ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出するよう構成したので、各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルだけを算出することによって、保守コストを算出することができる。
【０００９】
また、請求項２の発明に係る保守コスト見積プログラムは、請求項１の発明において、前記保守コスト算出手順は、前記エンティティのうち保守要求があるエンティティの保守に必要な保守コストを算出することを特徴とする。
【００１０】
この請求項２の発明によれば、エンティティのうち保守要求があるエンティティの保守に必要な保守コストを算出するよう構成したので、保守要求があるエンティティが特定できれば、保守コストを算出することができる。
【００１１】
また、請求項３の発明に係る保守コスト見積プログラムは、請求項１の発明において、前記保守コスト算出手順は、前記エンティティの保守要求についての確率分布に基づいて、前記ソフトウェアプロダクトについて保守対象のエンティティを特定しない一般的な保守コストを算出することを特徴とする。
【００１２】
この請求項３の発明によれば、エンティティの保守要求についての確率分布に基づいて、ソフトウェアプロダクトについて保守対象のエンティティを特定しない一般的な保守コストを算出するよう構成したので、保守要求の確率分布が特定できれば、保守コストを算出することができる。
【００１３】
また、請求項４の発明に係る保守コスト見積方法は、ソフトウェアプロダクトの保守コストを見積る保守コスト見積方法であって、前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出工程を含んだことを特徴とする。
【００１４】
この請求項４の発明によれば、ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出するよう構成したので、各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルだけを算出することによって、保守コストを算出することができる。
【００１５】
また、請求項５の発明に係る保守コスト見積装置は、ソフトウェアプロダクトの保守コストを見積る保守コスト見積装置であって、前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出手段を備えたことを特徴とする。
【００１６】
この請求項５の発明によれば、ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出するよう構成したので、各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルだけを算出することによって、保守コストを算出することができる。
【発明の効果】
【００１７】
請求項１、４および５の発明によれば、各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルだけを算出することによって、保守コストを算出することができるので、新規に保守を請け負う場合で他の情報が得られないときにも保守コストを算出することができるという効果を奏する。
【００１８】
また、請求項２の発明によれば、保守要求があるエンティティが特定できれば、保守コストを算出することができるので、新規に保守を請け負う場合でも保守対象が特定されていれば保守コストを算出することができるという効果を奏する。
【００１９】
また、請求項３の発明によれば、保守要求の確率分布が特定できれば、保守コストを算出することができるので、保守対象が特定されてない場合にも保守コストを算出することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２０】
以下に添付図面を参照して、この発明に係る保守コスト見積プログラム、保守コスト見積方法および保守コスト見積装置の好適な実施例を詳細に説明する。なお、ソフトウェアプロダクトを構成するエンティティとしては、モジュール、仕様書、設計書、操作説明書など様々なものがあるが、ここでは、ソフトウェアプロダクトがモジュールから構成される場合について説明する。
【００２１】
また、モジュールの粒度としては、プログラミング言語により様々なものが考えられる。例えば、Ｊａｖａ（登録商標）の場合、メソッド、クラス、パッケージ、ｊａｒアーカイブといった階層があり、これらがモジュールの候補となりうる。何をモジュールとするかは、主に対象とするソフトウェアプロダクトの大きさを基準として、決定する。小さなプロダクトの場合はメソッドやクラスなどをモジュールに用い、大きなプロダクトの場合はパッケージやｊａｒアーカイブなどの単位を用いる。
【実施例１】
【００２２】
まず、本実施例１に係る保守コスト見積装置が見積る保守ポイントについて説明する。図１は、本実施例１に係る保守コスト見積装置が見積る保守ポイントを説明するための説明図である。同図において、ａ、ｂ、ｃ、ｄ、ｅは、ソフトウェアプロダクトを構成するモジュールであり、作業コストは、各モジュールを保守する場合のコストである。
【００２３】
また、モジュール間の矢印は、保守作業に関するモジュール間の影響を示している。ここで、影響するとは、矢印の元のモジュールに保守作業を行った場合に矢印の先のモジュールに対して保守作業が発生することを意味する。図１では、例えば、モジュールａに対して保守作業を行うとモジュールｂに影響を与えてモジュールｂに保守作業が発生し、モジュールｂに対して保守作業を行うとモジュールｃおよびモジュールｄに影響を与えてモジュールｃおよびモジュールｄに保守作業が発生する。
【００２４】
したがって、モジュールｂに対して保守作業を行うと、モジュールｂおよびモジュールｃにも影響を与えるため、モジュールｂおよびモジュールｃに対しても保守作業が発生する。同様に、モジュールｃまたはモジュールｄに保守作業を行うと、モジュールｅに影響を与えるため、モジュールｅに対しても保守作業が発生する。
【００２５】
そこで、本実施例１に係る保守コスト見積装置は、例えば、モジュールｂの保守コストを見積る場合に、モジュールｂ単独の作業コストだけでなく、モジュールｂの保守作業が影響を与える範囲に含まれる全てのモジュールの作業コストの和を保守コストをして見積る。このようにして本実施例１に係る保守コスト見積装置が見積る保守コストを、ここでは、保守ポイントと呼ぶ。
【００２６】
すなわち、モジュールｂの保守ポイントは、モジュールｂの作業コスト＋モジュールｃの作業コスト＋モジュールｄの作業コスト＋モジュールｅの作業コスト＝８＋１５＋１０＋５＝３８となる。
【００２７】
このように、本実施例１に係る保守コスト見積装置は、各モジュールの作業コストと、保守作業に関するモジュール間の影響に基づいて保守ポイントを算出するため、各モジュールの作業コストと、保守作業に関するモジュール間の影響とを算出することによって、新規のソフトウェアプロダクトについても保守コストを見積ることができる。
【００２８】
なお、保守作業に関するモジュール間の影響を表すもの、すなわち、図１に示した矢印の関係を表すものを、ここではプロダクトモデルと呼ぶこととする。また、ここでは、矢印に重みがない場合を示したが、矢印に対して０＜ｗ≦１なる重みｗを付加し、影響を受けるモジュールの作業コストを加える場合に重みｗと作業コストの積を加えることもできる。このように、重みｗを用いることによって、保守作業に関するモジュール間の影響の度合を定量化して保守ポイントを算出することができる。
【００２９】
次に、本実施例１に係る保守コスト見積装置の構成について説明する。図２は、本実施例１に係る保守コスト見積装置の構成を示す機能ブロック図である。同図に示すように、この保守コスト見積装置１００は、作業コスト算出部１１０と、プロダクトモデル作成部１２０と、保守ポイント算出部１３０と、一般化保守ポイント算出部１４０と、ユーザインタフェース部１５０とを有する。
【００３０】
作業コスト算出部１１０は、モジュール単体の作業コストを算出する処理部であり、ここでは、モジュールのソースコードの行数を数えて作業コストとする。なお、ソースコードの行数の代わりにMcCabeのサイクロマチック数（例えば、Carma McClure、ソフトウェア開発と保守の戦略、１９９３年７月、共立出版を参照）、ＣＫメトリクス、その他のメトリクス（例えば、S. R. Chidamber and C. F. Kemerer、A Metrics Suite for Object Design、IEEE Trans. on Software Engineering, Vol.20, No.6, JUNE 1994を参照）を用いることもできる。
【００３１】
プロダクトモデル作成部１２０は、各モジュールを頂点として、モジュール間の影響関係を有向辺とした有向グラフをプロダクトモデルＧp＝（ＥＮＴ，ＡＦＦ）として作成する処理部である。ここで、ＥＮＴはエンティティすなわちモジュールを示し、ＡＦＦは影響を示す。
【００３２】
具体的には、このプロダクトモデル作成部１２０は、制御フローを解析した結果得られるモジュール間の呼び出し関係と、データフロー解析結果を用いてプロダクトモデルＧpを作成する。なお、ＣＶＳリポジトリ等の細粒度の変更履歴が入手可能な場合には、Logical Coupling（同時更新傾向に基づいた影響の推測手法、例えば、H. Gall, K. Hajek and M. Jazayeri、Detection of Logical Coupling Based on Product Release History、Proc. of the ICSM'98, 1998を参照）を利用してプロダクトモデルＧpを作成することもできる。
【００３３】
また、プロダクトモデルの辺の重みは、影響波及関係の強さを表している。重みは、０以上１以下の実数値であり、影響が強いほど大きな値を取る。例えば、モジュール間の呼び出しの数をｃ、データフローを起こす変数の数をｄとしたとき、重みは、１−αcβd(αとβは０より大きく１より小さい定数）と表すことができる。この式は、変数ｃおよびｄの定義域を０以上の整数とした場合、値域は０以上１未満となり、ｃとｄそれぞれについて単調増加な関数である。つまり、ｃ＝０かつｄ＝０のとき、すなわちモジュール間で呼出しや変数の共有が行われていない場合には、この式の値は０となる。また、ｃとｄが無限に増加してゆけば、この式の値は無限に１に近づく。なお、ソフトウェアプロダクトが大きいなどの理由で、このような計算を行うのが難しい場合には、辺の重みを定数にすることもできる。
【００３４】
保守ポイント算出部１３０は、作業コスト算出部１１０が算出した作業コストとプロダクトモデル作成部１２０が作成したプロダクトモデルＧpを用いて保守要求Ｒに対する保守ポイントを算出する処理部である。ここで、保守要求Ｒは、保守の要求があるモジュールの集合である。
【００３５】
図３は、保守ポイントの計算モデルを示す図である。同図に示すように、プロダクトモデルＧpと保守要求Ｒに対して保守ポイントＣ(Ｇp，Ｒ)はＣ(Ｇp，Ｒ)＝Ｃs1(Ｇp，Ｒ)＋Ｃs2(Ｇp，Ｒ)＋Ｃs3(Ｇp，Ｒ)と定義される。ここで、Ｃs1、Ｃs2、Ｃs3はそれぞれ、システム理解（ｓ１）、変更（ｓ２）、テスト（ｓ３）の各工程における作業コストである。
【００３６】
実際の保守作業は各工程それぞれを行う必要があるが、保守コストを見積る場合は、主要なコスト要因となる工程のみを見積り、他の工程に関しては計算しないこともできる。一般には、テスト工程が大きなコスト要因と言われているので、ここでは、このテスト工程のみの見積りを行うこととする。したがって、これ以降、主にテスト工程ｓ３のコスト見積りを中心にして説明するが、他の工程でも同様に見積りを行うことができる。
【００３７】
Ｃs3は、以下のように定義される。
【数１】
2007156820.tif 000003
ここで、
Ａ(Ｇp，Ｒ)：プロダクトモデルのグラフＧp上でＲに含まれる頂点から到達可能な頂点の集合
ｗ(Ｇp，Ｒ，ｒ')：グラフＧp上で、Ｒに含まれるいずれかの頂点からｒ'までの経路のうち、重み最大となる経路の重み
ｃｘ(ｒ)：モジュールｒに対する作業コストを表すポイント
である。
【００３８】
このように、保守ポイント算出部１３０が保守要求Ｒ、プロダクトモデルＧpおよびモジュール単体の作業コストを用いて保守ポイントを算出することによって、新規に保守を請け負う場合にも保守コストを見積ることができる。
【００３９】
一般化保守ポイント算出部１４０は、一般化保守ポイントを算出する処理部である。ここで、一般化保守ポイントとは、以下のように定義される。まず、保守ポイントの保守要求Ｒの代わりにモジュールｒの保守要求の確率分布Ｒdを用いて以下のようなコスト指標モデルを定義する。
【数２】
2007156820.tif 000004
ただし、Ｒd＝｛ａ1,ａ2，・・・，ａn｝（ｎはＧpの頂点数)、０≦ａi≦１、ａ1＋ａ2＋・・・ａn＝１である。ここで、Ｒdを均等な１／ｎにすれば、コスト指標モデルは簡単なモデルとなり、このモデルを一般化保守ポイントＣave(Ｇp)と呼ぶ。すなわち、
【数３】
2007156820.tif 000005
【００４０】
また、Ｒdを計算するために、保守ポイントを用いることも可能である。
【数４】
2007156820.tif 000006
【００４１】
このように、一般化保守ポイント算出部１４０がモジュールｒの保守要求の確率分布Ｒdを均等な１／ｎにして一般化保守ポイントを算出することによって、保守要求Ｒに依存しないソフトウェアプロダクトとしての保守コストを見積ることができる。
【００４２】
ユーザインタフェース部１５０は、利用者からソフトウェアプロダクトや保守要求Ｒなどの指定を受け付け、保守ポイント算出部１３０や一般化保守ポイント算出部１４０に渡すとともに、保守ポイント算出部１３０や一般化保守ポイント算出部１４０から見積り結果を取得して表示する処理部である。
【００４３】
次に、保守ポイント算出部１３０の処理手順について説明する。図４は、保守ポイント算出部１３０の処理手順を示すフローチャートである。ただし、
・プロダクトモデルのグラフＧp＝（Ｎ，Ｅ）
Ｎ：モジュールに対応する頂点の数を表す正の整数、頂点は１からＮの番号で識別される
Ｅ＝｛（ｓ，ｄ，ｗ）｜ｓ：起点ノード，ｄ：終点ノード，ｗ：重み｝：有向辺の集合
ｓおよびｄ：１からＮまでの整数、ノードは頂点
ｗ：０から１までの実数
・頂点単体の作業コストＣ:array[1..N] of real
・保守されるモジュールに対応する頂点を表す番号の集合Ｒ
・伝播関数ｆ(ｐ，ｗ)
値域[0, p]
ｐ：直前の頂点の重み、定義域[0,1]
ｗ：辺の重み、定義域[0,1]
例：ｆ(ｐ，ｗ)=ｐｗ
とする。
【００４４】
図４に示すように、保守ポイント算出部１３０は、ステップＳ１０１〜ステップＳ１０６で、保守対象であるモジュールに対応する頂点ｉの係数Ｗ［ｉ］＝１．０と初期設定し、保守対象でないモジュールに対応する頂点ｉの係数Ｗ［ｉ］＝０．０と初期設定する。ここで、Ｗ［ｉ］は、保守対象であるモジュールからの影響の大きさを示す係数である。
【００４５】
具体的には、頂点の番号に対応するインデックスｉ＝１と初期設定し（ステップＳ１０１）、ｉ≦Ｎであるか否かを判定し（ステップＳ１０２）、ｉ≦Ｎである場合には、ｉがＲに含まれるか否か、すなわち、頂点ｉに対応するモジュールが保守対象であるか否かを判定し（ステップＳ１０３）、ｉがＲに含まれるときはＷ［ｉ］＝１．０とし（ステップＳ１０４）、ｉがＲに含まれないときはＷ［ｉ］＝０．０とする（ステップＳ１０５）。そして、ｉに１を加え（ステップＳ１０６）、ステップＳ１０２に戻る。
【００４６】
一方、ｉ≦Ｎでない場合には、全ての頂点についてＷの初期設定が終了した場合であるので、ステップＳ１０７に進む。そして、ステップＳ１０７〜ステップＳ１１６で、どのＷ［ｉ］にも変更が行われなくなるまで、すなわち、影響の伝播がなくなるまで、重みｗをＷ［ｉ］に伝播関数を用いて作用させていく。
【００４７】
具体的には、いずれかのＷ［ｉ］に変更があったか否かを示すフラグであるchangedをchanged＝true（真）に初期設定し（ステップＳ１０７）、changed＝trueである間は各辺の重みをＷに作用させていく。
【００４８】
すなわち、changed＝trueであるか否かを判定し（ステップＳ１０８）、changed＝trueである場合には、changed＝false（偽）に設定し（ステップＳ１０９）、辺の番号に対応するインデックスｉ＝１と初期設定する（ステップＳ１１０）。そして、ｉ≦E.sizeであるか否かを判定する（ステップＳ１１１）。ここで、E.sizeは辺の数である。
【００４９】
そして、ｉ≦E.sizeである場合には、Ｗ［Ｅ［ｉ］.ｓ］すなわち辺の始点ノードの係数に伝播関数を用いて辺の重みＷ［Ｅ［ｉ］.ｗ］を作用させた値をｃとする（ステップＳ１１２）。そして、終点ノードの係数Ｗ［Ｅ［ｉ］.ｄ］とｃを比較し（ステップＳ１１３）、［Ｅ［ｉ］.ｄ］がｃより小さい場合には、新たに影響が大きい終点ノードへのパスが見つかったので、Ｗ［Ｅ［ｉ］.ｄ］＝ｃとし（ステップＳ１１４）、Ｗに変更があったのでchanged＝trueとする（ステップＳ１１５）。そして、ｉに１を加え（ステップＳ１１６）、ステップＳ１１１に戻って次の辺について処理を行う。
【００５０】
そして、全ての辺について処理した結果、どのＷ［ｉ］にも変更が行われなかった場合には、ステップＳ１１７〜ステップＳ１２１で頂点ｉの作業コストと係数Ｗ［ｉ］の積和を計算し保守ポイントを算出する。
【００５１】
すなわち、保守ポイントresultを０．０に初期化し（ステップＳ１１７）、頂点のインデックスｉを１に初期化する（ステップＳ１１８）。そして、ｉ≦Ｎであるか否かを判定し（ステップＳ１１９）、ｉ≦Ｎである場合には、result＝result＋Ｗ［ｉ］＊Ｃ［ｉ］とし、ｉに１を加えてステップＳ１１９に戻り積和演算を繰り返し、ｉ≦Ｎでない場合には、保守ポイントの算出処理を終了する。
【００５２】
このように、各頂点に対して辺の重みを伝播関数を用いて作用させて各頂点の係数Ｗを算出し、頂点に対応するモジュールの作業コストＣとの積和計算をすることによって、保守ポイントを算出することができる。なお、図５には、保守ポイント算出手順を記述したソースコードの一例を示す。
【００５３】
次に、保守ポイントの計算例について説明する。図６は、保守ポイントの計算対象のソフトウェアプロダクトを示す図である。同図に示すように、このソフトウェアプロダクトは、１０個のモジュールから構成される。なお、この例では、モジュールの単位をクラスとし、モジュールの作業コストをＬＯＣ（ソースコードの行数）で求めるものとする。また、モジュール間の影響関係は、メソッド呼出し関係を抽出し、呼び出される側が呼び出す側に影響されることとする。
【００５４】
また、この例では、辺の重みとして、呼び出し数やデータフローの量に関わらず定数０．５を採る。すなわち、
Ｎ＝１０
Ｅ＝｛（１，２，０．５），（１，３，０．５），（１，１０，０．５），（２，９，０．５），（３，２，０．５），（４，３，０．５），（５，６，０．５），（６，７，０．５），（６，８，０．５），（７，６，０．５），（７，９，０．５），（８，７，０．５）｝
である。
【００５５】
このソフトウェアプロダクトに対し、保守要求Ｒとして｛４，６｝が与えられた場合を考える。グラフ上で｛４，６｝から到達可能なのは、クラス２，３，７，８，９である。よって、Ｒ＝｛４，６｝に対する保守ポイントは、以下のように計算される。
Ｗ(Ｇp，Ｒ，２)ｃｘ(２)＋Ｗ(Ｇp，Ｒ，３)ｃｘ(３)＋Ｗ(Ｇp，Ｒ，４)ｃｘ(４)＋Ｗ(Ｇp，Ｒ，６)ｃｘ(６)＋Ｗ(Ｇp，Ｒ，７)ｃｘ(７)＋Ｗ(Ｇp，Ｒ，８)ｃｘ(８)＋Ｗ(Ｇp，Ｒ，９)ｃｘ(９)
＝０．５2×４１＋０．５1×１８５＋０．５0×７８＋０．５0×３０＋０．５1×２４＋０．５1×２０＋０．５2×１９７
＝２８２
【００５６】
また、このソフトウェアプロダクトにおける一般化保守ポイントの計算例は、以下のようになる。
【数５】
2007156820.tif 000007
【００５７】
上述してきたように、本実施例１では、作業コスト算出部１１０がソフトウェアプロダクトを構成する各モジュールを保守する場合のそれぞれの作業コストを算出し、プロダクトモデル作成部１２０がモジュ−ルの制御フローおよびデータフローを解析してソフトウェアプロダクトのプロダクトモデルを作成し、保守ポイント算出部１３０が各モジュールの作業コストおよびプロダクトモデルを用いて保守要求に対する保守ポイントを算出することとしたので、新規にソフトウェアの保守を請け負う場合にも、保守コストを見積ることができる。
【００５８】
また、本実施例１では、一般化保守ポイント算出部１４０がモジュールｒの保守要求の確率分布Ｒdを均等な１／ｎにして一般化保守ポイントを算出することとしたので、個別の保守要求Ｒに依存しないソフトウェアプロダクトとしての一般的な保守コストを見積ることができる。
【実施例２】
【００５９】
ところで、上記実施例１では、プロダクトモデルＧp、辺の重みｗ、モジュール単体の作業コストｃｘを用いて保守要求Ｒから保守ポイントを算出する場合について説明した。また、保守要求の分布Ｒdからコスト指標モデルを作成し、一般化保守ポイントを算出する場合について説明した。
【００６０】
本実施例２では、上記実施例１の応用について説明する。具体的には、モジュールからリスク評価のための指標「インパクトスケール」を算出し、モジュールやモジュールの集合、ソフトウェアプロダクトのリスクを評価する方法について説明する。
【００６１】
この応用では、実施例１と同一の定義として、プロダクトモデルＧp、辺の重みｗを用いる。ただし、モジュール単体の作業コストｃｘは全て定数（ここでは１）とする。そして、実施例１のＣs3(Ｇp，Ｒ)の定義と同様の定義を用い、インパクトスケールＩＳを以下のように定義する。
【数６】
2007156820.tif 000008
なお、Ａ(Ｇp，｛ｒ｝)も実施例１の定義と同じである。
【００６２】
このインパクトスケールＩＳの意味するところは、あるモジュールｒが引き起こす保守作業が重みｗを介してどこまで伝播するかの「広さ」であり、この値が大きいということを、モジュールｒの保守作業のリスクが高いと評価することができる。
【００６３】
また、ソフトウェアプロダクト全体やそのサブセットであるモジュールの集合Ｓに対して、平均インパクトスケールを以下のように定義する。
【数７】
2007156820.tif 000009
この平均インパクトスケールの多寡により、ソフトウェアプロダクトまたはそのサブセットの単位でのリスクの多寡を評価することができる。
【００６４】
次に、インパクトスケールの計算例を示す。図７は、インパクトスケール計算対象のソフトウェアプロダクトを示す図である。同図に示すように、この例では、５つのプログラムモジュール（ＥＮＴＲＹ.ｃｂｌ、ＤＩＳＰＡＴＣＨ.ｃｂｌ、ＱＵＥＲＹ.ｃｂｌ、ＯＲＤＥＲ.ｃｂｌ、ＳＴＯＣＫ.ｃｂｌ）と２つのデータモジュール（ＯＲＤＥＲ−ＳＨＥＥＴ、ＳＴＯＣＫ−ＩＮＦＯ）の計７つのモジュールからソフトウェアプロダクトが構成される。
【００６５】
また、モジュール間の関係として、「Ｃ」の付された矢印はプログラムモジュール間の呼び出し関係を示し、「Ｒ」の付された矢印はデータの読み込み関係を示し、「Ｗ」の付された矢印はデータの書き込み関係を示している。
【００６６】
図８は、このソフトウェアプロダクトのプロダクトモデルＧpを示す図である。このプロダクトモデルＧpに対し、ｗ(Ｇp，｛ｒ｝，ｒ’)を以下のように定義する。なお、ｄは所定の定数である。
【数８】
2007156820.tif 000010
【００６７】
この式は、モジュールｒから距離ｄ以内のモジュールの個数を数えるものである。この式は、インパクトスケールの計算法の一例であり、他の定義式を用いることもできる。例えば、実施例１で用いたようにｗ(Ｇp，｛ｒ｝，ｒ’)＝０．５＾(ｒとｒ’の距離)を用いることもできる。これは、より近いモジュールのほうが測定対象のモジュールに大きな影響を与えることをモデル化したものである。他にも、ｒとｒ’の間の経路に依存して重みを変化させたり、ｗを（頂点数）×（頂点数）のテーブル参照とすることもできる。
【００６８】
ｗ(Ｇp，｛ｒ｝，ｒ’)を上記の定義とし、ｄ＝２とした場合、モジュールＳＴＯＣＫ.ｃｂｌのインパクトスケールは、図９に示す点線の範囲内のモジュール数となり、５である。また、図１０は、各モジュールのインパクトスケールを示す図である。図１０から、平均インパクトスケールは、（５＋７＋６＋６＋５＋４＋３）／７＝５．１４...となる。
【００６９】
上述してきたように、実施例１の応用として、モジュール単体の作業コストｃｘを全て定数（ここでは１）とし、インパクトスケールを算出することによって、保守を請け負う場合のリスクを評価することができる。なお、インパクトスケールを算出する保守コスト見積装置の機能構成は、モジュール単体の作業コストが定数であるため、図２に示した保守コスト見積装置１００において、作業コスト算出部１１０を除いたものとなる。
【００７０】
また、本実施例１および２では、保守コスト見積装置について説明したが、保守コスト見積装置が有する構成をソフトウェアによって実現することで、同様の機能を有する保守コスト見積プログラムを得ることができる。そこで、この保守コスト見積プログラムを実行するコンピュータについて説明する。
【００７１】
図１１は、本実施例１および２に係る保守コスト見積プログラムを実行するコンピュータの構成を示す機能ブロック図である。同図に示すように、このコンピュータ２００は、ＲＡＭ２１０と、ＣＰＵ２２０と、ＨＤＤ２３０と、ＬＡＮインタフェース２４０と、入出力インタフェース２５０と、ＤＶＤドライブ２６０とを有する。
【００７２】
ＲＡＭ２１０は、プログラムやプログラムの実行途中結果などを記憶するメモリであり、ＣＰＵ２２０は、ＲＡＭ２１０からプログラムを読み出して実行する中央処理装置である。
【００７３】
ＨＤＤ２３０は、プログラムやデータを格納するディスク装置であり、ＬＡＮインタフェース２４０は、コンピュータ２００をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。
【００７４】
入出力インタフェース２５０は、マウスやキーボードなどの入力装置および表示装置を接続するためのインタフェースであり、ＤＶＤドライブ２６０は、ＤＶＤの読み書きを行う装置である。
【００７５】
そして、このコンピュータ２００において実行される保守コスト見積プログラム２１１は、ＤＶＤに記憶され、ＤＶＤドライブ２６０によってＤＶＤから読み出されてコンピュータ２００にインストールされる。
【００７６】
あるいは、この保守コスト見積プログラム２１１は、ＬＡＮインタフェース２４０を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ２００にインストールされる。
【００７７】
そして、インストールされた保守コスト見積プログラム２１１は、ＨＤＤ２３０に記憶され、ＲＡＭ２１０に読み出されてＣＰＵ２２０によって保守コスト見積プロセス２２１として実行される。
【００７８】
また、本実施例では、ソフトウェアプロダクトを構成するエンティティとしてモジュールを対象とする場合について主に説明したが、本発明はこれに限定されるものではなく、例えば、設計文書、マニュアルなどをエンティティとする場合にも同様に適用することができる。
【００７９】
設計文書、マニュアルでは、エンティティ単体の作業コストは、例えばページ数などに基づいて算出することができ、プロダクトモデルは、例えば変更履歴に基づいてLogical Couplingを利用して作成することができる。
【００８０】
（付記１）ソフトウェアプロダクトの保守コストを見積る保守コスト見積プログラムであって、
前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出手順
をコンピュータに実行させることを特徴とする保守コスト見積プログラム。
【００８１】
（付記２）前記保守コスト算出手順は、前記エンティティのうち保守要求があるエンティティの保守に必要な保守コストを算出することを特徴とする付記１に記載の保守コスト見積プログラム。
【００８２】
（付記３）前記保守コスト算出手順は、前記エンティティの保守要求についての確率分布に基づいて、前記ソフトウェアプロダクトについて保守対象のエンティティを特定しない一般的な保守コストを算出することを特徴とする付記１に記載の保守コスト見積プログラム。
【００８３】
（付記４）前記保守コスト算出手順は、各エンティティの保守にそれぞれ必要とするコストを定数として、前記エンティティのうち保守要求があるエンティティの保守作業の他のエンティティへの影響度合であるインパクトスケールを算出することを特徴とする付記２に記載の保守コスト見積プログラム。
【００８４】
（付記５）前記保守コスト算出手順は、各エンティティの保守にそれぞれ必要とするコストを定数として、あるエンティティの保守作業の他のエンティティへの影響度合であるインパクトスケールの全エンティティに関する平均値である平均インパクトスケールを算出することを特徴とする付記４に記載の保守コスト見積プログラム。
【００８５】
（付記６）前記エンティティは、ソフトウェアプロダクトを構成するモジュールであることを特徴とする付記１〜５のいずれか一つに記載の保守コスト見積プログラム。
【００８６】
（付記７）各モジュールのソースコード数に基づいて、各エンティティの保守にそれぞれ必要とするコストを算出する単体コスト算出手順をさらにコンピュータに実行させ、
前記保守コスト算出手順は、前記単体コスト算出手順により算出されたコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出することを特徴とする付記６に記載の保守コスト見積プログラム。
【００８７】
（付記８）モジュール間の制御フローおよびデータフローを解析することによって前記プロダクトモデルを作成するプロダクトモデル作成手順をさらにコンピュータに実行させ、  前記保守コスト算出手順は、前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストと前記プロダクトモデル作成手順により作成されたプロダクトモデルとに基づいて保守コストを算出することを特徴とする付記６に記載の保守コスト見積プログラム。
【００８８】
（付記９）ソフトウェアプロダクトの保守コストを見積る保守コスト見積方法であって、
前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出工程
を含んだことを特徴とする保守コスト見積方法。
【００８９】
（付記１０）ソフトウェアプロダクトの保守コストを見積る保守コスト見積装置であって、
前記ソフトウェアプロダクトを構成する各エンティティの保守にそれぞれ必要とするコストとエンティティ間の保守作業の影響を示すプロダクトモデルとに基づいて保守コストを算出する保守コスト算出手段
を備えたことを特徴とする保守コスト見積装置。
【産業上の利用可能性】
【００９０】
以上のように、本発明に係る保守コスト見積プログラム、保守コスト見積方法および保守コスト見積装置は、ソフトウェアプロダクトの保守を請け負う場合に有用であり、特に、新規にソフトウェアプロダクトの保守を請け負う場合に適している。
【図面の簡単な説明】
【００９１】
【図１】本実施例１に係る保守コスト見積装置が見積る保守ポイントを説明するための説明図である。
【図２】本実施例１に係る保守コスト見積装置の構成を示す機能ブロック図である。
【図３】保守ポイントの計算モデルを示す図である。
【図４】保守ポイント算出部の処理手順を示すフローチャートである。
【図５】保守ポイント算出手順を記述したソースコードの一例を示す図である。
【図６】保守ポイントの計算対象のソフトウェアプロダクトを示す図である。
【図７】インパクトスケール計算対象のソフトウェアプロダクトを示す図である。
【図８】図７に示したソフトウェアプロダクトのプロダクトモデルを示す図である。
【図９】ＳＴＯＣＫ.ｃｂｌのインパクトスケールの対象範囲を示す図である。
【図１０】各モジュールのインパクトスケールを示す図である。
【図１１】本実施例１および２に係る保守コスト見積プログラムを実行するコンピュータの構成を示す機能ブロック図である。
【符号の説明】
【００９２】
１００    保守コスト見積装置
１１０    作業コスト算出部
１２０    プロダクトモデル作成部
１３０    保守ポイント算出部
１４０    一般化保守ポイント算出部
１５０    ユーザインタフェース部
２００    コンピュータ
２１０    ＲＡＭ
２１１    保守コスト見積プログラム
２２０    ＣＰＵ
２２１    保守コスト見積プロセス
２３０    ＨＤＤ
２４０    ＬＡＮインタフェース
２５０    入出力インタフェース
２６０    ＤＶＤドライブ
【図１】
2007156820.tif 000011
【図２】
2007156820.tif 000012
【図３】
2007156820.tif 000013
【図４】
2007156820.tif 000014
【図５】
2007156820.tif 000015
【図６】
2007156820.tif 000016
【図７】
2007156820.tif 000017
【図８】
2007156820.tif 000018
【図９】
2007156820.tif 000019
【図１０】
2007156820.tif 000020
【図１１】
2007156820.tif 000021