(57)【要約】【課題】ソースコードの修正に伴う作業負担を軽減すること。【解決手段】図１の（１）、（２）で示すように、情報処理装置１０１は、ソースコードｓｒｃ＿ｎを受け付け、命令１２１が値の読み出し対象とするデータ項目Ｗ１と、命令１２１が値の書き込み対象とするデータ項目Ｗ２とを特定する。次に、情報処理装置１０１は、図１の（３）で示すように、データ項目Ｗ１の各従属項目Ｗ１１〜Ｗ１３のサイズ及びオフセットと、データ項目Ｗ２の各従属項目Ｗ２１〜Ｗ２３のサイズ及びオフセットとを取得する。そして、情報処理装置１０１は、図１の（４）で示すように、対応関係情報１１１を参照して、互いに対応する各データ項目間で、取得したサイズ及びオフセットを比較する。次に、情報処理装置１０１は、図１の（５）で示すように、網掛けを付与したデータ項目Ｗ２２１のサイズが異なる旨と、データ項目Ｗ２２２のオフセットが異なる旨とを出力する。【選択図】図１
2018063497.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを受け付け、
受け付けた前記ソースコードに含まれる命令情報を解析して、該命令情報に含まれる命令が値の読み出し対象とする第１の変数の識別情報と、該命令が前記値の書き込み対象とする第２の変数の識別情報とを特定し、
前記ソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
前記第１の変数に従属する各変数と、前記第２の変数に従属する各変数との対応関係を示す情報を記憶する記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較し、
比較結果を出力する、
処理をコンピュータに実行させることを特徴とする修正支援プログラム。
【請求項２】
前記記憶部は、前記ソースコードの修正前のソースコードに含まれる前記第１の変数に従属する各変数のオフセットと、前記第２の変数に従属する各変数のオフセットとを記憶し、
前記コンピュータに、
前記記憶部を参照して、前記第１の変数に従属する各変数と、当該各変数のオフセットと同一のオフセットを有する前記第２の変数に従属する各変数とを対応付けた対応関係を示す情報を前記記憶部に格納する、処理を実行させ、
前記比較する処理は、
前記記憶部に格納された前記対応関係を示す情報を参照して、対応付けた前記各変数間で、取得した前記サイズ及びオフセットを比較する、
ことを特徴とする請求項１に記載の修正支援プログラム。
【請求項３】
前記出力する処理は、
前記比較結果が、前記互いに対応する各変数間で前記サイズ及びオフセットのいずれかが異なることを示す場合、前記互いに対応する各変数のうち、前記第２の変数に従属する変数を修正すべきである旨を出力する、
ことを特徴とする請求項１または２に記載の修正支援プログラム。
【請求項４】
前記出力する処理は、
前記比較結果が、前記互いに対応する各変数間で前記サイズ及びオフセットのいずれかが異なることを示す場合、前記互いに対応する各変数のうち、前記第２の変数に従属する変数を読み出し対象とする命令が前記ソースコードに含まれるか判断し、
前記ソースコードに当該命令が含まれる場合、当該命令に関して修正すべきである旨を出力する、
ことを特徴とする請求項１または２に記載の修正支援プログラム。
【請求項５】
前記コンピュータに、
前記ソースコードの修正前のソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
取得した前記修正前のソースコードにおける前記第１の変数に従属する各変数のサイズ及びオフセットと、取得した前記ソースコードにおける前記第１の変数に従属する各変数のサイズ及びオフセットとを比較するとともに、取得した前記修正前のソースコードにおける前記第２の変数に従属する各変数のサイズ及びオフセットと、取得した前記ソースコードにおける前記第２の変数に従属する各変数のサイズ及びオフセットとを比較する、処理を実行させ、
前記サイズ及びオフセットを比較する処理は、
比較した比較結果が、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかが異なる、または、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかが異なることを示す場合、前記記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較する、
ことを特徴とする請求項１〜４のいずれか一つに記載の修正支援プログラム。
【請求項６】
ソースコードを受け付け、
受け付けた前記ソースコードに含まれる命令情報を解析して、該命令情報に含まれる命令が値の読み出し対象とする第１の変数の識別情報と、該命令が前記値の書き込み対象とする第２の変数の識別情報とを特定し、
前記ソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
前記第１の変数に従属する各変数と、前記第２の変数に従属する各変数との対応関係を示す情報を記憶する記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較し、
比較結果を出力する、
制御部を有することを特徴とする情報処理装置。
【請求項７】
ソースコードを受け付け、
受け付けた前記ソースコードに含まれる命令情報を解析して、該命令情報に含まれる命令が値の読み出し対象とする第１の変数の識別情報と、該命令が前記値の書き込み対象とする第２の変数の識別情報とを特定し、
前記ソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
前記第１の変数に従属する各変数と、前記第２の変数に従属する各変数との対応関係を示す情報を記憶する記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較し、
比較結果を出力する、
処理をコンピュータが実行することを特徴とする修正支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、修正支援プログラム、情報処理装置、及び修正支援方法に関する。
【背景技術】
【０００２】
従来、ソースコードを修正した際に、修正に影響を受ける箇所を検出する技術がある。関連する先行技術として、例えば、修正により影響を受けるプログラムの箇所での修正の指示若しくは修正の可能性の指摘、要求された修正の妥当性の判断、または、これらに関する理由付けのいずれかを含む修正情報を作成するものがある。また、シンボル情報またはセクション情報に関連付けられた領域情報が示すプロセッサに対して、プロセッサ及びブレークポイントの種類ごとに設定可能な残数を示す残り設定可能数を参照して設定可能な種類のブレークポイントを設定する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−２８１８８３号公報
【特許文献２】特開２０１２−２１６１３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、ソースコードに含まれる変数定義情報を修正した際に、修正に影響を受ける命令として検出された旨を、そのソースコードの修正者が確認する作業負担が増大することがある。具体的には、変数定義情報が修正されたことにより、修正前と修正後で、ある命令に含まれる、ある変数の読み出し先が変更された場合、修正者が意図した変更なのか、それとも、その命令が修正すべき命令であるかを特定することはできない。そこで、その命令が修正すべき命令であると常にみなすとすると、修正者が意図した変更であった場合、修正者は、本来確認しなくてよい内容を確認することになり、作業負担が増大する。一方で、修正者が意図した変更であると常にみなすとすると、修正者は、修正すべき命令がソースコードに含まれていないかを自身で見直すことになるため、作業負担が増大する。
【０００５】
１つの側面では、本発明は、ソースコードの修正に伴う作業負担を軽減することができる修正支援プログラム、情報処理装置、及び修正支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、ソースコードに含まれる命令情報を解析して、該命令情報に含まれる命令が値の読み出し対象とする第１の変数の識別情報と、該命令が値の書き込み対象とする第２の変数の識別情報とを特定し、ソースコードに含まれる変数定義情報を解析して、第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、第１の変数に従属する各変数と、第２の変数に従属する各変数との対応関係を示す情報を記憶する記憶部を参照して、互いに対応する各変数間で、取得したサイズ及びオフセットを比較し、比較結果を出力する修正支援プログラム、情報処理装置、及び修正支援方法が提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、ソースコードの修正に伴う作業負担を軽減することができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施の形態にかかる情報処理装置１０１の動作例を示す説明図である。
【図２】図２は、情報処理装置１０１のハードウェア構成例を示す説明図である。
【図３】図３は、情報処理装置１０１の機能構成例を示す説明図である。
【図４】図４は、旧データ情報ｉｎｆｏ＿ｏの生成例を示す説明図である。
【図５】図５は、現データ情報ｉｎｆｏ＿ｎの生成例を示す説明図である。
【図６】図６は、変更情報３１１の生成例を示す説明図である。
【図７】図７は、変更箇所検出例を示す説明図（その１）である。
【図８】図８は、変更箇所検出例を示す説明図（その２）である。
【図９】図９は、変更箇所検出例を示す説明図（その３）である。
【図１０】図１０は、本実施の形態における効果の一例を示す説明図である。
【図１１】図１１は、修正支援処理手順の一例を示すフローチャートである。
【図１２】図１２は、変更情報解析処理手順の一例を示すフローチャートである。
【図１３】図１３は、手続き解析処理手順の一例を示すフローチャート（その１）である。
【図１４】図１４は、手続き解析処理手順の一例を示すフローチャート（その２）である。
【図１５】図１５は、手続き解析処理手順の一例を示すフローチャート（その３）である。
【図１６】図１６は、手続き解析処理中の旧データ情報ｉｎｆｏ＿ｏ、現データ情報ｉｎｆｏ＿ｎの一例を示す説明図である。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示の修正支援プログラム、情報処理装置、及び修正支援方法の実施の形態を詳細に説明する。
【００１０】
図１は、本実施の形態にかかる情報処理装置１０１の動作例を示す説明図である。情報処理装置１０１は、ソースコードの修正に伴う作業を支援するコンピュータである。具体的には、情報処理装置１０１は、ソースコードを修正した際に、修正すべき箇所を出力することにより、ソースコードの修正に伴う作業を支援する。ここで、情報処理装置１０１は、例えば、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、サーバ等である。
【００１１】
ここで、ソースコードには、構造体等の変数を定義した変数定義情報と、変数に対して読み出しや書き込み等を行う命令を示す命令情報とが含まれる。そして、ソースコード内の変数定義情報の変更を伴う修正では、ソースコード内で使用する変数や手続きを、データ構造の変更に合わせて修正すべき場合がある。ここで、作成されてから時間が経過した古いソースコードに対しては、そのソースコードの仕様書がない場合もある。この場合、修正者が、変数定義情報の変更による影響を把握することができない場合がある。
【００１２】
変数定義情報の変更による影響を検出する技術としては、例えば、コンパイラの文法チェックが考えられる。しかしながら、ソースコードに含まれる変数定義情報を修正した際に、修正に影響を受ける命令とし検出された旨を、そのソースコードの修正者が確認する作業負担が増大することがある。具体的には、コンパイラの文法チェックでは、型が不一致であるなど、形式的な変更しか検出することができない。ここで、コンパイラは、修正者の意図を把握することはできないため、キャストや共用体等を用いてデータを読み出している場合に、変数定義情報の変更後、修正者が意図したデータを読み出しているかを確認することはできない。例えば、以下のようなＣ言語で記載されたソースコードがあるとする。
【００１３】
ｓｔｒｕｃｔ  Ａ｛
ｃｈａｒ  ａ１［４→８］；
ｉｎｔ  ａ２；
ｉｎｔ  ａ３；
｝；
ｓｔｒｕｃｔ  Ｂ  ｛
ｉｎｔ  ｂ１；
ｉｎｔ  ｂ２；
ｉｎｔ  ｂ３；
｝；
ｓｔｒｕｃｔ  Ａ  ＊ｐｔｒ；
ｉｆ  （（（ｓｔｒｕｃｔ  Ｂ  ＊）ｐｔｒ）−＞ｂ３  ＝＝  ４）｛  …  ｝
【００１４】
ここで、上述したソースコード内において、「ａ１［４→８］」は、ａ１［４］からａ１［８］に修正したことを示す。この場合、上述した変数ｂ３は、構造体Ａの修正前はａ３の値を読み出し、修正後はａ２の値を読み出すことになる。ここで、この読み出し先の変更が、修正者の意図によるものなのか、それとも修正すべき内容なのかは、コンパイラの文法チェックでは特定することができない。そこで、変数ｂ３を含む命令が修正すべき命令であると常にみなすとすると、修正者が意図した変更であった場合、修正者は、本来確認しなくてよい内容を確認することになり、作業負担が増大する。一方で、修正者が意図した変更であると常にみなすとすると、修正者は、修正すべき命令が含まれていないかを自身で見直すことになるため、作業負担が増大する。
【００１５】
そこで、本実施の形態では、修正後のソースコードの読み出し変数に従属する各変数と書き込み変数に従属する各変数とのサイズとオフセットを取得し、修正前に対応関係にあった各変数間でサイズとオフセットを比較することについて説明する。
【００１６】
図１を用いて、情報処理装置１０１の動作例について説明する。図１の（１）で示すように、情報処理装置１０１は、ソースコードｓｒｃ＿ｎを受け付ける。ここで、以降の説明では、ソースコードは、ＣＯＢＯＬ（ＣＯｍｍｏｎ  Ｂｕｓｉｎｅｓｓ  Ｏｒｉｅｎｔｅｄ  Ｌａｎｇｕａｇｅ）言語で記載されているとする。ＣＯＢＯＬ言語では、Ｃ言語等における変数を、「データ項目」と呼称する。従って、変数定義情報を、「データ項目定義情報」と呼称する。また、ＣＯＢＯＬ言語では、Ｃ言語等における構造体を、集団項目と呼ぶ。ここで、集団項目に従属するデータ項目を、「従属項目」と呼称する。図１で示すソースコードｓｒｃ＿ｎは、図１で示す範囲でデータ項目定義情報を有し、図１で示す命令情報を有する。
【００１７】
また、ソースコードｓｒｃ＿ｎは、本実施の形態を適用する前提から、修正者による修正後のソースコードとなる。従って、ソースコードｓｒｃ＿ｎを、「修正後ソースコードｓｒｃ＿ｎ」と呼称する。
【００１８】
次に、情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎに含まれる命令情報を解析する。そして、情報処理装置１０１は、その命令情報に含まれる命令が値の読み出し対象とする第１のデータ項目の識別情報と、その命令が、その値の書き込み対象とする第２のデータ項目の識別情報とを特定する。データ項目の識別情報は、そのデータ項目を一意に特定できればよい。データ項目の識別情報は、例えば、データ項目の名前である。
【００１９】
図１の例では、修正後ソースコードｓｒｃ＿ｎには、命令１２１が含まれる。そして、情報処理装置１０１は、図１の（２）で示すように、第１のデータ項目として、命令１２１が値の読み出し対象とするデータ項目Ｗ１と、第２のデータ項目として、命令１２１が値の書き込み対象とするデータ項目Ｗ２とを特定する。
【００２０】
また、情報処理装置１０１は、ソースコードに含まれる変数定義情報を解析する。そして、情報処理装置１０１は、第１のデータ項目に従属する各従属項目のサイズ及びオフセットの少なくともいずれかと、第２の変数に従属する各従属項目のサイズ及びオフセットの少なくともいずれかと、を取得する。図１では、情報処理装置１０１は、図１の（３）で示すように、データ項目Ｗ１に従属する各従属項目Ｗ１１〜Ｗ１３のサイズ及びオフセットと、データ項目Ｗ２に従属する各従属項目Ｗ２１〜Ｗ２３のサイズ及びオフセットと、を取得する。取得した情報について、情報処理装置１０１は、図１に示すように、現データ情報ｉｎｆｏ＿ｎとして管理する。また、オフセットやサイズは、バイト単位でもよいし、ビット単位でもよいが、本実施の形態では、バイト単位であるとする。
【００２１】
次に、情報処理装置１０１は、第１のデータ項目に従属する各データ項目と、第２のデータ項目に従属する各データ項目との対応関係を示す情報を記憶する記憶部１１０を参照して、互いに対応する各データ項目間で、取得したサイズ及びオフセットを比較する。ここで、対応関係を示す情報を、対応関係情報１１１として示す。対応関係情報１１１の生成例としては、例えば、情報処理装置１０１が、修正後ソースコードｓｒｃ＿ｎの修正前となる修正前ソースコードを記憶するとする。この場合、情報処理装置１０１は、修正前ソースコードを解析して、第１のデータ項目に従属する各従属項目と、その各従属項目のオフセットと同一のオフセットを有する第２のデータ項目に従属する各従属項目とを対応付けた対応関係情報１１１を生成する。または、対応関係情報１１１は、修正者の入力によって生成されてもよい。対応関係情報１１１は、変更によって読み出し先が変化しないデータ項目同士が登録されることになる。従って、情報処理装置１０１は、対応関係情報１１１を参照することにより、あるデータ項目の読み出し先が変更された場合、その変更は、修正者が意図しない変更であると特定することができる。
【００２２】
図１で示す対応関係情報１１１は、データ項目Ｗ１、Ｗ２が対応付けられており、さらに、データ項目Ｗ１、Ｗ２の各従属項目が対応付けられていることを示す。具体的には、図１で示す対応関係情報１１１は、データ項目Ｗ１１、Ｗ２１と、データ項目Ｗ１２１、Ｗ２２１と、データ項目Ｗ１２２、Ｗ２２２と、データ項目Ｗ１２３、Ｗ２２３と、データ項目Ｗ１３、Ｗ２３と、が対応付けられていることを示す。
【００２３】
また、取得する情報としては、上述したように、第１のデータ項目に従属する各従属項目のサイズ及びオフセットの少なくともいずれかと、第２の変数に従属する各従属項目のサイズ及びオフセットの少なくともいずれかとである。サイズ及びオフセットのいずれか一方だけを取得したとしても、情報処理装置１０１は、サイズ及びオフセットを比較することができる。例えば、各従属項目のサイズだけを取得していた場合、情報処理装置１０１は、ある従属項目のオフセットを、その従属項目より前にある全ての従属項目のサイズの和により得ることができる。一方、各従属項目のオフセットだけを取得していた場合、情報処理装置１０１は、ある従属項目のサイズを、その従属項目の次の従属項目のオフセットから、その従属項目のオフセットの差により得ることができる。
【００２４】
具体的には、情報処理装置１０１は、図１の（４）で示すように、対応関係情報１１１を記憶する記憶部１１０を参照して、互いに対応する各データ項目間で、取得したサイズ及びオフセットを比較する。比較を行った結果、情報処理装置１０１は、データ項目Ｗ１２１、Ｗ２２１のサイズと、データ項目Ｗ１２２、Ｗ２２２のオフセットとが異なるという比較結果を得る。
【００２５】
そして、情報処理装置１０１は、比較結果を出力する。ここで、比較結果として、情報処理装置１０１は、読み出し対象となるデータ項目の名前及び書き込み対象となるデータ項目の名前と、オフセットとサイズとのうち差異がある情報とを出力してもよい。または、情報処理装置１０１は、書き込み対象となるデータ項目だけの名前と、オフセットとサイズとのうち差異がある情報とを出力してもよい。図１では、情報処理装置１０１は、図１の（５）で示すように、網掛けを付与したデータ項目Ｗ２２１のサイズが異なる旨と、データ項目Ｗ２２２のオフセットが異なる旨とを出力する。以上により、情報処理装置１０１は、修正者が想定外の読み出し先の変更を特定できて、修正者の作業負担を軽減することができる。
【００２６】
また、図１の説明では、修正後ソースコードｓｒｃ＿ｎは、ＣＯＢＯＬ言語で記載されているとしたが、これに限らない。例えば、修正後ソースコードｓｒｃ＿ｎは、構造体を定義できるＣ言語、クラスを定義できるＣ＋＋言語で記載されていてもよい。次に、情報処理装置１０１のハードウェア構成について、図２を用いて説明する。
【００２７】
（情報処理装置１０１のハードウェア構成例）
図２は、情報処理装置１０１のハードウェア構成例を示す説明図である。情報処理装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、メモリ２０２と、ディスクドライブ２０３と、ディスク２０４と、通信装置２０５と、入力装置２０６と、出力装置２０７とを有する。また、ＣＰＵ２０１〜ディスクドライブ２０３、通信装置２０５〜出力装置２０７は、バス２１０によってそれぞれ接続される。
【００２８】
ＣＰＵ２０１は、情報処理装置１０１の全体の制御を司る演算処理装置である。ＣＰＵ２０１は、複数のコアを有するマルチコアプロセッサでもよい。メモリ２０２は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリや、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。揮発性メモリは、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等がある。不揮発メモリには、例えば、ＮＯＲ型のフラッシュメモリ等がある。
【００２９】
ディスクドライブ２０３は、ＣＰＵ２０１の制御に従って、ディスク２０４に対するデータのリード／ライトを制御する制御装置である。例えば、ディスク２０４が、磁気ディスクであれば、磁気ディスクドライブである。また、ディスクドライブ２０３がソリッドステートドライブである場合、ディスク２０４には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００３０】
通信装置２０５は、ネットワークを介して他の装置に接続される。そして、通信装置２０５は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。通信装置２０５には、例えばモデムやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）アダプタなどを採用することができる。
【００３１】
入力装置２０６は、情報処理装置１０１に情報を入力する装置である。例えば、入力装置２０６は、マウスやキーボード等である。マウスは、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。キーボードは、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。
【００３２】
出力装置２０７は、情報処理装置１０１から情報を出力する装置である。例えば、出力装置２０７は、ディスプレイやプリンタ等である。ディスプレイは、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイには、例えば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３３】
（情報処理装置１０１の機能構成例）
図３は、情報処理装置１０１の機能構成例を示す説明図である。情報処理装置１０１は、制御部３００を有する。制御部３００は、受け付け部３０１と、解析部３０２と、特定部３０３と、取得部３０４と、格納部３０５と、比較部３０６と、出力部３０７と、を含む。制御部３００は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図２に示したメモリ２０２、ディスク２０４などである。また、各部の処理結果は、メモリ２０２、ＣＰＵ２０１のレジスタや、ＣＰＵ２０１のキャッシュメモリ等に格納される。
【００３４】
また、情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎと、現データ情報ｉｎｆｏ＿ｎと、修正前ソースコードｓｒｃ＿ｏと、旧データ情報ｉｎｆｏ＿ｏと、対応関係情報１１１と、変更情報３１１とにアクセス可能である。修正前ソースコードｓｒｃ＿ｏは、修正後ソースコードｓｒｃ＿ｎの修正前のソースコードである。修正後ソースコードｓｒｃ＿ｎと、現データ情報ｉｎｆｏ＿ｎと、修正前ソースコードｓｒｃ＿ｏと、旧データ情報ｉｎｆｏ＿ｏと、対応関係情報１１１と、変更情報３１１とは、記憶部１１０に格納される。記憶部１１０は、メモリ２０２、ディスク２０４等である。
【００３５】
受け付け部３０１は、修正後ソースコードｓｒｃ＿ｎを受け付ける。また、受け付け部３０１は、修正前ソースコードｓｒｃ＿ｏを受け付ける。受け付け部３０１は、受け付けた修正後ソースコードｓｒｃ＿ｎと、修正前ソースコードｓｒｃ＿ｏとを、記憶部１１０に格納する。
【００３６】
解析部３０２は、修正後ソースコードｓｒｃ＿ｎを解析する。具体的には、解析部３０２は、修正後ソースコードｓｒｃ＿ｎのデータ項目定義部分を解析して、現データ情報ｉｎｆｏ＿ｎを生成する。また、解析部３０２は、修正後ソースコードｓｒｃ＿ｎの命令情報を解析する。また、解析部３０２は、修正前ソースコードｓｒｃ＿ｏを解析する。そして、解析部３０２は、修正前ソースコードｓｒｃ＿ｏのデータ項目定義部分を解析して、旧データ情報ｉｎｆｏ＿ｏを生成する。解析部３０２は、生成した現データ情報ｉｎｆｏ＿ｎと、旧データ情報ｉｎｆｏ＿ｏとを、記憶部１１０に格納する。
【００３７】
特定部３０３は、解析部３０２による修正後ソースコードｓｒｃ＿ｎの命令情報の解析によって、命令情報に含まれる命令が値の読み出し対象とする第１のデータ項目の識別情報と、その命令が値の書き込み対象とする第２のデータ項目の識別情報とを特定する。
【００３８】
また、特定部３０３は、修正後ソースコードｓｒｃ＿ｎに含まれるデータ項目定義情報と、修正前ソースコードｓｒｃ＿ｏに含まれるデータ項目定義情報とを比較してもよい。具体的には、特定部３０３は、現データ情報ｉｎｆｏ＿ｎと、旧データ情報ｉｎｆｏ＿ｏとを比較する。そして、ソースコードに含まれるデータ項目定義情報と修正前のソースコードに含まれるデータ項目定義情報とが異なる場合に、特定部３０３は、第１のデータ項目と第２のデータ項目とを特定してもよい。
【００３９】
取得部３０４は、現データ情報ｉｎｆｏ＿ｎから、第１のデータ項目に従属する各データ項目のサイズ及びオフセットの少なくともいずれかと、第２のデータ項目に従属する各データ項目のサイズ及びオフセットの少なくともいずれかと、を取得する。
【００４０】
ここで、旧データ情報ｉｎｆｏ＿ｏは、修正前のソースコードに含まれる第１のデータ項目に従属する各データ項目のオフセットと、第２のデータ項目に従属する各データ項目のオフセットとを少なくとも有するとする。この場合、格納部３０５は、第１のデータ項目に従属する各データ項目と、その各データ項目のオフセットと同一のオフセットを有する第２のデータ項目に従属する各データ項目とを対応付けた対応関係情報１１１を記憶部１１０に格納する。
【００４１】
比較部３０６は、対応関係情報１１１を参照して、互いに対応する各データ項目間で、取得したサイズ及びオフセットを比較する。
【００４２】
また、比較部３０６は、旧データ情報ｉｎｆｏ＿ｏから、第１のデータ項目に従属する各データ項目のサイズ及びオフセットの少なくともいずれかと、第２のデータ項目に従属する各データ項目のサイズ及びオフセットの少なくともいずれかと、を取得してもよい。そして、比較部３０６は、修正前ソースコードｓｒｃ＿ｏにおける第１のデータ項目に従属する各データ項目のサイズ及びオフセットと、修正後ソースコードｓｒｃ＿ｎにおける第１のデータ項目に従属する各データ項目のサイズ及びオフセットとを比較する。さらに、比較部３０６は、修正前ソースコードｓｒｃ＿ｏにおける第２のデータ項目に従属する各データ項目のサイズ及びオフセットと、修正後ソースコードｓｒｃ＿ｎにおける第２のデータ項目に従属する各データ項目のサイズ及びオフセットとを比較する。比較部３０６は、比較結果を、変更情報３１１として生成し、生成した変更情報３１１を記憶部１１０に格納する。そして、比較部３０６は、比較した比較結果が次に示す第１の場合または第２の場合に、対応関係情報１１１を参照して、互いに対応する各データ項目間で、現データ情報ｉｎｆｏ＿ｎから取得した、サイズ及びオフセットを比較してもよい。そして、第１の場合は、比較結果が、修正前ソースコードｓｒｃ＿ｏと修正前ソースコードｓｒｃ＿ｏとの間で、第１のデータ項目の各従属項目のサイズ及びオフセットの少なくともいずれかが異なることを示す場合である。また、第２の場合は、比較結果が、第２のデータ項目の各従属項目のサイズ及びオフセットの少なくともいずれかが異なることを示す場合である。
【００４３】
出力部３０７は、比較部３０６による比較結果を出力する。例えば、出力部３０７は、比較結果が、互いに対応する各データ項目間でサイズ及びオフセットのいずれかが異なることを示す場合、互いに対応する各データ項目のうち、第２のデータ項目に従属するデータ項目を修正すべきである旨を出力してもよい。
【００４４】
また、比較部３０６による比較結果が、互いに対応する各データ項目間でサイズ及びオフセットのいずれかが異なることを示すとする。この場合、出力部３０７は、互いに対応する各データ項目のうち、第２のデータ項目の従属項目を読み出し対象とする命令が修正後ソースコードｓｒｃ＿ｎに含まれるか判断する。そして、出力部３０７は、修正後ソースコードｓｒｃ＿ｎに、その命令が含まれる場合、その命令に関して修正すべきである旨を出力する。ここで、その命令に関して修正すべき旨の例として、出力部３０７は、その命令を修正すべき旨を出力してもよいし、その第２のデータ項目の従属項目の定義を修正するように修正すべき旨を出力してもよい。また、出力部３０７は、出力先として、出力装置２０７に、前述した旨を出力する。
【００４５】
次に、情報処理装置１０１が実行する修正支援処理の動作例を、図４〜図９を用いて説明する。まず、図４〜図６では、修正支援処理で用いる旧データ情報ｉｎｆｏ＿ｏ、現データ情報ｉｎｆｏ＿ｎ、変更情報３１１の生成例を示す。そして、図７〜図９では、旧データ情報ｉｎｆｏ＿ｏ、現データ情報ｉｎｆｏ＿ｎ、変更情報３１１を用いて、修正支援処理として、変更箇所の検出の一例を説明する。
【００４６】
図４は、旧データ情報ｉｎｆｏ＿ｏの生成例を示す説明図である。情報処理装置１０１は、修正前ソースコードｓｒｃ＿ｏを解析し、収集したデータ情報を、旧データ情報ｉｎｆｏ＿ｏとして生成し、保存する。図４では、旧データ情報ｉｎｆｏ＿ｏの一例を示す。
【００４７】
旧データ情報ｉｎｆｏ＿ｏは、名前と、オフセットと、サイズと、というフィールドを含む。旧データ情報ｉｎｆｏ＿ｏの各エントリは、データ項目に関する情報を有する。また、各エントリのうちの一部のエントリは、最上位のデータ項目に従属する従属データ項目に関する情報を有することがある。
【００４８】
名前フィールドには、該当のデータ項目に付与された名前を示す文字列が格納される。ここで、名前が付与されないデータ項目もある。オフセットフィールドには、最上位のデータ項目からの該当のデータ項目のオフセットが格納される。サイズフィールドには、該当のデータ項目のサイズが格納される。
【００４９】
図４で示す旧データ情報ｉｎｆｏ＿ｏは、エントリｅｏ−１〜２３を有する。ここで、各エントリｅｏに付与された符号は、そのエントリｅｏのデータ項目の名前となる「Ｗ＊」の一部となる「＊」の部分である。また、エントリｅｏのデータ項目に名前がない場合には、そのエントリｅｏの符号には、直前のデータ項目の名前の一部分に加えて「−２」を付与する。
【００５０】
図５は、現データ情報ｉｎｆｏ＿ｎの生成例を示す説明図である。情報処理装置１０１は、修正前ソースコードｓｒｃ＿ｏと同様に、修正後ソースコードｓｒｃ＿ｎを解析し、現データ情報ｉｎｆｏ＿ｎとして生成し、保存する。図５では、現データ情報ｉｎｆｏ＿ｎの一例を示す。
【００５１】
現データ情報ｉｎｆｏ＿ｎは、旧データ情報ｉｎｆｏ＿ｏと同一のフィールドを有するため、説明を省略する。また、図５に示す現データ情報ｉｎｆｏ＿ｎは、エントリｅｎ−１〜２３を有する。ここで、エントリｅｎ−１〜２３に付与された符号は、エントリｅｏ−１〜２３に付与された符号と同一のルールで付与されているため、符号の付与のルールの説明を省略する。
【００５２】
図６は、変更情報３１１の生成例を示す説明図である。情報処理装置１０１は、旧データ情報ｉｎｆｏ＿ｏの各データ項目と、現データ情報ｉｎｆｏ＿ｎの各データ項目とを比較して、変更情報３１１を生成する。また、オフセットやサイズに変更がある従属データ項目を有するデータ項目には、従属データ項目が変更したことを示す情報が設定される。
【００５３】
変更情報３１１は、名前と、オフセットと、サイズと、従属項目と、というフィールドを含む。名前フィールドには、旧データ情報ｉｎｆｏ＿ｏや現データ情報ｉｎｆｏ＿ｎの名前フィールドと同一の情報が格納される。オフセットフィールドには、そのデータ項目のオフセットが、旧データ情報ｉｎｆｏ＿ｏと現データ情報ｉｎｆｏ＿ｎとで異なることを示す識別子、または同一であることを示す識別子が格納される。サイズフィールドには、そのデータ項目のサイズが、旧データ情報ｉｎｆｏ＿ｏと現データ情報ｉｎｆｏ＿ｎとで異なることを示す識別子、または同一であることを示す識別子が格納される。従属項目フィールドには、そのデータ項目に従属する従属項目のいずれかのオフセット、またはサイズが、旧データ情報ｉｎｆｏ＿ｏと現データ情報ｉｎｆｏ＿ｎとで異なることを示す識別子、または同一であることを示す識別子が格納される。本実施の形態では、異なることを示す識別子は「○」とし、同一であることを示す識別子は、空の文字列とする。
【００５４】
図６に示す変更情報３１１は、エントリｅｃ−１〜２３を有する。ここで、エントリｅｃ−１〜２３に付与された符号は、エントリｅｏ−１〜２３に付与された符号と同一のルールで付与されているため、符号の付与のルールの説明を省略する。
【００５５】
また、図６では、変更情報３１１の各フィールドの値の理解を助けるため、現データ情報ｉｎｆｏ＿ｎと、旧データ情報ｉｎｆｏ＿ｏとを表示する。図６で表示する現データ情報ｉｎｆｏ＿ｎと、旧データ情報ｉｎｆｏ＿ｏとは、表示の都合上、各エントリの符号を省略する。そして、現データ情報ｉｎｆｏ＿ｎと、旧データ情報ｉｎｆｏ＿ｏとの各エントリのうち、網掛けを付与した箇所が、現データ情報ｉｎｆｏ＿ｎと、旧データ情報ｉｎｆｏ＿ｏとで、変更があった箇所である。例えば、データ項目Ｗ１２１は、サイズが１バイトから２バイトに変更されている。また、データ項目Ｗ１２２は、オフセットが５バイトから６バイトに変更されている。また、エントリｅｃ−１２は、エントリｅｃ−１２のデータ項目の従属項目のオフセットやバイトが変更されているため、従属項目フィールドに「○」が格納される。
【００５６】
次に、旧データ情報ｉｎｆｏ＿ｏ、現データ情報ｉｎｆｏ＿ｎ、変更情報３１１を用いて、変更箇所を検出する例を、図７〜図９を用いて説明する。
【００５７】
図７は、変更箇所検出例を示す説明図（その１）である。情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎの手続き部の解析時に、変更情報３１１を参照し、修正後ソースコードｓｒｃ＿ｎに含まれる各命令の読み出し対象のデータ項目が変更されているか否かを判断する。ここで、読み出し対象のデータ項目が変更されているか否かは、変更情報３１１における読み出し対象のデータ項目のオフセット、サイズ、従属項目の各フィールドのいずれかに「○」が格納されている場合、その読み出し対象のデータ項目が変更されているとする。
【００５８】
図７の例では、修正後ソースコードｓｒｃ＿ｎには、命令７０１として、「ＭＯＶＥ    Ｗ１  ＴＯ    Ｗ２」が含まれる。従って、情報処理装置１０１は、変更情報３１１を参照して、命令７０１の読み出し対象のデータ項目となるデータ項目Ｗ１が変更されているか判断する。エントリｅｃ−１が示すように、データ項目Ｗ１の従属項目フィールドに「○」が格納されているため、情報処理装置１０１は、データ項目Ｗ１が変更されていると判断する。
【００５９】
図８は、変更箇所検出例を示す説明図（その２）である。読み出し対象のデータ項目が変更されている場合、情報処理装置１０１は、変更されている読み出し対象のデータ項目と、書き込み対象のデータ項目とを対応付ける。また、読み出し対象のデータ項目に従属する従属項目がある場合、さらに、情報処理装置１０１は、読み出し対象のデータ項目に従属する各従属項目と、書き込み対象のデータ項目に従属する各従属項目とを対応付ける。具体的には、情報処理装置１０１は、読み出し対象のデータ項目に従属する各従属項目と、その各従属項目のオフセットと同一のオフセットを有する書き込み対象に従属する各従属項目とを対応付ける。対応付けた結果が、図１で示した対応関係情報１１１となる。
【００６０】
図８の例では、中央に示した旧データ情報ｉｎｆｏ＿ｏと、右側に示した旧データ情報ｉｎｆｏ＿ｏとを用いて、対応関係情報１１１の一例を示す。例えば、図８の例では、情報処理装置１０１は、オフセットがともに０である、エントリｅｏ−１が示すデータ項目Ｗ１と、エントリｅｏ−２が示すデータ項目Ｗ２とを対応付ける。同様に、情報処理装置１０１は、オフセットがともに４であるエントリｅｏ−１１−２が示すデータ項目と、エントリｅｏ−２１−２が示すデータ項目とを対応付ける。
【００６１】
図９は、変更箇所検出例を示す説明図（その３）である。情報処理装置１０１は、対応関係情報１１１が示す対応付けたデータ項目同士のオフセットやサイズが、現データ情報ｉｎｆｏ＿ｎで変更していないか比較する。比較した結果、情報処理装置１０１は、オフセット及びサイズが一致するデータ項目を、変更による影響なしと判断し、オフセットまたはサイズが異なるデータ項目を、書き込み側のデータ項目について変更による影響ありと判断する。ここで、オフセットまたはサイズが異なるデータ項目のうち、読み出し対象のデータ項目については、変更による影響なしと判断する。また、情報処理装置１０１は、変更による影響ありと判断した従属項目を有するデータ項目を、従属項目に影響ありと判断する。
【００６２】
情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎに追加した変更の影響フィールドに、判断結果を格納する。ここで、図示及び説明では、説明の簡略化のため、「変更による影響なし」を、単に「影響なし」と記載し、「変更による影響あり」を、単に「影響あり」と記載する。
【００６３】
例えば、情報処理装置１０１は、対応関係情報１１１を参照して、エントリｅｎ−１２１が示すデータ項目Ｗ１２１のサイズ及びオフセットと、エントリｅｎ−２２１が示すデータ項目Ｗ２２１のサイズ及びオフセットとを比較する。この場合、サイズが異なっているため、情報処理装置１０１は、エントリｅｎ−２２１が示すデータ項目Ｗ２２１を、「影響あり」と判断する。また、エントリｅｎ−２が示すデータ項目Ｗ２は、データ項目Ｗ２に従属するデータ項目が影響ありであるため、「従属項目に影響あり」と判断する。
【００６４】
そして、情報処理装置１０１は、影響ありと判断したデータ項目が、修正後ソースコードｓｒｃ＿ｎの読み出し対象になっている場合に、その読み出し対象を有する命令に関して修正すべき旨を出力する。例えば、修正後ソースコードｓｒｃ＿ｎの一部に以下のような記載が含まれていたとする。
【００６５】
…
ＭＯＶＥ  Ｗ１  ＴＯ  Ｗ２
ＩＦ  Ｗ２２２  ＝  ＳＰＡＣＥ  ＴＨＥＮ
…
【００６６】
この場合、データ項目Ｗ２２２は、読み出し対象となっている。そして、情報処理装置１０１は、データ項目Ｗ２２２について、エントリｅｎ−２２２で示すように、「影響あり」と判断したため、上述した「ＩＦ  Ｗ２２２  ＝  ＳＰＡＣＥ  ＴＨＥＮ」命令に関して、修正すべきである旨を出力する。修正後ソースコードｓｒｃ＿ｎを修正する修正者は、出力された旨を閲覧して、「ＩＦ  Ｗ２２２  ＝  ＳＰＡＣＥ  ＴＨＥＮ」命令を修正したり、または、Ｗ２２２の定義を修正したりする。
【００６７】
また、例えば、修正後ソースコードｓｒｃ＿ｎの一部に以下のような記載が含まれていたとする。
【００６８】
…
ＭＯＶＥ  Ｗ１  ＴＯ  Ｗ２
ＩＦ  Ｗ２２３  ＝  ＳＰＡＣＥ  ＴＨＥＮ
…
【００６９】
この場合、データ項目Ｗ２２３は、読み出し対象となっている。しかしながら、情報処理装置１０１は、データ項目Ｗ２２３について、エントリｅｎ−２２３で示すように、「影響なし」と判断したため、特に修正すべき旨を出力しない。これにより、情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎを修正する修正者の作業負担を抑制することができる。
【００７０】
図１０は、本実施の形態における効果の一例を示す説明図である。図１０で示すソースコード１０００は、データ項目の定義において、データ構造の修正として、修正前の状態を示すコード１００１と、修正後の状態を示すコード１００２とを併せて表示する。具体的な修正内容としては、修正後ソースコードｓｒｃ＿ｎを修正する修正者によって、データ項目Ｗ１２１のサイズが、１バイトから２バイトに修正されており、データ項目Ｗ１２３のサイズが１バイトから２バイトに修正されている。
【００７１】
そして、ソースコード１０００内のコード１０１１、１０２１は、手続き部となる。そして、コード１０１１には、「ＭＯＶＥ  Ｗ１  ＴＯ  Ｗ２」という命令１０１２と、「ＩＦ  Ｗ２３  ＝  ＳＰＡＣＥ  ＴＨＥＮ」という命令１０１３とを含む。また、コード１０２１には、「ＭＯＶＥ  Ｗ１  ＴＯ  Ｗ２」という命令１０２２と、「ＩＦ  Ｗ２２２  ＝  ＳＰＡＣＥ  ＴＨＥＮ」という命令１０２３とを含む。
【００７２】
ここで、図６で説明した変更情報３１１を生成する処理だけを行う場合では、命令１０１２、１０２２を指摘することしかできない。しかしながら、命令１０１２、１０２２を出力しただけでは、修正後ソースコードｓｒｃ＿ｎを修正する修正者は、データ構造の修正の影響を判断することができない。例えば、コード１０１１には、変更があったデータ項目を参照する命令がないため、変更による影響がない。具体的には、命令１０１３に含まれるデータ項目Ｗ２３には、変更前後ともデータ項目Ｗ１３の値が格納されるため、変更による影響がない。
【００７３】
そして、本実施の形態では、図７〜図９で示す処理を行うことにより、コード１０２１内の命令１０２３のような、変更前とは異なるデータを参照することになる命令を検出することができる。具体的には、命令１０２３に含まれるデータ項目Ｗ２２２には、変更前ではデータ項目Ｗ１２２の値が格納されるのに対し、変更後ではデータ項目Ｗ１２１の一部の値が格納されるため、変更による影響がある。
【００７４】
次に、情報処理装置１０１が実行する修正支援処理のフローチャートを、図１１〜図１５を用いて説明する。
【００７５】
図１１は、修正支援処理手順の一例を示すフローチャートである。情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎを修正する修正者の操作によって、解析指示を受け付ける（ステップＳ１１０１）。次に、情報処理装置１０１は、修正前ソースコードｓｒｃ＿ｏを受け付けて、受け付けた修正前ソースコードｓｒｃ＿ｏを解析し、旧データ情報ｉｎｆｏ＿ｏを生成する（ステップＳ１１０２）。また、情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎを受け付けて、受け付けた修正後ソースコードｓｒｃ＿ｎを解析し、現データ情報ｉｎｆｏ＿ｎを生成する（ステップＳ１１０３）。
【００７６】
そして、情報処理装置１０１は、変更情報解析処理を実行する（ステップＳ１１０４）。変更情報解析処理は、図１２で説明する。次に、情報処理装置１０１は、手続き解析処理を実行する（ステップＳ１１０５）。手続き解析処理は、図１３〜図１５で説明する。ステップＳ１１０５の処理終了後、情報処理装置１０１は、修正支援処理を終了する。
【００７７】
図１２は、変更情報解析処理手順の一例を示すフローチャートである。情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎの全ての最上位データ項目のうちの未選択の最上位データ項目を選択する（ステップＳ１２０１）。次に、情報処理装置１０１は、選択した最上位データ項目に対応する旧データ情報のデータ項目を探索する（ステップＳ１２０２）。そして、情報処理装置１０１は、選択した最上位データ項目と探索して検出したデータ項目との比較結果に基づいて、選択した最上位データ項目に対応する変更情報を更新する（ステップＳ１２０３）。
【００７８】
次に、情報処理装置１０１は、選択した最上位データ項目に従属する従属項目があるか否かを判断する（ステップＳ１２０４）。選択した最上位データ項目に従属する従属項目がある場合（ステップＳ１２０４：Ｙｅｓ）、情報処理装置１０１は、選択した最上位データ項目に従属する従属項目のうちの末尾のデータ項目を選択する（ステップＳ１２０５）。次に、情報処理装置１０１は、選択したデータ項目に対応する旧データ情報のデータ項目を探索する（ステップＳ１２０６）。そして、情報処理装置１０１は、選択したデータ項目と探索して検出したデータ項目との比較結果に基づいて、選択した項目に対応する変更情報を更新する（ステップＳ１２０７）。
【００７９】
次に、情報処理装置１０１は、選択したデータ項目に従属する従属項目があるか否かを判断する（ステップＳ１２０８）。選択したデータ項目に従属する従属項目がある場合（ステップＳ１２０８：Ｙｅｓ）、情報処理装置１０１は、選択したデータ項目に従属する従属項目の変更情報を調べ、変更があれば、選択したデータ項目の変更情報を「従属項目に変更あり」に設定する（ステップＳ１２０９）。
【００８０】
ステップＳ１２０９の処理終了後、または、選択したデータ項目に従属する従属項目がない場合（ステップＳ１２０８：Ｎｏ）、情報処理装置１０１は、選択した最上位データ項目に従属する従属項目のうち、先頭のデータ項目を選択したか否かを判断する（ステップＳ１２１０）。先頭のデータ項目を選択していない場合（ステップＳ１２１０：Ｎｏ）、情報処理装置１０１は、選択した最上位データ項目に従属する従属項目のうちの一つ前のデータ項目を選択し（ステップＳ１２１１）、ステップＳ１２０６の処理に移行する。
【００８１】
一方、先頭のデータ項目を選択した場合（ステップＳ１２１０：Ｙｅｓ）、または、選択した最上位データ項目に従属する従属項目がない場合（ステップＳ１２０４：Ｎｏ）、情報処理装置１０１は、全ての最上位データ項目を選択したか否かを判断する（ステップＳ１２１２）。まだ選択していない最上位データ項目がある場合（ステップＳ１２１２：Ｎｏ）、情報処理装置１０１は、ステップＳ１２０１の処理に移行する。一方、全ての最上位データ項目を選択した場合（ステップＳ１２１２：Ｙｅｓ）、情報処理装置１０１は、変更情報解析処理を終了する。
【００８２】
図１３は、手続き解析処理手順の一例を示すフローチャート（その１）である。また、図１４は、手続き解析処理手順の一例を示すフローチャート（その２）である。また、図１５は、手続き解析処理手順の一例を示すフローチャート（その３）である。
【００８３】
情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎの手続き部の全ての転記命令のうちのいずれかの転記命令を選択する（ステップＳ１３０１）。次に、情報処理装置１０１は、選択した転記命令の読み出し対象または書き込み対象のデータ項目のいずれかに変更があるか否かを判断する（ステップＳ１３０２）。
【００８４】
選択した転記命令の読み出し対象または書き込み対象のデータ項目のいずれかに変更がある場合（ステップＳ１３０２：Ｙｅｓ）、情報処理装置１０１は、読み出し対象のデータ項目に従属する全てのデータ項目のうち未選択のデータ項目を選択する（ステップＳ１３０３）。次に、情報処理装置１０１は、旧データ情報ｉｎｆｏ＿ｏを参照して、転記命令の読み出し対象となるデータ項目の先頭からの選択したデータ項目のオフセットａ＿ｏｆｆｓｅｔを算出する（ステップＳ１３０４）。そして、情報処理装置１０１は、書き込み対象のデータ項目に従属する全てのデータ項目のうち未選択のデータ項目を選択する（ステップＳ１３０５）。次に、情報処理装置１０１は、旧データ情報を参照して、転記命令の書き込み対象となるデータ項目の先頭からの選択したデータ項目のオフセットｂ＿ｏｆｆｓｅｔを算出する（ステップＳ１３０６）。
【００８５】
そして、情報処理装置１０１は、ａ＿ｏｆｆｓｅｔ＝ｂ＿ｏｆｆｓｅｔか否かを判断する（ステップＳ１３０７）。ａ＿ｏｆｆｓｅｔ＝ｂ＿ｏｆｆｓｅｔでない場合（ステップＳ１３０７：Ｎｏ）、情報処理装置１０１は、書き込み対象となる全てのデータ項目を選択したか否かを判断する（ステップＳ１３０８）。書き込み対象となる全てのデータ項目のうちまだ選択していないデータ項目がある場合（ステップＳ１３０８：Ｎｏ）、情報処理装置１０１は、ステップＳ１３０５の処理に移行する。
【００８６】
一方、書き込み対象となる全てのデータ項目を選択した場合（ステップＳ１３０８：Ｙｅｓ）、情報処理装置１０１は、読み出し対象となる全てのデータ項目を選択したか否かを判断する（ステップＳ１３０９）。読み出し対象となる全てのデータ項目を選択していない場合（ステップＳ１３０９：Ｎｏ）、情報処理装置１０１は、ステップＳ１３０３の処理に移行する。
【００８７】
一方、読み出し対象となる全てのデータ項目を選択した場合（ステップＳ１３０９：Ｙｅｓ）、または、選択した転記命令の読み出し対象及び書き込み対象のデータ項目に変更がない場合（ステップＳ１３０２：Ｎｏ）、情報処理装置１０１は、修正後ソースコードの手続き部の全ての転記命令を選択したか否かを判断する（ステップＳ１３１０）。修正後ソースコードの手続き部の転記命令のうち、まだ選択していない転記命令がある場合（ステップＳ１３１０：Ｎｏ）、情報処理装置１０１は、ステップＳ１３０１の処理に移行する。
【００８８】
ａ＿ｏｆｆｓｅｔ＝ｂ＿ｏｆｆｓｅｔである場合（ステップＳ１３０７：Ｙｅｓ）、情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎを参照して、転記命令の読み出し対象となるデータ項目の先頭からの選択したデータ項目のオフセットａ’＿ｏｆｆｓｅｔを算出する（ステップＳ１４０１）。また、情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎを参照して、選択したデータ項目のサイズａ’＿ｓｉｚｅを取得する（ステップＳ１４０２）。
【００８９】
また、情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎを参照して、転記命令の書き込み対象となるデータ項目の先頭からの選択したデータ項目のオフセットｂ’＿ｏｆｆｓｅｔを算出する（ステップＳ１４０３）。また、情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎを参照して、選択したデータ項目のサイズｂ’＿ｓｉｚｅを取得する（ステップＳ１４０４）。
【００９０】
そして、情報処理装置１０１は、ａ’＿ｏｆｆｓｅｔ＝ｂ’＿ｏｆｆｓｅｔ、かつ、ａ’＿ｓｉｚｅ＝ｂ’＿ｓｉｚｅか否かを判断する（ステップＳ１４０５）。ａ’＿ｏｆｆｓｅｔ＝ｂ’＿ｏｆｆｓｅｔでない、または、ａ’＿ｓｉｚｅ＝ｂ’＿ｓｉｚｅでない場合（ステップＳ１４０５：Ｎｏ）、情報処理装置１０１は、選択したデータ項目のうちの書き込み対象側のデータ項目の変更の影響を、「影響あり」に設定する（ステップＳ１４０６）。
【００９１】
ステップＳ１４０６の処理終了後、または、ａ’＿ｏｆｆｓｅｔ＝ｂ’＿ｏｆｆｓｅｔ、かつ、ａ’＿ｓｉｚｅ＝ｂ’＿ｓｉｚｅである場合（ステップＳ１４０５：Ｙｅｓ）、情報処理装置１０１は、ステップＳ１３０８の処理に移行する。
【００９２】
修正後ソースコードの手続き部の全ての転記命令を選択した場合（ステップＳ１３１０：Ｙｅｓ）、情報処理装置１０１は、修正後ソースコードの手続き部の全ての命令のうちの未選択の命令を選択する（ステップＳ１５０１）。次に、情報処理装置１０１は、選択した命令内の読み出し対象となるデータ項目が、変更の影響を受けるか否かを判断する（ステップＳ１５０２）。変更の影響を受ける場合（ステップＳ１５０２：Ｙｅｓ）、情報処理装置１０１は、選択した命令が、修正すべき命令である旨のメッセージを出力する（ステップＳ１５０３）。
【００９３】
ステップＳ１５０３の処理終了後、または、選択した命令内の読み出し対象となるデータ項目が変更の影響を受けない場合（ステップＳ１５０２：Ｎｏ）、情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎの手続き部の全ての命令を選択したか否かを判断する（ステップＳ１５０４）。修正後ソースコードｓｒｃ＿ｎの手続き部に、まだ選択していない命令がある場合（ステップＳ１５０４：Ｎｏ）、情報処理装置１０１は、ステップＳ１５０１の処理に移行する。一方、修正後ソースコードｓｒｃ＿ｎの全ての命令を選択した場合（ステップＳ１５０４：Ｙｅｓ）、情報処理装置１０１は、手続き解析処理を終了する。
【００９４】
図１６は、手続き解析処理中の旧データ情報ｉｎｆｏ＿ｏ、現データ情報ｉｎｆｏ＿ｎの一例を示す説明図である。図１６では、図１３〜図１５で示した手続き解析処理の理解を助けるための説明を行う。図１６では、情報処理装置１０１が、ステップＳ１３０３の処理において、データ項目Ｗ１２２を選択し、ステップＳ１３０５の処理において、データ項目Ｗ２２２を選択したとする。
【００９５】
この場合、ステップＳ１３０４の処理において、情報処理装置１０１は、旧データ情報ｉｎｆｏ＿ｏを参照して、転記命令の読み出し対象となるデータ項目Ｗ１の先頭からのデータ項目Ｗ１２２のオフセットａ＿ｏｆｆｓｅｔを、５−０＝５と算出する。また、ステップＳ１３０６の処理において、情報処理装置１０１は、転記命令の書き込み対象となるデータ項目Ｗ２の先頭からのデータ項目Ｗ２２２のオフセットｂ＿ｏｆｆｓｅｔを５−０＝５と算出する。従って、ａ＿ｏｆｆｓｅｔ＝ｂ＿ｏｆｆｓｅｔとなるため、情報処理装置１０１は、ステップＳ１３０７：Ｙｅｓと判断する。
【００９６】
次に、ステップＳ１４０１の処理において、情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎを参照して、転記命令の読み出し対象となるデータ項目Ｗ１の先頭からのデータ項目Ｗ１２２のオフセットａ’＿ｏｆｆｓｅｔを、６−０＝６と算出する。また、ステップＳ１４０２の処理において、情報処理装置１０１は、データ項目Ｗ１２２のサイズａ’＿ｓｉｚｅ：１を取得する。同様に、ステップＳ１４０３の処理において、情報処理装置１０１は、現データ情報ｉｎｆｏ＿ｎを参照して、転記命令の書き込み対象となるデータ項目Ｗ２の先頭からのデータ項目Ｗ２２２のオフセットｂ’＿ｏｆｆｓｅｔを５−０＝５と算出する。また、ステップＳ１４０４の処理において、情報処理装置１０１は、データ項目Ｗ２２２のサイズｂ’＿ｓｉｚｅ：１を取得する。従って、ａ’＿ｏｆｆｓｅｔ≠ｂ’＿ｏｆｆｓｅｔとなるため、情報処理装置１０１は、ステップＳ１４０５：Ｎｏと判断し、ステップＳ１４０６の処理として、データ項目Ｗ２２２を「影響あり」に設定する。
【００９７】
以上説明したように、情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎの第１のデータ項目の各従属項目と第２のデータ項目の各従属項目とのサイズとオフセットを取得し、修正前に対応関係にあった各変数間でサイズとオフセットを比較する。これにより、修正者の意図しない読み出し先の変更を特定できて、修正者の作業負担を軽減することができる。
【００９８】
また、情報処理装置１０１は、修正前ソースコードｓｒｃ＿ｏから、第１のデータ項目に従属する各従属項目と、その各従属項目のオフセットと同一のオフセットを有する第２のデータ項目に従属する各従属項目とを対応付けた対応関係情報１１１を生成してもよい。これにより、情報処理装置１０１は、修正者の作業負担を増やさずに、修正によって読み出し先が変化しないと修正者が意図したデータ項目同士を特定することができる。
【００９９】
また、情報処理装置１０１は、互いに対応する各データ項目間でサイズ及びオフセットのいずれかが異なることを示す場合、互いに対応する各データ項目のうち、第２のデータ項目の従属項目を修正すべきである旨を出力してもよい。これにより、第２のデータ項目の従属項目、すなわち、書き込み対象となるデータ項目には、修正によって読み出し先が変化しないと修正者が意図したデータ項目であるのにも関わらず、修正によって修正前とは異なる読み出し先の値が格納されることになる。従って、情報処理装置１０１は、実際に問題となる第２のデータ項目の従属項目だけを修正すべきである旨を出力することにより、第１のデータ項目も出力することに比べて、修正者の作業負担を軽減させることができる。
【０１００】
また、互いに対応する各データ項目間でサイズ及びオフセットのいずれかが異なることを示すとする。この場合、情報処理装置１０１は、互いに対応する各データ項目のうち、第２のデータ項目の従属項目を読み出し対象とする命令が修正後ソースコードｓｒｃ＿ｎに含まれるか判断してもよい。そして、情報処理装置１０１は、その命令が修正後ソースコードｓｒｃ＿ｎに含まれると判断した場合に、その命令に関して修正すべきである旨を出力してもよい。その命令が修正後ソースコードｓｒｃ＿ｎに含まれない場合、その第２のデータ項目の従属項目が使用されていないことを示す。従って、情報処理装置１０１は、その第２のデータ項目の従属項目が使用されていなければ問題ないとして、その第２のデータ項目の従属項目が使用されているときに限り、修正すべきである旨を出力する。これにより、情報処理装置１０１は、修正すべきである旨を出力する機会が減り、修正者の作業負担を軽減させることができる。
【０１０１】
また、情報処理装置１０１は、変更情報３１１を参照して、第１のデータ項目及び第２のデータ項目のオフセット及びサイズの少なくともいずれかが異なる場合に、互いに対応する各データ項目間で、サイズ及びオフセットを比較してもよい。これにより、情報処理装置１０１は、互いに対応する各データ項目間で比較が不要な場合には、比較する処理をしなくてよくなるため、情報処理装置１０１にかかる修正支援処理の負荷を抑制することができる。
【０１０２】
また、情報処理装置１０１は、修正後ソースコードｓｒｃ＿ｎに含まれるデータ項目定義情報と修正前ソースコードｓｒｃ＿ｏに含まれるデータ項目定義情報とが異なる場合に、修正支援処理を実行してもよい。これにより、例えば、修正後ソースコードｓｒｃ＿ｎが、命令情報だけ修正された場合には、本実施の形態における修正支援処理を行わなくてよいため、情報処理装置１０１は、情報処理装置１０１にかかる負荷を抑制することができる。また、Ｃ言語やＣ＋＋言語を解釈するコンパイラでは、ソースコード内に、構造体のメンバの配置制御に使用される「＃ｐｒａｇｍａ  ｐａｃｋ（ｎ）」という特殊な命令を使用できる場合がある。上述した特殊な命令が追加された、削除された、またはｎの値が修正されたという場合に、情報処理装置１０１は、修正支援処理を実行してもよい。また、Ｃ言語やＣ＋＋言語を解釈するコンパイラでは、コンパイルオプションによって構造体メンバの配置を制御できるものがある。従って、コンパイラに与えるコンパイルオプションが記載されたファイル内の上述したコンパイルオプションが修正された場合に、情報処理装置１０１は、修正支援処理を実行してもよい。
【０１０３】
また、情報処理装置１０１は、データ構造変更前と後で参照するデータが変更する命令を指摘できるため、文法チェックだけでは検出できない不具合を検出することができる。また、情報処理装置１０１は、参照するデータが変更しない場合には指摘しないため、データだけに着目した場合より、指摘の精度を向上させることができる。
【０１０４】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１０５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１０６】
（付記１）ソースコードを受け付け、
受け付けた前記ソースコードに含まれる命令情報を解析して、該命令情報に含まれる命令が値の読み出し対象とする第１の変数の識別情報と、該命令が前記値の書き込み対象とする第２の変数の識別情報とを特定し、
前記ソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
前記第１の変数に従属する各変数と、前記第２の変数に従属する各変数との対応関係を示す情報を記憶する記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較し、
比較結果を出力する、
処理をコンピュータに実行させることを特徴とする修正支援プログラム。
【０１０７】
（付記２）前記記憶部は、前記ソースコードの修正前のソースコードに含まれる前記第１の変数に従属する各変数のオフセットと、前記第２の変数に従属する各変数のオフセットとを記憶し、
前記コンピュータに、
前記記憶部を参照して、前記第１の変数に従属する各変数と、当該各変数のオフセットと同一のオフセットを有する前記第２の変数に従属する各変数とを対応付けた対応関係を示す情報を前記記憶部に格納する、処理を実行させ、
前記比較する処理は、
前記記憶部に格納された前記対応関係を示す情報を参照して、対応付けた前記各変数間で、取得した前記サイズ及びオフセットを比較する、
ことを特徴とする付記１に記載の修正支援プログラム。
【０１０８】
（付記３）前記出力する処理は、
前記比較結果が、前記互いに対応する各変数間で前記サイズ及びオフセットのいずれかが異なることを示す場合、前記互いに対応する各変数のうち、前記第２の変数に従属する変数を修正すべきである旨を出力する、
ことを特徴とする付記１または２に記載の修正支援プログラム。
【０１０９】
（付記４）前記出力する処理は、
前記比較結果が、前記互いに対応する各変数間で前記サイズ及びオフセットのいずれかが異なることを示す場合、前記互いに対応する各変数のうち、前記第２の変数に従属する変数を読み出し対象とする命令が前記ソースコードに含まれるか判断し、
前記ソースコードに当該命令が含まれる場合、当該命令に関して修正すべきである旨を出力する、
ことを特徴とする付記１または２に記載の修正支援プログラム。
【０１１０】
（付記５）前記コンピュータに、
前記ソースコードの修正前のソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
取得した前記修正前のソースコードにおける前記第１の変数に従属する各変数のサイズ及びオフセットと、取得した前記ソースコードにおける前記第１の変数に従属する各変数のサイズ及びオフセットとを比較するとともに、取得した前記修正前のソースコードにおける前記第２の変数に従属する各変数のサイズ及びオフセットと、取得した前記ソースコードにおける前記第２の変数に従属する各変数のサイズ及びオフセットとを比較する、処理を実行させ、
前記サイズ及びオフセットを比較する処理は、
比較した比較結果が、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかが異なる、または、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかが異なることを示す場合、前記記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較する、
ことを特徴とする付記１〜４のいずれか一つに記載の修正支援プログラム。
【０１１１】
（付記６）前記コンピュータに、
前記ソースコードに含まれる変数定義情報と、前記ソースコードの修正前のソースコードに含まれる変数定義情報とを比較し、
前記ソースコードに含まれる変数定義情報と前記修正前のソースコードに含まれる変数定義情報とが異なる場合、前記コンピュータに前記特定する処理を実行させる、
ことを特徴とする付記１〜５のいずれか一つに記載の修正支援プログラム。
【０１１２】
（付記７）ソースコードを受け付け、
受け付けた前記ソースコードに含まれる命令情報を解析して、該命令情報に含まれる命令が値の読み出し対象とする第１の変数の識別情報と、該命令が前記値の書き込み対象とする第２の変数の識別情報とを特定し、
前記ソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
前記第１の変数に従属する各変数と、前記第２の変数に従属する各変数との対応関係を示す情報を記憶する記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較し、
比較結果を出力する、
制御部を有することを情報処理装置。
【０１１３】
（付記８）ソースコードを受け付け、
受け付けた前記ソースコードに含まれる命令情報を解析して、該命令情報に含まれる命令が値の読み出し対象とする第１の変数の識別情報と、該命令が前記値の書き込み対象とする第２の変数の識別情報とを特定し、
前記ソースコードに含まれる変数定義情報を解析して、前記第１の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、前記第２の変数に従属する各変数のサイズ及びオフセットの少なくともいずれかと、を取得し、
前記第１の変数に従属する各変数と、前記第２の変数に従属する各変数との対応関係を示す情報を記憶する記憶部を参照して、互いに対応する各変数間で、取得した前記サイズ及びオフセットを比較し、
比較結果を出力する、
処理をコンピュータが実行することを特徴とする修正支援方法。
【符号の説明】
【０１１４】
ｉｎｆｏ＿ｎ  現データ情報
ｓｒｃ＿ｎ  修正後ソースコード
ｉｎｆｏ＿ｏ  旧データ情報
ｓｒｃ＿ｏ  修正前ソースコード
１０１  情報処理装置
１１０  記憶部
１１１  対応関係情報
３００  制御部
３０１  受け付け部
３０２  解析部
３０３  特定部
３０４  取得部
３０５  格納部
３０６  比較部
３０７  出力部
３１１  変更情報
【図１】
2018063497.tif 000003
【図２】
2018063497.tif 000004
【図３】
2018063497.tif 000005
【図４】
2018063497.tif 000006
【図５】
2018063497.tif 000007
【図６】
2018063497.tif 000008
【図７】
2018063497.tif 000009
【図８】
2018063497.tif 000010
【図９】
2018063497.tif 000011
【図１０】
2018063497.tif 000012
【図１１】
2018063497.tif 000013
【図１２】
2018063497.tif 000014
【図１３】
2018063497.tif 000015
【図１４】
2018063497.tif 000016
【図１５】
2018063497.tif 000017
【図１６】
2018063497.tif 000018