(57)【要約】【課題】  特定のプログラムに対応している影響範囲調査ツールを他のプログラムにも適用できるようにする。【解決手段】  第１のプログラムのソースコードを第２のプログラムのソースコードに変換するとともに第１のプログラムのソースコードのプログラム文と第２のプログラムのソースコードのプログラム文との対応関係を記憶したマッピング情報を生成し、第２のプログラムのソースコードに基づいて当該第２のプログラムのソースコードにおける影響範囲を算出して影響範囲情報を生成し、第１のプログラムのソースコードとマッピング情報と影響範囲情報に基づいて第１のプログラムのソースコードにおける影響範囲を算出して出力する。【選択図】図７
2015184847.tif 000002
【特許請求の範囲】
【請求項１】
変換部が、第１のプログラムのソースコードを第２の種類のソースコードに変換するとともに、第１のプログラムのソースコードと第２の種類のソースコードとの対応関係を記憶したマッピング情報を生成する変換工程と、
影響範囲算出部が、第２のプログラムのソースコードに基づいて、当該第２のプログラムのソースコードにおける影響範囲を算出して、影響範囲情報を生成する影響範囲算出工程と、
出力情報作成部が、前記第１のプログラムのソースコードと、前記マッピング情報と、前記影響範囲情報に基づいて、第１のプログラムのソースコードにおける影響範囲を算出して出力情報を作成する出力情報作成工程と、
を含む影響範囲算出方法。
【請求項２】
請求項１において、
前記出力情報作成工程では、
前記第１のプログラムのソースコードの起点位置情報の入力を受け付け、前記マッピング情報を用いて当該起点位置情報を第２のプログラムのソースコードにおける起点位置情報に変換し、
前記変換した起点位置情報を用いて、前記影響範囲情報を調査して前記起点から影響を受ける起点影響範囲を作成し、
前記調査した起点影響範囲を、前記第１のプログラムのソースコードの起点影響範囲に前記マッピング情報を用いて変換し、
前記変換した起点影響範囲と、前記第１のプログラムのソースコードを用いて、前記出力情報を作成することを特徴とする影響範囲算出方法。
【請求項３】
請求項１において、
前記出力情報作成工程では、
前記第１のプログラムのソースコードの起点位置情報の入力を受け付け、
前記影響範囲情報を、前記マッピング情報を用いて前記第１のプログラムのソースコード上での位置に変換し、
当該変換した影響範囲情報を用いて、前記起点から影響を受ける起点影響範囲を作成し、
前記第１のプログラムのソースコード上に前記起点影響範囲を表示する出力情報を作成することを特徴とする影響範囲算出方法。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記第１のプログラムのソースコードは、その実行に当たって前記第２のプログラムのソースコードに変換されるソースコードであることを特徴とする影響範囲算出方法。
【請求項５】
請求項４において、
前記第１のプログラムは、JSPであり、
前記第２のプログラムは、Java Servletであることを特徴とする影響範囲算出方法。
【請求項６】
第１のプログラムのソースコードを第２のプログラムのソースコードに変換するとともに、第１のプログラムのソースコードと第２の種類のプログラムのソースコードとの対応関係を記憶したマッピング情報を生成する変換部と、
第２のプログラムのソースコードに基づいて、当該第２のプログラムのソースコードにおける影響範囲を算出して、影響範囲情報を生成する影響範囲算出部と、
前記第１のプログラムのソースコードと、前記マッピング情報と、前記影響範囲情報に基づいて、第１のプログラムのソースコードにおける影響範囲を算出して出力情報を生成する出力情報作成部と、
を備えた影響範囲算出装置。
【請求項７】
請求項６において、
前記出力情報作成部は、
前記第１のプログラムのソースコードの起点位置情報の入力を受け付け、前記マッピング情報を用いて当該起点位置情報を第２のプログラムのソースコードにおける起点位置情報に変換し、
前記変換した起点位置情報を用いて、前記影響範囲情報を調査して前記起点から影響を受ける起点影響範囲を作成し、
前記調査した起点影響範囲を、前記第１のプログラムのソースコードの起点影響範囲に前記マッピング情報を用いて変換し、
前記変換した起点影響範囲と、前記第１のプログラムのソースコードを用いて、前記出力情報を作成することを特徴とする影響範囲算出装置。
【請求項８】
請求項６において、
前記出力情報作成部は、
前記第１のプログラムのソースコードの起点位置情報の入力を受け付け、
前記影響範囲情報を、前記マッピング情報を用いて前記第１のプログラムのソースコード上での位置に変換し、
当該変換した影響範囲情報を用いて、前記起点から影響を受ける起点影響範囲を作成し、
前記第１のプログラムのソースコード上に前記起点影響範囲を表示する出力情報を作成することを特徴とする影響範囲算出装置。
【請求項９】
請求項６乃至８のいずれかにおいて、
前記第１のプログラムのソースコードは、その実行に当たって前記第２のプログラムのソースコードに変換されるプログラムであることを特徴とする影響範囲算出装置。
【請求項１０】
請求項９において、
前記第１のプログラムは、JSPであり、
前記第２のプログラムは、Java Servletであることを特徴とする影響範囲算出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムソースコードの影響範囲を算出する技術に関する。
【背景技術】
【０００２】
システム開発においては、プログラム改修に伴って、他のプログラム波及を調査する必要が、しばしば生じる。これに対し、特許文献１では、ソースコードの影響範囲を自動で調査する技術が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−２１２２８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１においては、所定のプログラムにしか影響範囲ツールが対応していない。従って、プログラムごとに影響範囲調査ツールを準備する必要があるが、それには労力やコストがかかる。
【０００５】
本発明は、上記課題を考慮し、特定のプログラムに対応している影響範囲調査ツールを他のプログラムにも適用できるようにすることである。
【課題を解決するための手段】
【０００６】
本発明は、上記課題を解決するために、第１のプログラムのソースコードを第２のプログラムのソースコードに変換するとともに第１のプログラムのソースコードのプログラム文と第２のプログラムのソースコードのプログラム文との対応関係を記憶したマッピング情報を生成し、第２のプログラムのソースコードに基づいて当該第２のプログラムのソースコードにおける影響範囲を算出して影響範囲情報を生成し、第１のプログラムのソースコードとマッピング情報と影響範囲情報に基づいて第１のプログラムのソースコードにおける影響範囲を算出して出力する。
【発明の効果】
【０００７】
本発明によれば、影響範囲を調査するツールを容易に他のプログラムに対応させる技術を提供することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施例にかかる影響範囲算出システムの構成である。
【図２】本発明の一実施例にかかる処理対象ファイル（JSP）である。
【図３（ａ）】本発明の一実施例にかかる変換後のファイル（JavaServlet）である。
【図３（ｂ）】本発明の一実施例にかかる変換後のファイル（JavaServlet）である。
【図４】本発明の一実施例にかかるマッピング情報である。
【図５（ａ）】本発明の一実施例にかかるJavaServeletにおける影響範囲情報である。
【図５（ｂ）】本発明の一実施例にかかるJSPにおける影響範囲情報である。
【図６】本発明の一実施例にかかる出力画面である。
【図７】本発明の一実施例にかかる影響範囲算出のフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明の実施例を、図面を用いて説明する。
【実施例１】
【００１０】
図１は、本実施例の影響範囲算出システムの構成である。
【００１１】
PC（Personal Computer）１上の演算部２０（例えば、CPU（Central Processing Unit））には、変換部２１と、影響範囲算出部２２と、出力情報作成部２３とを備えている。変換部２１は、ソースコードを変換し、変換にかかる対応関係を記憶したマッピング情報３３を作成する。影響範囲算出部２２は、ソースコードの影響範囲を算出する。出力情報作成部２３は、出力するための情報を作成する。これらは、記憶部３０等に記憶されたプログラムを演算部上に呼び出すことにより、その機能を発揮する。
【００１２】
また、記憶部３０（例えば、HDD（Hard Disc Drive）や半導体メモリ）には、JSP（Java Server Pages）ファイル３１、Java Servletファイル３２、マッピング情報３３、影響範囲情報３４、出力情報３５が記憶される。JSPファイル３１は、影響範囲の調査対象のファイルである。Java Servletファイル３２は、JSPファイル３１の実行に当たって、JSPファイル３１から変換されて生成されるものである。マッピング情報３３は、JSPファイル３１とJava Servletファイル３２との中のソースコードの位置の対応関係を記憶しており、JSPファイル３１からJava Servletファイル３２への変換に際して生成される。マッピング情報内の項目は、JSPタグ＜％  ％＞で囲まれた範囲ごとに生成される。影響範囲情報３４は、ファイルの影響範囲を調査した結果が記憶されている。出力情報は、画面等への出力のために、ソースコード上に影響範囲情報を展開したものである。
【００１３】
また、図示省略しているが、入力部（マウス、キーボードなど）、出力部（ディスプレイやネットワークインターフェース）を備えている。なお、本実施例では、PC１を用いて説明を行うが、サーバクライアントシステムや、タブレットなど他の情報処理装置を用いてもよい。
【００１４】
図２に、本実施例の影響範囲算出対象であるJSPファイルのソースコードを示す。図３（ａ）（ｂ）に、Java Servlet（Javaに変換されたJSP）ファイルのソースコードを示す。都合上分割してあるが、図３（ｂ）は図３（ａ）の続きである。図２に示すJSPファイルを変換すると、図３（ａ）（ｂ）に示すJava Servletファイルになる。
【００１５】
図４は、本実施例におけるJSP−JavaServletマッピング情報である。このデータは、ＪＳＰからJava Servletへの変換時にＷＴＰ（Web Tool Platform）によって作成される。ＷＴＰは、綜合開発環境Eclipseのプラグインの一つである。また、JSPのソースコードとJava  Servletのソースコードとの対応関係を示している。例えば項目1では、Offset:950から開始される長さ（Length）１のJSPソースコードが、Offset:1007から開始される長さ（Length）１のServletのソースコードに変換されたことを示している。
【００１６】
図５（ａ）は、Java Servletにおける影響範囲データであり、図５（ｂ）は、JSPにおける影響範囲データである。影響範囲データの各項目は、波及元と波及先のそれぞれのソースコードと、その開始位置であるoffsetを有している。長さ（Length）は、ソースコードにより一意に算出可能である。
【００１７】
例えば、影響範囲データ（Java Servlet）の項目１では、offset:1020にある「str="test121"」が、offset：1155にある「str」に影響を与えていることを示している。項目２では、さらにこの「str」が、他のソースコードに影響を与え、項目３ではさらに他のソースコードに影響を与えている。影響範囲は、このように連鎖により、直接影響するソースコードの他、間接的に影響を与えるソースコードまで含んでいる。
【００１８】
図５（ｂ）は、JSPにおける影響範囲データであり、Java Servletにおける影響範囲データのソースコードの位置（offset）を変更したものである。
【００１９】
図６に、本実施例の影響範囲調査結果を画面出力した例を示す。調査対象であるJSPにおいて、影響の波及元のソースコードと波及先のソースコードが囲み線で囲まれ、波及元のソースコードから波及先のソースコードに矢印が表示されている。画面出力例では、画面上部の３２行目の「str="test121"」についての影響調査であり、画面内の多くのソースコードに直接または間接的に影響することが示されている。
【００２０】
次に、本実施例における影響範囲算出のやり方について説明する。図７は、本実施例における影響範囲算出のフローチャートである。
【００２１】
まず、処理対象ファイルであるＪＳＰファイル３１を読み込み、変換部２１が、それをJavaServletファイル３２に変換する（Ｓ７０１）。このとき、変換前のＪＳＰファイル３１のソースコードと変換後のJavaServlet３２のソースコードのそれぞれのソースコードの対応関係を示すマッピング情報３３を生成する。
【００２２】
JSPは、<％と％>とで囲まれた部分にJavaコードが記載され、HTMLの中にスクリプトが断片的に見えるScriptlet記法により記述される。JavaServletは、サーバ上でウェブページなどを動的に生成したりデータ処理を行うためにJavaで作成されたプログラムである。既存の技術であるＪＳＰからJavaServletへの変換は、例えば次のように行う。ＪＳＰの<%@ %>タブの内側は、page import=xxxxの情報のみＪａｖａに変換され、他は変換されない。例えば、ＪＳＰのソースコード２０１は、Ｊａｖａではソースコード３０１のように変換される。
【００２３】
ＪＳＰの<% %>タブ内の内容は、Ｊａｖａでは_jspServiceメソッドに変換される。例えば、ＪＳＰのソースコード２０２、２０３は、Ｊａｖａではソースコード３０２、３０３のようにそれぞれ変換される。
【００２４】
ＪＳＰの<%=%>タブ内の内容は、Ｊａｖａではout.print(xxx)の形で_jspServiceメソッドに変換される。例えば、ＪＳＰのソースコード２０４、２０６は、Ｊａｖａではソースコード３０４、３０６のようにそれぞれ変換される。
【００２５】
ＪＳＰの<%! %>タブ内の内容は、そのまま変換される。例えば、ＪＳＰのソースコード２０５は、Ｊａｖａではソースコード３０５のように変換される。
【００２６】
また、単なるソースコード変換ではパッケージ情報が自動生成されないが、本変換部２１では、設定値により、例えば３０８のようにパッケージ情報をプログラム上に追記する。
【００２７】
この変換時に、図４に示すJSP−JavaServletマッピング情報も作成される。
【００２８】
次に、影響範囲算出部２２が、JavaServletファイル３２を読み込み、影響範囲を算出して影響範囲情報３４を生成する（Ｓ７０２）。影響範囲算出としては、例えば、特許文献１記載の発明のように、ソースコードを構文解析して抽象構文木に分析し、この抽象構文木を形成する命令文が命令用語集を用いて検索し、命令文の依存関係に従って命令文のつながり及び依存関係を検出することによって行うことができる。しかしながらこれに限らず、さまざまな影響範囲算出方法を用いることができる。
【００２９】
影響範囲調査の結果は、図５（ａ）に示すように、影響範囲情報３４として記憶される。影響範囲情報３４は、命令文の波及元（依存先）と波及先（依存元）の関係を複数集めた集合として記述されている。
【００３０】
次に、出力情報作成部２３が、出力するための出力情報３５を生成し、出力部がこれをディスプレイの画面に表示する（Ｓ７０３）。出力情報３５は、影響範囲情報３４をマッピング情報３３を用いて変換してＪＳＰファイル３１での影響範囲（依存関係）を示す情報とし、これをＪＳＰファイル３１のソースコード上に重ねて表示する情報である。
【００３１】
まず、JSP上にて、入力部を介してユーザから影響範囲を調査する起点（起点となるソースコード）の入力を受け付ける。起点入力受付は、本実施例では出力工程の始めに行っているが、もっと前（変換工程の前や、変換工程と影響範囲算出工程との間や、いずれかの工程中など）に受け付けておいてもよい。
【００３２】
出力情報作成部２３は、変換部２１を用いて、この起点を、マッピング情報３３を用いて、Java Servlet上の位置（調査するJSPソースコードに対応するJavaServletソースコード）に変換する。
【００３３】
そして、影響範囲情報３４を用いて、変換された起点位置におけるJava Servletプログラム上での影響範囲を算出する。影響範囲は、波及元ソースコードと波及先ソースコードとの組を辿って、ソースコードの組の集合体となる。すなわち、変換された位置におけるソースコードが、影響範囲情報３４の波及元として登録されているか検索し、登録されていた場合には、それに対応する波及先として登録されているソースコード及び位置情報（offset）を取得して影響範囲に追加する。そしてさらに、取得したソースコードが波及元として登録されているか検索し、見つかった場合には、波及先ソースコードを取得、さらにこのソースコードが波及元としているか検索を行う。これを、新たな影響範囲のソースコードが追加されなくなるまで繰り返し行う。一つの波及元ソースコードに対して、複数の波及先ソースコードが登録されている場合もあり、その場合には、その複数のソースコードについて検索を行う。図５（ａ）においては、項目１〜６については、すべて「str="test121"」の影響範囲となる。
【００３４】
次に、算出した影響範囲について、Java Servletの位置情報から、JSPの位置情報へ、マッピング情報３３を用いて変換する。図５（ｂ）は、ＪＳＰに変換した後の影響範囲情報である。ソースコードは変わらず、offsetがJSPでの位置に変更されている場合が多いが、項目６の「str（offset1317）」と「out.print(str) （offset1317）」のように、JSPでの対応先が両方とも同じ「str（offset742）」になる場合には、JSPの影響範囲には変換されない項目もある。
【００３５】
そして、位置情報を変換した影響範囲を、JSPソースコード上に表示する出力情報を作成する。JSPソースコード上に影響範囲を表示した画面表示例を、図６に示す。
【００３６】
本画面は、次のように作成する。まず、JSPファイル３１からそのソースコードを取得する。そして、JSPの位置に変換した影響範囲情報を用いて、影響範囲をソースコード上に記入する。例えば、図５（ｂ）の項目１であれば、波及元ソースコードの「str="test121」と、波及先ソースコードの「str」を囲み線で囲み、波及元ソースコードから波及先ソースコードへ矢印を付与する。これを該当した影響範囲情報の該当項目すべてに対して矢印を付与することによって、図６に示す画面表示となる。
【００３７】
なお、影響範囲（囲み線と矢印）は、起点を指示してその起点についての影響範囲を示すことが、通常の使用である。しがしながら、起点を指示することなく、影響範囲算出工程S７０２で算出した影響範囲情報の全体について出力情報にて囲み線と依存を示す矢印を表示させることも可能である。この場合、特定のソースコードではなく、いずれかのソースコードに対して依存関係にあるソースコードについて、囲み線と矢印が表示される。
【００３８】
また、影響範囲算出工程S７０２で予め起点を指定しておき、当該起点に関係する影響範囲のみ抽出して影響範囲情報３４を作成するようにしてもよい。
【００３９】
また、JavaServletの影響範囲情報３４の全部をＪＳＰの影響範囲情報に変換した後に特定の起点についての影響範囲情報を抽出しても、指定された特定の起点（ソースコード）のoffsetをJavaServletの位置に変換して影響範囲を調査し、該当した影響範囲のみをJSPの位置に変換してもよい。
【００４０】
以上、このように影響範囲を算出することで、影響範囲算出ツールをさまざまなプログラムに容易に対応させることができる。
【符号の説明】
【００４１】
１・・・PC,２０・・・演算部、２１・・・変換部、２２・・・影響範囲算出部、２３・・・出力情報作成部、３０・・・記憶部、３１・・・JSPファイル、３２・・・Java Servletファイル、３３・・・マッピング情報、３４・・・影響範囲情報、３５・・・出力情報。
【図１】
2015184847.tif 000003
【図２】
2015184847.tif 000004
【図３（ａ）】
2015184847.tif 000005
【図３（ｂ）】
2015184847.tif 000006
【図４】
2015184847.tif 000007
【図５（ａ）】
2015184847.tif 000008
【図５（ｂ）】
2015184847.tif 000009
【図６】
2015184847.tif 000010
【図７】
2015184847.tif 000011