(57)【要約】      （修正有）【課題】特定の機能の変更がソフトウェア全体に及ぼす影響を適切に分析する、変更影響分析装置を提供する。【解決手段】変更影響分析装置１０は、ソースコードに含まれる各関数が記述されるオブジェクトリストを生成する第１ソースコードリバース部と、各関数により実現される各プロセスの入力、処理、および出力が記述されるプロセス仕様書を生成する第２ソースコードリバース部と、変更対象の機能を実現する変更対象のプロセスの処理が記述される機能仕様書を生成するマッピング部と、変更対象の関数から影響を受ける他の関数が記述される、被影響関数情報を生成する関数指定部と、変更対象の機能がソフトウェア全体に与える影響を示す情報が記述される、ソフトウェア影響を示す情報を出力する変更影響分析部と、を有する。【選択図】図１
2020021427.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを分析して、変更対象の機能が、前記ソースコードに基づくソフトウェア全体に与える影響を示す、ソフトウェア影響情報を出力する装置であって、
前記ソースコードの分析処理を行う制御部を備え、
前記制御部は、
前記ソースコードから、前記ソースコードに含まれる各関数が記述されるオブジェクトリストを生成する第１ソースコードリバース部と、
前記オブジェクトリストから、前記各関数により実現される各プロセスの入力、処理、および出力が記述されるプロセス仕様書を生成する第２ソースコードリバース部と、
前記プロセス仕様書および前記各プロセスにより実現される各機能が定義される、機能の依存関係情報から、変更対象の機能を実現する変更対象のプロセスの処理が記述される機能仕様書を生成するマッピング部と、
前記ソースコードから、変更対象の関数から影響を受ける他の関数が記述される、被影響関数情報を生成する関数指定部と、
前記機能仕様書および前記被影響関数情報から、前記ソフトウェア影響情報を出力する変更影響分析部と、を備える
変更影響分析装置。
【請求項２】
前記ソフトウェア影響情報は、
前記変更対象の機能と、前記変更対象の機能から前記ソフトウェア全体が受ける影響の度合いを示す変更影響度とを対応付けた情報である、
請求項１に記載の変更影響分析装置。
【請求項３】
前記変更影響度は、
前記変更対象の関数が他の関数により参照される回数と、
前記変更対象の関数が他の関数を参照する回数と、
前記変更対象の関数と直接的な参照関係にある関数が他の関数を参照する回数と、
前記変更対象の関数と直接的な参照関係にある関数が他の関数に参照される回数と、
に基づき算出する値である、請求項２に記載の変更影響分析装置。
【請求項４】
前記変更影響分析部は、前記プロセス仕様書をさらに読み込んで、前記ソフトウェア影響情報を出力する、
請求項１に記載の変更影響分析装置。
【請求項５】
前記ソフトウェア影響情報は、前記変更対象の機能と、前記変更対象の機能から影響を受けるプロセスおよび関数とを対応付けた情報である、
請求項４に記載の変更影響分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定の機能の変更がソフトウェア全体に及ぼす影響を分析する、変更影響分析装置に関する。
【背景技術】
【０００２】
特許文献１は、ソフトウェアの仕様を構成するいずれかの仕様要素に変更がある場合に、その変更により影響を受ける他の仕様要素、関数、および変更影響優先度を抽出する変更影響分析装置を開示している。変更影響分析装置が変更により影響を受ける他の仕様要素、関数、および変更影響優先度を抽出するので、ユーザは、効率的にソフトウェアを変更することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−１１０３３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の変更影響分析装置は、「変更対象の関数が他の関数により参照される回数」に基づいて変更影響優先度を算出する。しかしながら、変更影響優先度は、変更対象の関数と関連する関数を包括的に考慮していない。具体的に言うと、「変更対象の関数が他の関数を参照する回数」、「変更対象の関数と直接的な参照関係にある他の関数を参照する回数」、および「変更対象の関数と直接的な参照関係にある関数が他の関数に参照される回数」を考慮していない。また、特許文献１の変更影響分析装置は、変更対象の機能と、当該機能を実現するプロセスおよび関数とを対応付けて表示しない。これらのことを考慮していないことにより、ユーザは、特定の機能の変更がソフトウェア全体に及ぼす影響を適切に把握することができない場合がある。
【０００５】
本発明は、特定の機能の変更がソフトウェア全体に及ぼす影響の度合いを適切に分析して表示する、変更影響分析装置を提供する。
【課題を解決するための手段】
【０００６】
本発明の一態様による変更影響分析装置は、ソースコードを分析して、変更対象の機能が、ソースコードに基づくソフトウェア全体に与える影響を示す、ソフトウェア影響情報を出力する装置である。変更影響分析装置は、制御部を備える。制御部は、第１ソースコードリバース部と、第２ソースコードリバース部と、マッピング部と、関数指定部と、変更影響分析部とを備える。第１ソースコードリバース部は、ソースコードから、ソースコードに含まれる各関数が記述されるオブジェクトリストを生成する。第２ソースコードリバース部は、オブジェクトリストから、各関数により実現される各プロセスの入力、処理、および出力が記述されるプロセス仕様書を生成する。マッピング部は、プロセス仕様書および各プロセスにより実現される各機能が定義される、機能の依存関係情報から、変更対象の機能を実現する変更対象のプロセスの処理が記述される機能仕様書を生成する。関数指定部は、ソースコードから、変更対象の関数から影響を受ける他の関数が記述される被影響関数情報を生成する。変更影響分析部は、機能仕様書および被影響関数情報から、ソフトウェア影響情報を生成して出力する。
【発明の効果】
【０００７】
ソフトウェア影響情報を参照することによって、ユーザは、特定の機能の変更がソフトウェア全体に及ぼす影響を適切に把握することができる。このことにより、ユーザは、当該影響を考慮した上で効率よくソフトウェアの流用開発を行うことができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係る、変更影響分析装置の構成を示すブロック図
【図２】変更影響分析装置の構成要素に対するデータの入出力を示す図
【図３】変更影響分析装置の構成要素に対するデータの入出力を示す図
【図４】変更影響分析装置の構成要素に対するデータの入出力を示す図
【図５】第１ソースコードリバース部の動作を示すフローチャート
【図６】第１ソースコードリバース部の動作を示すフローチャート
【図７】ソースコードの一例を示す図
【図８】オブジェクトリストの一例を示す図
【図９】第２ソースコードリバース部の動作を示すフローチャート
【図１０】プロセス仕様書が作成される過程を説明するための図
【図１１】プロセス仕様書が作成される過程を説明するための図
【図１２】マッピング部の動作を示すフローチャート
【図１３】機能の依存関係情報の一例を示す図
【図１４】機能仕様書の一例を示す図
【図１５】ユーザによるマッピング部の操作を説明するための図
【図１６】ユーザによるマッピング部の操作を説明するための図
【図１７】関数指定部の動作を示すフローチャート
【図１８】関数指定部の動作を示すフローチャート
【図１９】被影響関数情報の一例を示す図
【図２０】ユーザによる関数指定部の操作を説明するための図
【図２１】変更影響分析部の動作を示すフローチャート
【図２２】機能に対する変更影響度情報の一例を示す図
【図２３】別のソースコードを例示する図
【図２４】別のオブジェクトリストを例示する図
【図２５】別のプロセス仕様書を例示する図
【図２６】別のプロセス仕様書を例示する図
【図２７】別のプロセス仕様書を例示する図
【図２８】別のプロセス仕様書を例示する図
【図２９】別のプロセス仕様書を例示する図
【図３０】別の機能仕様書を例示する図
【図３１】別の、被影響関数情報を例示する図
【図３２】別の、機能に対する変更影響度情報を例示する図
【図３３】変更対象の関数と影響を受ける関数との関連性を説明するための図
【図３４】実施の形態２に係る、変更影響分析装置の構成要素に対するデータの入出力を示す図
【図３５】実施の形態２に係る、変更影響分析部の動作を示すフローチャート
【図３６】機能、プロセス、関数の対応情報の一例を示す図
【図３７】実施の形態２の変形例を説明するための図
【発明を実施するための形態】
【０００９】
以下で説明する複数の実施形態およびその変形例は、それぞれ、特徴的構成を有する。ある形態における特徴的構成または動作は、他の形態においても適用可能であり、また、本発明は、以下に例示する形態に限定されるものではない。
【００１０】
実施の形態１．
１．構成
図１は、実施の形態１に係る、変更影響分析装置１０の構成を示すブロック図である。変更影響分析装置１０は、変更対象の関数を含むソースコード等を読み込んで、当該関数の変更がソフトウェア全体に及ぼす影響の度合い（以下、変更影響度と称する）を算出する装置である。変更影響分析装置１０は、プロセッサ２０と、記憶部３０と、表示部４０と、操作部５０と、を備える。プロセッサ２０は、制御部の一例である。
【００１１】
プロセッサ２０は、中央演算処理装置（ＣＰＵ）、ＭＰＵ、ＤＳＰ、マイコン、ＦＰＧＡ、ＡＳＩＣ等で実現できる。プロセッサ２０は、ＯＳ、アプリケーションプログラム、種々のデータを読み込んで演算処理を実行することにより、種々の機能を実現する。プロセッサ２０は、機能的構成として、第１ソースコードリバース部２１と、第２ソースコードリバース部２２と、マッピング部２３と、関数指定部２４と、変更影響分析部２５とを備える。
【００１２】
記憶部３０は、フラッシュメモリ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｅｖｉｃｅ）、ハードディスク等で構成される。記憶部３０は変更影響分析装置１０の各種機能を実現するために必要なプログラムおよびデータを記憶する。
【００１３】
表示部４０は、ユーザによる操作に基づいて、後述する文字列や画像を表示する。表示部４０は、液晶ディスプレイ、有機ＥＬディスプレイなどで構成される。
【００１４】
操作部５０は、キーボード、マウスなどで構成される。ユーザは操作部５０を介して、変更影響分析装置１０を操作する。
【００１５】
２．動作
以上のように構成される変更影響分析装置１０の動作について、図１〜３３を参照して説明する。
【００１６】
図１において、第１ソースコードリバース部２１、第２ソースコードリバース部２２、およびマッピング部２３は、分析対象であるソースコード６０および機能の依存関係情報６３を入力して、それに基づき機能仕様書６４を生成する。一方で、関数指定部２４は、ソースコード６０を入力して、それに基づき被影響関数情報６５を生成する。その後、変更影響分析部２５は、機能仕様書６４および被影響関数情報６５を入力して、それに基づき機能に対する変更影響度情報６６を生成する。機能に対する変更影響度情報６６は、ソフトウェア影響情報の一例である。
【００１７】
図２は、第１ソースコードリバース部２１、第２ソースコードリバース部２２、およびマッピング部２３に対する、データの入出力を示す図である。第１ソースコードリバース部２１は、分析の対象であるソースコード６０を入力して、それに基づきリバースエンジニアリングの技術を用いてリバースして、オブジェクトリスト６１を生成して記憶部３０に記憶する。
【００１８】
ソースコード６０は、変更対象の関数を含む。ソースコード６０はＣ言語で記述される。ソースコード６０は、所定の書式に基づく日本語記述によるコメントを含む。ソースコード６０は、ユーザによって事前に作成されて記憶部３０に記憶されている。
【００１９】
オブジェクトリスト６１は、ソースコード６０に含まれる変数名、関数名等の識別子（以下、「ラベル」と称する。）と、それらの日本語記述とを含む。変更影響分析装置１０は、オブジェクトリスト６１を用いて、当該ラベルとそれらの日本語記述とを対応付けて管理する。
【００２０】
次に、第２ソースコードリバース部２２は、ソースコード６０およびオブジェクトリスト６１を入力して、それに基づきプロセス仕様書６２を生成して記憶部３０に記憶する。
【００２１】
プロセス仕様書６２は、ソースコード６０に含まれる各関数のプロセス、すなわち入力、処理、および出力の流れを表すデータである。プロセス仕様書６２は、入力欄、処理欄、出力欄の３つの欄を含む。プロセス仕様書６２は、人が理解できる言語、本例では日本語で記述される。
【００２２】
次に、マッピング部２３は、プロセス仕様書６２および機能の依存関係情報６３を入力して、それに基づき機能仕様書６４を生成して記憶部３０に記憶する。
【００２３】
機能の依存関係情報６３は、ソースコード６０に含まれる関数により実現される機能の名称と、当該機能に含まれる機能ブロックとを対応付けた一覧形式のデータである。機能の依存関係情報６３は、ユーザによって事前に作成されて記憶部３０に記憶されている。
【００２４】
機能仕様書６４は、変更対象の機能の名称および当該機能を実現する処理が記述されたデータである。変更対象の機能は、変更対象の関数を含んで実現される。
【００２５】
図３は、関数指定部２４に対する、データの入出力を示す図である。関数指定部２４は、ソースコード６０を入力して、それに基づき被影響関数情報６５を生成して記憶部３０に記憶する。
【００２６】
被影響関数情報６５は、変更対象の関数を変更することによって、影響を受ける関数が一覧形式で記述されたデータである。
【００２７】
図４は、変更影響分析部２５に対する、データの入出力を示す図である。変更影響分析部２５は、機能仕様書６４および被影響関数情報６５を入力して、それに基づき機能に対する変更影響度情報６６を生成して記憶部３０に記憶する。
【００２８】
機能に対する変更影響度情報６６は、変更影響度が記述されたデータである。変更影響度は、被影響関数情報６５に記述された関数の数と等しい。
【００２９】
２−１．第１ソースコードリバース部の動作
図２に示すように、第１ソースコードリバース部２１は、ソースコード６０を入力して、それに基づきオブジェクトリスト６１を生成して記憶部３０に記憶する。図５，６は、第１ソースコードリバース部２１の動作を示すフローチャートである。図７は、ユーザにより事前に作成される、ソースコード６０の一例を示す図である。図８は、第１ソースコードリバース部２１により、図７に示すようなソースコード６０ａから生成されたオブジェクトリスト６１ａを示す図である。
【００３０】
以下、図５，６を用いて、第１ソースコードリバース部２１の動作を説明する。
【００３１】
図５において、最初に、第１ソースコードリバース部２１は、記憶部３０からソースコード６０を読み込む（Ｓ４０１）。例えば、第１ソースコードリバース部２１は、図７のソースコード６０ａを読み込む。
【００３２】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ファイル名の日本語記述を、オブジェクトリスト６１のファイル名欄に入力する（Ｓ４０２）。図７の例では、第１ソースコードリバース部２１は、ソースコード６０ａのファイル名の日本語記述「ソースコード１」を、図８のようにオブジェクトリスト６１ａのファイル名欄に入力する。
【００３３】
その後、第１ソースコードリバース部２１は、ソースコード６０の、拡張子を除いたファイル名を、オブジェクトリスト６１のファイル名のラベル欄に入力する（Ｓ４０３）。図７の例では、第１ソースコードリバース部２１は、ソースコード６０ａのファイル名「ｓｏｕｒｃｅｃｏｄｅ１．ｃ」から、拡張子「．ｃ」を除いた「ｓｏｕｒｃｅｃｏｄｅ１」を、図８のようにオブジェクトリスト６１ａのファイル名のラベル欄に入力する。
【００３４】
その後、第１ソースコードリバース部２１は、ソースコード６０に含まれる関数についての情報を、オブジェクトリスト６１に入力する（Ｓ４０４〜Ｓ４０７）。
【００３５】
具体的には、第１ソースコードリバース部２１は、変数ｍに１を入力する（Ｓ４０４）。
【００３６】
第１ソースコードリバース部２１は、ソースコード６０にｍ番目の関数が含まれていると判断した場合（Ｓ４０５にてＹｅｓ）、ｍ番目の関数に関する情報をオブジェクトリスト６１に入力する（Ｓ４０６）。図７の例では、ｍ＝１のときに、第１ソースコードリバース部２１は、ソースコード６０ａに含まれる１番目の関数ｘｘｘｘｘに関する情報を、図８のようにオブジェクトリスト６１ａに入力する。この処理の詳細は後述する。
【００３７】
その後、第１ソースコードリバース部２１は、変数ｍに１を加算する（Ｓ４０７）。
【００３８】
一方、第１ソースコードリバース部２１は、ソースコード６０にｍ番目の関数が含まれていないと判断した場合（Ｓ４０５にてＮｏ）、本処理を終了する。図７の例では、ｍ＝２のときに、第１ソースコードリバース部２１は、ソースコード６０ａに２番目の関数が含まれていないと判断して、本処理を終了する。
【００３９】
図６は、図５のｍ番目の関数に関するオブジェクトをオブジェクトリスト６１に入力する処理（Ｓ４０６）の詳細を示すフローチャートである。
【００４０】
最初に、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の関数名の日本語記述を、オブジェクトリスト６１の関数欄に入力する（Ｓ４０８）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の関数名の日本語記述「ｘｘｘｘｘ機能」を、図８のようにオブジェクトリスト６１ａの関数欄に入力する。
【００４１】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の関数名を、オブジェクトリスト６１の関数のラベル欄に入力する（Ｓ４０９）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の関数名「ｘｘｘｘｘ」を、図８のようにオブジェクトリスト６１ａの関数のラベル欄に入力する。
【００４２】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の入力変数の日本語記述を、オブジェクトリスト６１の入力欄に入力する（Ｓ４１０）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の入力変数の日本語記述「外気温度」および「運転モード」を、図８のようにオブジェクトリスト６１ａの入力欄に入力する。
【００４３】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の入力変数名を、オブジェクトリスト６１の入力のラベル欄に入力する（Ｓ４１１）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の入力変数名「ｏｕｔｄｏｏｒ＿ｔｅｍｐ」および「ｄｒｉｖｅ＿ｍｏｄｅ」を、図８のようにオブジェクトリスト６１ａの入力のラベル欄に入力する。
【００４４】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の入力変数への入力値の日本語記述を、オブジェクトリスト６１の入力属性欄に入力する（Ｓ４１２）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の入力変数「ｏｕｔｄｏｏｒ＿ｔｅｍｐ」への入力値の日本語記述「１０℃」と、入力変数「ｄｒｉｖｅ＿ｍｏｄｅ」への入力値の日本語記述「冷房」とを、図８のようにオブジェクトリスト６１の入力属性欄にそれぞれ入力する。
【００４５】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の入力変数への入力値を、オブジェクトリスト６１の入力属性のラベル欄に入力する（Ｓ４１３）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の入力変数「ｏｕｔｄｏｏｒ＿ｔｅｍｐ」への入力値「１０」と、入力変数「ｄｒｉｖｅ＿ｍｏｄｅ」への入力値「ｃｏｏｌ」とを、図８のようにオブジェクトリスト６１の入力属性のラベル欄にそれぞれ入力する。
【００４６】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の出力変数名の日本語記述を、オブジェクトリスト６１の出力欄に入力する（Ｓ４１４）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の出力変数名の日本語記述「計測状態」を、図８のようにオブジェクトリスト６１ａの出力欄に入力する。
【００４７】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の出力変数名を、オブジェクトリスト６１の出力のラベル欄に入力する（Ｓ４１５）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の出力変数名「ｍｅａｓｕｒｅｄ＿ｓｔ」を、図８のようにオブジェクトリスト６１ａの出力のラベル欄に入力する。
【００４８】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の出力変数への代入文字列の日本語記述を、オブジェクトリスト６１の出力属性欄に入力する（Ｓ４１６）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の出力変数「ｍｅａｓｕｒｅｄ＿ｓｔ」への代入文字列の日本語記述「開始」を、図８のようにオブジェクトリスト６１ａの出力属性欄に入力する。
【００４９】
その後、第１ソースコードリバース部２１は、ソースコード６０の、ｍ番目の関数の出力変数への代入文字列を、オブジェクトリスト６１の出力属性のラベル欄に入力する（Ｓ４１７）。図７の例では、ｍ＝１のときに、ソースコード６０ａの１番目の関数の出力変数「ｍｅａｓｕｒｅｄ＿ｓｔ」への代入文字列「ＳＴＡＲＴ」を、図８のようにオブジェクトリスト６１ａの出力属性のラベル欄に入力する。以上のようにして、ソースコード６０からオブジェクトリスト６１が生成されて記憶部３０に記憶される。
【００５０】
２−２．第２ソースコードリバース部の動作
図２に示すように、第２ソースコードリバース部２２は、ソースコード６０およびオブジェクトリスト６１を入力して、それに基づきプロセス仕様書６２を生成して記憶部３０に記憶する。図９は、第２ソースコードリバース部２２の動作を示すフローチャートである。図１０，１１は、第２ソースコードリバース部２２により、プロセス仕様書６２が生成される過程を説明するための図である。なお、図１０は、説明の便宜上、第２ソースコードリバース部２２による処理の過程で生成される、中間的な状態にあるプロセス仕様書６２を概念的に説明した図である。図１０に示す情報は、記憶部３０に記憶される。最終的には、第２ソースコードリバース部２２は、プロセス仕様書６２として、図１１（Ａ），（Ｂ）に示す情報を出力する。
【００５１】
以下、図９のフローチャートに即して、第２ソースコードリバース部２２の動作を説明する。
【００５２】
図９において、最初に、第２ソースコードリバース部２２は、ソースコード６０およびオブジェクトリスト６１を記憶部３０から読み込む（Ｓ６０１）。例えば、第２ソースコードリバース部２２は、図７のソースコード６０ａおよび図８のオブジェクトリスト６１ａを読み込む。
【００５３】
その後、第２ソースコードリバース部２２は、オブジェクトリスト６１の関数欄の各文字列に対応するプロセス仕様書６２を生成して記憶部３０に記憶する（Ｓ６０２）。図７，８の例では、関数欄の文字列は「ｘｘｘｘｘ機能」のみであるので、「ｘｘｘｘｘ機能」に対応するプロセス仕様書のみを生成する。
【００５４】
その後、第２ソースコードリバース部２２は、オブジェクトリスト６１の関数欄の各文字列を、対応するプロセス仕様書６２の最上欄に入力する（Ｓ６０３）。図７，８の例では、オブジェクトリスト６１ａの関数欄の文字列「ｘｘｘｘｘ機能」を、図１０（Ａ）のようにプロセス仕様書６２ａ１の最上欄に入力する。
【００５５】
その後、第２ソースコードリバース部２２は、オブジェクトリスト６１の入力欄の各文字列を、対応するプロセス仕様書６２の入力欄に入力する（Ｓ６０４）。図７，８の例では、オブジェクトリスト６１ａの入力欄の文字列「外気温度」および「運転モード」を、図１０（Ａ）のようにプロセス仕様書６２ａ１の入力欄に入力する。
【００５６】
その後、第２ソースコードリバース部２２は、オブジェクトリスト６１の出力欄の各文字列を、対応するプロセス仕様書６２の出力欄に入力する（Ｓ６０５）。図７，８の例では、オブジェクトリスト６１ａの出力欄の文字列「計測状態」を、図１０（Ａ）のようにプロセス仕様書６２ａ１の出力欄に入力する。
【００５７】
その後、第２ソースコードリバース部２２は、ソースコード６０に含まれる条件文についての情報を、対応するプロセス仕様書６２に入力する（Ｓ６０６、Ｓ６０７、Ｓ６０９〜Ｓ６１３）。
【００５８】
具体的には、第２ソースコードリバース部２２は、変数ｎに１を入力する（Ｓ６０６）。
【００５９】
第２ソースコードリバース部２２は、ソースコード６０にｎ番目の条件文が含まれていると判断した場合（Ｓ６０７にてＹｅｓ）、ｎ番目の条件文を、対応するプロセス仕様書６２の処理欄に入力する（Ｓ６０９）。図７，８の例では、ｎ＝１のときに、ソースコード６０ａの１番目の条件文「（ｏｕｔｄｏｏｒ＿ｔｅｍｐ＞１０）＆＆（ｄｒｉｖｅ＿ｍｏｄｅ＝＝ｃｏｏｌ）」を、図１０（Ａ）のようにプロセス仕様書６２ａ１の処理欄に入力する。
【００６０】
その後、第２ソースコードリバース部２２は、プロセス仕様書６２の処理欄の文字列を日本語記述に変換する（Ｓ６１０）。図７，８の例では、ｎ＝１のときに、図１０（Ａ）のプロセス仕様書６２ａ１の処理欄の「（ｏｕｔｄｏｏｒ＿ｔｅｍｐ＞１０）＆＆（ｄｒｉｖｅ＿ｍｏｄｅ＝＝ｃｏｏｌ）」を、図１０（Ｂ）のプロセス仕様書６２ａ２のように日本語記述「（外気温度＞１０℃）ａｎｄ（運転モード＝冷房）」に変換する。
【００６１】
このとき、「ｏｕｔｄｏｏｒ＿ｔｅｍｐ」および「ｄｒｉｖｅ＿ｍｏｄｅ」は、オブジェクトリスト６１ａの入力のラベル欄と入力欄との対応関係に基づいて、それぞれ「外気温度＞１０℃」および「運転モード」に変換される。「１０」および「ｃｏｏｌ」は、オブジェクトリスト６１ａの入力属性のラベル欄と入力属性欄との対応関係に基づいて、それぞれ「１０℃」および「冷房」に変換される。第２ソースコードリバース部２２は、「＆＆」が「ａｎｄ」と対応する旨の変換規則情報を備えており、「＆＆」は、当該変換規則情報に基づいて「ａｎｄ」に変換される。
【００６２】
さらに、プロセス仕様書６２ａ２の「（外気温度＞１０℃）」は、図１０（Ｃ）のプロセス仕様書６２ａ３ように「（１）」に変換され、２行目に「（１）外気温度＞１０℃」と入力される。プロセス仕様書６２ａ２の「（運転モード＝冷房）」は、プロセス仕様書６２ａ３のように「（２）」に変換され、３行目に「運転モード＝冷房」と入力される。
【００６３】
その後、第２ソースコードリバース部２２は、ソースコード６０の、ｎ番目の条件文が含む処理文を、対応するプロセス仕様書６２の処理欄に入力する（Ｓ６１１）。図７，８の例では、ｎ＝１のときに、ソースコード６０ａの１番目の条件文に対応する処理文「ｍｅａｓｕｒｅｄ＿ｓｔ＝ＳＴＡＲＴ；」を、図１０（Ｄ）のプロセス仕様書６２ａ４のように処理欄に入力する。
【００６４】
その後、第２ソースコードリバース部２２は、プロセス仕様書６２の処理欄の文字列を日本語記述に変換する（Ｓ６１２）。図７，８の例では、ｎ＝１のときに、プロセス仕様書６２ａ４の処理欄の文字列「ｍｅａｓｕｒｅｄ＿ｓｔ＝ＳＴＡＲＴ；」を、図１１（Ａ）のプロセス仕様書６２ａ５ように日本語記述「・計測状態←開始」に変換する。
【００６５】
このとき、第２ソースコードリバース部２２は、「ｍｅａｓｕｒｅｄ＿ｓｔ＝ＳＴＡＲＴ；」を操作の記述であると判断して、文頭に操作の記述であることを示す記号「・」を入力する。「ｍｅａｓｕｒｅｄ＿ｓｔ」は、オブジェクトリスト６１ａの出力欄と出力のラベル欄との対応関係に基づいて「計測状態」に変換される。「ＳＴＡＲＴ」は、オブジェクトリスト６１ａの出力属性欄と出力属性のラベル欄との対応関係に基づいて「開始」に変換される。第２ソースコードリバース部２２は、「＝」が「←」と対応する旨の変換規則情報を備えており、「＝」は、当該変換規則情報に基づいて「←」に変換される。
【００６６】
その後、第２ソースコードリバース部２２は、変数ｎに１を加算する（Ｓ６１３）。
【００６７】
一方、第２ソースコードリバース部２２は、ソースコード６０にｎ番目の条件文がないと判断した場合（Ｓ６０７にてＮｏ）、ユーザによる操作に基づいて、プロセス仕様書６２の処理欄の記述を変更する（Ｓ６０８）。図７，８の例では、ｎが２のときに、第２ソースコードリバース部２２は、ソースコード６０に２番目の条件文がないと判断する。ユーザは、操作部５０を介して、図１１（Ａ）のプロセス仕様書６２ａ５を、図１１（Ｂ）のプロセス仕様書６２ａ６のように変更する。
【００６８】
プロセス仕様書６２ａ６において、ユーザは、条件「外気温度＞１０℃」を「（１）」と、条件「運転モード＝冷房」を「（２）」と定義し、条件「（１）ａｎｄ（２）」が真である状態を「不快検知」と定義している。プロセス仕様書６２ａ６は、ｘｘｘｘｘ機能のプロセスが「不快検知」の状態になると計測状態を開始することを意味している。
【００６９】
その後、第２ソースコードリバース部２２は、本処理を終了する。以上のようにして、ソースコード６０およびオブジェクトリスト６１からプロセス仕様書６２が生成されて記憶部３０に記憶される。
【００７０】
２−３．マッピング部の動作
図２に示すように、マッピング部２３は、プロセス仕様書６２および機能の依存関係情報６３を入力して、それに基づき機能仕様書６４を生成して記憶部３０に記憶する。図１２は、マッピングの動作を示すフローチャートである。図１３は、ユーザにより事前に作成される、機能の依存関係情報６３の一例を示す図である。図１４は、マッピング部２３により生成される、機能仕様書６４の一例を示す図である。図１５，１６は、ユーザによるマッピング部２３の操作を説明するための図である。
【００７１】
以下、図１２を用いて、マッピング部２３の動作を説明する。
【００７２】
図１２において、最初に、マッピング部２３は、プロセス仕様書６２および機能の依存関係情報６３を記憶部３０から読み込む（Ｓ９０１）。機能の依存関係情報６３は、ユーザにより事前に作成されるデータである。例えば、マッピング部２３は、図１１（Ｂ）のプロセス仕様書６２ａ６および図１３の機能の依存関係情報６３ａを読み込む。
【００７３】
その後、マッピング部２３は、ユーザによる操作に従って、機能の依存関係情報６３の機能名欄から任意の機能名を選択して、当該機能名の機能仕様書６４への配置を確定する（Ｓ９０２）。図１１（Ｂ），１３の例では、機能の依存関係情報６３ａの機能名欄から「ｘｘｘｘｘ機能」が選択されて、図１４の機能仕様書６４ａのように最上欄に配置される。
【００７４】
その後、マッピング部２３は、ユーザによる操作に従って、プロセス仕様書６２を選択して、選択したプロセス仕様書６２の処理欄の文字列の機能仕様書６４への配置を確定する（Ｓ９０３）。図１１（Ｂ），１３の例では、プロセス仕様書６２ａ６の処理欄の文字列が、図１４の機能仕様書６４ａように上から２番目の欄に配置される。
【００７５】
その後、マッピング部２３は、機能仕様書６４を生成して記憶部３０に記憶する（Ｓ９０４）。図１１（Ｂ），１３の例では、図１４の機能仕様書６４ａが生成される。
【００７６】
図１５は、機能の依存関係情報６３のうちの１つの機能名を選択して、当該機能名の機能仕様書６４への配置を確定する処理（図１２のＳ９０２）における、ユーザによる操作を例示するための図である。
【００７７】
プロセス仕様書６２ａ６および機能の依存関係情報６３ａを読み込むと、マッピング部２３は、機能の依存関係情報６３ａを表示部４０に表示する。ユーザは、操作部５０を介して、マッピングしたい項目、すなわち機能仕様書６４に配置したい項目を選択する。図１５（Ａ）は、機能名「ｘｘｘｘｘ機能」が選択された状態を示す。
【００７８】
マッピングしたい項目が選択されたことを検出すると、マッピング部２３は、読み込んだプロセス仕様書６２ａ６を、プルダウンメニューから選択可能に表示する。図１５（Ｂ）は、プロセス仕様書６２ａ６が選択された状態を示す。
【００７９】
プロセス仕様書６２ａ６が選択されたことを検出すると、マッピング部２３は、プロセス仕様書６２ａ６を表示部４０に表示する。ユーザは、操作部５０を介して、プロセス仕様書６２ａ６のうち、マッピングしたい箇所を選択する。図１５（Ｃ）は、プロセス仕様書６２ａ６の最上欄の文字列「ｘｘｘｘｘ機能」が選択された状態を示す。
【００８０】
図１６は、プロセス仕様書６２を選択して、選択したプロセス仕様書の処理欄の文字列の機能仕様書６４への配置を確定する処理（図１２のＳ９０３）における、ユーザによる操作を例示するための図である。
【００８１】
図１５（Ｃ）においてプロセス仕様書６２ａ６の最上欄の文字列「ｘｘｘｘｘ機能」が選択されたことを検出すると、マッピング部２３は、プロセス仕様書６２ａ６を、プルダウンメニューから選択可能に表示する。図１６（Ａ）は、プロセス仕様書６２ａ６が選択された状態を示す。
【００８２】
プロセス仕様書６２ａ６が選択されたことを検出すると、マッピング部２３は、プロセス仕様書６２ａ６を表示部４０に表示する。ユーザは、操作部５０を介して、プロセス仕様書６２ａ６のうち、マッピングしたい箇所を選択する。図１６（Ｂ）は、プロセス仕様書６２ａ６の処理欄の２行目から８行目までの文字列が選択された状態を示す。
【００８３】
マッピングしたい箇所が選択されたことを検出すると、マッピング部２３は、機能の依存関係情報６３ａを表示部４０に表示する。ユーザは、操作部５０を介して、マッピングしたい箇所と対応する機能ブロックを選択する。図１６（Ｃ）は、機能の依存関係情報６３ａの「不快検知」が選択された状態を示す。
【００８４】
マッピングしたい箇所と対応する機能ブロック「不快検知」が選択されたことを検出すると、マッピング部２３は、機能仕様書６４において、マッピングしたい箇所を配置する箇所を選択する。図１６（Ｄ）は、操作部５０を介して、マッピングしたい箇所を配置する箇所の先頭を、機能仕様書６４の上から２番目の欄の１行目に合わせたときの、上から２番目の欄の１行目から７行目までが選択された状態を示す。マッピングしたい箇所を配置する箇所が選択されたことを検出すると、マッピング部２３は、機能仕様書６４ａを生成する。以上のようにして、プロセス仕様書６２および機能の依存関係情報６３から機能仕様書６４が生成されて記憶部３０に記憶される。
【００８５】
２−４．関数指定部の動作
図３に示すように、関数指定部２４は、ソースコード６０を入力して、それに基づき被影響関数情報６５を生成して記憶部３０に記憶する。図１７，１８は、関数指定部２４の動作を示すフローチャートである。図１９は、関数指定部２４により生成される、被影響関数情報６５の一例を示す図である。図２０は、関数指定部２４の動作を説明するための図である。
【００８６】
以下、図１７，１８を用いて、関数指定部２４の動作を説明する。
【００８７】
図１７において、最初に、関数指定部２４は、ユーザによる操作に従って、ソースコード６０を選択して（Ｓ１１０１）、記憶部３０から読み込む（Ｓ１１０２）。例えば、関数指定部２４は、図７のソースコード６０ａを選択して読み込む。
【００８８】
その後、関数指定部２４は、読み込んだソースコード６０を解析して（Ｓ１１０３）、ソースコード６０に含まれる関数を、ユーザによる操作により選択可能に表示部４０に表示する（Ｓ１１０４）。例えば、ソースコード６０に含まれる関数は、プルダウンメニューから選択可能に表示されてもよい。その後、関数指定部２４は、ユーザによる操作に従って変更対象の関数を選択する（Ｓ１１０５）。図２０は、ソースコード６０ａが読み込まれて、ソースコード６０ａに含まれる関数ｘｘｘｘｘが選択されている状態を示す。
【００８９】
その後、関数指定部２４は、被影響関数情報６５を生成して記憶部３０に記憶し（Ｓ１１０６）、ソースコード６０に含まれる関数を、被影響関数情報６５に入力する（Ｓ１１０７〜Ｓ１１１０）。
【００９０】
関数指定部２４は、変数ｋに１を入力する（Ｓ１１０７）。
【００９１】
関数指定部２４は、ソースコード６０にｋ番目の関数が含まれていると判断した場合（Ｓ１１０７でＹｅｓ）、ｋ番目の関数に関する情報を、被影響関数情報６５に入力する（Ｓ１１０９）。詳細は後述する。
【００９２】
その後、関数指定部２４は、変数ｋに１を加算する（Ｓ１１１０）。
【００９３】
一方、関数指定部２４は、ソースコード６０にｋ番目の関数が含まれていないと判断した場合（Ｓ１１０８でＮｏ）、本処理を終了する。
【００９４】
図１８は、ｋ番目の関数に関する情報を、被影響関数情報６５に入力する処理（図１７のＳ１１０９）を示すフローチャートである。
【００９５】
最初に、ｋ番目の関数が変更対象の関数を参照していないと判断した場合（Ｓ１１１１でＮｏ）、関数指定部２４は、変更対象の関数がｋ番目の関数を参照しているか否かを判断する（Ｓ１１１２）。図７の例では、ｋ＝１のときに、１番目の関数ｘｘｘｘｘは、変更対象の関数ｘｘｘｘｘを参照していないと判断する。
【００９６】
その後、変更対象の関数がｋ番目の関数を参照していないと判断した場合（Ｓ１１１２でＮｏ）、関数指定部２４は、変更対象の関数と参照関係にある関数が、ｋ番目の関数を参照しているか否かを判断する（Ｓ１１１３）。図７の例では、ｋ＝１のときに、変更対象の関数と参照関係にある関数が、１番目の関数ｘｘｘｘｘを参照していないと判断する。
【００９７】
その後、変更対象の関数と参照関係にある関数が、ｋ番目の関数を参照していないと判断した場合（Ｓ１１１３でＮｏ）、関数指定部２４は、ｋ番目の関数が、変更対象の関数と参照関係にある関数を参照しているか否かを判断する（Ｓ１１１４）。図７の例では、ｋ＝１のときに、変更対象の関数と参照関係にある関数が、１番目の関数ｘｘｘｘｘを参照していないと判断する。
【００９８】
その後、ｋ番目の関数が、変更対象の関数と参照関係にある関数を参照していないと判断した場合（Ｓ１１１４でＮｏ）、関数指定部２４は、本処理を終了する。図７の例では、ｋ＝１のときに、関数指定部２４は、１番目の関数ｘｘｘｘｘが、変更対象の関数と参照関係にある関数を参照していないと判断して、本処理を終了する。
【００９９】
一方、ｋ番目の関数が変更対象の関数を参照していると判断した場合（Ｓ１１１１でＹｅｓ）、関数指定部２４は、被影響関数情報６５の影響の分類欄に「１」を入力して（Ｓ１１１５）、ｋ番目の関数の関数名を、被影響関数情報６５の関数欄に入力して（Ｓ１１１９）、本処理を終了する。
【０１００】
変更対象の関数がｋ番目の関数を参照していると判断した場合（Ｓ１１１２でＹｅｓ）、関数指定部２４は、被影響関数情報６５の影響の分類欄に「２」を入力して（Ｓ１１１６）、ｋ番目の関数の関数名を、被影響関数情報６５の関数欄に入力して（Ｓ１１１９）、本処理を終了する。
【０１０１】
変更対象の関数と参照関係にある関数が、ｋ番目の関数を参照していると判断した場合（Ｓ１１１３でＹｅｓ）、関数指定部２４は、被影響関数情報６５の影響の分類欄に「３」を入力して（Ｓ１１１７）、ｋ番目の関数の関数名を、被影響関数情報６５の関数名欄に入力して（Ｓ１１１９）、本処理を終了する。
【０１０２】
ｋ番目の関数が、変更対象の関数と参照関係にある関数を参照していると判断した場合（Ｓ１１１４でＹｅｓ）、関数指定部２４は、被影響関数情報６５の影響の分類欄に「４」を入力して（Ｓ１１１８）、ｋ番目の関数の関数名を、被影響関数情報６５の関数欄に入力して（Ｓ１１１９）、本処理を終了する。
【０１０３】
以上のようにして、ソースコード６０から被影響関数情報６５が生成されて記憶部３０に記憶される。
【０１０４】
２−５．変更影響分析部の動作
図４に示すように、変更影響分析部２５は、機能仕様書６４および被影響関数情報６５を入力して、それに基づき機能に対する変更影響度情報６６を生成して記憶部３０に記憶する。図２１は、変更影響分析部２５の動作を示すフローチャートである。図２２は、変更影響分析部２５により生成される、機能に対する変更影響度情報６６の一例を示す図である。
【０１０５】
以下、図２１を用いて、変更影響分析部２５の動作を説明する。
【０１０６】
図２１において、最初に、変更影響分析部２５は、機能仕様書６４および被影響関数情報６５を記憶部３０から読み込む（Ｓ１６０１）。例えば、変更影響分析部２５は、図１４の機能仕様書６４ａおよび図１９の被影響関数情報６５ａを読み込む。
【０１０７】
その後、変更影響分析部２５は、機能仕様書６４の最上欄の文字列の、機能に対する変更影響度情報６６への配置を確定する（Ｓ１６０２）。図１４，１９の例では、変更影響分析部２５は、図２２のように機能仕様書６４ａの最上欄の文字列「ｘｘｘｘｘ機能」の、機能に対する変更影響度情報６６ａの機能欄への配置を確定する。
【０１０８】
その後、変更影響分析部２５は、変更影響度、すなわち、被影響関数情報６５に含まれる関数の数を算出する（Ｓ１６０３）。図１４，１９の例では、被影響関数情報６５ａが関数を含まないので、変更影響分析部２５は、変更影響度として「０」を算出する。
【０１０９】
その後、変更影響分析部２５は、算出した変更影響度の、機能に対する変更影響度情報６６への配置を確定する（Ｓ１６０４）。図１４，１９の例では、変更影響度「０」の、機能に対する変更影響度情報６６ａの変更影響度欄への配置を確定する。
【０１１０】
その後、変更影響分析部２５は、機能に対する変更影響度情報６６を生成して記憶部３０に記憶する（Ｓ１６０５）。図１４，１９の例では、機能に対する変更影響度情報６６ａを生成する。以上のようにして、機能仕様書６４および被影響関数情報６５から機能に対する変更影響度情報６６が生成されて記憶部３０に記憶される。プロセッサ２０は、操作部５０を介したユーザによる操作に基づいて、機能に対する変更影響度情報６６を表示部４０に表示する。
【０１１１】
３．別のソースコードを読み込んだときの変更影響分析装置の動作例
以上の説明においては、図７に示すような、変更対象の関数が他の関数を含んでいないソースコード６０ａを例示して変更影響分析装置１０の動作を説明した。以下では、図２３に示すような、変更対象の関数が他の関数を含むソースコード６０ｂを例示して変更影響分析装置１０の動作を説明する。
【０１１２】
図２３は、別のソースコード６０ｂを例示する図である。図２４は、ソースコード６０ｂから生成されるオブジェクトリスト６１ｂを示す。ソースコード６０ａと比べて、ソースコード６０ｂは、関数１〜４をさらに含む。したがって、第１ソースコードリバース部２１は、関数ｘｘｘｘｘについての情報に加えて、関数１〜４についての情報を、オブジェクトリスト６１ｂに入力する（図５のＳ４０４〜Ｓ４０７）。このとき、第１ソースコードリバース部２１は、関数名の日本語記述および関数名をオブジェクトリスト６１ｂに入力し（図６のＳ４０８、Ｓ４０９）、関数１〜４は入力および出力を有しないので、入力欄および出力欄に文字列「なし」を入力する（図６のＳ４１１〜Ｓ４１７）。
【０１１３】
図２５〜２９は、ソースコード６０ｂおよびオブジェクトリスト６１ｂに基づいて作成されるプロセス仕様書６２を示す。オブジェクトリスト６１ａと比べて、オブジェクトリスト６１ｂは、関数欄に関数１〜４をさらに含む。よって、第２ソースコードリバース部２２は、関数ｘｘｘｘｘのプロセス仕様書に加えて、関数１〜４のプロセス仕様書をさらに生成する（図９のＳ６０２）。
【０１１４】
また、ソースコード６０ａの関数ｘｘｘｘｘと比べて、ソースコード６０ｂの関数ｘｘｘｘｘは、「ｆ２（）；」をさらに含む。第２ソースコードリバース部２２は、「ｆ２（）；」を操作の記述であると判断して、操作の記述であることを示す記号「・」を入力する。さらに、オブジェクトリスト６１ｂの関数欄と関数のラベル欄との対応関係に基づいて「ｆ２（）；」を「関数２」に変換する（図９のＳ６１３）。よって、第２ソースコードリバース部２２は、図２５のプロセス仕様書６２ｂ１を出力する。同様に、第２ソースコードリバース部２２は、図２６〜２９の、関数１〜４のプロセス仕様書６２ｂ２〜６２ｂ５を出力する。
【０１１５】
図３０は、別の機能仕様書６４ｂを例示する図である。機能仕様書６４ｂは、プロセス仕様書６２ｂ１〜６２ｂ５および図１３の機能の依存関係情報６３ａから生成される。図１１（Ｂ）のプロセス仕様書６２ａ６と比べて、プロセス仕様書６２ｂ１は、処理欄に文字列「・関数２」をさらに含む。したがって、マッピング部２３は、図３０のように機能仕様書６４ｂを生成する。
【０１１６】
図３１は、別の、被影響関数情報６５ｂを例示する図である。被影響関数情報６５ｂは、ソースコード６０ｂから生成される。ソースコード６０ａと比べて、ソースコード６０ｂは、変更対象の関数ｘｘｘｘｘと関連する関数１〜４をさらに含む。関数指定部２４は、関数１〜４を４つに分類する。
【０１１７】
図３３は、関数ｘｘｘｘｘと関数１〜４との関連性を説明するための図である。図３３において、矢印は、参照元の関数から参照先の関数に向かっている。関数１は、関数ｘｘｘｘｘを参照するので「１」に分類される（図１８のＳ１１１５）。関数２は、関数ｘｘｘｘｘに参照されるので「２」に分類される（図１８のＳ１１１６）。関数３は、関数ｘｘｘｘｘと参照関係にある関数２を参照するので「３」に分類される（図１８のＳ１１１７）。関数４は、関数ｘｘｘｘｘと参照関係にある関数２に参照されるので「４」に分類される（図１８のＳ１１１８）。
【０１１８】
図３２は、別の、機能に対する変更影響度情報６６ｂを例示する図である。機能に対する変更影響度情報６６ｂは、機能仕様書６４ｂおよび被影響関数情報６５ｂから生成される。ｘｘｘｘｘ機能は変更対象の関数ｘｘｘｘｘで実現され、関数ｘｘｘｘｘと関連する関数は、被影響関数情報６５ｂによれば、４つあるので、機能に対する変更影響度情報６６ｂのように、変更影響度欄には「４」が入力される。
【０１１９】
以上のように、本実施の形態の変更影響分析装置１０は、変更対象の機能に対する変更影響度を算出して表示する。変更影響度は、「変更対象の関数が他の関数により参照される回数」に加えて、「変更対象の関数が他の関数を参照する回数」、「変更対象の関数と直接的な参照関係にある関数が他の関数を参照する回数」、および「変更対象の関数と直接的な参照関係にある関数が他の関数に参照される回数」を考慮して算出される。算出された変更影響度を参照することによって、ユーザは、特定の機能の変更がソフトウェア全体に及ぼす影響を適切に把握することができる。このことにより、ユーザは、当該影響を考慮した上で効率よくソフトウェアの流用開発を行うことができる。
【０１２０】
４．まとめ
以上説明したように、本実施の形態に係る変更影響分析装置１０は、ソースコード６０を分析して、変更対象の機能が、ソースコード６０に基づくソフトウェア全体に与える影響を示す、機能に対する変更影響度情報６６を出力する装置である。変更影響分析装置１０は、ソースコードの分析処理を行うプロセッサ２０を備える。プロセッサ２０は、第１ソースコードリバース部２１と、第２ソースコードリバース部２２と、マッピング部２３と、関数指定部２４と、変更影響分析部２５とを備える。第１ソースコードリバース部２１は、ソースコード６０から、ソースコード６０に含まれる各関数が記述されるオブジェクトリスト６１を生成する。第２ソースコードリバース部２２は、オブジェクトリスト６１から、各関数により実現される各プロセスの入力、処理、および出力が記述されるプロセス仕様書６２を生成する。マッピング部２３は、プロセス仕様書６２および各プロセスにより実現される各機能が定義される機能の依存関係情報６３から、変更対象の機能を実現する変更対象のプロセスの処理が記述される機能仕様書６４を生成する。関数指定部２４は、ソースコード６０から、変更対象の関数から影響を受ける他の関数が記述される、被影響関数情報６５を生成する。変更影響分析部２５は、機能仕様書６４および被影響関数情報６５から、機能に対する変更影響度情報６６を出力する。
【０１２１】
機能に対する変更影響度情報６６は、変更対象の機能と、変更対象の機能からソフトウェア全体が受ける影響の度合いを示す変更影響度とを対応付けた情報である。
【０１２２】
変更影響度は、「変更対象の関数が他の関数により参照される回数」と、「変更対象の関数が他の関数を参照する回数」と、「変更対象の関数と直接的な参照関係にある関数が他の関数を参照する回数」と、「変更対象の関数と直接的な参照関係にある関数が他の関数に参照される回数」と、に基づき算出する値である。
【０１２３】
より具体的には、変更影響度は、「変更対象の関数が他の関数により参照される回数」と、「変更対象の関数が他の関数を参照する回数」と、「変更対象の関数と直接的な参照関係にある関数が他の関数を参照する回数」と、「変更対象の関数と直接的な参照関係にある関数が他の関数に参照される回数」と、を加算した値である。
【０１２４】
または、変更影響度は、「変更対象の関数が他の関数により参照される回数」と、「変更対象の関数が他の関数を参照する回数」と、「変更対象の関数と直接的な参照関係にある関数が他の関数を参照する回数」と、「変更対象の関数と直接的な参照関係にある関数が他の関数に参照される回数」と、を乗算した値としても良いし、それ以外に組み合わせて関連付けることにより増加する値としても良い。
【０１２５】
機能に対する変更影響度情報６６を参照することによって、ユーザは、特定の機能の変更がソフトウェア全体に及ぼす影響を適切に把握することができる。このことにより、ユーザは、当該影響を考慮した上で効率よくソフトウェアの流用開発を行うことができる。
【０１２６】
実施の形態２．
以下、変更影響分析装置１０の別の実施の形態について説明する。
【０１２７】
実施の形態１の変更影響分析装置１０は、変更対象の機能と当該機能の変更影響度とを表示部４０に表示することによって、ユーザに、変更の難易度を認識させた。これに対して、本実施の形態の変更影響分析装置１０は、変更対象の機能と、当該機能を実現するプロセスおよび関数とを表示部４０に表示する。それにより、ユーザに、より詳細に変更の難易度を認識させる。
【０１２８】
図３４は、本実施の形態に係る、変更影響分析部２５ａに対するデータの入出力を示す図である。本実施の形態の変更影響分析装置１０は、変更影響分析部２５ａの機能が実施の形態１のものと異なる。変更影響分析部２５ａは、プロセス仕様書６２、機能仕様書６４、および被影響関数情報６５を入力して、それに基づき機能、プロセス、関数の対応情報６７を生成して記憶部３０に記憶する。機能、プロセス、関数の対応情報６７は、ソフトウェア影響情報の一例である。
【０１２９】
機能、プロセス、関数の対応情報６７は、変更対象の機能と、当該機能を実現するプロセスおよび関数とが記述されたデータである。
【０１３０】
本実施の形態に係る、変更影響分析部２５ａの動作について説明する。
【０１３１】
図３５は、本実施の形態に係る、変更影響分析部２５ａの動作を示すフローチャートである。図３６は、機能、プロセス、関数の対応情報６７の一例を示す図である。
【０１３２】
最初に、変更影響分析部２５ａは、プロセス仕様書６２、機能仕様書６４、および被影響関数情報６５を記憶部３０から読み込む（Ｓ１７０１）。例えば、変更影響分析部２５ａは、図２５〜２９のプロセス仕様書６２ｂ１〜６２ｂ５、図３０の機能仕様書６４ｂ、および図３１の被影響関数情報６５ｂを読み込む。
【０１３３】
その後、変更影響分析部２５ａは、機能仕様書６４の最上欄の文字列の、機能、プロセス、関数の対応情報６７への配置を確定する（Ｓ１７０２）。図２５〜２９，３０，３１の例では、変更影響分析部２５ａは、図３６のように、機能仕様書６４ｂの最上欄の文字列「ｘｘｘｘｘ機能」の、機能、プロセス、関数の対応情報６７ｂの機能欄への配置を確定する。
【０１３４】
その後、変更影響分析部２５ａは、被影響関数情報６５の関数欄に記述された各関数と関連するプロセスのプロセス名および当該プロセスが記述されたプロセス仕様書の行番号の、機能、プロセス、関数の対応情報６７のプロセス欄への配置を確定する（Ｓ１７０３）。
【０１３５】
図２５〜２９，３０，３１の例では、被影響関数情報６５ｂによれば、プロセス関数１は、ｘｘｘｘｘ機能のプロセスを呼び出すので、図３６の機能、プロセス、関数の対応情報６７ｂのように、プロセス名「関数１」および関数１のプロセス仕様書６２ｂ２の処理欄の行番号「○」が配置される。同様に、プロセス関数２は、ｘｘｘｘｘ機能のプロセスにより呼び出されるので、プロセス名「ｘｘｘｘｘ機能」およびｘｘｘｘｘ機能のプロセス仕様書６２ｂ１の処理欄の行番号「３」が配置される。プロセス関数３は、プロセス関数２を呼び出すので、プロセス名「関数２」および関数２のプロセス仕様書６２ｂ３の処理欄の行番号「△」が配置される。プロセス関数４は、プロセス関数２を呼び出すので、プロセス名「関数４」および関数４のプロセス仕様書６２ｂ５の処理欄の行番号「×」が配置される。
【０１３６】
その後、変更影響分析部２５ａは、被影響関数情報６５の関数欄の各文字列の、機能、プロセス、関数の対応情報６７への配置を確定する（Ｓ１７０４）。図２５〜２９，３０，３１の例では、図３６のように、被影響関数情報６５ｂの関数欄の文字列「関数１」「関数２」「関数３」「関数４」それぞれの、機能、プロセス、関数の対応情報６７ｂの関数欄への配置を確定する。
【０１３７】
その後、変更影響分析部２５ａは、機能、プロセス、関数の対応情報６７を生成して記憶部３０に記憶する（Ｓ１７０５）。図２５〜２９，３０，３１の例では、図３６の機能、プロセス、関数の対応情報６７ｂを生成する。以上のようにして、プロセス仕様書６２、機能仕様書６４、および被影響関数情報６５から機能、プロセス、関数の対応情報６７が生成されて記憶部３０に記憶される。プロセッサ２０は、操作部５０を介したユーザによる操作に基づいて、機能、プロセス、関数の対応情報６７を表示部４０に表示する。
【０１３８】
以上のように、本実施の形態に係る変更影響分析装置１０は、機能、プロセス、関数の対応情報６７を表示部４０に表示する。機能、プロセス、関数の対応情報６７は、変更対象の機能と、当該機能を実現するプロセスおよび関数とを対応付けたデータである。機能、プロセス、関数の対応情報６７を参照することによって、ユーザは、変更対象の機能を、プロセスおよび関数と対応付けて把握することができる。このことにより、ユーザは、特定の機能の変更により影響を受けるプロセスおよび関数を考慮した上でソフトウェアの流用開発を行うことができる。
【０１３９】
以上説明したように、本実施の形態に係る変更影響分析部２５ａは、プロセス仕様書６２をさらに読み込んで、機能、プロセス、関数の対応情報６７を出力する。
【０１４０】
機能、プロセス、関数の対応情報６７は、変更対象の機能と、変更対象の機能から影響を受けるプロセスおよび関数とを対応付けた情報である。
【０１４１】
機能、プロセス、関数の対応情報６７を参照することによって、ユーザは、変更対象の機能を、プロセスおよび関数と対応付けて把握することができる。このことにより、ユーザは、特定の機能の変更により影響を受けるプロセスおよび関数を考慮した上でソフトウェアの流用開発を行うことができる。
【０１４２】
他の実施の形態．
以上のように、本発明における技術の例示として、実施の形態を説明した。しかしながら、本発明における技術は、これに限定されず、適宜、変更、置き換え、付加、省略などを行った実施の形態にも適用可能である。また、上記実施の形態で説明した各構成要素を組み合わせて、新たな実施の形態とすることも可能である。
【０１４３】
上記の実施の形態では、ソースコード６０はＣ言語で記述されるが、これに限定されない。例えば、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｐｙｔｈｏｎ、Ｒｕｂｙ等の他の言語で記述されていてもよい。
【０１４４】
上記の実施の形態では、プロセス仕様書６２は日本語で記述されるが、これに限定されない。例えば、英語、フランス語、スペイン語等の他の言語で記述されてもよい。
【０１４５】
実施の形態１の変更影響分析装置１０は、機能に対する変更影響度情報６６のみを出力し、実施の形態２の変更影響分析装置１０は、機能、プロセス、関数の対応情報６７のみを出力したが、これに限定されない。例えば、変更影響分析装置１０は、分析を開始する前に図３７の選択画面を表示して、ユーザは、機能に対する変更影響度情報６６、および機能、プロセス、関数の対応情報６７のうちの少なくとも一つを選択できてもよい。
【符号の説明】
【０１４６】
１０  変更影響分析装置
２０  プロセッサ
２１  第１ソースコードリバース部
２２  第２ソースコードリバース部
２３  マッピング部
２４  関数指定部
２５、２５ａ  変更影響分析部
３０  記憶部
４０  表示部
５０  操作部
６０  ソースコード
６１  オブジェクトリスト
６２  プロセス仕様書
６３  機能の依存関係情報
６４  機能仕様書
６５  被影響関数情報
６６  機能に対する変更影響度情報
６７  機能、プロセス、関数の対応情報
【図１】
2020021427.tif 000003
【図２】
2020021427.tif 000004
【図３】
2020021427.tif 000005
【図４】
2020021427.tif 000006
【図５】
2020021427.tif 000007
【図６】
2020021427.tif 000008
【図７】
2020021427.tif 000009
【図８】
2020021427.tif 000010
【図９】
2020021427.tif 000011
【図１０】
2020021427.tif 000012
【図１１】
2020021427.tif 000013
【図１２】
2020021427.tif 000014
【図１３】
2020021427.tif 000015
【図１４】
2020021427.tif 000016
【図１５】
2020021427.tif 000017
【図１６】
2020021427.tif 000018
【図１７】
2020021427.tif 000019
【図１８】
2020021427.tif 000020
【図１９】
2020021427.tif 000021
【図２０】
2020021427.tif 000022
【図２１】
2020021427.tif 000023
【図２２】
2020021427.tif 000024
【図２３】
2020021427.tif 000025
【図２４】
2020021427.tif 000026
【図２５】
2020021427.tif 000027
【図２６】
2020021427.tif 000028
【図２７】
2020021427.tif 000029
【図２８】
2020021427.tif 000030
【図２９】
2020021427.tif 000031
【図３０】
2020021427.tif 000032
【図３１】
2020021427.tif 000033
【図３２】
2020021427.tif 000034
【図３３】
2020021427.tif 000035
【図３４】
2020021427.tif 000036
【図３５】
2020021427.tif 000037
【図３６】
2020021427.tif 000038
【図３７】
2020021427.tif 000039