(57)【特許請求の範囲】
【請求項１】
プログラムの改造を支援するプログラム改造支援装置のプログラム改造支援方法であって、
前記プログラム改造支援装置が、
改造前の前記プログラムのソースコードである改造前ソースコードにおける命令を、コンパイラの機能によって出力される中間語命令に変換して改造前構造データを生成し、
入力部を介して、入力された、改造予定箇所に関する情報である改造予定データと、前記改造前構造データとに基づいて、予定されている改造が行われる箇所に関する情報を有している予測データを、前記中間語命令を用いて生成し、
改造後の前記プログラムのソースコードである改造後ソースコードに基づく改造場所特定データを、前記中間語命令を用いて生成し、
前記予測データにおける前記改造が行われる箇所に関する情報と、前記改造場所特定データにより特定される前記改造の場所と、を比較し、不一致箇所が検出された場合、前記不一致箇所が検出された旨を表示部に表示させる
ことを特徴とするプログラム改造支援方法。
【請求項２】
プログラムの改造を支援するプログラム改造支援装置のプログラム改造支援方法であって、
前記プログラム改造支援装置が、
入力部を介して、予定されている改造に関する仕様書の情報が入力され、
前記入力された仕様書に関する情報が、改造予定箇所に関する情報である改造予定デー
タに反映され、
前記改造予定データに関する情報を、前記改造予定データに基づいて、予定されている改造が行われる箇所に関する情報を有している予測データにひも付け、
改造後の前記プログラムのソースコードである改造後ソースコードに基づく改造場所特定データを生成し、
前記予測データにおける前記改造が行われる箇所に関する情報と、前記改造場所特定データにより特定される前記改造の場所と、を比較し、不一致箇所が検出された場合、前記予測データを基に、前記不一致箇所に関する情報を含む前記改造予定データの仕様書に関する情報を表示部に表示させる
ことを特徴とするプログラム改造支援方法。
【請求項３】
プログラムの改造を支援するプログラム改造支援装置のプログラム改造支援方法であって、
前記プログラム改造支援装置が、
改造前の前記プログラムのソースコードである改造前ソースコードにおける命令を、コンパイラの機能によって出力される中間語命令に変換して改造前構造データを生成し、
改造後の前記プログラムのソースコードである改造後ソースコードにおける命令を、前記中間語命令に変換して改造後構造データを生成し、
改造予定箇所に関する情報である改造予定データに基づいて、予定されている改造が行われる箇所に関する情報を有している予測データを生成し、
前記改造前構造データと、前記改造後構造データと、を比較し、不一致が検出された箇所をマーキングし、
前記マーキングの情報を、前記改造後ソースコードに基づく改造場所特定データに格納することで、前記改造場所特定データを生成し、
前記予測データにおける前記改造が行われる箇所に関する情報と、前記改造場所特定データにおけるマーキングの情報と、を比較し、不一致箇所が検出された場合、前記不一致箇所が検出された旨を表示部に表示させる
ことを特徴とするプログラム改造支援方法。
【請求項４】
プログラムの改造を支援するプログラム改造支援装置であって、
改造前の前記プログラムのソースコードである改造前ソースコードにおける命令を、コンパイラの機能によって出力される中間語命令に変換して改造前構造データを生成する構造解析部と、
入力部を介して、入力された、改造予定箇所に関する情報である改造予定データと、前記改造前構造データとに基づいて、予定されている改造が行われる箇所に関する情報を有している予測データを、前記中間語命令を用いて生成する改造予定再現部と、
改造後の前記プログラムのソースコードである改造後ソースコードに基づく改造場所特定データを、前記中間語命令を用いて生成する改造場所特定部と、
前記予測データにおける前記改造が行われる箇所に関する情報と、前記改造場所特定データにより特定される前記改造の場所と、を比較し、不一致箇所が検出された場合、前記不一致箇所が検出された旨を表示部に表示させる改造内容検証部と、
を有することを特徴とするプログラム改造支援装置。
【請求項５】
プログラムの改造を支援するプログラム改造支援装置であって、
入力部を介して、予定されている改造に関する仕様書の情報が入力され、前記入力された仕様書に関する情報を、改造予定箇所に関する情報である改造予定データに反映する改造予定登録部と、
前記改造予定データに関する情報を、前記改造予定データに基づいて、予定されている改造が行われる箇所に関する情報を有している予測データにひも付ける改造予定再現部と、
改造後の前記プログラムのソースコードである改造後ソースコードに基づく改造場所特定データを生成する改造場所特定部と、
前記予測データにおける前記改造が行われる箇所に関する情報と、前記改造場所特定データにより特定される前記改造の場所と、を比較し、不一致箇所が検出された場合、前記予測データを基に、前記不一致箇所に関する情報を含む前記改造予定データの仕様書に関する情報を表示部に表示させる改造内容検証部と、
を有することを特徴とするプログラム改造支援装置。
【請求項６】
プログラムの改造を支援するプログラム改造支援装置であって、
改造前の前記プログラムのソースコードである改造前ソースコードにおける命令を、コンパイラの機能によって出力される中間語命令に変換して改造前構造データを生成し、改造後の前記プログラムのソースコードである改造後ソースコードにおける命令を、前記中間語命令に変換して改造後構造データを生成する構造解析部と、
改造予定箇所に関する情報である改造予定データに基づいて、予定されている改造が行われる箇所に関する情報を有している予測データを生成する改造予定再現部と、
前記改造前構造データと、前記改造後構造データと、を比較し、不一致が検出された箇所をマーキングし、前記マーキングの情報を、前記改造後ソースコードに基づく改造場所特定データに格納することで、前記改造場所特定データを生成する改造場所特定部と、
前記予測データにおける前記改造が行われる箇所に関する情報と、前記改造場所特定データにおけるマーキングの情報と、を比較し、不一致箇所が検出された場合、前記不一致箇所が検出された旨を表示部に表示させる改造内容検証部と、
を有することを特徴とするプログラム改造支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム改造支援方法およびプログラム改造支援装置の技術に関する。
【背景技術】
【０００２】
一般的なソフトウェア開発では、あるプログラムのソースコードに対して、変更・修正など改造の要求があった場合、まず、設計段階で、どのような改造を行うかをプログラミング担当者が調査、検討し、改造方法を仕様書にまとめる。
次の実装段階で、プログラミング担当者が、この仕様書を基に実装方針を決定し、実装方針を基にソースコードに対して改造を行う。
最後のレビュー段階で、レビュー担当者がソースコードに対して行われた改造について妥当性の検証を行う。
【０００３】
このとき、プログラミング担当者が仕様書の記載内容に沿って正しく実装方針を決定しても、改造漏れや誤った場所への改造など、実装方針と異なる改造を行う可能性がある。つまり、仕様書の内容とは異なる改造を行う可能性がある。さらに、レビュー段階においても、改造場所が広範囲にわたっている場合、レビュー担当者が前記の誤った改造を見落とす可能性もある。
そこで、ソースコードに対して行われた改造について妥当性を検査する仕組みが必要とされている。
【０００４】
例えば、特許文献１には、ソースコードとプログラム仕様書との整合性を詳細にかつ機械的に検査できるプログラム仕様整合検査装置が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−３０４４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の装置では、ソースコードと、検査の基となる仕様書とを関連付けるために、装置上で仕様書を作成する必要がある。このため、改造場所の特定や改造内容の検証において、装置上で作成した仕様書が新たに必要となる。
また、特許文献１に記載の装置では、実際のコーディングと同じレベルの詳細な記述のある仕様書が必要になる。このため、仕様書作成時に詳細なコーディングの内容が確定していない場合は利用できないという問題がある。
【０００７】
そこで、本発明は、新たな仕様書を装置上で作成しなくてもよいプログラム改造支援方法およびプログラム改造支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記課題を解決するため、本発明は、プログラムの改造を支援するプログラム改造支援装置のプログラム改造支援方法であって、前記プログラム改造支援装置が、改造予定箇所に関する情報である改造予定データに基づいて、予定されている改造が行われる箇所に関する情報を有している予測データを生成し、改造後の前記プログラムのソースコードである改造後ソースコードに基づく改造後データを生成し、前記予測データと、前記改造後データを比較し、不一致箇所が検出された場合、不一致箇所が検出された旨を表示部に表示させることを特徴とする。
その他の解決手段については、実施形態中で適宜説明する。
【発明の効果】
【０００９】
本発明によれば、新たな仕様書を装置上で作成しなくてもよいプログラム改造支援方法およびプログラム改造支援装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施形態に係るプログラム改造支援装置の構成例を示す図である。
【図２】本実施形態に係るプログラム改造支援処理における全体処理の手順を示すフローチャートである。
【図３】本実施形態に係るソースコード例と、構造データ例を示す図である。
【図４】構造解析部における構造解析処理の手順を示すフローチャートである。
【図５】中間語命令への変換の一例を示す図である（Ｃ言語の例）。
【図６】本実施形態に係る改造場所入力画面の例を示す図である。
【図７】本実施形態に係る改造情報入力画面の例を示す図である。
【図８】本実施形態に係る改造予定データの例を示す図である。
【図９】本実施形態に係る予測構造データの例を示す図である。
【図１０】本実施形態に係る改造場所特定処理の手順を示すフローチャートである。
【図１１】改造内容の判定方法の例を説明するための図である。
【図１２】改造場所特定処理結果の例を示す図である。
【図１３】本実施形態に係る改造内容検証処理の手順を示すフローチャートである。
【図１４】改造内容検証処理における判定パターンの例を示す例である。
【図１５】改造内容検証部によって表示部に表示される検証結果表示画面の例を示す図である。
【発明を実施するための形態】
【００１１】
次に、本発明を実施するための形態（「実施形態」という）について、適宜図面を参照しながら詳細に説明する。
【００１２】
［装置構成］
図１は本実施形態に係るプログラム改造支援装置の構成例を示す図である。
プログラム改造支援装置１は、改造予定登録処理部１０、構造解析部３０、改造内容検証処理部２０、入力部４０、表示部５０、を有する。
入力部４０は、キーボードや、マウスなどの入力装置である。
表示部５０は、ディスプレイなどの表示装置である。
構造解析部３０は、一般的なコンパイラの機能の一部によって実現されるものであり、ソースコードを解析して後記する構造データを出力する。
【００１３】
改造予定登録処理部１０は、ソースコードにおいて改造を行う予定の箇所を改造予定データ８００として登録する改造予定登録部１１と、さらに改造予定データ８００から予定されている改造が行われたときの構造データを予測して、予測構造データ（予測データ）９００を生成する改造予定再現部１２とを有している。
改造予定登録部１１は、ユーザが入力部４０を介して入力した改造対象となるプログラムのソースコード（改造前ソースコード１０１）、同じくユーザが入力部４０を介して入力した、予定されている改造内容に関する情報である改造入力データ１０３を基に、データとして保存したものが改造予定データ８００である。
正確には、（１）改造前構造データ１０４を基に改造予定登録部１１は表示部５０に改造場所入力画面６００のフローチャート表示エリア６０２（またはソースコード表示エリア６０１）（図６）を表示する。（２）ユーザは、改造場所入力画面６００のフローチャート表示エリア６０２（またはソースコード表示エリア６０１）を見て、入力部４０を介して改造入力データ１０３を入力する。（３）改造予定登録部１１は改造入力データ１０３を基とする改造予定データ８００を保存する。なお、この手順は、後記して詳細に説明する。
なお、本実施形態では図６で後記する改造場所入力画面６００のソースコード表示エリア６０１や、フローチャート表示エリア６０２を見たユーザが入力部４０を介して改造入力データ１０３を入力しているが、改造入力データ１０３を得る方法が他にあれば、必ずしも改造前構造データ１０４を基にソースコード表示エリア６０１や、フローチャート表示エリア６０２を表示する必要はない。あるいは、ソースコード表示エリア６０１のみを表示するようにしてもよい。
改造前構造データ１０４とは、改造前ソースコード１０１に対し、後記する構造解析処理を行うことで生成される構造データである。改造予定データ８００、構造データについては後記して説明する。
【００１４】
改造予定再現部１２は、改造予定登録部１１が生成した改造予定データ８００と、改造前構造データ１０４に基づいて、予定されている改造が行われたときの構造データを予測した情報である予測構造データ９００を生成する。
【００１５】
改造内容検証処理部２０は、改造後ソースコード１０２において、予定に従った改造がなされているか否かを検証するものであり、改造場所特定部(改造後データ生成部）２１と、改造内容検証部２２とを有する。
改造場所特定部２１は、改造後ソースコード１０２から構造解析部３０が解析した結果である改造前構造データ１０４と、改造後構造データ１０５とから、実際にどこが改造されたのかを特定し、その情報を改造場所特定データ（改造後データ）１１００として出力する。
改造内容検証部２２は、改造場所特定データ１１００と、予測構造データ９００とを基に、予定に従って改造が行われているか否かを検証し、その結果である検証結果データ１０６を表示部５０に表示させる。
なお、図１において表示部５０は検証結果データ１０６のみを表示しているようにみえるが、改造入力データ１０３や、予測構造データ９００なども適宜表示する。
【００１６】
なお、改造予定登録処理部１０、改造内容検証処理部２０、構造解析部３０、および各部１１，１２，２１，２２は、ＲＯＭ（Read Only Memory）や、ＨＤＤ（Hard Disk Drive）に格納されたプログラムが、ＲＡＭ（Random Access Memory）に展開され、ＣＰＵ（Central Processing Unit）によって実行されることによって具現化する。
【００１７】
［全体処理］
図２は、本実施形態に係るプログラム改造支援処理における全体処理の手順を示すフローチャートである（適宜、図１参照）。
まず、プログラミング担当者などのユーザが端末などを使用して改造前ソースコード１０１を入手する（Ｓ１）。なお、ステップＳ１およびステップＳ３ａは、ユーザによる処理であるため、破線四角で処理を示してある。
次に、ユーザは作成した改造前ソースコード１０１をプログラム改造支援装置１に入力し、プログラム改造支援装置１の構造解析部３０が改造前ソースコード１０１の構造解析処理を行い（Ｓ２）、改造前構造データ１０４を出力する。構造解析処理については、図３〜図５を参照して後記する。
なお、過去に他の誰かが作成したソースコードを改造前ソースコード１０１としてもよいし、自分で昔に作成したソースコードを改造前ソースコード１０１としてもよい。また、ステップＳ１と、ステップＳ２では、処理を行うユーザが異なっていてもよい。
そして、ユーザが端末などを使用して改造後ソースコード１０２を作成する（Ｓ３ａ）。
次に、ユーザは作成した改造後ソースコード１０２をプログラム改造支援装置１に入力し、プログラム改造支援装置１の構造解析部３０が改造後ソースコード１０２の構造解析処理を行い（Ｓ４ａ）、改造後構造データ１０５を出力する。構造解析処理については、図３〜図５を参照して後記する。
【００１８】
一方、ユーザが改造を行う予定の箇所や、改造内容などをプログラム改造支援装置１に入力することによって改造予定登録処理が行われ（Ｓ３ｂ）、プログラム改造支援装置１の改造予定再現部１２は、改造予定登録処理の結果、生成される改造予定データ８００を基に、予定される改造が行われた結果、生成予測される構造データである予測構造データ９００を生成する改造予定再現処理を行う（Ｓ４ｂ）。
改造予定登録処理については図６〜図８を参照して後記し、改造予定再現処理については図９を参照して後記する。
なお、ステップＳ３ａ〜Ｓ４ａと、ステップＳ３ｂ〜Ｓ４ｂはどちらが先に行われてもよいし、並列に作業が行われてもよい。
【００１９】
そして、プログラム改造支援装置１の改造場所特定部２１は改造前構造データ１０４と、改造後構造データ１０５とを比較することによって、実際に改造が行われた箇所を特定する改造場所特定処理を行う（Ｓ５）。改造場所特定処理は図１０および図１２を参照して後記する。
続いて、プログラム改造支援装置１の改造内容検証部２２は実際に行われた改造が、予定に従った改造であったか否かを検証する改造内容検証処理を行う（Ｓ６）。
改造内容検証処理は図１３〜図１５を参照して後記する。
【００２０】
［構造解析処理］
次に、図３〜図５を参照して、本実施形態に関する構造解析処理（図２のステップＳ２，４ａ）の説明を、適宜図１を参照しつつ行う。なお、前記したように構造解析処理は一般的なコンパイラを使用して行うことを想定しているが、専用のプログラムを用意してもよい。以降、ソースコード上の命令を適宜「命令」と記載することとする。
【００２１】
（ソースコード例および構造データ例）
図３は、本実施形態に係るソースコード例と、構造データ例を示す図であり、図３（ａ）がソースコード例、図３（ｂ）が図３（ａ）のソースコード例に対応する構造データ例、図３（ｃ）が中間語命令の例を示している。なお、ソースコードとしては、Ｃ言語を想定しているが、他のプログラミング言語でも適用可能である。また、ここで示すソースコードとは、改造前ソースコード１０１、改造後ソースコード１０２の両方を指している。
この構造データは、図４で後記する構造解析処理の結果、生成されるものである。
【００２２】
図３（ａ）に示すように、（Ｃ言語で記述された）ソースコード３０１には、１つ以上の関数３０３が含まれている。関数３０３とは、一連の命令を１つにまとめたものであり、他のプログラム言語ではプロシージャ、または手続きなどと呼ばれている。
ソースコード３０１では、関数３０３が１つの関数である。また、関数３０３には、代入演算３０４、比較演算３０５、分岐命令３０６、四則演算３０７などの命令が含まれている。
【００２３】
これに対し、図３（ｂ）に示す構造データ３０２は、ソースコードのファイル名３０８と、１つ以上の関数情報３０９で構成されている（図３（ｂ）の例では１つ）。関数情報３０９とはソースコードに含まれる関数３０３に関する情報を１つにまとめたもので、関数３０３に対して関数情報３０９が１つ生成される。
【００２４】
関数情報３０９は１つ以上の基本ブロック３１０，３１１，３１３で構成されている。基本ブロック３１０，３１１，３１３とは、ソースコード３０１におけるプログラム処理の流れにおいて、処理の流れが分岐しない一連の命令の集合である。ソースコード３０１における代入演算３０４から分岐命令３０６までが、構造データ３０２の基本ブロック３１０に対応している。また、ソースコード３０１における四則演算３０７および代入演算３２２が、基本ブロック３１１に対応している。さらに、ソースコード３０１における代入演算３１２が、の基本ブロック３１３に対応している。
【００２５】
さらに、基本ブロックは、１つ以上の中間語命令３１４と基本ブロックの識別子３１５、この基本ブロックの直前および直後に処理が行われる基本ブロックの識別子３１６などから構成されている。
中間語命令とは、ソースコード３０１に含まれる命令を、構造データ３０２上で表現するための命令であり、一般的にはコンパイルによって出力される。
【００２６】
図３（ｃ）に示すように、中間語命令には、ソースコード上の命令の種類をあらわす名前３１７、ソースコード上の命令が使用する変数または値３１８、ソースコード上の命令の位置３１９で構成する。ちなみに、図３（ｃ）は、図３（ａ)の命令３０４「ａ＝０；」に対応する中間語命令３１４であり、基本ブロック３１０の中間語命令３１４でもある。中間語命令３１４は、「１０行２列目」の「ａ」という変数に「０」をコピーすることを示している。
また、Ｃ言語では、ソースコード３０１の四則演算３０７のように、加算の処理と、その結果を代入するという複数の処理が同時に記述されている場合がある。このように、複数の処理が同時に記載されている場合、中間語命令は、加算の処理を表す中間語命令３２０と代入の処理を表す中間語命令３２１のように、処理ごとに中間語命令を分離して表現する。
【００２７】
（構造解析処理のフローチャート）
図４は、構造解析部における構造解析処理の手順を示すフローチャートである。なお、構造解析部３０は、既存のコンパイラの機能の一部をなすものであり、図４の処理も既存のコンパイラに備えられている処理であるため、その処理内容の説明は簡潔なものとする。また、構造解析処理は、改造前ソースコード１０１および改造後ソースコード１０２のそれぞれに対して行われる処理である。なお、図４の処理において、ソースコードとは、改造前ソースコード１０１か、あるいは改造後ソースコード１０２であることを示すものとする。
【００２８】
まず、構造解析部３０はソースコードに記述されている文字列に対して、字句解析を行う（Ｓ１０１）。ここで、構造解析部３０は、ソースコードにおける文字列をプログラム言語で定義しているキーワードや、識別子、演算子、変数や関数の名前など、プログラム言語の最小構成要素であるトークンという単位に分割する。トークンの分割は、ソースコードがＣ言語であれば、例えばセミコロンなどを単位として分割する。
次に、構造解析部３０は、ステップＳ１０１の字句解析で生成したトークンの列に対して、構文解析を行う（Ｓ１０２）。ここで、構造解析部３０はソースコードのプログラム言語の文法に則り、トークンの列がどのような計算式を構成しているか、また、１つの関数の範囲はどこまでか、など、トークンの列の構造について解析を行う。また、このとき、トークンの列がプログラム言語の文法に則っているか否かの検証を行う。具体的には、例えば、Ｃ言語であれば、最初の中括弧から、この中括弧に対応する中括弧までを１つの関数として認識するなどの解析を行う。
【００２９】
そして、構造解析部３０は、ステップＳ１０２の構文解析の結果を元に、意味解析を行う（Ｓ１０３）。ここで、構造解析部３０は、関数や変数がどのような名称を使用しているか、変数がどのような型を持つか、分岐命令がどの点まで分岐しているかなどについて解析を行う。また、このときも、構造解析部３０は関数や変数がプログラム言語の文法に則っているか否かの検証を行う。
続いて、構造解析部３０は、ステップＳ１０３の意味解析の結果を元に、ソースコードにおける関数の開始点と終了点を取得し、関数情報生成を行う（Ｓ１０４）。ここで、構造解析部３０は、関数情報として、関数名のみを関数情報に登録し、この関数における以降の処理で基本ブロックや中間語命令を追加する。
【００３０】
次に、構造解析部３０は、ソースコードにおける関数の内部を検証し、ソースコードに含まれている命令や処理を、対応する中間語命令へ変換する中間後命令変換を行う（Ｓ１０５）。
そして、構造解析部３０は、ステップＳ１０５で抽出した中間語命令を検証し、基本ブロックの生成が必要か否かの判定を行う（Ｓ１０６）。基本ブロックの生成が必要な場合とは、例えば、ステップＳ１０５で変換された中間語命令が、関数の先頭に位置する場合とか、分岐命令の後に続いている場合などである。
ステップＳ１０６の結果、基本ブロックの生成が必要な場合（Ｓ１０６→Ｙｅｓ）、構造解析部３０は、図３で説明した基本ブロックの定義に従って基本ブロックを生成し（Ｓ１０７）、ステップＳ１０９へ処理を進める。
【００３１】
ステップＳ１０６の結果、基本ブロックの生成が不要な場合（Ｓ１０６→Ｎｏ）、構造解析部３０は、中間語命令変換で生成した中間語命令を、処理対象となっている基本ブロックの末尾に挿入する（Ｓ１０８）。
そして、構造解析部３０は、処理対象となっている関数内におけるすべての命令を解析したか否かを判定する（Ｓ１０９）。
ステップＳ１０９の結果、処理対象となっている関数内において、解析されていない命令が存在する場合（Ｓ１０９→Ｎｏ）、構造解析部３０はステップＳ１０３へ処理を戻し、次の命令について解析を行う。
ステップＳ１０９の結果、処理対象となっている関数内におけるすべての命令を解析している場合（Ｓ１０９→Ｙｅｓ）、構造解析部３０は、ソースコードにおけるすべての関数について解析を終了したか否かを判定する（Ｓ１１０）。
ステップＳ１１０の結果、ソースコードにおいて、解析されていない関数が存在する場合（Ｓ１１０→Ｎｏ）、構造解析部３０はステップＳ１０３へ処理を戻し、次の関数について解析を行う。
ステップＳ１１０の結果、すべての関数について解析を終了している場合（Ｓ１１０→Ｙｅｓ）、構造解析部３０は構造解析処理を終了する。
【００３２】
構造解析部３０が、図４の処理を改造前ソースコード１０１および改造後ソースコード１０２のそれぞれについて行うことにより、プログラム改造支援装置１は改造前構造データ１０４および改造後構造データ１０５のそれぞれを生成する。
【００３３】
（中間語命令への変換例）
図５は中間語命令への変換の一例を示す図である（Ｃ言語の例）。図５において、左側の欄がソースコードにおける命令であり、右側の欄が対応する中間語命令を示している。
例えば、符号５０１に示すような代入命令の場合、対応する中間語命令は符号５０２のようになる。
また、符号５０３に示すような計算結果をある変数に代入する加算命令の場合、対応する中間語命令は、符号５０４のような加算を示す中間語命令と、符号５０５のような変数への代入を示す中間語命令の２つに分割される。
符号５０６に示すような分岐命令の場合、対応する中間語命令は、符号５０７のような条件を判定する処理を示す中間語命令と、符号５０８のような条件にしたがって分岐する処理を示す中間語命令の２つに分割される。
符号５０９のような条件に従って同じ処理を繰り返し実施するループ命令の場合、対応する中間語命令は、符号５１０のような条件判定処理の中間語命令と、符号５１１のような条件に従って分岐する処理の中間語命令と、符号５１２のようなループ内の処理の終端から、ループの開始まで戻るための分岐命令を示す中間語命令の３つに分割されることになる。
【００３４】
以上、図３〜図５で説明したように構造解析部３０は、ソースコードを中間語命令の形に変換した構造データを生成することによって、ユーザごとに異なるコーディング方法の差異を吸収し、正規化できる。なお、コーディングとは（プログラミング言語の文法に則って）プログラムを記述することである。
また、このようにすることで、コメントなど、プログラムの処理に直接関連のない部分の除去もできる。従って、ソースコードを中間語命令の形に変換することによって、これ以降の処理で、より正確に、改造前ソースコード１０１と改造後ソースコード１０２の検証が行えるようになる。
構造解析部３０は、図４のステップＳ１０５における中間語命令変換処理（図２のステップＳ３ｂ）において、図５のような変換規則に従ってソースコードの命令を中間語命令へと変換する。
【００３５】
［改造予定登録処理］
次に、図６〜図８を参照して、本実施形態に係る改造予定登録処理の説明を、適宜図１を参照しつつ行う。
（改造場所入力画面）
図６は、本実施形態に係る改造場所入力画面の例を示す図である。
改造場所入力画面６００は、ソースコード表示エリア６０１と、フローチャート表示エリア６０２とを有している。
ソースコード表示エリア６０１には、改造前ソースコード１０１が表示されており、フローチャート表示エリア６０２にはソースコード表示エリア６０１に表示されているソースコードに対応するフローチャートが表示されている。なお、フローチャート表示エリア６０２に表示されているフローチャートは、プログラム改造支援装置１によって自動的に生成されるものであるが周知の技術であるのでフローチャート生成処理の説明は省略する。また、フローチャート表示エリア６０２は省略可能である。
【００３６】
ユーザはマウス操作などによる入力部４０の操作によって、改造前ソースコード１０１に対して改造が行われる場所の入力を行う。例えば、命令６０３を書き換える場合、ユーザは命令６０３の行を選択する。また、命令６０３および命令６０４を書き換える場合、ユーザは命令６０３と命令６０４の行を選択する。また、命令６０３と命令６０４の間に新たに命令を加える場合、ユーザは命令６０３と命令６０４の間をクリックするなどの操作を行う。
なお、このときユーザによる入力を受け付ける画面は、ソースコード表示エリア６０１およびフローチャート表示エリア６０２のどちらでも可能とする。フローチャート表示エリア６０２で行う場合は、フローチャートにおける各処理について、ソースコード表示エリア６０１における処理と同様の処理を行えばよい。
また、ウィンドウの表示は、図６のようなソースコード表示エリア６０１およびフローチャート表示エリア６０２を同時に表示する形式に限らず、ソースコード表示エリア６０１や、フローチャート表示エリア６０２をそれぞれ、あるいはどちらか一方のみを独立に表示するようにしてもよい。
さらに、実装上必要であれば、その他の情報を表示するウィンドウも表示してもよい。
改造場所入力画面６００による入力を受け付けると、改造予定登録処理部１０は、図７に示す改造情報入力画面を表示する。
【００３７】
（改造情報入力画面）
図７は、本実施形態に係る改造情報入力画面の例を示す図である。
改造情報入力画面７００は、ソースコードの改造予定に関する詳細な情報の入力を受け付けるための画面である。
改造情報入力画面７００は、改造が行われる場所を表示する改造場所表示エリア７０１、改造の内容の入力を受け付ける改造内容入力エリア７０２、改造内容の概要の入力を受け付ける概要入力エリア７０３、改造の根拠となる仕様書の記述箇所の入力を受け付ける仕様書情報入力エリア７０４を有する。
なお、図７に示す改造情報入力画面７００は表示の一例であり、実装上必要であれば、上記以外の情報の入力を受け付ける領域を表示してもよい。また、各領域の配置場所も、必ずしも改造情報入力画面７００と同じである必要はなく、すべての領域を同時に表示する必要もない。
【００３８】
改造場所表示エリア７０１には、図６の改造場所入力画面６００で選択された命令の場所に関する情報が表示される。改造場所表示エリア７０１には、ファイル名およびラインが表示され、このうち、ラインには図６の改造場所入力画面６００で選択された命令の、ソースコードにおける行番号が表示される。ファイル名、およびラインは、入力部４０を介して変更可能となっている。
図７に示すように、改造内容入力エリア７０２は、「削除」、「上書」、「追加」などが選択可能となっており、これらの改造内容の選択を受け付けられるようになっている。より詳細な情報を入力する場合、ユーザは概要入力エリア７０３に詳細な情報を入力する。
概要入力エリア７０３には、ユーザによって入力部４０を介して入力される情報であり、予定されている改造の詳細な情報が入力される。概要入力エリア７０３は省略可能である。
【００３９】
仕様書情報入力エリア７０４は、ユーザによって入力部４０を介して入力される情報であり、この改造に関連する仕様書の参照ページなどの情報である。ここで、「仕様書」とは、改造前ソースコート１０１作成時の仕様書でもよく、改造内容を記した仕様書（本実施形態では必須としない）でもよい。本実施形態では、改造前ソースコード作成時の仕様書を参照することはあるが、新たな仕様書などを作成する必要はない。
図７の例では、１００〜１０１行目の間に「追加」が行われることを示している。
【００４０】
なお、改造場所が１箇所の場合、ユーザは、図６における改造場所の入力と、図７における改造情報の入力を１回ずつ行う。改造場所が複数におよぶ場合、ユーザは、図６における改造場所の入力と、図７における改造情報の入力を改造場所の数分だけ行う。
【００４１】
（改造予定データ）
図８は、本実施形態に係る改造予定データの例を示す図である。
改造予定データ８００は、図７の改造情報入力画面７００において受け付けた情報（改造入力データ１０３）を基に改造予定登録部１１が生成するデータであり、その内容は改造情報入力画面７００で受け付けた情報である。
改造予定データ８００は、改造場所と改造入力データ１０３を関連付けるための識別子８０１、改造場所の情報である改造場所情報８０２、処理の追加や削除などを示す改造内容情報８０３、改造内容の概要情報８０４、改造の根拠となる仕様書の記述箇所の情報である仕様書情報８０５である。
このうち、識別子８０１は改造予定登録部１１によって付与されるものである。改造場所情報８０２は図７の改造情報入力画面７００における改造場所表示エリア７０１の情報であり、改造内容情報８０３は図７の改造内容入力エリア７０２の情報であり、概要情報８０４は図７の概要入力エリア７０３の情報であり、仕様書情報８０５は仕様書情報入力エリア７０４の情報である。
【００４２】
このように、改造予定データ８００に仕様書情報８０５と概要情報８０４を含めることによって、改造前ソースコード１０１における仕様書作成時に詳細なコーディングの内容が確定していない場合でも、後の処理で、改造場所と改造内容の検証ができるようになる。
また、改造予定データ８００に、識別子８０１と仕様書情報８０５を含めることによって、改造場所と改造内容および関連する仕様書の記述との関連付けが可能になり、後記する検証結果確認時に改造内容と仕様書の記述内容の確認を行うことができるようになる。ここで、前記したように「仕様書」とは、改造前ソースコード作成時の仕様書である。本実施形態では、改造前ソースコード作成時の仕様書を参照することはあるが、新たな仕様書などを作成する必要はない。
【００４３】
［改造予定再現処理］
次に、図９を参照して改造予定再現処理（図２のステップＳ４ｂ）の説明を、適宜図１を参照しつつ行う。改造予定再現処理では、改造予定再現部１２が図６〜図８で説明した改造予定登録処理で入力・登録された予定に従って改造前ソースコード１０１の改造が行われた場合、予測される構造データである予測構造データ９００を生成する。
【００４４】
図９は、本実施形態に係る予測構造データの例を示す図である。
改造予定再現部１２は、改造予定データ８００（図８）を基に、予測構造データ９００を予測・生成する。このとき、改造予定再現部１２は中間語命令と同じ書式で改造内容の情報を埋め込むための中間語命令として、擬似中間語命令９０１という命令を導入する。つまり、改造予定登録処理に従って行われる改造が確定していないことから、中間語命令を確定することができないため、改造予定再現部１２は擬似中間語命令９０１を使用して予測構造データ９００を生成する。
【００４５】
擬似中間語命令９０１は、擬似中間語命令であることを示す接頭語９０２、擬似中間語命令名称９０３、擬似処理内容９０４を有している。
接頭語９０２は擬似中間語命令であることを示すものであり、改造予定再現部１２によって付与される。
擬似中間語命令名称９０３は、図８における改造内容情報８０３と対応する。つまり、図７の改造内容入力エリア７０２で「追加」が選択されていれば、図９の例のように「ｉｎｓｅｒｔ」となり、「削除」が選択されていれば「ｄｅｌｅｔｅ」となる。
擬似中間語命令名称９０３によって、擬似中間語命令９０１が挿入された場所に、どのような改造が行われる予定であるかを表現することができる。
擬似処理内容９０４は、改造予定データ８００との関連付けのため、図８の識別子８０１が挿入される。このように、擬似処理内容９０４に識別子８０１を使用することによって、擬似中間語命令９０１が挿入された場所と、改造予定データ８００における仕様書の情報（仕様書情報８０５）とを関連付けることができる。
以上、図９で示したように、改造予定再現処理で擬似中間語命令を挿入することで、後記する処理で、新たな仕様書を必要とせずに改造後ソースコード１０２に対する改造内容の検証ができるようになる。
【００４６】
なお、予測構造データ９００を生成するための処理は、改造予定再現部１２が、図８の改造予定データ８００を参照して、改造場所情報８０２に該当する行と行の間に、改造内容情報８０３に相当する処理を行うだけであるため、フローチャートを省略する。例えば、改造内容情報８０３が「ｉｎｓｅｒｔ」であれば、改造予定再現部１２は該当箇所に行を空け、そこに接頭語９０２、擬似中間語命令名称９０３、擬似処理内容９０４として識別子８０１を挿入する。改造内容情報８０３が「ｄｅｌｅｔｅ」であれば、改造予定再現部１２は該当行を削除し、削除した箇所に接頭語９０２、擬似中間語命令名称９０３、擬似処理内容９０４として識別子８０１を挿入する。
【００４７】
［改造場所特定処理］
次に、図１０および図１２を参照して、改造場所特定処理（図２のステップＳ５）の説明を、適宜図１を参照しつつ行う。改造場所特定処理では、改造場所特定部２１が、改造前構造データ１０４と、改造後構造データ１０５とから、実際の改造における改造場所を特定する。
【００４８】
（改造場所特定処理のフローチャート）
図１０は、本実施形態に係る改造場所特定処理の手順を示すフローチャートである。この処理において、改造場所特定部２１は図４の構造解析処理で生成した改造前構造データ１０４および改造後構造データ１０５の比較を行い、異なっている箇所を検出すると、検出した異なっている箇所に擬似中間語命令を挿入する処理を行う。
【００４９】
まず、改造場所特定部２１は改造後ソースコード１０２の構造を図４の構造解析処理で解析した改造後構造データ１０５から中間語命令（改造後中間語命令）を１つ取得する（Ｓ２０１）。
次に、改造場所特定部２１は、改造前ソースコード１０１の構造を図４の構造解析処理で解析した改造前構造データ１０４から中間語命令（改造前中間語命令）を１つ取得する（Ｓ２０２）。
【００５０】
続いて、改造場所特定部２１は、ステップＳ２０１で取得した改造後中間語命令と、ステップＳ２０２で取得した改造前中間語命令を比較し、改造後中間語命令と、改造前中間語命令とが同一の中間語命令であるか否かの判定を行う（Ｓ２０３）。
【００５１】
ステップＳ２０３の結果、改造後中間語命令と、改造前中間語命令とが同一の中間語命令でない場合（Ｓ２０３→Ｎｏ）、改造場所特定部２１は、この箇所で改造が行われているものとみなし、改造内容判定を行う（Ｓ２０４）。ステップＳ２０４では、処理対象となっている箇所で、どのような改造が行われているかを判定するものであり、改造内容としては「追加」、「削除」、「変更」などがある。
【００５２】
このときの判定方法を図１１を参照して説明する。
図１１（ａ）のように、現在、処理対象となっている改造前中間語命令が「Ａ２」であり、処理対象となっている改造後中間語命令が「Ｂ１」である場合、処理対象となっている改造後中間語命令「Ｂ１」の後の改造後中間語命令に、処理対象となっている改造前中間語命令と同じ「Ａ２」があれば、改造場所特定部２１は「追加」と判定する。
【００５３】
図１１（ｂ）のように、処理対象となっている改造前中間語命令が「Ａ２」であり、処理対象となっている改造後中間語命令が「Ａ３」である場合、処理対象となっている改造前中間語命令「Ａ２」の後の改造前中間語命令が、処理対象となっている改造後中間語命令と同じ「Ａ３」であれば、改造場所特定部２１は「削除」と判定する。
【００５４】
図１１（ｃ）のように、処理対象となっている改造前中間語命令が「Ａ２」であり、処理対象となっている改造後中間語命令が「Ｃ１」である場合、処理対象となっている改造前中間語命令、改造後中間語命令の前後の中間語命令が、改造後、改造前で一致していれば、改造場所特定部２１は「変更」と判定する。
【００５５】
次に、改造場所特定部２１は、改造場所特定データ１１００に擬似中間語命令を挿入（マーキング）して（Ｓ２０５）、ステップＳ２０７へ処理を進める。ステップＳ２０５については、図１２を参照して後記する。
【００５６】
ステップＳ２０３の結果、改造後中間語命令と、改造前中間語命令とが同一の中間語命令である場合（Ｓ２０３→Ｙｅｓ）、改造場所特定部２１は、改造が行われているとみなし、この改造後中間語命令を改造場所特定データ１１００の末尾に挿入し（Ｓ２０６）、すべての改造後中間語命令および改造前中間語命令（中間語命令）について解析をしたか否かを判定する（Ｓ２０７）。
ステップＳ２０７の結果、解析を行っていない中間語命令が存在する場合（Ｓ２０７→Ｎｏ）、改造場所特定部２１はステップＳ２０１へ処理を戻し、次の改造後中間語命令および改造前中間語命令について解析を行う。
ステップＳ２０７の結果、すべての中間語命令について解析を行っている場合（Ｓ２０７→Ｙｅｓ）、改造場所特定部２１は改造場所特定データ１１００を出力して（Ｓ２０８）、処理を終了する。
【００５７】
（改造場所特定処理結果）
図１２は、改造場所特定処理結果の例を示す図である。
図１２（ａ）には、上段に構造データ、下段にソースコードを示しており、左列に改造前、中列に改造後、右列に改造場所特定処理結果を示す。
なお、図１２（ａ）における改造場所特定処理結果が図１における改造場所特定データ１１００となる。
図１２（ａ）から、改造前ソースコード１０１から生成した構造データ（改造前構造データ）と、改造後ソースコード１０２から生成した構造データ（改造後構造データ）を、図１０におけるステップＳ２０３で比較すると、中間語命令１１０１が挿入されていることがわかる。これは、改造後ソースコード１０２において、命令１１０２が挿入されたことを示している。
改造場所特定部２１は、このように改造によって挿入された命令である中間語命令１１０１を、擬似中間語命令１１０３で置き換える。
【００５８】
実際には、改造場所特定部２１は、上から順に改造前構造データ１０４、改造後構造データ１０５の中間語命令を比較していき、一致していれば、改造場所特定データ１１００に改造後構造データ１０５の中間語命令を書き足していき、不一致が検出されれば、図１１で説明した判定方法に従って改造内容を判定し、その改造内容に該当する擬似中間語命令を改造場所特定データ１１００に書き足す。
【００５９】
図１２（ｂ）に示すように、改造場所特定処理結果における擬似中間語命令１１０３は、予測構造データ９００などで用いられる擬似中間語命令９０１（図９）と同様、接頭語１１１１、擬似中間語命令名称１１１２、擬似処理内容１１１３を有している。ただし、改造場所特定処理結果における擬似中間語命令１１０３の擬似処理内容１１１３は、改造後構造データ１０５における改造された（挿入された）中間語命令１１０１そのものが挿入されるところが、予測構造データ９００などで用いられる擬似中間語命令９０１と異なる。
【００６０】
以上、図１０から図１２までで述べた改造場所特定処理によって、改造後における改造場所を擬似中間語命令で置き換えることによって、改造後構造データ１０５における改造場所が明らかになる。
【００６１】
［改造内容検証処理］
次に、図１３〜図１５を参照して、改造内容検証処理（図２のステップＳ５）の説明を、適宜図１を参照しつつ行う。改造内容検証処理では、改造内容検証部２２が、図１０の処理で生成された改造場所特定データ１１００と、図９で説明した改造予定再現処理で生成された予測構造データ９００とを比較することによって、予定に従って改造が行われているか否かを判定し、その判定結果を表示部５０に表示する。
【００６２】
（改造内容検証処理のフローチャート）
図１３は、本実施形態に係る改造内容検証処理の手順を示すフローチャートである。
まず、改造内容検証部２２は、改造場所特定データ１１００から基本ブロック（改造後基本ブロック）を取得する（Ｓ３０１）。
次に、改造内容検証部２２は、改造予定再現部１２によって改造内容を再現した予測構造データ９００から、ステップＳ３０１で取得した改造後基本ブロックと類似する基本ブロックである類似基本ブロックを検索し（Ｓ３０２）、類似基本ブロックが検出されたか否かを判定する（Ｓ３０３）。類似基本ブロックの検出基準としては、基本ブロック内において、一致する中間語命令がの数が一定数以上あり、かつ、改造場所特定データ１１００および予測構造データ９００上で、処理対象となっている基本ブロックの前の基本ブロック同士、または後の基本ブロック同士でも、一致する中間語命令の数が一定数以上あることなどである。
【００６３】
ステップＳ３０３の結果、類似基本ブロックが検出されなかった場合（Ｓ３０３→Ｎｏ）、改造内容検証部２２は、ステップＳ３０１で取得した基本ブロックは予定外の改造であるとみなし、「ＮＧ」を検証結果データ１０６に登録し（Ｓ３０４）、ステップＳ３０９へ処理を進める。このとき、検証結果データ１０６には、「ＮＧ」の情報とともに該当する基本ブロックの識別子３１５（図３）が登録される。
【００６４】
ステップＳ３０３の結果、類似基本ブロックが検出された場合（Ｓ３０３→Ｙｅｓ）、改造内容検証部２２は、ステップＳ３０１で取得した改造後基本ブロックと、検出された類似基本ブロックに含まれている中間語命令の比較を行う（Ｓ３０５）。
そして、改造内容検証部２２は、ステップＳ２０１で取得された改造後基本ブロックと、類似基本ブロックにおいて、中間語命令の形式が一致しているか否かを判定する（Ｓ３０６）。なお、ここでの中間語命令とは擬似中間語命令を含んでおり、その形式とは、擬似中間語命令であるか否かに関するものである。
ステップＳ３０６の結果、不一致である場合（Ｓ３０６→Ｎｏ）、改造内容検証部２２は「ＮＧ」を検証結果データ１０６に登録し（Ｓ３０４）、ステップＳ３０９へ処理を進める。なお、このとき、改造内容検証部２２は、類似基本ブロック側が擬似中間語命令であれば、予測構造データ９００の擬似処理内容９０４（図９）の識別子と、不一致が検出された中間語命令の行番号を「ＮＧ」の情報とともに検証結果データ１０６に登録する。類似基本ブロック側が擬似中間語命令でなければ、不一致が検出された中間語命令の行番号を「ＮＧ」の情報とともに検証結果データ１０６に登録する。なお、ここで、登録される行番号は改造後構造データ１０５の行番号である。
【００６５】
ステップＳ３０６の結果、一致である場合（Ｓ３０６→Ｙｅｓ）、改造内容検証部２２は、その内容が一致しているか否かを判定する（Ｓ３０７）。ここで、内容とは「ｉｎｓｅｒｔ」や、「ｄｅｌｅｔｅ」などである。例えば、双方「ｉｎｓｅｒｔ」であれば、改造内容検証部２２は「一致」と判定し、「ｉｎｓｅｒｔ」と「ｄｅｌｅｔｅ」であったりすれば、改造内容検証部２２は「不一致」と判定する。
ステップＳ３０７の結果、不一致の場合（Ｓ３０７→Ｎｏ）、改造内容検証部２２はステップＳ３０４へ処理を進め、「ＮＧ」を検証結果データ１０６に登録する（Ｓ３０４）。ここで、改造内容検証部２２は、類似基本ブロック側が擬似中間語命令であれば、予測構造データ９００の擬似処理内容９０４（図９）の識別子と、不一致が検出された中間語命令の行番号を「ＮＧ」の情報とともに検証結果データ１０６に登録する。類似基本ブロック側が擬似中間語命令でなければ、不一致が検出された中間語命令の行番号を「ＮＧ」の情報とともに検証結果データ１０６に登録する。なお、ここで、登録される行番号は改造後構造データ１０５の行番号である。
【００６６】
ステップＳ３０７の結果、一致の場合（Ｓ３０７→Ｙｅｓ）、改造内容検証部２２は「ＯＫ」を検証結果データ１０６に登録する（Ｓ３０８）。このとき、改造内容検証部２２は、該当する中間語命令の行番号を「ＯＫ」の情報とともに検証結果データ１０６に登録する。なお、ここで、登録される行番号は改造後構造データ１０５の行番号である。
【００６７】
そして、改造内容検証部２２は、処理対象となっている基本ブロック（改造後基本ブロック、類似基本ブロック）内のすべての中間語命令を解析したか否かを判定する（Ｓ３０９）。
ステップＳ３０９の結果、解析していない中間語命令が存在する場合（Ｓ３０９→Ｎｏ）、改造内容検証部２２はステップＳ３０５へ処理を戻し、次の中間語命令の解析を行う。
ステップＳ３０９の結果、すべての中間語命令を解析している場合（Ｓ３０９→Ｙｅｓ）、改造内容検証部２２は改造場所特定データ１１００におけるすべての基本ブロックを解析したか否かを判定する（Ｓ３１０）。
ステップＳ３１０の結果、改造場所特定データ１１００において、解析していない基本ブロックが存在する場合（Ｓ３１０→Ｎｏ）、改造内容検証部２２はステップＳ３０１へ処理を戻し、次の基本ブロックの解析を行う。
ステップＳ３１０の結果、改造場所特定データ１１００におけるすべての基本ブロックを解析している場合（Ｓ３１０→Ｙｅｓ）、改造内容検証部２２は、検証結果データ１０６を出力し（Ｓ３１１）、改造内容検証処理を終了する。
【００６８】
（改造内容検証判定パターン）
図１４は、図１３のステップＳ３０５で使用される判定パターンの例を示す例である。なお、この説明にけるステップ番号は図１３のステップ番号である。
図１４において、改造場所特定データ１１００の中間語命令が擬似中間語命令である場合は、改造後ソースコード１０２において改造が行われた場所であることを示しており、擬似中間語命令でない場合は改造後ソースコード１０２において改造が行われていないことを示している。また、予測構造データ９００の中間語命令が擬似中間語命令である場合は、改造が行われる予定の場所であることを示しており、擬似中間語命令でない場合は改造が行われる予定でないことを示している。
「パターンＡ」では、改造場所特定データ１１００の中間語命令および予測構造データ９００の中間語命令がともに擬似中間語命令ではなく（中間語命令）、その内容も一致しているパターンである（ステップＳ３０６→Ｙｅｓ；ステップＳ３０７→Ｙｅｓ）。この「パターンＡ」は、改造予定以外の場所であり、かつ改造が行われていないことを示しており、改造内容検証部２２は「ＯＫ」を検証結果データ１０６に登録する（ステップＳ３０８）。
「パターンＢ」は、改造場所特定データ１１００の中間語命令が擬似中間語命令ではなく（中間語命令）、予測構造データ９００の中間語命令が擬似中間語命令であるパターンである。この場合、当然内容は不一致となる。この「パターンＢ」では、改造が必要な場所に対して、必要な改造が行われていないことを示しており、改造内容検証部２２は「ＮＧ」を検証結果データ１０６に登録する（ステップＳ３０４）。
【００６９】
「パターンＣ」は、改造場所特定データ１１００の中間語命令が擬似中間語命令であり、予測構造データ９００の中間語命令は擬似中間語命令ではない（中間語命令）パターンであり、当然内容は不一致となるパターンである。この「パターンＣ」は、改造を行う必要がない場所に、不要な改造が行われたことを示しており、改造内容検証部２２は「ＮＧ」を検証結果データ１０６に登録する（ステップＳ３０４）。
「パターンＤ」は、改造場所特定データ１１００および予測構造データ９００の中間語命令がともに擬似中間語命令であり、かつ、その内容が一致するパターンである（ステップＳ３０６→Ｙｅｓ；ステップＳ３０７→Ｙｅｓ）。この「パターンＤ」は、改造が必要な場所に、適切な改造が行われたことを示しており、改造内容検証部２２は「ＯＫ」を検証結果データ１０６に登録する（ステップＳ３０８）。
【００７０】
「パターンＥ」は、改造場所特定データ１１００および予測構造データ９００の中間語命令がともに擬似中間語命令であるが、その内容が不一致であるパターンである（ステップＳ３０６→Ｙｅｓ；ステップＳ３０７→Ｎｏ）。この「パターンＥ」は、予定されている箇所に改造が行われているのだが、その内容が異なっていることを示しており、改造内容検証部２２は「ＮＧ」を検証結果データ１０６に登録する（ステップＳ３０４）。
「パターンＦ」は、改造場所特定データ１１００および予測構造データ９００の中間語命令がともに擬似中間語命令ではないが（中間語命令）、その内容が一致しないパターンである（ステップＳ３０６→Ｙｅｓ；ステップＳ３０７→Ｎｏ）。この「パターンＦ」は、改造対象となっている改造前ソースコード１０１とは異なるソースコードを改造して、改造後ソースコード１０２として登録した疑いがあることを示しており、改造内容検証部２２は「ＮＧ」を検証結果データ１０６に登録する（ステップＳ３０４）。
【００７１】
（検証結果表示画面）
図１５は、改造内容検証部によって表示部に表示される検証結果表示画面の例を示す図である。
検証結果表示画面１４００は、改造後ソースコード表示エリア１４０１、検証結果表示エリア１４０２を有している。
検証結果表示エリア１４０２には、改造予定にしたがって正しく改造が行われた場合に表示されるエリアであるＯＫエリア１４０３、改造予定と異なる改造が行われた場合に表示されるエリアであるＮＧエリア１４０４を有している。
ＯＫエリア１４０３には、改造予定を識別するＩＤ表示エリア１４０５、判定結果表示エリア１４０６、改造の根拠となる仕様書の記載場所を表示する仕様書情報表示エリア１４０７、レビューを促すメッセージ表示エリア１４０８を有している。
ＮＧエリア１４０４には、ＯＫエリア１４０３と同様に改造予定を識別するＩＤ表示エリア１４０８、判定結果表示エリア１４０９、改造の根拠となる仕様書の記載場所を表示する仕様書情報表示エリア１４１０、異常判定の内容を示す判定内容表示エリア１４１１を表示する。
【００７２】
このうち、ＩＤ表示エリア１４０５，１４０８に表示される内容は、検証結果データ１０６に登録されている識別子である。なお、予測構造データ９００が擬似中間語命令でない箇所で不一致が検出された場合、ＩＤ表示エリア１４０５，１４０８は空欄となる。また、仕様書情報表示エリア１４０７，１４１０の内容は図８に示す改造予定データ８００の仕様書情報８０５である。これらのデータは、改造内容検証部２２が、検証結果データ１０６における識別子をキーとして、改造予定データ８００を検索することによって取得される情報である。なお、仕様書情報８０５に表示されている仕様書は、改造前ソースコード作成時に作成された仕様書である。
また、判定結果表示エリア１４０６，１４０９は、図１３のステップＳ３０６における結果を検証結果データ１０６内に保持することによって表示される情報である。
メッセージ表示エリア１４０８、判定内容表示エリア１４１１は、例えば、図１４に示すパターン毎にメッセージを予め用意しておくことによって表示される情報である。
【００７３】
改造後ソースコード表示エリア１４０１には、改造場所が正常（「ＯＫ」）な場合と異常（「ＮＧ」）な場合を区別してハイライト表示し、さらに、検証結果表示エリア１４０２の各項目と関連付けを行う。このような関連付けは、改造内容検証部２２が、検証結果データ１０６に登録されている行番号を参照することによって行われる。
図１５の例では、ハイライト表示箇所１４２１と、ＯＫエリア１４０３とを直線１４１２で結び，ハイライト表示箇所１４２２と、ＮＧエリア１４０４とを直線１４１３で結ぶことで、改造後ソースコード１０２における改造場所とレポート内容を関連付けている。
【００７４】
なお、図１５は表示の一例であり、実装上必要であれば他の情報を表示する領域を追加してもよい。また、すべての領域を同時に表示する必要もなく、例えば、ユーザのクリック入力などで、表示するエリアを選択可能にしてもよい。また、改造場所を示す方法もハイライト表示に限定しない。
【００７５】
このように、予定されている改造の内容や、場所と、実際に改造が行われた内容や、場所で整合性が取れていない場合に、整合性が取れていない場所を明示することで、改造後ソースコード１０２の修正、または、改造入力データ１０３の再入力をユーザに促すことができる。
【００７６】
図１０から図１５までで述べた改造内容検証部２２の処理によって、新たな仕様書を必要とせずに、改造後ソースコード１０２に対する改造内容の検証ができるようになる。また、改造前ソースコード作成のときの仕様書作成において詳細なコーディングの内容が確定していない場合でも、改造場所と改造内容の検証ができるようになる。
【００７７】
（まとめ）
以上、本実施形態によって、新たな仕様書を必要とせずに、改造後ソースコード１０２に対する改造内容の検証ができるようになり、改造前ソースコード作成のときの仕様書作成において詳細なコーディングの内容が確定していない場合でも、改造場所と改造内容の検証ができるようになる。
この結果、プログラミング段階の誤った改造をレビュー段階で検出でき、かつ、レビュー段階におけるレビュー漏れを防ぐことができるようになる。
【００７８】
なお、本発明は実施形態に記載した例に限定されるものではなく、様々な変形例が含まれる。例えば、本実施形態では、本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。
【００７９】
また、本実施形態で述べた中間語命令の名称および書式は一例であり、実装に応じて、名称および書式の変更、または情報の追加を行ってもよい。
また、本実施形態の各構成、機能、処理部、処理手段などは、それらの一部または全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。また、上記の各構成、機能などは、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイルなどの情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）などの記録装置、または、ＩＣ（Integrated Circuit）カード、ＳＤ（Secure Digital）カード、ＤＶＤ（Digital Versatile Disc）などの記録媒体に記憶させることができる。
【符号の説明】
【００８０】
１      プログラム改造支援装置
１０    改造予定登録処理部
１１    改造予定登録部
１２    改造予定再現部（改造後データ生成部）
２０    改造内容検証処理部
２１    改造場所特定部
２２    改造内容検証部
３０    構造解析部
４０    入力部
５０    表示部
１０１  改造前ソースコード
１０２  改造後ソースコード
１０３  改造入力データ
１０４  改造前構造データ
１０５  改造後構造データ
１０６  検証結果データ
８００  改造予定データ
９００  予測構造データ（予測データ）
１１００  改造場所特定データ（改造後データ）
【図１】
0005525459.tif 000002
【図２】
0005525459.tif 000003
【図３】
0005525459.tif 000004
【図４】
0005525459.tif 000005
【図５】
0005525459.tif 000006
【図６】
0005525459.tif 000007
【図７】
0005525459.tif 000008
【図８】
0005525459.tif 000009
【図９】
0005525459.tif 000010
【図１０】
0005525459.tif 000011
【図１１】
0005525459.tif 000012
【図１２】
0005525459.tif 000013
【図１３】
0005525459.tif 000014
【図１４】
0005525459.tif 000015
【図１５】
0005525459.tif 000016