(57)【特許請求の範囲】
【請求項１】
ソフトウェアの構造情報と、前記ソフトウェアの複数の実行履歴とを取得する取得部と、
前記取得部が取得した前記構造情報および前記複数の実行履歴に基づいて、前記構造情報に含まれる複数の構造要素の重みと、各前記構造要素の依存関係の重みとを解析する解析部と、
前記構造情報に含まれる各前記構造要素のうち、一の前記構造要素を指定構造要素として指定する構造要素指定部と、
前記指定構造要素と依存関係がある構造要素である依存構造要素および当該依存構造要素の重みと、前記指定構造要素と前記依存構造要素との対応関係および当該対応関係の重みとを含む表示情報を算出する表示情報算出部と、
前記表示情報算出部が算出した前記表示情報を表示する表示部と、
を備える、ソフトウェア解析装置。
【請求項２】
前記取得部が取得した前記複数の実行履歴のうち、一の前記実行履歴を指定実行履歴として指定する実行履歴指定部をさらに備え、
前記表示情報算出部は、前記実行履歴指定部が指定した一の前記指定実行履歴における前記表示情報を算出することを特徴とする、請求項１に記載のソフトウェア解析装置。
【請求項３】
前記取得部が取得した前記複数の実行履歴のうち、複数の前記実行履歴を指定実行履歴として指定する実行履歴指定部をさらに備え、
前記表示情報算出部は、前記実行履歴指定部が指定した各前記指定実行履歴における前記指定構造要素および前記依存構造要素のそれぞれの重みの合計と、前記指定構造要素および前記依存構造要素の前記依存関係の重みの合計とを含む前記表示情報を算出し、
前記表示部は、各前記重みの合計に応じて前記表示情報を表示することを特徴とする、請求項１に記載のソフトウェア解析装置。
【請求項４】
前記取得部が取得した前記複数の実行履歴のうち、複数の前記実行履歴を指定実行履歴として指定する実行履歴指定部をさらに備え、
前記表示情報算出部は、前記実行履歴指定部が指定した各前記指定実行履歴の全てで実行された前記指定構造要素、前記依存構造要素、および前記依存関係のそれぞれの重みを共通情報として前記表示情報に含め、
前記表示部は、前記共通情報を強調して表示することを特徴とする、請求項１に記載のソフトウェア解析装置。
【請求項５】
前記取得部が取得した前記複数の実行履歴のうち、第１実行履歴および第２実行履歴を指定する実行履歴指定部をさらに備え、
前記表示情報算出部は、前記第１実行履歴における前記指定構造要素、前記依存構造要素、および前記依存関係のそれぞれの重みと、前記第２実行履歴における前記指定構造要素、前記依存構造要素、および前記依存関係のそれぞれの重みとの差分を示す差分情報を前記表示情報に含め、
前記表示部は、前記差分情報を強調して表示することを特徴とする、請求項１に記載のソフトウェア解析装置。
【請求項６】
前記表示部は、前記差分を有する前記指定構造要素および前記依存構造要素のうちの少なくとも一方とその重みとを強調して表示することを特徴とする、請求項５に記載のソフトウェア解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを解析するソフトウェア解析装置に関する。
【背景技術】
【０００２】
ソフトウェア開発では、大規模かつ短納期の流用開発が主流になっている。また、ソフトウェア開発の途中で顧客の要望が変更された場合、変更後のソフトウェア開発に作業を集中させるために、変更後のソフトウェア開発に係る設計書などのドキュメントの作成および修正が省略されることがある。このような変更後のソフトウェア開発に係るドキュメントが不足している状況において、当該ソフトウェア開発に新たな開発者が参加する場合、新たな開発者はドキュメントを確認することなく既存のソフトウェアを理解する必要がある。【０００３】
既存のソフトウェアを理解する方法としては、開発者自身がソースコードを読み込んで確認する方法が主流であった。しかし、開発者自身がソースコードを読み込んで確認する場合は、確認に要する工数が多いため、全てのソースコードを把握できない懸念があった。これに対して、ソースコードを静的解析して得られたソフトウェア構造をグラフとして表示する技術が開発されている。当該技術によれば、開発者は、ソースコードを読み込んで確認することなく一見してソフトウェア構造を理解することができる。他に、ソースコードを実行してソフトウェアの処理の流れを動的解析する技術が開発されている。当該技術によれば、開発者は、ソースコードを読み込むことなく一見してソフトウェアの処理の流れを理解することができる。【０００４】
例えば、ソフトウェアの構造情報および影響範囲を簡素化して可視化する技術が開示されている（例えば、特許文献１参照）。ここで、影響範囲とは、ある関数に対して依存関係にある他の関数の範囲のことをいう。【０００５】
また、ソフトウェアの構造情報および実行履歴情報に基づいて、ソフトウェアの依存関係の実行回数を算出し、コールグラフ上で実行回数が多い依存関係の箇所を強調して表示する技術が開示されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１８−７３０５４号公報
【特許文献２】特開２００１−２９０６３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述の新たな開発者が既存のソフトウェアの処理の流れを理解する場合、当該ソフトウェアの全体的な処理の流れを把握する必要がある。しかし、従来の技術では、１つのソフトウェアの構造情報に対して１つの動的解析の結果である実行履歴を表示することしかできない。このように１つの実行履歴を表示するだけでは、開発者はソフトウェアの一部しか把握することができない。また、当該実行履歴が普段とは異なるパスを通っていたとしても、そのことを開発者が把握することは困難である。【０００８】
特許文献１に開示されている技術では、影響範囲を強調して表示することによって、開発者が影響範囲を把握することを容易にしている。しかし、特許文献１では、ソフトウェアの動的解析について言及されていないため、開発者はソフトウェアの処理の流れを理解することができないという問題がある。また、特許文献２では、複数の実行履歴情報を解析することについて言及されていないため、開発者はソフトウェアの一部しか把握することができないなどの問題がある。このように、従来の技術では、開発者がソフトウェア全体を容易に把握することができるとはいえず改善の余地があった。【０００９】
本発明は、このような問題を解決するためになされたものであり、開発者がソフトウェア全体を容易に把握することが可能なソフトウェア解析装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の課題を解決するために、本発明によるソフトウェア解析装置は、ソフトウェアの構造情報と、ソフトウェアの複数の実行履歴とを取得する取得部と、取得部が取得した構造情報および複数の実行履歴に基づいて、構造情報に含まれる複数の構造要素の重みと、各構造要素の依存関係の重みとを解析する解析部と、構造情報に含まれる各構造要素のうち、一の構造要素を指定構造要素として指定する構造要素指定部と、指定構造要素と依存関係がある構造要素である依存構造要素および当該依存構造要素の重みと、指定構造要素と依存構造要素との対応関係および当該対応関係の重みとを含む表示情報を算出する表示情報算出部と、表示情報算出部が算出した表示情報を表示する表示部とを備える。
【発明の効果】
【００１１】
本発明によると、ソフトウェア解析装置は、取得部が取得した構造情報および複数の実行履歴に基づいて、構造情報に含まれる複数の構造要素の重みと、各構造要素の依存関係の重みとを解析する解析部と、構造情報に含まれる各構造要素のうち、一の構造要素を指定構造要素として指定する構造要素指定部と、指定構造要素と依存関係がある構造要素である依存構造要素および当該依存構造要素の重みと、指定構造要素と依存構造要素との対応関係および当該対応関係の重みとを含む表示情報を算出する表示情報算出部と、表示情報算出部が算出した表示情報を表示する表示部とを備えるため、開発者がソフトウェア全体を容易に把握することが可能となる。【００１２】
本発明の目的、特徴、態様、および利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１によるソフトウェア解析装置の構成の一例を示すブロック図である。
【図２】本発明の実施の形態１による構造情報の一例を示す図である。
【図３】本発明の実施の形態１による複数の実行履歴の一例を示す図である。
【図４】本発明の実施の形態１による解析情報の一例を示す図である。
【図５】本発明の実施の形態１による解析部の動作の一例を示すフローチャートである。
【図６】本発明の実施の形態１による解析部の動作の一例を示すフローチャートである。
【図７】本発明の実施の形態１による表示部が表示するグラフの一例である。
【図８】本発明の実施の形態２によるソフトウェア解析装置の構成の一例を示すブロック図である。
【図９】本発明の実施の形態２による実行履歴の指定の一例を示す図である。
【図１０】本発明の実施の形態２による表示部が表示するグラフの一例である。
【図１１】本発明の実施の形態２による実行履歴の指定の一例を示す図である。
【図１２】本発明の実施の形態２による表示部が表示するグラフの一例である。
【図１３】本発明の実施の形態３によるソフトウェア解析装置の構成の一例を示すブロック図である。
【図１４】本発明の実施の形態３による実行履歴の指定の一例を示す図である。
【図１５】本発明の実施の形態３による表示部が表示するグラフの一例である。
【図１６】本発明の実施の形態４によるソフトウェア解析装置の構成の一例を示すブロック図である。
【図１７】本発明の実施の形態４による表示部が表示するグラフの一例である。
【図１８】本発明の実施の形態５によるソフトウェア解析装置の構成の一例を示すブロック図である。
【図１９】本発明の実施の形態５による実行履歴の指定の一例を示す図である。
【図２０】本発明の実施の形態５による表示部が表示するグラフの一例である。
【図２１】本発明の実施の形態６によるソフトウェア解析装置の構成の一例を示すブロック図である。
【図２２】本発明の実施の形態６による表示部が表示するグラフの一例である。
【図２３】本発明の実施の形態によるソフトウェア解析装置のハードウェア構成の一例を示すブロック図である。
【図２４】本発明の実施の形態によるソフトウェア解析装置のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１４】
本発明の実施の形態について、図面に基づいて以下に説明する。
【００１５】
＜実施の形態１＞
図１は、本実施の形態１によるソフトウェア解析装置１の構成の一例を示すブロック図である。図１に示すように、ソフトウェア解析装置１は、制御部２と、記憶部３と、出力部４とを備えている。
【００１６】
制御部２は、取得部５と、解析部６と、構造要素指定部７と、表示情報算出部８とを備えている。
【００１７】
取得部５は、ソフトウェアの構造情報１１と、ソフトウェアの複数の実行履歴１２とを取得する。実行履歴１２は、ソフトウェアを実行したときの処理の流れを示したものである。ユーザは、取得部５が取得すべき構造情報１１および複数の実行履歴１２を指定することができる。すなわち、ユーザは、解析対象のソフトウェアの構造情報１１および複数の実行履歴１２を指定することができる。なお、ユーザは、例えばソフトウェアの開発者である。
【００１８】
ここで、構造情報１１および複数の実行履歴１２について説明する。
【００１９】
図２は、構造情報１１の一例を示す図である。図２に示すように、構造情報１１は、関数一覧１３と、依存関係一覧１４とを含んでいる。
【００２０】
関数一覧１３には、解析対象のソフトウェアに含まれている全ての関数（実行関数）が示されている。また、依存関係一覧１４には、解析対象のソフトウェアに含まれている全ての依存関係が示されている。具体的には、依存関係一覧１４では、依存元の実行関数名と依存先の実行関数名とが対応付けられている。このような関数および依存関係は、周知の静的解析ツールを用いることによって取得することができる。なお、関数は、構造要素ともいう。
【００２１】
図３は、複数の実行履歴１２の一例を示す図である。図３に示すように、複数の実行履歴１２は、実行履歴Ａ１５および実行履歴Ｂ１６を含んでいる。実行履歴Ａ１５および実行履歴Ｂ１６のそれぞれには、解析対象のソフトウェアを実行したときに、実行された関数の一覧（呼び出された関数の一覧）が、実行された順に示されている。このような関数は、周知の動的解析ツールを用いることによって取得することができる。また、例えば、実行履歴Ａ１５におけるＮｏ．１とＮｏ．２、およびＮｏ．２とＮｏ．３などといった実行関数の前後を解析することによって、実行関数の依存関係を解析することが可能となる。
【００２２】
図１の説明に戻り、解析部６は、取得部５が取得した構造情報１１および複数の実行履歴１２に基づいて、各関数の実行回数と依存関係の実行回数とを実行履歴ごとに解析する。そして、解析部６は、解析結果を解析情報９として記憶部３に記憶する。
【００２３】
図４は、記憶部３が記憶する解析情報９の一例を示す図である。図４に示すように、解析情報９は、関数テーブル１７および依存関係テーブル１８を含む。なお、図４において、「実行回数Ａ」は、実行履歴Ａ１５における各関数の実行回数を示している。また、「実行回数Ｂ」は、実行履歴Ｂ１６における各関数の実行回数を示している。
【００２４】
関数テーブル１７には、各関数の実行回数の合計値が実行履歴ごとに記憶されている。依存関係テーブル１８には、各依存関係の実行回数の合計値が実行履歴ごとに記憶されている。
【００２５】
図５，６は、解析部６の動作の一例を示すフローチャートである。以下では、解析部６の動作について図２〜３を参照しつつ説明する。
【００２６】
ステップＳ１０１において、解析部６は、構造情報１１に含まれている関数一覧１３を、解析情報９の関数テーブル１７としてコピーする。
【００２７】
ステップＳ１０２において、解析部６は、取得部５が取得した複数の実行履歴１２のうち、一の実行履歴を読み込む。例えば、解析部６は、複数の実行履歴１２のうち、実行履歴Ａ１５を読み込む。
【００２８】
ステップＳ１０３において、解析部６は、ステップＳ１０２で読み込んだ実行履歴における１行目の実行関数を読み込む。そして、解析部６は、１行目の実行関数名と一致する、関数テーブル１７における実行関数名の実行回数をインクリメントする。例えば、解析部６は、実行履歴Ａ１５における「Ｎｏ．１」の「Ｆｕｎｃ＿Ａ」を読み込む。そして、解析部６は、実行履歴Ａ１５における「Ｎｏ．１」の「Ｆｕｎｃ＿Ａ」と一致する、関数テーブル１７における「Ｆｕｎｃ＿Ａ」の「実行回数Ａ」に「１」をインクリメントする。なお、後述のステップＳ１０５で次の行が読み込まれた場合、解析部６は、ステップＳ１０５で読み込まれた行の実行関数を読み込む。
【００２９】
ステップＳ１０４において、解析部６は、ステップＳ１０２で読み込んだ実行履歴の全ての行を読み込んだか否かを判断する。実行履歴の全ての行を読み込んだ場合は、ステップＳ１０６に移行する。一方、実行履歴の全ての行を読み込んでいない場合は、ステップＳ１０５に移行する。
【００３０】
ステップＳ１０５において、解析部６は、ステップＳ１０３で読み込んだ実行履歴の次の行の実行関数名を読み込む。例えば、解析部６は、実行履歴Ａ１５における「Ｎｏ．２」の「Ｆｕｎｃ＿Ｂ」を読み込む。その後、ステップＳ１０３に戻る。
【００３１】
ステップＳ１０６において、解析部６は、ステップＳ１０２で取得部５が取得した複数の実行履歴１２の全てを読み込んだか否かを判断する。複数の実行履歴１２の全てを読み込んだ場合は、ステップＳ１０８に移行する。一方、複数の実行履歴１２の全てを読み込んでいない場合は、ステップＳ１０７に移行する。
【００３２】
ステップＳ１０７において、解析部６は、ステップＳ１０２で取得部５が取得した複数の実行履歴１２のうち、まだ読み込んでいない実行履歴を読み込む。例えば、解析部６は、複数の実行履歴１２のうち、実行履歴Ｂ１６を読み込む。その後、ステップＳ１０３に戻る。
【００３３】
ステップＳ１０８において、解析部６は、構造情報１１に含まれている依存関係一覧１４を、解析情報９の依存関係テーブル１８としてコピーする。
【００３４】
ステップＳ１０９において、解析部６は、取得部５が取得した複数の実行履歴１２のうち、一の実行履歴を読み込む。例えば、解析部６は、複数の実行履歴１２のうち、実行履歴Ａ１５を読み込む。
【００３５】
ステップＳ１１０において、解析部６は、ステップＳ１０９で読み込んだ実行履歴における１行目および２行目の各実行関数を読み込む。そして、解析部６は、読み込んだ各実行関数間の依存関係を解析する。例えば、解析部６は、実行履歴Ａ１５における「Ｎｏ．１」の「Ｆｕｎｃ＿Ａ」、および「Ｎｏ．２」の「Ｆｕｎｃ＿Ｂ」を読み込む。そして、解析部６は、「Ｆｕｎｃ＿Ａ」と「Ｆｕｎｃ＿Ｂ」との依存関係を解析する。なお、後述のステップＳ１１３で次の行が読み込まれた場合、解析部６は、ステップＳ１１３で読み込まれた行と、その次の行の各実行関数を読み込む。
【００３６】
ステップＳ１１１において、解析部６は、ステップＳ１１０で解析した依存間関係と一致する、依存関係テーブル１８における依存関係の実行回数をインクリメントする。例えば、解析部６は、実行履歴Ａ１５における「Ｆｕｎｃ＿Ａ」と「Ｆｕｎｃ＿Ｂ」との依存関係と一致する依存関係テーブル１８における「Ｎｏ．１」の「実行回数Ａ」に「１」をインクリメントする。
【００３７】
ステップＳ１１２において、解析部６は、ステップＳ１０９で読み込んだ実行履歴の全ての行を読み込んだか否かを判断する。実行履歴の全ての行を読み込んだ場合は、ステップＳ１１４に移行する。一方、実行履歴の全ての行を読み込んでいない場合は、ステップＳ１１３に移行する。
【００３８】
ステップＳ１１３において、解析部６は、ステップＳ１０９で読み込んだ実行履歴の次の行の実行関数名を読み込む。例えば、解析部６は、実行履歴Ａ１５における「Ｎｏ．２」の「Ｆｕｎｃ＿Ｂ」を読み込む。その後、ステップＳ１１０に戻る。
【００３９】
ステップＳ１１４において、解析部６は、ステップＳ１０９で取得部５が取得した複数の実行履歴１２の全てを読み込んだか否かを判断する。複数の実行履歴１２の全てを読み込んだ場合は、処理を終了する。一方、複数の実行履歴１２の全てを読み込んでいない場合は、ステップＳ１１５に移行する。
【００４０】
ステップＳ１１５において、解析部６は、ステップＳ１０９で取得部５が取得した複数の実行履歴１２のうち、まだ読み込んでいない実行履歴を読み込む。例えば、解析部６は、複数の実行履歴１２のうち、実行履歴Ｂ１６を読み込む。その後、ステップＳ１１０に戻る。
【００４１】
上記より、図４の例では、実行履歴Ａ１５における各関数の実行回数の合計値が関数テーブル１７の実行回数Ａに記憶され、実行履歴Ｂ１６における各関数の実行回数の合計値が関数テーブル１７の実行回数Ｂに記憶される。また、実行履歴Ａ１５における各関数の依存関係の実行回数の合計値が依存関係テーブル１８の実行回数Ａに記憶され、実行履歴Ｂ１６における各関数の依存関係の実行回数の合計値が依存関係テーブル１８の実行回数Ｂに記憶される。
【００４２】
図１の説明に戻り、構造要素指定部７は、取得部５が取得した構造情報１１に含まれる各関数のうち、一の関数を指定する。具体的には、構造要素指定部７は、ユーザが選択した一の関数を指定する。なお、構造要素指定部７が指定した関数は指定構造要素ともいう。
【００４３】
表示情報算出部８は、解析情報９を用いて、構造要素指定部７が指定した関数と依存関係がある関数および当該関数の重みと、構造要素指定部７が指定した関数と依存関係がある関数との対応関係および当該対応関係の重みとを含む表示情報を算出する。
【００４４】
例えば、関数テーブル１７における実行回数Ａについて、実行回数の値を各実行関数の重みとする場合、「Ｆｕｎｃ＿Ａ」および「Ｆｕｎｃ＿Ｂ」の重みはそれぞれ「２」となり、「Ｆｕｎｃ＿Ｃ」の重みは「１」となる。また、依存関係テーブル１８における実行回数Ａについて、実行回数の値を各依存関係の重みとする場合、依存元が「Ｆｕｎｃ＿Ａ」であり依存先が「Ｆｕｎｃ＿Ｂ」である依存関係の重みは「２」となり、依存元が「Ｆｕｎｃ＿Ｂ」であり依存先が「Ｆｕｎｃ＿Ｃ」である依存関係の重みは「１」となる。表示情報算出部８は、このような関数および依存関係のそれぞれの重みを表示情報として算出する。
【００４５】
表示部１０は、表示情報算出部８が算出した表示情報を表示する。具体的には、表示部１０は、表示情報算出部８が算出した各関数およびそれらの重みと、各関数の依存関係およびそれらの重みとをグラフ上に示すように表示する。
【００４６】
図７は、表示部１０が表示するグラフ１９の一例である。グラフ１９は、コールグラフである。なお、図７の例では、構造要素指定部７が関数名として「Ｆｕｎｃ＿Ｂ」を指定した場合を示している。
【００４７】
図７に示すように、表示部１０は、表示情報算出部８から提供された「Ｆｕｎｃ＿Ｂ」を含む複数の関数およびそれらの重み、各関数の依存関係およびそれらの重みをコールグラフ上に示している。図７において、例えば、「Ｆｕｎｃ＿Ｂ（Ａ：２，Ｂ：１）」は、関数名が「Ｆｕｎｃ＿Ｂ」の実行回数Ａの重みが「２」であり、実行回数Ｂの重みが「１」であることを示している。また、例えば、「Ｆｕｎｃ＿Ｂ」と「Ｆｕｎｃ＿Ｃ」との間の「（Ａ：１，Ｂ：０）」は、依存元が「Ｆｕｎｃ＿Ｂ」であり依存先が「Ｆｕｎｃ＿Ｃ」である依存関係の実行回数Ａの重みが「１」であり、実行回数Ｂの重みが「０」であることを示している。
【００４８】
以上のことから、本実施の形態１によれば、複数の実行履歴１２を用いることによって、下記（１）〜（３）の実行履歴を解析することが可能となる。
（１）ソフトウェアの途中で分割された複数の実行履歴を結合して解析し、当該解析結果を表示することができる。
（２）同一の操作を行った複数の実行履歴を解析し、当該解析結果を表示することができる。
（３）複数の開発者が操作した実行履歴を解析し、当該解析結果を表示することができる。
【００４９】
実行履歴を用いて影響範囲を解析する場合、１つの実行履歴だけではその実行回数（重み）が正確でないことがある。ある操作を行った際、本来は実行関数および依存関係のそれぞれの実行回数（重み）は大きくないが、何らかの原因で処理の経路が通常とは異なると、解析結果として重みが大きくなる。サンプルとなる実行履歴が多い方が、得られる重みの不正確性のブレが小さくなり、正確な重みを得ることができる。本実施の形態１によれば、複数の実行履歴を解析することが可能であるため、従来の技術よりも高精度な重みを得ることができる。これにより、開発者がソフトウェア全体を容易に把握することが可能となる。
【００５０】
＜実施の形態２＞
図８は、本実施の形態２によるソフトウェア解析装置２０の構成の一例を示すブロック図である。
【００５１】
図８に示すように、ソフトウェア解析装置２０は、実行履歴指定部２１および表示情報算出部２２を備えることを特徴としている。その他の基本的な構成および動作は、実施の形態１と同様であるため、ここでは詳細な説明を省略する。
【００５２】
実行履歴指定部２１は、取得部５が取得した複数の実行履歴１２のうち、解析で使用する１つの実行履歴を指定する。具体的には、実行履歴指定部２１は、ユーザが選択した一の実行履歴を指定する。なお、実行履歴指定部２１が指定した実行履歴は指定実行履歴ともいう。
【００５３】
図９は、実行履歴の指定の一例を示す図である。ユーザは、図示しない表示部に表示された図９に示す実行履歴の選択画面を参照し、１つの実行履歴を選択する。図９の例では、実行履歴Ａが選択されている。この場合、実行履歴指定部２１は、実行履歴Ａを指定する。なお、図９における「Ｆｕｎｃ＿Ｂ」は、構造要素指定部７が指定した関数が「Ｆｕｎｃ＿Ｂ」であることを示している。また、図９に示す選択画面は、表示部１０に表示してもよい。
【００５４】
表示情報算出部２２は、実行履歴指定部２１が指定した１つの実行履歴における表示情報を算出する。
【００５５】
例えば、実行履歴指定部２１が実行履歴Ａ１５を指定した場合、表示情報算出部２２は、解析情報９に含まれる関数テーブル１７および依存関係テーブル１８のそれぞれにおける実行回数Ａの値を重みとした表示情報を算出する。このとき、表示情報算出部２２は、実行回数Ｂに関する重みは算出しない。すなわち、表示情報算出部２２が算出した表示情報には、実行回数Ｂに関する重みは含まれていない。
【００５６】
図１０は、表示部１０が表示するグラフ２３の一例である。グラフ２３は、コールグラフである。なお、図１０の例では、図９に示すように、構造要素指定部７が関数名として「Ｆｕｎｃ＿Ｂ」を指定し、実行履歴指定部２１が「実行履歴Ａ」を指定した場合を示している。
【００５７】
図１０において、例えば、「Ｆｕｎｃ＿Ｂ（２）」は、関数名が「Ｆｕｎｃ＿Ｂ」の実行回数Ａの重みが「２」であることを示している。また、例えば、「Ｆｕｎｃ＿Ｂ」と「Ｆｕｎｃ＿Ｃ」との間の「（１）」は、依存元が「Ｆｕｎｃ＿Ｂ」であり依存先が「Ｆｕｎｃ＿Ｃ」である依存関係の実行回数Ａの重みが「１」であることを示している。
【００５８】
図１０に示すように、表示部１０は、関数の重みが大きいほど、当該関数のノードを濃い色で表示する。また、表示部１０は、依存関係の重みが大きいほど、矢印線を太くして表示する。これにより、各重みに対するユーザの視認性を向上させることができる。
【００５９】
図１１は、実行履歴の指定の一例を示す図である。ユーザは、図１１に示す実行履歴の選択画面を参照し、１つの実行履歴を選択する。図１１の例では、実行履歴Ｂが選択されている。この場合、実行履歴指定部２１は、実行履歴Ｂを指定する。
【００６０】
図１２は、表示部１０が表示するグラフ２４の一例である。グラフ２４は、コールグラフである。なお、図１２の例では、図１１に示すように、構造要素指定部７が関数名として「Ｆｕｎｃ＿Ｂ」を指定し、実行履歴指定部２１が「実行履歴Ｂ」を指定した場合を示している。
【００６１】
図１２において、例えば、「Ｆｕｎｃ＿Ｂ（１）」は、関数名が「Ｆｕｎｃ＿Ｂ」の実行回数Ｂの重みが「１」であることを示している。また、例えば、「Ｆｕｎｃ＿Ｂ」と「Ｆｕｎｃ＿Ｃ」との間の「（０）」は、依存元が「Ｆｕｎｃ＿Ｂ」であり依存先が「Ｆｕｎｃ＿Ｃ」である依存関係の実行回数Ｂの重みが「０」であることを示している。なお、図１２における関数のノードの色の濃さ、および依存関係を示す矢印線の太さは、図１０と同様の方法で決定すればよい。
【００６２】
以上のことから、本実施の形態２によれば、複数の実行履歴１２からユーザが選択した実行履歴の解析結果を表示することができる。これにより、ユーザは、異なる実行履歴を表示するときに、再度解析を行うことなく、実行履歴指定部２１で実行履歴を切り替えるだけで所望の実行履歴の解析結果を確認することができる。
【００６３】
＜実施の形態３＞
図１３は、本実施の形態３によるソフトウェア解析装置２５の構成の一例を示すブロック図である。
【００６４】
図１３に示すように、ソフトウェア解析装置２５は、実行履歴指定部２６および表示情報算出部２７を備えることを特徴としている。その他の基本的な構成および動作は、実施の形態２と同様であるため、ここでは詳細な説明を省略する。
【００６５】
実行履歴指定部２６は、取得部５が取得した複数の実行履歴１２のうち、解析で使用する複数の実行履歴を指定する。具体的には、実行履歴指定部２６は、ユーザが選択した複数の実行履歴を指定する。
【００６６】
図１４は、実行履歴の指定の一例を示す図である。ユーザは、図１４に示す実行履歴の選択画面を参照し、複数の実行履歴を選択する。図１４の例では、実行履歴Ａおよび実行履歴Ｂが選択されている。この場合、実行履歴指定部２６は、実行履歴Ａおよび実行履歴Ｂを指定する。なお、図１４における「Ｆｕｎｃ＿Ｂ」は、構造要素指定部７が指定した関数が「Ｆｕｎｃ＿Ｂ」であることを示している。
【００６７】
表示情報算出部２７は、実行履歴指定部２６が指定した複数の実行履歴における表示情報を算出する。具体的には、表示情報算出部２７は、実行履歴指定部２６が指定した各実行履歴における各関数および依存関係のそれぞれの重みの合計を含む表示情報を算出する。
【００６８】
例えば、実行履歴指定部２６が実行履歴Ａ１５および実行履歴Ｂ１６を指定した場合、表示情報算出部２７は、解析情報９に含まれる関数テーブル１７および依存関係テーブル１８のそれぞれにおける実行回数Ａと実行回数Ｂの合計値を重みとした表示情報を算出する。この場合、関数テーブル１７において、「Ｆｕｎｃ＿Ａ」の重みは「３」となり、「Ｆｕｎｃ＿Ｃ」の重みは「１」となる。依存関係テーブル１８についても同様である。
【００６９】
図１５は、表示部１０が表示するグラフ２８の一例である。グラフ２８は、コールグラフである。なお、図１５の例では、図１４に示すように、構造要素指定部７が関数名として「Ｆｕｎｃ＿Ｂ」を指定し、実行履歴指定部２６が「実行履歴Ａ」および「実行履歴Ｂ」を指定した場合を示している。
【００７０】
図１５において、例えば、「Ｆｕｎｃ＿Ｂ（３）」は、関数名が「Ｆｕｎｃ＿Ｂ」の実行回数Ａおよび実行回数Ｂの合計の重みが「３」であることを示している。また、例えば、「Ｆｕｎｃ＿Ｂ」と「Ｆｕｎｃ＿Ｃ」との間の「（１）」は、依存元が「Ｆｕｎｃ＿Ｂ」であり依存先が「Ｆｕｎｃ＿Ｃ」である依存関係の実行回数Ａおよび実行回数Ｂの合計の重みが「１」であることを示している。なお、図１５における関数のノードの色の濃さ、および依存関係を示す矢印線の太さは、実施の形態２と同様の方法で決定すればよい。
【００７１】
以上のことから、本実施の形態３によれば、分割された複数の実行履歴を選択することによって、複数の実行履歴を仮想的に繋げた１つの実行履歴として解析することができる。また、異なる処理であっても複数の実行履歴を用いれば、各実行履歴における各関数および各依存関係のそれぞれの重みの合計をグラフで表示することができるため、正確な解析結果を表示することができる。
【００７２】
＜実施の形態４＞
図１６は、本実施の形態４によるソフトウェア解析装置２９の構成の一例を示すブロック図である。
【００７３】
図１６に示すように、ソフトウェア解析装置２９は、表示情報算出部３０を備えることを特徴としている。その他の基本的な構成および動作は、実施の形態３と同様であるため、ここでは詳細な説明を省略する。
【００７４】
実行履歴指定部２６は、実施の形態３と同様、取得部５が取得した複数の実行履歴１２のうち、解析で使用する複数の実行履歴を指定する。例えば、実行履歴指定部２６は、図１４に示すように、ユーザが選択した実行履歴Ａおよび実行履歴Ｂを指定する。
【００７５】
表示情報算出部３０は、実行履歴指定部２６が指定した各実行履歴の全てで実行された関数および依存関係のそれぞれの重みを含む表示情報を算出する。なお、各実行履歴の全てで実行された関数および依存関係のそれぞれの重みは、共通情報ともいう。
【００７６】
例えば、実行履歴指定部２６が実行履歴Ａ１５および実行履歴Ｂ１６を指定した場合、表示情報算出部３０は、解析情報９に含まれる関数テーブル１７における実行回数Ａと実行回数Ｂの両方の値が１以上である関数の重みを「１」とし、それ以外の関数の重みを「０」とする。すなわち、実行履歴Ａ１５および実行履歴Ｂ１６の両方で実行された関数の重みを「１」とし、それ以外の関数の重みを「０」とする。依存関係テーブル１８についても同様である。
【００７７】
図１７は、表示部１０が表示するグラフ３１の一例である。グラフ３１は、コールグラフである。なお、図１７の例では、図１４に示すように、構造要素指定部７が関数名として「Ｆｕｎｃ＿Ｂ」を指定し、実行履歴指定部２６が「実行履歴Ａ」および「実行履歴Ｂ」を指定した場合を示している。
【００７８】
図１７において、例えば、「Ｆｕｎｃ＿Ｂ（１）」は、実行履歴Ａ１５および実行履歴Ｂ１６の両方において「Ｆｕｎｃ＿Ｂ」が少なくとも１回実行されたことを示している。また、例えば、「Ｆｕｎｃ＿Ａ」と「Ｆｕｎｃ＿Ｂ」との間の「（１）」は、実行履歴Ａ１５および実行履歴Ｂ１６の両方において依存元が「Ｆｕｎｃ＿Ａ」であり依存先が「Ｆｕｎｃ＿Ｂ」である依存関係が少なくとも１回実行されたことを示している。なお、図１７における関数のノードの色の濃さ、および依存関係を示す矢印線の太さは、実施の形態２と同様の方法で決定すればよい。
【００７９】
以上のことから、本実施の形態４によれば、操作が異なる複数の実行履歴において共通する処理を表示することができる。従って、共通する処理とその先で分岐されることとを明確化することができるため、ユーザはソフトウェアを理解するために必要な工数を削減することが可能となる。
【００８０】
＜実施の形態５＞
図１８は、本実施の形態５によるソフトウェア解析装置３２の構成の一例を示すブロック図である。
【００８１】
図１８に示すように、ソフトウェア解析装置３２は、実行履歴指定部３３および表示情報算出部３４を備えることを特徴としている。その他の基本的な構成および動作は、実施の形態２と同様であるため、ここでは詳細な説明を省略する。
【００８２】
実行履歴指定部３３は、取得部５が取得した複数の実行履歴１２のうち、解析で使用する２つの実行履歴を指定する。具体的には、実行履歴指定部３３は、ユーザが選択した２つの実行履歴を指定する。
【００８３】
図１９は、実行履歴の指定の一例を示す図である。ユーザは、図１９に示す実行履歴の選択画面を参照し、２つの実行履歴を選択する。図１９の例では、第１実行履歴として実行履歴Ａが選択され、第２実行履歴として実行履歴Ｂが選択されている。この場合、実行履歴指定部３３は、実行履歴Ａおよび実行履歴Ｂを指定する。なお、図１９における「Ｆｕｎｃ＿Ｂ」は、構造要素指定部７が指定した関数が「Ｆｕｎｃ＿Ｂ」であることを示している。
【００８４】
表示情報算出部３４は、実行履歴指定部３３が指定した複数の実行履歴における表示情報を算出する。具体的には、表示情報算出部３４は、第１実行履歴における各関数および各依存関係のそれぞれの重みと、第２実行履歴における各関数および各依存関係のそれぞれの重みとの差分を示す差分情報を含む表示情報を算出する。
【００８５】
例えば、実行履歴指定部３３が実行履歴Ａ１５および実行履歴Ｂ１６を指定した場合、表示情報算出部３４は、解析情報９に含まれる関数テーブル１７における実行回数Ａが０であり、かつ実行回数Ｂが１以上である関数の重みを「１」とし、それ以外の関数の重みを「０」とする。すなわち、「Ｆｕｎｃ＿Ｅ」の重みは「１」であり、それ以外の関数の重みは「０」である。
【００８６】
依存関係テーブル１８についても同様である。すなわち、依存元が「Ｆｕｎｃ＿Ｂ」であり依存先が「Ｆｕｎｃ＿Ｅ」である依存関係の重みは「１」であり、それ以外の依存関係の重みは「０」である。
【００８７】
図２０は、表示部１０が表示するグラフ３５の一例である。グラフ３５は、コールグラフである。なお、図２０の例では、図１９に示すように、構造要素指定部７が関数名として「Ｆｕｎｃ＿Ｂ」を指定し、実行履歴指定部３３が第１実行履歴として「実行履歴Ａ」を指定し、第２実行履歴として「実行履歴Ｂ」を指定した場合を示している。
【００８８】
図２０において、例えば、「Ｆｕｎｃ＿Ｅ（１）」は、実行回数Ａが０であり、かつ実行回数Ｂが１以上であることを示している。また、例えば、「Ｆｕｎｃ＿Ｂ」と「Ｆｕｎｃ＿Ｅ」との間の「（１）」は、依存元が「Ｆｕｎｃ＿Ｂ」であり依存先が「Ｆｕｎｃ＿Ｅ」である依存関係が、実行回数Ａが０であり、かつ実行回数Ｂが１以上であることを示している。なお、図２０における関数のノードの色の濃さ、および依存関係を示す矢印線の太さは、実施の形態２と同様の方法で決定すればよい。
【００８９】
以上のことから、本実施の形態５によれば、異なる処理を実行した複数の実行履歴の差分を表示することができる。例えば、多くの実行履歴は正しく処理を実行し、一部の実行履歴のみが通常とは異なる処理を実行していたとする。この場合、通常とは異なる処理について、正常な処理との差分を表示することによって、どの関数から通常とは異なる処理が開始されたのか、そして当該通常とは異なる処理がどのような経路を通ったのかを表示することができる。
【００９０】
＜実施の形態６＞
図２１は、本実施の形態６によるソフトウェア解析装置３６の構成の一例を示すブロック図である。
【００９１】
図２１に示すように、ソフトウェア解析装置３６は、表示情報算出部３７を備えることを特徴としている。その他の基本的な構成および動作は、実施の形態５と同様であるため、ここでは詳細な説明を省略する。
【００９２】
表示情報算出部３７は、実施の形態５で説明した表示情報算出部３４と同様、解析情報９に含まれる関数テーブル１７における実行回数Ａが０であり、かつ実行回数Ｂが１以上である関数の重みを「１」とし、それ以外の関数の重みを「０」とする。このとき、表示情報算出部３７は、重みが「１」である関数とその重みを表示情報に含める。依存関係テーブル１８についても同様である。
【００９３】
例えば、実施の形態５と同様、「Ｆｕｎｃ＿Ｅ」の重みは「１」であり、それ以外の関数の重みは「０」である。この場合、表示情報算出部３７は、「Ｆｕｎｃ＿Ｅ」とその重みを含む表示情報を表示部１０に提供する。依存関係テーブル１８についても同様である。
【００９４】
図２２は、表示部１０が表示するグラフ３８の一例である。グラフ３８は、コールグラフである。なお、図２２の例では、図１９に示すように、構造要素指定部７が関数名として「Ｆｕｎｃ＿Ｂ」を指定し、実行履歴指定部３３が第１実行履歴として「実行履歴Ａ」を指定し、第２実行履歴として「実行履歴Ｂ」を指定した場合を示している。
【００９５】
図２２において、「Ｆｕｎｃ＿Ｅ（１）」が強調して表示されている。また、「Ｆｕｎｃ＿Ｂ」と「Ｆｕｎｃ＿Ｅ」との依存関係を示す矢印線が太線となっている。
【００９６】
以上のことから、本実施の形態６によれば、異なる実行履歴の差分となる関数とその重みを表示することによって、差分となる関数の影響範囲をグラフで表示することができる。
【００９７】
＜ハードウェア構成＞
図２３は、本実施の形態１によるソフトウェア解析装置１のハードウェア構成の一例を示す図である。なお、以下では、実施の形態１によるソフトウェア解析装置１を一例として説明するが、実施の形態２によるソフトウェア解析装置２０、実施の形態３によるソフトウェア解析装置２５、実施の形態４によるソフトウェア解析装置２９、実施の形態５によるソフトウェア解析装置３２、および実施の形態６によるソフトウェア解析装置３６についても同様である。
【００９８】
ソフトウェア解析装置１における記憶部３は記憶装置４０であり、出力部４はディスプレイ４１である。ソフトウェア解析装置１における取得部５、解析部６、構造要素指定部７、および表示情報算出部８の各機能は、処理回路３９により実現される。すなわち、ソフトウェア解析装置１は、構造情報および複数の実行履歴を取得し、複数の構造要素の重みと依存関係の重みとを解析し、構造要素を指定し、表示情報を算出するための処理回路３９を備える。処理回路３９は、専用のハードウェアであってもよく、メモリに格納されるプログラムを実行するプロセッサ（ＣＰＵ（Central Processing Unit）、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、ＤＳＰ（Digital Signal Processor）ともいう）であってもよい。
【００９９】
処理回路３９が専用のハードウェアである場合、処理回路３９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）、またはこれらを組み合わせたものが該当する。取得部５、解析部６、構造要素指定部７、および表示情報算出部８の各機能をそれぞれ処理回路３９で実現してもよく、各機能をまとめて１つの処理回路３９で実現してもよい。
【０１００】
処理回路３９が図２４に示すプロセッサ４２である場合、取得部５、解析部６、構造要素指定部７、および表示情報算出部８の各機能は、ソフトウェア、ファームウェア、またはソフトウェアとファームウェアとの組み合わせにより実現される。ソフトウェアまたはファームウェアは、プログラムとして記述され、メモリ４３に格納される。プロセッサ４２は、メモリ４３に記録されたプログラムを読み出して実行することにより、各機能を実現する。すなわち、ソフトウェア解析装置１は、構造情報および複数の実行履歴を取得するステップ、複数の構造要素の重みと依存関係の重みとを解析するステップ、構造要素を指定するステップ、表示情報を算出するステップが結果的に実行されることになるプログラムを格納するためのメモリ４３を備える。また、これらのプログラムは、取得部５、解析部６、構造要素指定部７、および表示情報算出部８の手順または方法をコンピュータに実行させるものであるともいえる。ここで、メモリとは、例えば、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）等の不揮発性または揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ＤＶＤ（Digital Versatile Disc）等、または、今後使用されるあらゆる記憶媒体であってもよい。
【０１０１】
なお、取得部５、解析部６、構造要素指定部７、および表示情報算出部８の各機能について、一部の機能を専用のハードウェアで実現し、他の機能をソフトウェアまたはファームウェアで実現するようにしてもよい。
【０１０２】
このように、処理回路は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせによって、上述の各機能を実現することができる。
【０１０３】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【０１０４】
本発明は詳細に説明されたが、上記した説明は、すべての態様において、例示であって、この発明がそれに限定されるものではない。例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。
【符号の説明】
【０１０５】
１  ソフトウェア解析装置、２  制御部、３  記憶部、４  出力部、５  取得部、６  解析部、７  構造要素指定部、８  表示情報算出部、９  解析情報、１０  表示部、１１  構造情報、１２  実行履歴、１３  関数一覧、１４  依存関係一覧、１５  実行履歴Ａ、１６  実行履歴Ｂ、１７  関数テーブル、１８  依存関係テーブル、１９  グラフ、２０  ソフトウェア解析装置、２１  実行履歴指定部、２２  表示情報算出部、２３，２４  グラフ、２５  ソフトウェア解析装置、２６  実行履歴指定部、２７  表示情報算出部、２８  グラフ、２９  ソフトウェア解析装置、３０  表示情報算出部、３１  グラフ、３２  ソフトウェア解析装置、３３  実行履歴指定部、３４  表示情報算出部、３５  グラフ、３６  ソフトウェア解析装置、３７  表示情報算出部、３８  グラフ、３９  処理回路、４０  ディスプレイ、４１  プロセッサ、４２  メモリ。
【要約】
本発明は、開発者がソフトウェア全体を容易に把握することが可能なソフトウェア解析装置を提供することを目的とする。本発明によるソフトウェア解析装置は、ソフトウェアの構造情報と、ソフトウェアの複数の実行履歴とを取得する取得部と、取得部が取得した構造情報および複数の実行履歴に基づいて、構造情報に含まれる複数の構造要素の重みと、各構造要素の依存関係の重みとを解析する解析部と、構造情報に含まれる各構造要素のうち、一の構造要素を指定構造要素として指定する構造要素指定部と、指定構造要素と依存関係がある構造要素である依存構造要素および当該依存構造要素の重みと、指定構造要素と依存構造要素との対応関係および当該対応関係の重みとを含む表示情報を算出する表示情報算出部と、表示情報算出部が算出した表示情報を表示する表示部とを備える。【図１】
0006742556.tif 000002
【図２】
0006742556.tif 000003
【図３】
0006742556.tif 000004
【図４】
0006742556.tif 000005
【図５】
0006742556.tif 000006
【図６】
0006742556.tif 000007
【図７】
0006742556.tif 000008
【図８】
0006742556.tif 000009
【図９】
0006742556.tif 000010
【図１０】
0006742556.tif 000011
【図１１】
0006742556.tif 000012
【図１２】
0006742556.tif 000013
【図１３】
0006742556.tif 000014
【図１４】
0006742556.tif 000015
【図１５】
0006742556.tif 000016
【図１６】
0006742556.tif 000017
【図１７】
0006742556.tif 000018
【図１８】
0006742556.tif 000019
【図１９】
0006742556.tif 000020
【図２０】
0006742556.tif 000021
【図２１】
0006742556.tif 000022
【図２２】
0006742556.tif 000023
【図２３】
0006742556.tif 000024
【図２４】
0006742556.tif 000025