(57)【要約】【課題】  ソースコードの変換において、プログラム変更に伴う影響範囲調査、修正にかかる時間及び漏れを防止し、システム修正変更作業を効率化させる。【解決手段】  検索項目を含む検索項目情報と、文法規則情報に基いて、対象ソースコード内の関連項目を検索し、検索された関連項目を、検索項目として検索項目情報として追加登録することを新たな関連項目が検索されなくなるまで繰り返し、その後、検索項目情報に登録された前記対象ソースコード内の検索項目に変換を行う。【選択図】  図３（ｂ）
2015032280.tif 000002
【特許請求の範囲】
【請求項１】
項目検索部が、
検索項目を含む検索項目情報と、文法規則情報に基いて、対象ソースコード内の関連項目を検索する検索工程と、
前記検索工程で検索された関連項目を、前記検索項目として前記検索項目情報として追加登録する登録工程と、
を前記検索工程で新たな関連項目が検索されなくなるまで繰り返し、
変換部が、当該検索工程及び登録工程の後に、前記検索項目情報に登録された前記対象ソースコード内の検索項目に変換を行う変換工程を行う
ことを特徴とするソースコード変更方法。
【請求項２】
請求項１において、
前記検索工程では、前記検索項目情報に基いて、検索項目が含まれるロジックを検索してロジック情報に登録し、
前記変換工程では、前記ロジック情報に登録された前記対象ソースコード内のロジックに変換を行うことを特徴とするソースコード変換方法。
【請求項３】
請求項１または２において、
前記変換工程では、前記変換対象である検索項目及び／またはロジックを出力し、当該検索項目及び／またはロジックにかかる変換内容の入力を受け付けて前記変換を行うことを特徴とするソースコード変換方法。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記対象ソースコード内の変数を登録する変数登録工程を含み、
前記検索された関連項目は、前記登録された変数であることを特徴とするソースコード変換方法。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記文法規則情報は、演算子を含み、
前記検索工程では、前記演算子に対して、前記検索された検索項目とは反対側に前記登録された変数の有無を調べることにより、前記関連項目を検索することを特徴とするソースコード変換方法。
【請求項６】
検索項目を含む検索項目情報と、文法規則情報とを記憶する記憶部と、
前記検索項目情報及び前記文法規則情報に基いて、対象ソースコード内の関連項目を検索し、検索された関連項目を、前記検索項目として前記検索項目情報として追加登録することを、新たな前記関連項目が検索されなくなるまで繰り返す検索部と、
当該検索及び登録の後に、前記検索項目情報に登録された前記対象ソースコード内の検索項目に変換を行う変換部と、
を備えたことを特徴とするソースコード変更装置。
【請求項７】
請求項６において、
前記検索部は、前記検索項目情報に基いて、検索項目が含まれるロジックを検索してロジック情報に登録し、
前記変換部は、前記ロジック情報に登録された前記対象ソースコード内のロジックに変換を行うことを特徴とするソースコード変換装置。
【請求項８】
請求項６または７において、
前記変換部は、前記変換対象である検索項目及び／またはロジックを出力し、当該検索項目及び／またはロジックにかかる変換内容の入力を受け付けて前記変換を行うことを特徴とするソースコード変換装置。
【請求項９】
請求項６乃至８のいずれかにおいて、
前記対象ソースコード内の変数を登録する変数登録部を備え、
前記検索された関連項目は、前記登録された変数であることを特徴とするソースコード変換装置。
【請求項１０】
請求項６乃至９のいずれかにおいて、
前記文法規則情報は、演算子を含み、
前記検索工程では、前記演算子に対して、前記検索された検索項目とは反対側に前記登録された変数の有無を調べることにより、前記関連項目を検索することを特徴とするソースコード変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシステム修正変更作業に関し、特にシステム修正変更作業におけるプログラム修正の効率化に関する。
【背景技術】
【０００２】
システム改修に伴うプログラムの改修において、システムで扱う文字コードを変更する場合、影響範囲が広いため、プログラムの影響調査及び対応に多大な時間を要する。また、修正対象が多くなるため、修正漏れが発生するリスクも高く、工程遅延や作業工数の増大にもつながる可能性がある。例えば特許文献１では、影響範囲の調査の精度向上による、プログラム修正作業の効率化、作業漏れを防止するための仕組みが検討されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2012-212281号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の手法には２つの課題が未解決である。１つは影響範囲を命令文単位で設定しているため、命令文を構成しているデータ項目単位での依存関係は分からない点である。もう１つは入力として与えた命令文と依存関係にある命令文は分析することはできるが、入力の命令文と依存関係にある命令文の依存関係は、改めて入力として与える必要がある点である。
【０００５】
本発明の目的は、上記の課題を解決し、データ項目単位の依存関係を解析し、かつ入力として与えたデータ項目と依存関係にあるデータ項目の依存関係も自動で解析することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するため、本発明では、検索項目を含む検索項目情報と、文法規則情報に基いて、対象ソースコード内の関連項目を検索し、検索された関連項目を、検索項目として検索項目情報として追加登録することを新たな関連項目が検索されなくなるまで繰り返し、その後、検索項目情報に登録された前記対象ソースコード内の検索項目に変換を行う。
【発明の効果】
【０００７】
以上、本発明を用いれば、予め設定したデータ項目のみでなく、それと関連性があるデータ項目の抽出及び関連するロジックを抽出できることから、作業漏れを抑えることが可能となる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施例にかかるシステム構成図である。
【図２（ａ）】本発明の実施例にかかる検索項目テーブルである。
【図２（ｂ）】本発明の実施例にかかる定義項目テーブルである。
【図２（ｃ）】本発明の実施例にかかるロジックテーブルである。
【図２（ｄ）】本発明の実施例にかかる文法規則情報である。
【図２（ｅ）】本発明の実施例にかかる検索項目一覧である。
【図３（ａ）】本発明の実施例にかかる処理イメージ図である。
【図３（ｂ）】本発明の実施例にかかる処理イメージ図である。
【図４（ａ）】本発明の実施例にかかる処理フローである。
【図４（ｂ）】本発明の実施例にかかる処理フローである。
【図４（ｃ）】本発明の実施例にかかる処理フローである。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について図面を参照して説明する。プログラム変換の例として、COBOLのUnicode対応作業を用いて説明する。
【実施例１】
【００１０】
図１はCOBOLのUnicode対応における作業効率化のためのシステム構成を示す図である。本機能は一般的なコンピュータ（サーバ）１００により実現され、主として、処理部（プロセッサ）１１０によって実現される項目検索部１１１、プログラム修正部１１２と、記憶装置１２０に記憶される項目検索部の入力及び出力結果となる検索項目テーブル１２１、処理に使用する定義項目テーブル１２２、ロジックテーブル１２３、文法規則情報１２４から構成される。記憶装置には、修正前プログラム１２５及び修正後プログラム１２６も格納される。
【００１１】
修正前プログラム格納ＤＢ１２５は、修正前の対象プログラム（ソースコード）を格納するＤＢである。修正後プログラム格納ＤＢ１０８は、修正した対象プログラムを格納するＤＢ１２６である。
【００１２】
本コンピュータは、入力装置及びディスプレイを備えた端末（図示せず）にネットワークにより接続され、端末を介してユーザによって操作される。
【００１３】
図２（ａ）〜（ｄ）に、各テーブル、情報の概念図を示す。
【００１４】
図２（ａ）に検索項目テーブル１２１の概念図を示す。検索項目テーブル１２１は、項目検索部１１１により検索する項目及び、検索により取得した関連項目を保持するテーブルである。検索項目テーブル１２１は、「ＩＤ」、「項目名」、「検索項目ＩＤ」、「関連項目ＩＤ」、「未検索フラグ」、「修正フラグ」及び「修正内容」を項目として保持する。
【００１５】
図２（ｂ）に定義項目テーブル１０５の概念図を示す。定義項目テーブル１０５は、項目検索部１１１により検索するプログラムで定義されている項目を保持するテーブルである。定義項目テーブル４０２は、「ＩＤ」、「親ＩＤ」及び「項目名」を項目として保持する。
【００１６】
図２（ｃ）にロジックテーブル１０６の概念図を示す。ロジックテーブル１０６は、項目検索部１１１により取得した結果を格納するテーブルである。ロジックテーブル４０３は、「ＩＤ」、「行番号」、「ロジック」、「修正フラグ」及び「修正内容」を項目として保持する。
【００１７】
これらの３つのテーブルは、プログラム修正開始時には空欄でもよい。
【００１８】
図２（ｄ）に文法規則３０３の詳細を示す。文法は正規表現されており、検索対象プログラム３０２を解析する際に適用する。
【００１９】
図３（ａ）（ｂ）は項目検索部１１１及びプログラム修正部１１２の処理イメージ図である。
【００２０】
図３（ａ）では、本実施例の概要を説明する。項目検索部１１１は、検索対象プログラム１２５と検索対象プログラムから検索する検索項目一覧１３１を入力とし、修正を行うロジックの一覧表１２３と検索項目の一覧表１２１を出力する。このロジックの一覧表１２３と検索項目の一覧表１２１に基いて、プログラム内で修正箇所を特定し、修正を行う。
【００２１】
図３（ｂ）を用いて、本実施例を検索対象プログラムに適用した一例を説明する。まず、検索項目テーブル１２１に、初期変換項目表１３１を用いて値が入力される（S301）。初期変換項目表１３１は、図２（ｅ）に示す通り、予め変換を行うことがわかっている検索項目のＩＤと検索項目名が記載されており、これが検索項目テーブル１２１に読み込まれる。本実施例においては、項目名「TRK-BNG-010」がそのＩＤとともに読み込まれる。
【００２２】
続いて、検索対象プログラムで定義されている変数を、定義項目テーブル１２２に登録する（S302）。
【００２３】
次に、修正箇所の検索に取り掛かる。まず、読み込み済みの検索項目である「TRK-BNG-010」を、対象プログラム内で検索する（S303）。そして、検索で見つかったロジック「MOVE TRK‐BNG‐010 TO TRKBNG」を、ロジックテーブル１２２に、IDを付して、その行番号と共に記憶する（S304）。
【００２４】
続いて、このロジック内に関連項目があるか調べる。まずは、文法規則情報と照らし合わせ、該当の文法になっているか照会する。続いて、項目が定義項目テーブル１２３に登録されているか照会する。本件では、ロジックの文法「MOVE <ITEM> TO <ITEM>」が文法規則に該当し、演算子「TO」を挟んで存在する「TRKBNG」が関連項目に該当すると判断できる。そのため、関連項目である「TRKBNG」を、検索項目テーブル１２１にIDを付して追加する（S305）。また、項目同士の関連を対応付けるために、「TRK-BNG-010」の関連項目に「TRKBNG」のIDを記入し、「TRKBNG」の検索項目に「TRK-BNG-010」のIDを記入する。その後も検索を続け、対象プログラム内の「TRK-BNG-010」の検索が終了したら、検索項目テーブル１２１内の未検索フラグを１（未検索）から０（検索済）に変更する。
【００２５】
同様に、検索項目として追加され未検索となっている関連項目である「TRKBNG」について、検索を行い（S306）、関連項目として見つかった「FKABNG」について、そのロジックの登録（S307）と関連項目登録（S308）を行い、さらに「FKABNG」の検索を行う（S309）。これを、未検索の検索項目がなくなるまで繰り返す。
【００２６】
検索が終了したら、項目やロジックが登録された検索項目テーブル１２１及びロジックテーブル１２２を出力する（S310）。そして、対象プログラムを修正前プログラム格納DBに登録する（S311）。
【００２７】
そして、出力された検索項目テーブル１２１及びロジックテーブル１２２の各項目及びロジック対し、変換内容を取得する（S312）。本実施例では、両テーブルを画面表示し、ユーザによる変換内容の入力を入力装置で受け付ける。
【００２８】
修正前プログラム格納DBに格納された検索対象プログラムを取得し、これに両テーブル内の変更内容をそれに対応つけられた検索対象プログラム内の項目及びロジックに反映させる（S314）。そして、修正フラグを１（修正要）から０（修正不要または修正済み）に変更し、修正後プログラム格納DBに登録する（S315）。
【００２９】
以下、本発明の手法によりプログラム中に存在する検索項目が含まれるロジック及び関連データ項目を抽出する処理の流れを図４（ａ）〜（ｃ）により説明する。
【００３０】
全体のフローチャートを図４（ａ）に示す。項目検索部１１１は、抽出処理に使用する修正項目一覧１３１と文法規則１２４を読み込み、修正項目一覧１３１にある修正項目を検索項目テーブル１２１に登録する（ステップ４０１）。
【００３１】
項目検索部１１１は、検索対象のプログラムを読み込み、作業場所節に定義されているデータ項目全てを定義項目テーブル１２２に登録する（ステップ４０２）。
【００３２】
項目検索部１１１は、検索項目テーブル１２２から未検索フラグが付いているデータを検索キーにセットする（ステップ４０３）。
【００３３】
そして、検索対象のプログラムに対し、検索キーにかかる検索項目が含まれるロジックを検索する（ステップ４０４）。
【００３４】
ステップ４０４にて検索キーが含まれているロジックが存在する場合（ステップ４０５）、ロジックをロジックテーブル４０３に登録する（ステップ４０６）。
【００３５】
ステップ４０６で登録したロジックに、検索キー及び文法規則情報を参照して関連項目が存在するか判定し（ステップ４０７）、関連項目がある場合、関連項目を検索項目テーブルに登録する（ステップ４０８）。
【００３６】
ステップ４０４からステップ４０８を検索対象のプログラムの最後まで行う（ステップ４０９）。
【００３７】
検索対象のプログラムの最後まで検索が完了し、検索項目テーブル１２１に未検索の検索項目が存在するか調べ（ステップ４１０）、存在する場合、項目検索部１１１は未検索項目に対し、ステップ５０３からステップ５１０を繰り返し実施する。
【００３８】
検索項目テーブル１２１に未検索の項目がない場合、項目検索部１１１は、これまでの処理により項目とロジックが登録された検索項目テーブル１２１とロジックテーブル１２３の内容を、検索項目一覧表とロジック一覧表として出力する（ステップ４１１）。
【００３９】
項目検索部１１１は検索対象のプログラムを修正前プログラム格納ＤＢ１０７に登録する（ステップ４１２）。
【００４０】
本発明の利用者は、検索項目一覧表とロジック一覧表に、修正内容を入力装置を用いて入力する（ステップ４１３）。
【００４１】
プログラム修正部１１２は検索対象のプログラムを修正前プログラム格納ＤＢ１０７から取得する（ステップ４１４）。
【００４２】
プログラム修正部１１２はステップ４１３で修正内容を入力した検索項目一覧表とロジック一覧表を入力とし、ステップ４１４で取得した検索対象のプログラムを修正する（ステップ４１５）。
【００４３】
プログラム修正部１１２は、ステップ４１５で修正した検索対象のプログラムを修正後プログラム格納ＤＢ１２６に登録する（ステップ４１６）。これにて、プログラム修正が完了する。
【００４４】
図４（ｂ）のフローチャートを用いて、ステップ４０４〜４０８の文法規則に基づき検索項目を含むロジック及び関連項目を検索する処理について説明する。
【００４５】
文法規則による検索機能１０３は、検索対象のプログラムを１行読み込む（ステップ４０４１）。
【００４６】
項目検索部１１１は、ステップ４０４１で読み込んだ行の７バイト目を参照し、”＊”がセットされているか確認する（ステップ４０４２）。
【００４７】
ステップ４０４２でロジックの７バイト目に”＊”がセットされている場合は、コメント行と判断し、項目検索部１１１はステップ４０４１に戻り、検索対象のプログラムの次の行を読み込む。ステップ４０４２で読み込んだロジックの７バイト目に”＊”がセットされていない場合、項目検索部１１１は読み込んだロジックの８バイト目以降をスペース単位で分割する（ステップ４０４３）。
【００４８】
項目検索部１１１は、分割したロジックの先頭の文字列をもとに、構文を表す文字列（’MOVE’、’IF’、’PERFORM’など）か判定することで、ステップ４２１で読み込んだロジックと適合する文法規則を文法規則情報１２４から判定する（ステップ４０５１）。
【００４９】
ステップ４０５１により適合する文法規則があった場合、項目検索部１１１は、ステップ４０４３で分割したロジックの２つ目以降にステップ４０３でセットした検索項目が存在するか検索する（ステップ４０５２）。
【００５０】
適合する文法規則がない場合は、項目検索部１１１はステップ４０４１に戻り、検索対象プログラムの次の行を読み込む。
【００５１】
ステップ４０５２で検索項目が存在しなかった場合、項目検索部１１１はステップ４０４１に戻り、検索対象プログラムの次の行を読み込む。検索項目が存在する場合、項目検索部１１１は読み込んだロジックに検索項目が存在することを記憶する。また、検索項目が文法規則のどの位置に存在するかを記憶する（ステップ４０６１）。
【００５２】
項目検索部１１１は文法規則の演算子（MOVE文の場合は’TO’、IF文の場合は’=’など）がステップ４０４３で分割したロジックのどの位置に存在するか検索し、記憶する（ステップ４０７１）。
【００５３】
文法規則による検索機能１０３はステップ４０７１で記憶した演算子の位置とステップ４０６１で記憶した検索項目の位置を比較し、検索項目の位置よりも演算子の位置が大きい場合は演算子よりも後ろから、検索項目の位置よりも演算子の位置が小さい場合は演算子の前から、定義項目テーブル１２２の項目が存在するか検索する（ステップ４０７２）。
【００５４】
ステップ４０７２で定義項目テーブル１２２の項目が存在する場合（ステップ４０７３）、項目検索部１１１はステップ４０４１で読み込んだロジックに検索項目の関連データ項目が存在すること（関連項目フラグに‘１’）を記憶し、ワークエリアに名称を設定する（ステップ４０８１）。
【００５５】
以上により、文法規則を用いて検索項目が含まれるロジック及び検索項目の関連データ項目を検索することが可能となる。
【００５６】
図４（ｃ）のフローチャートを用いて、ステップ４１５の検索項目一覧表及びロジック一覧表をもとに検索対象プログラムを修正する処理について説明する。
【００５７】
プログラム修正部１１２は、検索項目一覧表及びロジック一覧表を読み込む（ステップ４１５１）。
【００５８】
プログラム修正部１１２はステップ４１５１で読み込んだ検索項目一覧表、ロジック一覧表の修正内容に値がセットされているか確認する（ステップ４１５２）。
【００５９】
ステップ４１５２で検索項目一覧表、ロジック一覧表に修正内容がセットされている場合は、検索項目テーブル１２１、ロジックテーブル１２３の該当するレコードの修正フラグに”１”をセットし、修正項目に検索項目一覧表、ロジック一覧表の修正内容をセットする。ステップ５１５２で読み込んだ検索項目一覧表、ロジック一覧表に修正内容がセットされていない場合は、修正なしとして、プログラム修正を終了する（ステップ４１５３）。
【００６０】
プログラム修正部１１２は、ステップ４１４で取得した検索対象のプログラム３０２を１行読み込む（ステップ４１５４）。
【００６１】
プログラム修正部１１２は、ステップ４１５４で読み込んだプログラムのロジックの行番号をもとにロジックテーブル４０３を参照し、同じ行番号で修正フラグが”１”のレコードが存在するか確認する。存在しない場合は、ステップ５３４に戻る（ステップ４１５５）。
【００６２】
プログラム修正部１１２は、ステップ４１５５でレコードが存在する場合は、ロジックテーブル１２３の修正内容と読み込んだ行の値を入れかえることで修正を行う。（ステップ４１５６）。
【００６３】
プログラム修正部１１２は、ステップ４１５４で読み込んだロジックの８バイト目以降をスペース単位で分割する（ステップ４１５７）。
【００６４】
プログラム修正部１１２は、ステップ４１５７で分割したロジックに含まれる検索項目について、検索項目テーブル４０１を参照し、同じ項目名で修正フラグが”１”のレコードが存在するか確認する。存在しない場合は、ステップ４１５４に戻る（ステップ４１５８）。
【００６５】
プログラム修正部１１２は、ステップ４１５８でレコードが存在する場合は、検索項目テーブルの修正内容と読み込んだロジックの検索項目の値を入れかえることで修正を行う。（ステップ４１５９）。
【００６６】
プログラム修正部１１２は、検索対象のプログラムを最後まで読み込んだ場合は、プログラムの修正を終了する。最後まで読み込んでいない場合は、ステップ４１５４に戻る（ステップ４１６０）。
【符号の説明】
【００６７】
１００・・・サーバ、１１０・・・処理部、１１１・・・項目検索部、１１２・・・プログラム修正部、１２０・・・記憶部、１２１・・・検索項目テーブル、１２２・・・定義項目テーブル、１２３・・・ロジックテーブル、１２４・・・文法規則情報、１２５・・・修正前プログラム格納ＤＢ、１２６・・・修正後プログラム格納ＤＢ。
【図１】
2015032280.tif 000003
【図２（ａ）】
2015032280.tif 000004
【図２（ｂ）】
2015032280.tif 000005
【図２（ｃ）】
2015032280.tif 000006
【図２（ｄ）】
2015032280.tif 000007
【図２（ｅ）】
2015032280.tif 000008
【図３（ａ）】
2015032280.tif 000009
【図３（ｂ）】
2015032280.tif 000010
【図４（ａ）】
2015032280.tif 000011
【図４（ｂ）】
2015032280.tif 000012
【図４（ｃ）】
2015032280.tif 000013