(57)【要約】【課題】  クラスをサポートしていない言語で作成されたソフトウェアについてもモジュール間の依存強度を定量的に評価することのできる、汎用性の高いモジュール間依存強度算出装置、モジュール間依存強度測定方法およびモジュール間依存強度測定プログラムを提供することである。【解決手段】  モジュール間依存強度算出装置１０において、ソースコード取得部１１は、ソースコードをモジュール単位で取得する。グローバル変数抽出部１２は、少なくとも一部のモジュールのソースコードに含まれるグローバル変数を抽出する。アクセス回数計測部１３は、少なくとも一部のグローバル変数について、アクセス回数をグローバル変数毎に求める。依存強度算出部は、複数のモジュール間の依存強度を、前記アクセス回数に基づいてグローバル変数毎に算出する。【選択図】      図１
2010282441.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードをモジュール単位で取得するソースコード取得部と、
前記ソースコード取得部によって取得されたモジュールのうち、少なくとも一部のモジュールのソースコードに含まれるグローバル変数を抽出するグローバル変数抽出部と、
前記グローバル変数抽出部によって抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、前記少なくとも一部のモジュールのうち複数のモジュールにおける前記グローバル変数に対するアクセス回数を、前記グローバル変数毎に計測するアクセス回数計測部と、
前記アクセス回数計測部によってアクセス回数が計測された前記複数のモジュール間の依存強度を、前記アクセス回数に基づいてグローバル変数毎に算出する依存強度算出部とを含むことを特徴とするモジュール間依存強度算出装置。
【請求項２】
前記アクセス回数計測部は、アクセス回数の計測の対象となる前記複数のモジュールのうち、１つのモジュールにおける前記グローバル変数に対する書き込み回数と、残余のモジュールにおける前記グローバル変数に対する読み込み回数とを、アクセス回数として計測し、
前記依存強度算出部は、前記１つのモジュールに対する残余のモジュールの、グローバル変数を介する依存強度を、前記１つのモジュールにおける前記グローバル変数に対する書き込み回数と、残余のモジュールにおける前記グローバル変数に対する読み込み回数とに基づいて算出することを特徴とする請求項１に記載のモジュール間依存強度算出装置。
【請求項３】
前記依存強度算出部は、前記複数のモジュールのうち１つのモジュールに対する残余のモジュールの、グローバル変数に関する依存強度を、前記１つのモジュールにおける前記グローバル変数に対する書き込み回数と、残余のモジュールにおける前記グローバル変数に対する読み込み回数との積として算出することを特徴とする請求項２に記載のモジュール間依存強度算出装置。
【請求項４】
前記アクセス回数計測部は、前記グローバル変数抽出部によってグローバル変数が抽出された前記少なくとも一部のモジュールのうち、２つのモジュールのソースコードに含まれる全てのグローバル変数について、前記２つのモジュールにおける前記グローバル変数に対するアクセス回数を、前記グローバル変数毎に計測し、
前記依存強度算出部は、前記２つのモジュールのうち一方のモジュールに対する他方のモジュールの総合依存強度であって、
一方のモジュールに対する他方のモジュールの依存強度が、これら２つのモジュールのソースコードに含まれる全てのグローバル変数に関して合計されることによって求まる総合依存強度を算出することを特徴とする請求項１〜３のいずれか１つに記載のモジュール間依存強度算出装置。
【請求項５】
請求項１〜４のいずれか１つに記載のモジュール間依存強度算出装置を用い、
ソースコードを前記ソースコード取得部によってモジュール単位で取得するソースコード取得工程と、
前記ソースコード取得工程において取得されたモジュールのうち、少なくとも一部のモジュールのソースコードに含まれるグローバル変数を前記グローバル変数抽出部によって抽出するグローバル変数抽出工程と、
前記グローバル変数抽出工程において抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、前記少なくとも一部のモジュールのうち複数のモジュールにおける前記グローバル変数に対するアクセス回数を、前記アクセス回数計測部によって前記グローバル変数毎に計測するアクセス回数計測工程と、
前記アクセス回数計測工程においてアクセス回数が計測された前記複数のモジュール間の依存強度を、前記依存強度算出部によって前記アクセス回数に基づいてグローバル変数毎に算出する依存強度算出工程とを含むことを特徴とするモジュール間依存強度算出方法。
【請求項６】
コンピュータを、
ソースコードをモジュール単位で取得するソースコード取得部、
前記ソースコード取得部によって取得されたモジュールのうち、少なくとも一部のモジュールのソースコードに含まれるグローバル変数を抽出するグローバル変数抽出部、
前記グローバル変数抽出部によって抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、前記少なくとも一部のモジュールのうち複数のモジュールにおける前記グローバル変数に対するアクセス回数を、前記グローバル変数毎に計測するアクセス回数計測部、および
前記アクセス回数計測部によってアクセス回数が計測された前記複数のモジュール間の依存強度を、前記アクセス回数に基づいてグローバル変数毎に算出する依存強度算出部として機能させることを特徴とするモジュール間依存強度算出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアに含まれる複数のモジュールが互いに及ぼし合う影響の度合を定量的に評価するモジュール間依存強度算出装置、モジュール間依存強度測定方法およびモジュール間依存強度測定プログラムに関する。
【背景技術】
【０００２】
ソフトウェア開発において、機能毎にまとまりを持ったソフトウェアの構成単位は、一般的にモジュールと呼ばれる。モジュール毎にソフトウェアを開発することにによって、モジュール毎に並行して開発・テストが行うことができ、効率的なソフトウェア開発を行うことができる。またモジュールにソフトウェアの一構成部品として所定の機能を持たせ、汎用性を有するモジュールを開発することによって、同一のモジュールを互いに異なる複数のソフトウェアにおいて広く利用することができる。
【０００３】
しかし、ソフトウェアをモジュールに細かく分割すれば分割するほど、複数のモジュール間の依存関係が複雑になり、ソフトウェアの保守性の低下を招いてしまうという問題点がある。したがって、過度にモジュール間の依存関係が複雑化することによるソフトウェアの保守性低下の可能性の増大を抑制するために、モジュール間の依存関係を定量的に評価し把握することが望まれる。
【０００４】
従来技術に係るモジュール間依存強度算出装置として、ソフトウェアのクラスを抽出し、その組合せを導出する全クラス総組合せ導出部と、分析部および分析値格納部を有するソフトウェア・モジュール間の依存度計測装置が知られる。このソフトウェア・モジュール間の依存度計測装置では、あるクラスに属するオブジェクトのデータについての依存度とオブジェクトへの入出力、およびオブジェクト内の操作についての依存度を計測する（たとえば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−２１５０４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術に係るモジュール間依存強度算出装置では、クラスと呼ばれるオブジェクト指向の概念を利用しているので、Ｃ＋＋およびＪａｖａ（登録商標）などのオブジェクト指向のプログラミング言語、すなわちクラスをサポートするプログラミング言語しか適用できないという問題点がある。
【０００７】
本発明の目的は、クラスをサポートしていないプログラミング言語で作成されたソフトウェアについてもモジュール間の依存強度を定量的に評価することのできる、汎用性の高いモジュール間依存強度算出装置、モジュール間依存強度測定方法およびモジュール間依存強度測定プログラムを提供することである。
【課題を解決するための手段】
【０００８】
本発明は、ソースコードをモジュール単位で取得するソースコード取得部と、
前記ソースコード取得部によって取得されたモジュールのうち、少なくとも一部のモジュールのソースコードに含まれるグローバル変数を抽出するグローバル変数抽出部と、
前記グローバル変数抽出部によって抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、前記少なくとも一部のモジュールのうち複数のモジュールにおける前記グローバル変数に対するアクセス回数を、前記グローバル変数毎に計測するアクセス回数計測部と、
前記アクセス回数計測部によってアクセス回数が計測された前記複数のモジュール間の依存強度を、前記アクセス回数に基づいてグローバル変数毎に算出する依存強度算出部とを含むことを特徴とするモジュール間依存強度算出装置である。
【０００９】
また本発明は、前記アクセス回数計測部は、アクセス回数の計測の対象となる前記複数のモジュールのうち、１つのモジュールにおける前記グローバル変数に対する書き込み回数と、残余のモジュールにおける前記グローバル変数に対する読み込み回数とを、アクセス回数として計測し、
前記依存強度算出部は、前記１つのモジュールに対する残余のモジュールの、グローバル変数を介する依存強度を、前記１つのモジュールにおける前記グローバル変数に対する書き込み回数と、残余のモジュールにおける前記グローバル変数に対する読み込み回数とに基づいて算出することを特徴とする。
【００１０】
また本発明は、前記依存強度算出部は、前記複数のモジュールのうち１つのモジュールに対する残余のモジュールの、グローバル変数に関する依存強度を、前記１つのモジュールにおける前記グローバル変数に対する書き込み回数と、残余のモジュールにおける前記グローバル変数に対する読み込み回数との積として算出することを特徴とする。
【００１１】
また本発明は、前記アクセス回数計測部は、前記グローバル変数抽出部によってグローバル変数が抽出された前記少なくとも一部のモジュールのうち、２つのモジュールのソースコードに含まれる全てのグローバル変数について、前記２つのモジュールにおける前記グローバル変数に対するアクセス回数を、前記グローバル変数毎に計測し、
前記依存強度算出部は、前記２つのモジュールのうち一方のモジュールに対する他方のモジュールの総合依存強度であって、
一方のモジュールに対する他方のモジュールの依存強度が、これら２つのモジュールのソースコードに含まれる全てのグローバル変数に関して合計されることによって求まる総合依存強度を算出することを特徴とする。
【００１２】
また本発明は、前記モジュール間依存強度算出装置を用い、
ソースコードを前記ソースコード取得部によってモジュール単位で取得するソースコード取得工程と、
前記ソースコード取得工程において取得されたモジュールのうち、少なくとも一部のモジュールのソースコードに含まれるグローバル変数を前記グローバル変数抽出部によって抽出するグローバル変数抽出工程と、
前記グローバル変数抽出工程において抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、前記少なくとも一部のモジュールのうち複数のモジュールにおける前記グローバル変数に対するアクセス回数を、前記アクセス回数計測部によって前記グローバル変数毎に計測するアクセス回数計測工程と、
前記アクセス回数計測工程においてアクセス回数が計測された前記複数のモジュール間の依存強度を、前記依存強度算出部によって前記アクセス回数に基づいてグローバル変数毎に算出する依存強度算出工程とを含むことを特徴とするモジュール間依存強度算出方法である。
【００１３】
また本発明は、コンピュータを、
ソースコードをモジュール単位で取得するソースコード取得部、
前記ソースコード取得部によって取得されたモジュールのうち、少なくとも一部のモジュールのソースコードに含まれるグローバル変数を抽出するグローバル変数抽出部、
前記グローバル変数抽出部によって抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、前記少なくとも一部のモジュールのうち複数のモジュールにおける前記グローバル変数に対するアクセス回数を、前記グローバル変数毎に計測するアクセス回数計測部、および
前記アクセス回数計測部によってアクセス回数が計測された前記複数のモジュール間の依存強度を、前記アクセス回数に基づいてグローバル変数毎に算出する依存強度算出部として機能させることを特徴とするモジュール間依存強度算出プログラムである。
【発明の効果】
【００１４】
本発明によれば、アクセス回数計測部は、グローバル変数抽出部によって抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、アクセス回数をグローバル変数毎に求める。アクセス回数は、複数のモジュールにおけるグローバル変数に対するアクセス回数である。依存強度算出部は、この複数のモジュール間の依存強度を、アクセス回数に基づいてグローバル変数毎に算出する。これによって、モジュールのソースコードに複数種類のグローバル変数が用いられ、複数のモジュールが、複数のグローバル変数を介して関係している場合にも、複数のモジュール間の依存強度を算出することができる。したがって、クラスをサポートしていない非オブジェクト指向のプログラミング言語で作成されたソフトウェアについても、モジュール間の依存強度を定量的に評価することができる。これによって、汎用性の高いモジュール間依存強度算出装置を実現することができる。またこれによって、ソースコードをモジュール単位で含むソフトウェアを開発するときに、モジュール間の依存関係が複雑化しているモジュールを見つけ出すことができる。したがって、モジュール間の依存関係の複雑化によるソフトウェア開発において、ソフトウェアの保守性低下の可能性を抑制することが可能となる。
【００１５】
また本発明によれば、依存強度算出部は、１つのモジュールに対する残余のモジュールの、グローバル変数を介する依存強度を算出する。この依存強度は、前記１つのモジュールにおけるグローバル変数に対する書き込み回数と、残余のモジュールにおけるグローバル変数に対する読み込み回数とに基づいて算出する。これによって、複数のモジュールのうち１つのモジュールに対する残余のモジュールの依存強度を、グローバル変数に関して算出することができる。したがって、複数のモジュール間における影響の大きさを、グローバル変数を介して影響する側のモジュールと影響される側のモジュールとを区別して、定量的に評価することができる。
【００１６】
また本発明によれば、依存強度算出部は、アクセス回数の計測の対象となる前記複数のモジュールのうち１つのモジュールに対する残余のモジュールの、グローバル変数に関する依存強度を、前記１つのモジュールにおけるグローバル変数に対する書き込み回数と、残余のモジュールにおけるグローバル変数に対する読込み回数との積として算出する。これによって、モジュール間の影響を、書き込み回数と読込み回数とに応じて定量的に評価することができる。グローバル変数に対して書き込みを行うモジュールは、このグローバル変数を読込む他のモジュールに影響を与え、その影響の度合は、書き込み回数および読込み回数が多くなればなるほど大きくなる。したがって、１つのモジュールに対する残余のモジュールによる影響を、書き込み回数と読込み回数とに応じて定量的に評価することができる。
【００１７】
また本発明によれば、アクセス回数計測部は、２つのモジュールのソースコードに含まれる全てのグローバル変数について、この２つのモジュールにおけるグローバル変数に対するアクセス回数を、グローバル変数毎に計測する。依存強度算出部は、前記２つのモジュールのうち一方のモジュールに対する他方のモジュールの総合依存強度を算出する。総合依存強度は、一方のモジュールに対する他方のモジュールの依存強度が、これら２つのモジュールのソースコードに含まれる全てのグローバル変数に関して合計されることによって求まる。これによって、一方のモジュールと他方のモジュールとの影響を、これら２つのモジュールのソースコードに含まれる全てのグローバル変数に関して総合的に評価することができる。これによって、ソースコードをモジュール単位で含むソフトウェアを開発するときに、モジュール間の依存関係が複雑化しているモジュールを見つけ出すことができる。したがって、ソフトウェアの開発において、ソフトウェアの保守性低下の可能性を抑制することができる。
【００１８】
また本発明によれば、アクセス回数計測工程では、少なくとも一部のグローバル変数について、アクセス回数を、アクセス回数計測部によって、グローバル変数毎に計測する。依存強度算出工程では、複数のモジュール間の依存強度を、依存強度算出部によってアクセス回数に基づいてグローバル変数毎に算出する。これによって、モジュールのソースコードに複数種類のグローバル変数が用いられ、複数のモジュールが、複数のグローバル変数を介して関係している場合にも、複数のモジュール間の依存強度を算出することができる。したがって、クラスをサポートしていない非オブジェクト指向のプログラミング言語で作成されたソフトウェアについても、モジュール間の依存強度を定量的に評価することができる。これによって、汎用性の高いモジュール間依存強度算出装置を実現することができる。またこれによって、ソースコードをモジュール単位で含むソフトウェアを開発するときに、モジュール間の依存関係が複雑化しているモジュールを見つけ出すことができる。したがって、モジュール間の依存関係の複雑化によるソフトウェア開発において、ソフトウェアの保守性低下の可能性を抑制することが可能となる。
【００１９】
また本発明によれば、モジュール間依存強度算出プログラムは、コンピュータを、ソースコード取得部、グローバル変数抽出部、アクセス回数計測部、および依存強度算出部として機能させる。これによって、コンピュータをモジュール間依存強度算出装置として機能させることができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１実施形態に係るモジュール間依存強度算出装置１０の構成を表すブロック図である。
【図２】本発明の第１実施形態に係るモジュール間依存強度算出方法の各工程を表すフローチャートである。
【図３】本発明の第１実施形態においてソースコード取得部１１によって取得されるソースコードの一例を表す図である。
【図４】本発明の第１実施形態におけるグローバル変数抽出工程の各段階を表すフローチャートである。
【図５】本発明の第１実施形態におけるアクセス回数計測工程の各段階を表すフローチャートである。
【図６】本発明の第１実施形態における各グローバル変数の、各モジュールにおけるアクセスの様子を表す図である。
【図７】本発明の第１実施形態における依存強度算出工程の各段階を表すフローチャートである。
【発明を実施するための形態】
【００２１】
以下、図面を参照しながら本発明を実施するための形態を、複数の形態について説明する。以下の説明においては、各形態に先行する形態ですでに説明している事項に対応している部分には同一の参照符を付し、重複する説明を略す場合がある。構成の一部のみを説明している場合、構成の他の部分は、先行して説明している形態と同様とする。実施の各形態で具体的に説明している部分の組合せばかりではなく、特に組合せに支障が生じなければ、実施の形態同士を部分的に組合せることも可能である。またそれぞれの実施形態は、本発明に係る技術を具体化するために例示するものであり、本発明の技術的範囲を限定するものではない。本発明に係る技術内容は、特許請求の範囲に記載された技術的範囲内において、種々の変更を加えることが可能である。以下の説明は、モジュール間依存強度算出装置１０、モジュール間依存強度測定方法およびモジュール間依存強度測定プログラムについての説明をも含む。
【００２２】
（第１実施形態）
図１は、本発明の第１実施形態に係るモジュール間依存強度算出装置１０の構成を表すブロック図である。モジュール間依存強度算出装置１０は、ソフトウェアに含まれる複数のモジュールが互いに及ぼし合う影響の度合を定量的に評価する装置である。第１実施形態において、モジュール間依存強度算出装置１０は、ソースコード取得部１１と、グローバル変数抽出部１２と、アクセス回数計測部１３と、依存強度算出部１４とを備える。ソースコード取得部１１は、ソースコードをモジュール単位で取得する。
【００２３】
グローバル変数抽出部１２は、ソースコード取得部１１によって取得されたモジュールのうち、少なくとも一部のモジュールのソースコード１５に含まれるグローバル変数を抽出する。グローバル変数は、互いに異なる複数のモジュールにおいてアクセスされる変数である。アクセスは、モジュールに含まれるソースコード１５内での、グローバル変数に対する書き込みと、読み込みとを含み、アクセス回数は、書き込み回数と読み込み回数とを含む。
【００２４】
アクセス回数計測部１３は、グローバル変数抽出部１２によって抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、アクセス回数をグローバル変数毎に求める。アクセス回数は、複数のモジュールにおけるグローバル変数に対するアクセス回数である。この複数のモジュールは、グローバル変数抽出部１２によってグローバル変数の抽出の対象となったモジュールのうちの複数のモジュールである。依存強度算出部１４は、この複数のモジュール間の依存強度１９を、アクセス回数に基づいてグローバル変数毎に算出する。
【００２５】
第１実施形態において、依存強度１９は、グローバル変数を介して異なる複数のモジュールに含まれる１つのソースコード１５と他のソースコード１５とが互いに関係を有するときの、これらソースコード１５とソースコード１５との関係の深さを表す。ソースコード１５は、モジュール単位で取扱われるので、モジュールとしてのまとまりを有するソースコード１５を、単に「モジュール」と称することがある。
【００２６】
アクセス回数計測部１３は、アクセス回数の計測の対象となる複数のモジュールのうち、１つのモジュールにおけるグローバル変数に対する書き込み回数と、残余のモジュールにおけるグローバル変数に対する読み込み回数とを、アクセス回数として計測する。依存強度算出部１４は、前記１つのモジュールに対する残余のモジュールの、グローバル変数を介する依存強度１９を算出する。この依存強度１９は、前記１つのモジュールにおけるグローバル変数に対する書き込み回数と、残余のモジュールにおけるグローバル変数に対する読み込み回数とに基づいて算出する。
【００２７】
依存強度算出部１４は、アクセス回数の計測の対象となる前記複数のモジュールのうち１つのモジュールに対する残余のモジュールの、グローバル変数に関する依存強度１９を、前記１つのモジュールにおけるグローバル変数に対する書き込み回数と、残余のモジュールにおけるグローバル変数に対する読込み回数との積として算出する。
【００２８】
本実施形態においてモジュール間依存強度算出装置１０は、コンピュータと、コンピュータにおいて実行されるモジュール間依存強度算出プログラムとによって実現される。モジュール間依存強度算出プログラムは、コンピュータを、ソースコード取得部１１、グローバル変数抽出部１２、アクセス回数計測部１３、および依存強度算出部１４として機能させる。コンピュータは、中央処理演算装置（central processing unit, 略称「ＣＰＵ」）および記憶部とを含む。モジュール間依存強度算出プログラムは、記録媒体にコンピュータに読取り可能に記録された状態で提供される。
【００２９】
第１実施形態において、モジュール間依存強度算出装置１０による処理の対象となるのは、複数のモジュールを含むソフトウェアである。ソフトウェアは、複数のモジュールを含み、各モジュールは、プログラミング言語で記載されたソースコード１５を含む。ソフトウェアは、プログラミング上の不具合、いわゆるバグが除去されたソフトウェアをも、またバグを含んだ状態の未完成のソフトウェアをも、さらにコーディングの途中であって、全体としての機能が未完成なソフトウェアをも含む。ソフトウェア中のソースコード１５は、たとえばＣ＋＋およびＪａｖａ（登録商標）などのオブジェクト指向のプログラミング言語で記述されていてもよく、たとえばＣ言語、Visual Basic、フォートラン、コボルなどの構造化プログラミング言語で記述されていてもよい。
【００３０】
ソースコード取得部１１は、ソースコードおよびモジュールの対応関係情報１６を表す情報と、ソースコード１５とを取得することによって、ソースコード１５をモジュール単位で取得する。ソースコードおよびモジュールの対応関係情報１６は、本実施形態では一覧表の形式で記憶される。以下、ソースコードおよびモジュールの対応関係情報１６を表す一覧表を「対応関係リスト」と称することがある。
【００３１】
取得されたソースコード１５は、記憶部に記憶される。グローバル変数抽出部１２は、複数種類のグローバル変数を各モジュールにおいて抽出し、グローバル変数リスト２０を作成する。グローバル変数リスト２０は、抽出されたグローバル変数をモジュール毎に一覧表形式として表したリストである。
【００３２】
アクセス回数計測部１３は、ソースコード取得部１１によって取得されたソースコードおよびモジュールの対応関係情報１６と、ソースコード１５と、グローバル変数リスト２０とに基づいて、各モジュールにおける各グローバル変数に対するアクセス回数を数える。計測されたアクセス回数は、モジュール毎に、かつグローバル変数の種類毎に数えられ、アクセス情報１８として記憶部に記憶される。
【００３３】
図２は、本発明の第１実施形態に係るモジュール間依存強度算出方法の各工程を表すフローチャートである。第１実施形態におけるモジュール間依存強度算出方法では、前記モジュール間依存強度算出装置１０が用いられる。モジュール間依存強度算出方法は、ソースコード取得工程と、グローバル変数抽出工程と、アクセス回数計測工程と、依存強度算出工程とを含む。
【００３４】
ソースコード取得工程では、ソースコード１５を、ソースコード取得部１１によってモジュール単位で取得する。グローバル変数抽出工程では、グローバル変数をグローバル変数抽出部１２によって抽出する。グローバル変数抽出工程で抽出されるグローバル変数は、ソースコード取得工程において取得されたモジュールのうち、少なくとも一部のモジュールのソースコード１５に含まれるグローバル変数である。
【００３５】
アクセス回数計測工程では、グローバル変数抽出工程において抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、アクセス回数を、アクセス回数計測部１３によって、グローバル変数毎に計測する。アクセス回数は、複数のモジュールのグローバル変数に対するアクセス回数である。この複数のモジュールは、グローバル変数抽出工程でグローバル変数の抽出の対象となったモジュールのうちの複数のモジュールである。
【００３６】
依存強度算出工程では、この複数のモジュール間の依存強度１９を、依存強度算出部１４によってアクセス回数に基づいてグローバル変数毎に算出する。モジュール間依存強度算出方法において、前記の各工程は、ソースコード取得工程、グローバル変数抽出工程、アクセス回数計測工程および依存強度算出工程の順に行われる。
【００３７】
図３は、本発明の第１実施形態においてソースコード取得部１１によって取得されるソースコード１５の一例を表す図である。図３には、第１実施形態におけるソースコード取得部１１によって取得されるソースコード１５のうちの一部を示しており、第１実施形態において取得されるソースコード１５は、さらに多くのモジュールを含むものとする。本実施形態の説明では、Ｃ言語で記述した簡易的なソースコード１５を入力として与えるものとする。なお、本発明はＣ言語以外にも、Fortran，Ｃ＋＋，Ｊａｖａ（登録商標）などグローバル変数を定義可能な言語もしくは実質的にグローバル変数と同等にアクセス可能な変数の定義を行える言語に同様に適用可能である。
【００３８】
図３において、このソースコード１５の構成は、モジュール名「module1」というモジュール３０１と、モジュール名「module2」というモジュール３０２とを含み、「module1
」というモジュール３０１は「M1_S1.c」という名前のソースコード３０３と「M1_S2.c」という名前のソースコード３０４とを含み、「module2」というモジュール３０２は「
M2_S1.c」という名前のソースコード３０５を含むということを示している。
【００３９】
図２のステップａ２においては、ソースコード１５として、ソースコード３０３，３０４，３０５の内容がソースコード名とともに取得される。また、ソースコードおよびモジュール対応関係情報１６とは、どのソースコード１５がどのモジュールに含まれるのかを定義した情報のことであり、たとえば、表１に示した一覧表の形式で取得される。ただし他の実施形態では、ソースコードおよびモジュール対応関係情報１６の表し方は、表１に示した一覧表の形式に限定するものではない。ソースコード１５を記載した電子データとしてのファイルを、「ソースコードファイル」と称すると、ソースコードファイルが存在するファイルシステム上のフォルダ構成を利用して、あるモジュールの名前の付いたフォルダに含まれるソースコードファイルは全てそのモジュールに含まれるソースコード１５として自動的に判別される実施形態も実現可能である。
【００４０】
【表１】
2010282441.tif 000003
【００４１】
図４は、本発明の第１実施形態におけるグローバル変数抽出工程の各段階を表すフローチャートである。図２のステップａ２において、図１のグローバル変数抽出部１２は、ソースコード取得部１１からソースコード１５を取得し、これを解析して、ソースコード１５内に定義されているグローバル変数のリストであるグローバル変数リスト２０を生成する。
【００４２】
図４のステップｂ１において、入力として与えられた全てのソースコードファイルを開いて解析を行ったかを調べる。全てのソースコードファイルを開いた場合はステップｂ１３に移行し、後述するグローバル変数リスト２０を出力する。全てのソースコードファイルをまだ開いていない場合はステップｂ２に移行し、まだ開いていないソースコードファイルを１つ選択し、それを解析対象として開く。
【００４３】
次にステップｂ３に移行し、取得を行うソースコード１５中の位置についての情報として「関数定義外」または「関数定義内」のいずれかの値をとる情報を「関数定義外」に設定する。「関数定義内」とは、ソースコード１５中において関数定義を行っている領域内である、としての情報であり、「関数定義外」とは、ソースコード１５中の位置の情報として、関数定義を行っている領域外であるという情報を意味する。次にステップｂ４に移行し、現在開いているソースコードファイルから、順番に次の１文を取得する。
【００４４】
次にステップｂ５に移行し、ステップｂ４で取得した１文で変数定義が行われているかを判別する。変数定義は通常、図３のソースコード３０３の第３行や、ソースコード３０４の第３行のように、「変数の型名 変数名, 変数名, …;」と記載されるので、これを判別する。この判別の結果、変数定義が行われていると判別した場合はステップｂ６に移行し、変数定義が行われていないと判別した場合はステップｂ８に移行する。
【００４５】
ステップｂ６において、変数定義が行われている箇所が関数の定義の外かどうか、すなわち、取得を行うソースコード１５中の位置についての情報が「関数定義外」かどうかを判別する。ソースコード１５中の位置の情報が「関数定義外」の場合は、定義されている変数は関数定義外で定義されている変数、すなわちグローバル変数であると判断される。
【００４６】
次にステップｂ７に移行し、グローバル変数と判断された変数をグローバル変数リスト２０に追加する。ソースコード１５中の位置の情報が「関数定義内」である場合は、定義されている変数はグローバル変数ではないと判断され、次の１文を取得するためにステップｂ４に移行する。
【００４７】
ステップｂ８では、取得した１文において関数定義の開始の記述があるかを判別する。関数定義の開始は通常、「関数返り値の型 関数名(引数のリスト)」の形式で記述されるので、これを判別することが可能である。この判別の結果、関数定義の開始の記述があると判別した場合は、ステップｂ９に移行し、ソースコード１５中の位置の情報を「関数定義内」に変更して、次の１文を取得するためにステップｂ４に移行する。ステップｂ８において、関数定義の開始の記述ではないと判別した場合は、ステップｂ１０に移行する。
【００４８】
ステップｂ１０では、取得した１文で関数定義の終了の記述があるかどうかを判別する。関数定義は、たとえばＣ言語の場合には、「{」と、「}」の間に記述される。このため、関数定義の終了は、ソースコード１５中の位置の情報が「関数定義内」であるときの一番外側の閉じ括弧「}」の有無で判別可能である。この判別の結果、関数定義の終了の記述があると判別した場合は、ステップｂ１１において内部状態を「関数定義外」に変更して、次の１文を取得するためにステップｂ４に移行する。ステップｂ１０において関数定義の終了の記述ではないと判別された場合は、ステップｂ１２に移行する。
【００４９】
ステップｂ１２では、現在開いているソースコードファイルの終わりまで取得したかどうかを判別する。ソースコードファイルの終わりではないと判別した場合は、次の１文を取得するためにステップｂ４を実行する。ソースコードファイルの終わりと判別した場合は、まだ開いていない別のソースコードファイルを開くためにステップｂ１に移行する。
【００５０】
図４に示すグローバル変数抽出工程、すなわち図２のステップａ２が終了した後、図２のステップａ３のアクセス回数計測工程に移行し、アクセス回数計測部１３によって、ソースコード取得部１１からソースコード１５と、ソースコードおよびモジュール対応関係情報１６と、グローバル変数抽出部１２からのグローバル変数リスト２０とを取得して、表２に例示するような、アクセス情報１８を生成する。
【００５１】
【表２】
2010282441.tif 000004
【００５２】
前述したように、アクセス情報１８は、各モジュールのソースコード１５に含まれるどのグローバル変数が、何回アクセス、すなわち書き込みまたは読み込みされるか、という情報である。同表の第１行には、ソースコードファイルに含まれるグローバル変数が列挙され、第１列にはソースコードファイルに含まれるモジュールが列挙されている。その他の欄には、モジュール（「M」とする）とグローバル変数（「g」とする）の直交するマスに、モジュール「M」のグローバル変数「g」への書き込み回数「W(M,g)」と、モジュール「M」のグローバル変数「g」の読み込み回数「R(M, g)」が記載されている。
【００５３】
図５は、本発明の第１実施形態におけるアクセス回数計測工程の各段階を表すフローチャートである。本処理開始後、図５のステップｃ１において、全てのモジュールについて処理を行ったかどうかを判別する。全てのモジュールについて処理を行った場合は、ステップｃ１１にてアクセス情報１８を出力して終了する。全てのモジュールについて処理を行っていない場合は、ステップｃ２において、まだ処理を行っていないモジュールを選択する。ステップｃ２で選択されたモジュールを、「モジュールＭ」とする。
【００５４】
次にステップｃ３では、ステップｃ２で選択したモジュールＭに含まれる全てのソースコードファイルを開いたかどうかを判別する。全てのソースコードファイルを開いた場合は、他のモジュールについて処理をするために、ステップｃ１に移行する。まだ全てのソースコードファイルを開いていない場合は、ステップｃ４において、まだ開いていないソースコードファイルを開く。次にステップｃ５では、現在開いているソースコードファイルから、順番に次の１文を取得する。
【００５５】
次にステップｃ６では、取得した１文においてグローバル変数への書き込みが行われているかを判別する。グローバル変数への書き込みは、図３のソースコード３０４の第７行の左辺のグローバル変数「g_1」のような代入式の左辺にグローバル変数が使われている記述で表される場合もあれば、その他に、「g_1++」および「g_1--」といったインクリメントおよびデクリメントを示す記述で表される場合もある。
【００５６】
グローバル変数（「グローバル変数ｇ」とする）への書き込みが行われている場合は、ステップｃ７において、アクセス情報１８に含まれる、モジュールＭのグローバル変数ｇへの書き込み回数「W(M, g)」に「１」が加算され、次のステップｃ８に移行する。モジュールＭのグローバル変数ｇへの書き込み回数「W(M, g)」の初期値は零とする。また、グローバル変数への書き込みが行われていない場合もステップｃ８に移行する。
【００５７】
ステップｃ８では、取得した１文においてグローバル変数の読み込みが行われているかを判別する。グローバル変数の読み込みは、たとえば図３のソースコード３０５の第７行および第１１行の右辺のグローバル変数「g_1」のように、代入式の右辺にグローバル変数が使われている記述によって表される場合もある。その他、インクリメント、デクリメント、条件文などで使われる比較演算子のオペランド、関数呼び出しの際の引数、関数の返り値などとして記述される場合もある。
【００５８】
グローバル変数の読み込みが行われている場合は、次のステップｃ９に移行し、アクセス情報１８に含まれる、モジュールＭのグローバル変数ｇの読み込み回数「R(M, g)」に「１」を加算し、次のステップｃ１０に移行する。モジュールＭのグローバル変数ｇの読み込み回数「R( M, g)」の初期値は零とする。また、グローバル変数の読み込みが行われていない場合もステップｃ１０に移行する。
【００５９】
ステップｃ１０では、開いているソースコードファイルの終わりまで読み込んだかどうかを判別する。ソースコードファイルの終わりではないと判別した場合は、次の１文を取得するためにステップｃ５に移行する。ソースコードファイルの終わりと判別した場合は、まだ開いていない別のソースコードファイルを開くためにステップｃ３に移行する。
【００６０】
図６は、本発明の第１実施形態における各グローバル変数の、各モジュールにおけるアクセスの様子を表す図である。図６に一例として表されるアクセス回数は、表２において示した回数に符合する。図６において、モジュールを表す四角（６０１，６０２，６０３）から、グローバル変数を表す楕円（６０４，６０５，６０６）にまで延びる矢符は、各モジュールにおけるグローバル変数への書き込みを表している。グローバル変数を表す楕円（６０４，６０５，６０６）から、モジュールを表す四角（６０１，６０２，６０３）にまで延びる矢符は、各モジュールにおけるグローバル変数の読み込みを表している。
【００６１】
ソースコード取得部１１によって取得されたソースコード１５が、グローバル変数抽出部１２によるグローバル変数の抽出と、アクセス回数計測部１３によるアクセス回数の計測の結果、図６に示すアクセス関係を示す場合に、図４および図５の各ステップを実行することで、表２に示すアクセス情報１８が得られる。
【００６２】
図２のステップａ２において、図１の依存強度算出部１４は、アクセス回数計測部１３からアクセス情報１８を取得し、モジュール間依存強度１９を算出する。モジュール間依存強度１９とは、ソースコード１５に含まれるモジュール間の依存強度１９を定量的に評価したもので、表３に、モジュール間依存強度１９の一例を表す。表３には、たとえば「g」とする１つの種類のグローバル変数に関する各モジュール間の依存強度１９が示される。
【００６３】
【表３】
2010282441.tif 000005
【００６４】
表３の第１行と第１列には、ソースコードファイルに含まれるモジュールが列挙されている。その他の欄には、モジュール「module1」の行とモジュール「module2」の列とが直交するマスに、モジュール「module1」に対するモジュール「module2」の依存強度I(M1, 
M2)が記載されている。したがって表３は、あるモジュールが他のモジュールにどれだけ影響を与えているか、または、他のモジュールからどれだけ影響を受けているかを表す。
【００６５】
たとえば、第１行のように、表３を横に見ていった場合は、「module1」が他のモジュールにどれだけ影響を与えているかが分かる。具体的には、「module1」におけるグローバル変数「g」への書き込みが、他のモジュールにおけるグローバル変数「g」の読み込みに対して与える影響が、表３の各行に示される。
【００６６】
また、表３においてたとえば左方から第２列のように、表を縦に見ていった場合は、「
module1」が他のモジュールからどれだけ影響を受けているかが分かる。具体的には、「
module1」におけるグローバル変数「g」の読み込みが、他のモジュールにおけるグローバル変数「g」への書き込みから付与される影響が、表３の各列に示される。
【００６７】
図７は、本発明の第１実施形態における依存強度算出工程の各段階を表すフローチャートである。図７のステップｄ１において、ソースコードファイルに含まれるモジュールの全ての組み合わせについて処理を行ったかどうかを判別する。全てのモジュールの組み合わせについて処理をした場合は、ステップｄ９に移行し、モジュール間依存強度を算出結果として出力し、処理を終了する。全てのモジュールの組み合わせについてまだ処理をしていない場合は、ステップｄ２に移行し、まだ処理を行っていないモジュールの組み合わせを選択する。以下、ステップｄ２において、モジュール「M1」および「M2」を選択したものとして、図７のステップｄ３〜ｄ８について説明する。
【００６８】
ステップｄ３では、モジュール「M1」および「M2」が書き込みまたは読み込みを行っている共通のグローバル変数について、アクセス情報１８からグローバル変数リスト２０を生成する。以下、この具体的なグローバル変数リスト２０を「list」とする。たとえば表２に示されるアクセス情報１８が与えられ、モジュール「M1」および「M2」として表２の「module1」および「module2」が選択されていた場合、表２のアクセス情報１８から、「module1」および「module2」において書き込みおよび読み込みが行われる共通のグローバル変数「g_1」および「g_2」について、グローバル変数リスト「list」が生成される。
【００６９】
次にステップｄ４に移行し、「list」にある全てのグローバル変数について処理を行ったかどうかを判別する。「list」にある全てのグローバル変数について処理を行った場合は、別のモジュールの組み合わせについて処理を行うためにｄステップｄ１を実行する。「list」にある全てのグローバル変数についてまだ処理を行っていない場合はステップｄ５に移行する。
【００７０】
ステップｄ５では、「list」から、まだ処理を行っていないグローバル変数を順次１つ取得する。ステップｄ５で取り出された具体的なグローバル変数を、たとえば「g」とすると、次のステップｄ６では、アクセス情報１８から、モジュール「M1」と「M2」とにおけるグローバル変数「g」への読み込み回数および書き込み回数である、「R(M1, g)」、「R(M2, g)」、「W(M1, g)」および「W(M2, g)」を取得する。
【００７１】
次のステップｄ７では、モジュール「M1」のグローバル変数「g」への書き込み回数「
W(M1, g)」と、モジュール「M2」のグローバル変数「g」の読み込み回数「R(M2, g)」との積をモジュール「M1」に対するモジュール「M2」の依存強度「I(M1, M2)」に加算する。モジュール「M1」に対するモジュール「M2」の依存強度「I(M1, M2)」の初期値は零とする。
【００７２】
「W(M1, g)」と「R(M2, g)」との積は、モジュール「M1」がグローバル変数「g」に書き込む回数が多いほど、また、モジュール「M2」がグローバル変数「g」を読み込む回数が多いほど大きな値となる。モジュール「M1」におけるグローバル変数「g」への書き込みの回数が、仮に２倍になれば、グローバル変数「g」を読み込むモジュール「M2」への影響は２倍に増大する。仮にモジュール「M2」におけるグローバル変数「g」の読み込みの回数が、仮に２倍になれば、グローバル変数「g」に書き込むモジュール「M1」からモジュール「M2」が受ける影響は２倍に増大する。したがって、「W(M1, g)」と「R(M2, g)」との積を求めることによって、モジュール「M1」がグローバル変数「g」に与えた影響による、モジュール「M2」がグローバル変数「g」を介して受けた影響の度合いを評価することができる。
【００７３】
次にステップｄ８に移行し、モジュール「M2」のグローバル変数「g」への書き込み回数「W(M2, g)」と、モジュール「M1」のグローバル変数「g」の読み込み回数「R(M1, g)」の積を、モジュール「M2」に対するモジュール「M1」の依存強度「I(M2, M1)」に加算する。モジュール「M2」に対するモジュール「M1」の依存強度「I(M2, M1)」の初期値は零とする。表２に示すアクセス情報１８が与えられた場合、図７の各ステップを実行することで、表３に示すモジュール間依存強度１９が得られる。
【００７４】
第１実施形態によれば、アクセス回数計測部１３は、グローバル変数抽出部１２によって抽出されたグローバル変数のうち、少なくとも一部のグローバル変数について、アクセス回数をグローバル変数毎に求める。アクセス回数は、複数のモジュールにおけるグローバル変数に対するアクセス回数である。依存強度算出部１４は、この複数のモジュール間の依存強度１９を、アクセス回数に基づいてグローバル変数毎に算出する。
【００７５】
これによって、モジュールのソースコード１５に複数種類のグローバル変数が用いられ、複数のモジュールが、複数のグローバル変数を介して関係している場合にも、複数のモジュール間の依存強度１９を算出することができる。したがって、クラスをサポートしていない非オブジェクト指向のプログラミング言語で作成されたソフトウェアについても、モジュール間の依存強度１９を定量的に評価することができる。
【００７６】
これによって、汎用性の高いモジュール間依存強度算出装置１０を実現することができる。またこれによって、ソースコード１５をモジュール単位で含むソフトウェアを開発するときに、モジュール間の依存関係が複雑化しているモジュールを見つけ出すことができる。したがって、モジュール間の依存関係の複雑化によるソフトウェア開発において、ソフトウェアの保守性低下の可能性を抑制することが可能となる。
【００７７】
また第１実施形態によれば、依存強度算出部１４は、１つのモジュールに対する残余のモジュールの、グローバル変数を介する依存強度１９を算出する。この依存強度１９は、前記１つのモジュールにおけるグローバル変数に対する書き込み回数と、残余のモジュールにおけるグローバル変数に対する読み込み回数とに基づいて算出する。
【００７８】
これによって、複数のモジュールのうち１つのモジュールに対する残余のモジュールの依存強度１９を、グローバル変数に関して算出することができる。したがって、複数のモジュール間における影響の大きさを、グローバル変数を介して影響する側のモジュールと影響される側のモジュールとを区別して、定量的に評価することができる。
【００７９】
また第１実施形態によれば、依存強度算出部１４は、アクセス回数の計測の対象となる前記複数のモジュールのうち１つのモジュールに対する残余のモジュールの、グローバル変数に関する依存強度１９を、前記１つのモジュールにおけるグローバル変数に対する書き込み回数と、残余のモジュールにおけるグローバル変数に対する読込み回数との積として算出する。これによって、モジュール間の影響を、書き込み回数と読込み回数とに応じて定量的に評価することができる。
【００８０】
グローバル変数に対して書き込みを行うモジュールは、このグローバル変数を読込む他のモジュールに影響を与え、その影響の度合は、書き込み回数および読込み回数が多くなればなるほど大きくなるしたがって、１つのモジュールに対する残余のモジュールによる影響を、書き込み回数と読込み回数とに応じて定量的に評価することができる。
【００８１】
また第１実施形態によれば、アクセス回数計測工程では、少なくとも一部のグローバル変数について、アクセス回数を、アクセス回数計測部１３によって、グローバル変数毎に計測する。依存強度算出工程では、複数のモジュール間の依存強度１９を、依存強度算出部１４によってアクセス回数に基づいてグローバル変数毎に算出する。
【００８２】
これによって、モジュールのソースコード１５に複数種類のグローバル変数が用いられ、複数のモジュールが、複数のグローバル変数を介して関係している場合にも、複数のモジュール間の依存強度１９を算出することができる。したがって、クラスをサポートしていない非オブジェクト指向のプログラミング言語で作成されたソフトウェアについても、モジュール間の依存強度１９を定量的に評価することができる。これによって、汎用性の高いモジュール間依存強度算出装置１０を実現することができる。
【００８３】
またこれによって、ソースコード１５をモジュール単位で含むソフトウェアを開発するときに、モジュール間の依存関係が複雑化しているモジュールを見つけ出すことができる。したがって、モジュール間の依存関係の複雑化によるソフトウェア開発において、ソフトウェアの保守性低下の可能性を抑制することが可能となる。
【００８４】
また第１実施形態によれば、モジュール間依存強度算出プログラムは、コンピュータを、ソースコード取得部１１、グローバル変数抽出部１２、アクセス回数計測部１３、および依存強度算出部１４として機能させる。これによって、コンピュータをモジュール間依存強度算出装置１０として機能させることができる。モジュール間依存強度算出プログラムは、記録媒体に記録された状態でコンピュータに提供され、記録媒体には、モジュール間依存強度算出プログラムが、コンピュータに読取り可能に記録される。これによって、前記モジュール間依存強度算出プログラムを、コンピュータに読み取り可能な記録媒体によって提供することができる。
【００８５】
（第２実施形態）
第２実施形態に係るモジュール間依存強度算出装置１０は、第１実施形態に係るモジュール間依存強度算出装置１０に類似しており、以下、第１実施形態に対する第２実施形態の相違点を中心に説明する。第２実施形態におけるアクセス回数計測部１３は、２つのモジュールのソースコード１５に含まれる全てのグローバル変数について、この２つのモジュールにおけるグローバル変数に対するアクセス回数を、グローバル変数毎に計測する。２つのモジュールは、グローバル変数抽出部１２によってグローバル変数が抽出されたモジュールのうちの、２つのモジュールである。依存強度算出部１４は、前記２つのモジュールのうち一方のモジュールに対する他方のモジュールの総合依存強度を算出する。総合依存強度は、一方のモジュールに対する他方のモジュールの依存強度１９が、これら２つのモジュールのソースコード１５に含まれる全てのグローバル変数に関して合計されることによって求まる。
【００８６】
これによって、一方のモジュールと他方のモジュールとの影響を、これら２つのモジュールのソースコード１５に含まれる全てのグローバル変数に関して総合的に評価することができる。これによって、ソースコード１５をモジュール単位で含むソフトウェアを開発するときに、モジュール間の依存関係が複雑化しているモジュールを見つけ出すことができる。したがって、ソフトウェアの開発において、ソフトウェアの保守性低下の可能性を抑制することができる。
【００８７】
（第３実施形態）
第３実施形態に係るモジュール間依存強度算出装置１０は、第１実施形態に係るモジュール間依存強度算出装置１０に類似しており、以下、第１実施形態に対する第３実施形態の相違点を中心に説明する。第３実施形態に係るモジュール間依存強度算出装置１０は、モジュール表示部と、入力部とをさらに含む。モジュール表示部は、グローバル変数抽出部１２によってグローバル変数が抽出されたモジュールを表示する。入力部は、モジュール表示部に表示されたモジュールのうち、選択された複数のモジュールを示す情報と、選択された複数のモジュールのうちの少なくとも１つを示す情報との入力に用いられる。依存強度算出部１４は、前記選択された複数のモジュール内において、前記少なくとも１つのモジュールに対する残余のモジュールの総合依存強度を算出する。
【００８８】
モジュール表示部は、たとえば液晶モニタなどの表示装置によって実現される。モジュール表示部の表示画面に、複数のグローバル変数が表示された状態で、モジュール間依存強度算出装置１０の操作者は、複数のグローバル変数のうちの一部のグローバル変数を選択可能である。選択されるグローバル変数は、複数選択可能であるものとする。さらに、別蘭としてまたは切換えられた表示画面上において、１つのモジュールを選択する。
【００８９】
モジュール間依存強度算出装置１０は、操作者による複数のモジュールおよびこのうちの１つのモジュールの入力が終了すれば、自動的にモジュール間の総合依存強度の算出を行う。１つのモジュールを選択し入力する作業を、操作者によって、複数回繰り返せば、複数のモジュールのそれぞれに対する、他のモジュールの総合依存強度を算出することもできる。
【００９０】
このような構成とすることによって、モジュール表示部を確認しながら、入力部を操作することによって、選択された複数のモジュールの情報を入力することができる。また選択された複数のモジュールのうち少なくとも１つのモジュールを示す情報を、入力部を介して入力することができる。これによって、少なくとも１つのモジュールに対する残余のモジュールの総合依存強度を、選択された範囲の複数のモジュールに注目して算出させることができる。したがって、ソフトウェアを開発するときに、モジュール間の依存関係が複雑化しているモジュールを、選択された複数のモジュールの範囲内において見つけ出すことができる。これによって、複数のモジュールについて総当り的にモジュール間依存強度１９を求める場合に比べて、モジュール間の依存関係が複雑化しているモジュールを、迅速に見つけ出すことができる。
【００９１】
（変形例）
第１実施形態では、依存強度１９の算出の対象となるモジュールは、「module1」〜「
module3」の３つである場合を例示したけれども、３つに限定するものではない。依存強度１９の算出の対象となるモジュールは、２以上の整数に対応する個数であればよい。依存強度１９の算出の対象となるモジュールは、グローバル変数抽出部１２においてグローバル変数の抽出の対象となったモジュールのうちの、一部であってもよく、また全部であってもよい。
【００９２】
また第１および第３実施形態では、依存強度算出部１４による依存強度１９の算出に関係するグローバル変数は、グローバル変数抽出部１２によって抽出されたグローバル変数のうちの、一部であってもよく、また全部であってもよい。また依存強度算出部１４による依存強度１９の算出では、アクセス回数計測部１３によって計測したアクセス回数をすべて利用することも、また一部のみを利用することも、可能である。
【００９３】
また第１〜第３実施形態において、グローバル変数抽出部１２によるグローバル変数の抽出の対象となるモジュールは、ソースコード１５を取得したモジュールのうちの一部であってもよく、また全部であってもよい。
【００９４】
また第１から第３実施形態において、モジュール依存強度算出装置による依存強度算出の対象となるソフトウェアを、実行させなければ得られない情報については、無視することができる。たとえば、配列変数の定義において、配列変数の個数の上限が定義されていない配列変数、インデックス変数を参照するグローバル変数、ポインタの値が変更される静的変数のポインタなどは、ソフトウェアの実行の度に具体的な値が変更となりうるものなので、モジュール間依存強度算出装置１０では、無視する。ポインタで示されているアドレスが変更されないことを前提とするソフトウェアについては、複数のモジュールにおいて共通して参照するポインタは、グローバル変数として取り扱うことができる。
【符号の説明】
【００９５】
１０  モジュール間依存強度算出装置
１１  ソースコード取得部
１２  グローバル変数抽出部
１３  アクセス回数計測部
１４  依存強度算出部
１５  ソースコード
１６  対応関係情報
１８  アクセス情報
１９  依存強度
２０  グローバル変数リスト
【図１】
2010282441.tif 000006
【図２】
2010282441.tif 000007
【図３】
2010282441.tif 000008
【図４】
2010282441.tif 000009
【図５】
2010282441.tif 000010
【図６】
2010282441.tif 000011
【図７】
2010282441.tif 000012