JP6111150B2 - ソースコード解析装置、ソースコード解析方法、及びプログラム - Google Patents

ソースコード解析装置、ソースコード解析方法、及びプログラム Download PDF

Info

Publication number
JP6111150B2
JP6111150B2 JP2013128498A JP2013128498A JP6111150B2 JP 6111150 B2 JP6111150 B2 JP 6111150B2 JP 2013128498 A JP2013128498 A JP 2013128498A JP 2013128498 A JP2013128498 A JP 2013128498A JP 6111150 B2 JP6111150 B2 JP 6111150B2
Authority
JP
Japan
Prior art keywords
merge
source code
screen
unit
conditional
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013128498A
Other languages
English (en)
Other versions
JP2015005031A (ja
Inventor
岡田 譲二
譲二 岡田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Data Corp
Original Assignee
NTT Data Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NTT Data Corp filed Critical NTT Data Corp
Priority to JP2013128498A priority Critical patent/JP6111150B2/ja
Publication of JP2015005031A publication Critical patent/JP2015005031A/ja
Application granted granted Critical
Publication of JP6111150B2 publication Critical patent/JP6111150B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、ソースコード解析装置、ソースコード解析方法、及びプログラムに関する。
情報処理システムにおいて各種機能を追加する場合には、一般的に、既存のソースコードに対して、追加機能に係るソースコードを追加し、バイナリコード化することで実現される。そのため、何回も機能追加されたソースコードには、目的(機能)の異なる種々のソースコードが記述されることになり、結果として保守性が非常に低下する場合がある。このような場合に対応する技術としては、例えば、特許文献1に記載の技術が知られている。
特許文献1に記載の技術では、データアクセス処理とロジック処理とが混在しているソースコードから、ロジック処理とデータアクセス処理との境界を抽出することにより、ソースコードにおいて、ロジック処理とデータアクセス処理とを分離することが可能である。
特開2012−203726号公報
ところで、例えば、JSP(Java Server Pages)ファイルのような画面を定義するファイルに、画面出力に関するソースコードが複数記述されていることがある。このような画面を定義するファイル(JSPファイル)では、保守性の高いソースコードを作成するためには、画面を定義するファイルに記述されているソースコードを画面ごとに分割する必要がある。
しかしながら、このような画面を定義するファイル(JSPファイル)では、画面上に出力する画面構成要素(例えば、HTML要素)に関するソースコードを複数の画面で共有した上で、条件式によって出力する画面を変更する制御を行っている場合がある。このような場合に、複数の画面構成要素に基づいて画面出力するため、全ての画面を網羅するように画面を分割すると、生成される画面数が爆発的に増加してしまうということがあった。例えば、ソースコードに含まれる条件分岐(例えば、IF文)の数が50箇所あった場合、生成される画面数は、2の50乗の画面数となり、爆発的に増加してしまうということがあった。上述した特許文献1に記載の技術では、このような場合に対応することができずに、適切に出力画面を解析することができなかった。
本発明は、上記問題を解決すべくなされたもので、その目的は、適切に出力画面を解析することができるソースコード解析装置、ソースコード解析方法、及びプログラムを提供することにある。
上記問題を解決するために、本発明の一態様は、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出部と、予め定められたマージ規則に基づいて、前記抽出部が抽出した前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理部と、前記マージ処理部によって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成部とを備えることを特徴とするソースコード解析装置である。
また、本発明の一態様は、上記のソースコード解析装置において、前記マージ処理部は、前記条件分岐を併合すると判定した場合に、前記マージ規則に基づいて、当該条件分岐によって分岐されて処理される前記画面構成要素のうちの1つに併合することを特徴とする。
また、本発明の一態様は、上記のソースコード解析装置において、前記抽出部は、前記ソースコードを構文解析して前記画面構成要素と前記条件分岐とを抽出するとともに、抽出した前記条件分岐の条件式を、条件式を識別する条件識別情報に置き換えた条件分岐の記述と、抽出した前記画面構成要素とを含む中間ソースコードを生成し、前記マージ処理部は、前記マージ規則に基づいて、前記中間ソースコードに含まれる前記条件識別情報に置き換えた条件分岐に対して、併合するか否かを判定することを特徴とする。
また、本発明の一態様は、上記のソースコード解析装置において、前記抽出部は、前記構文解析に基づいて前記中間ソースコードを構文木として生成し、前記マージ処理部は、前記条件識別情報に置き換えた条件分岐のうち、前記構文木における条件分岐の入れ子構造の階層が深い条件分岐を優先して前記マージ処理を実行することを特徴とする。
また、本発明の一態様は、上記のソースコード解析装置において、前記画面一覧生成部は、前記分岐される状態の組み合わせのうちで、常に偽となる前記分岐される状態の組み合わせを削除して、前記画面一覧を生成することを特徴とする。
また、本発明の一態様は、上記のソースコード解析装置において、前記マージ処理部は、前記マージ処理された後の前記分岐される状態の組み合わせの画面数が、所定の画面数以下になるように、前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行することを特徴とする。
また、本発明の一態様は、上記のソースコード解析装置において、前記マージ処理部は、前記マージ処理を実行した後における前記分岐される状態の組み合わせの画面数が、前記マージ処理を実行する前の前記分岐される状態の組み合わせの画面数に対する所定の割合の画面数以下、又は、前記ソースコードによって実行される機能数に応じた所定の画面数以下になるように前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行することを特徴とする。
また、本発明の一態様は、上記のソースコード解析装置において、前記画面一覧生成部によって生成された前記画面一覧に基づいて、前記画面一覧に含まれる各画面を定義するソースファイルを生成するソースファイル生成部を備えることを特徴とする。
また、本発明の一態様は、抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップとを含むことを特徴とするソースコード解析方法である。
また、本発明の一態様は、コンピュータに、抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップとを実行させるためのプログラムである。
本発明によれば、ソースコードの解析において、適切に出力画面を解析することができる。
第1の実施形態によるソースコード解析装置の一例を示すブロック図である。 本実施形態におけるJSPファイルのソースコードの一例を示す図である。 本実施形態における中間ソースコードの一例を示す図である。 本実施形態における置換情報記憶部のデータ構成の一例を示す構成図である。 本実施形態におけるマージ規則の一例を示す図である。 本実施形態における画面一覧の一例を示す図である。 第1の実施形態におけるソースコード解析の手順の一例を示すフローチャートである。 本実施形態におけるIF文のマージ処理の一例を説明する説明図である。 本実施形態における画面一覧の生成処理の一例を説明する説明図である。 本実施形態におけるSMTソルバによる処理の一例を説明する説明図である。 本実施形態におけるソースコードの構文解析の一例を説明する説明図である。 本実施形態における中間ソースコードの別の一例を示す図である。 本実施形態における中間ソースコードを構文木で表現した一例を示す図である。 本実施形態におけるIF文のマージ処理の一例を説明する第1の図である。 本実施形態におけるIF文のマージ処理の一例を説明する第2の図である。 本実施形態におけるIF文のマージ処理がされた中間ソースコードの一例を示す図である。 本実施形態におけるIF文のマージ処理の一例を示すフローチャートである。 第2の実施形態におけるソースコード解析の手順の一例を示すフローチャートである。
以下、本発明の一実施形態によるソースコード解析装置、及びソースコード解析方法について、図面を参照して説明する。
[第1の実施形態]
図1は、第1の実施形態によるソースコード解析装置1の一例を示すブロック図である。
この図において、ソースコード解析装置1は、記憶部40、入力部50、表示部60、及び制御部70を備えている。
なお、本実施形態におけるソースコード解析装置1は、画面を定義するソースファイル(例えば、JSPファイル)に記述されているソースコードを取得し、取得したソースコードを解析して、ソースファイルで定義されている画面一覧を生成する。また、ソースコード解析装置1は、生成した画面一覧を表示部60に表示させるとともに、画面一覧に基づいて、画面ごとのJSPファイルを生成し、生成した画面ごとのJSPファイルを出力する。
ここで、ソース記憶部20は、画面を定義するソースファイルであるJSPファイルを記憶している。JSPファイルは、JAVA(登録商標)言語によって画面を定義するファイルであり、例えば、ソースコード内に複数の画面の定義がなされている。ソース記憶部20が記憶するJSPファイルは、例えば、図2に示すソースコードSC1のような記述がされているファイルである。JSPファイルの具体例については、図2を参照して後述する。
出力情報記憶部30は、ソースコード解析装置1の出力結果を記憶する。すなわち、出力情報記憶部30は、ソースコード解析装置1が生成した画面一覧や画面ごとのJSPファイルなどの出力結果を記憶する。
記憶部40は、ソースコード解析装置1がソースコードを解析する際に使用する各種情報を記憶する。記憶部40は、中間コード記憶部41、置換情報記憶部42、マージ規則記憶部43、マージ結果記憶部44、及び画面一覧記憶部45を備えている。
中間コード記憶部41は、後述する抽出部71によって生成される図3に示すようなソースコードSC2(中間成果物)を中間ソースコードとして記憶する。中間ソースコードの詳細については、図3を参照して後述する。また、中間コード記憶部41は、抽出部71によってソースコードを構文解析された解析結果を中間成果物として記憶する。
置換情報記憶部42は、例えば、図4に示すように、上述した中間ソースコードを生成する際に利用したIF文の条件式を識別する条件ID(識別情報)と、条件式とを対応付けた置換情報を記憶する。ここで、図4を参照して、置換情報記憶部42が記憶する置換情報のデータ構成について説明する。
図4は、本実施形態における置換情報記憶部42のデータ構成の一例を示す構成図である。
この図において、置換情報記憶部42は、「項番」と、「条件ID」と、「条件式」とを対応付けて置換情報として記憶する。ここで、「項番」は、置換情報の番号(項番)を示し、「条件ID」は、条件式を識別する識別情報であって、条件式に代わって置換される識別情報を示し、「条件式」は、置き換えられる条件式を示している。すなわち、置換情報記憶部42は、後述する抽出部71によって生成される中間ソースコードにおいて、置換された「条件ID」と、「条件式」との組を記憶する。
例えば、図4に示す例では、置換情報記憶部42は、「項番」が“1”である置換情報は、「条件ID」が“条件1”であり、この「条件ID」に置換された「条件式」が、“module==“MODIFY””であることを示している。
図1に戻り、マージ規則記憶部43は、後述するマージ処理部72によるマージ処理を実行するためのマージ規則を記憶している。ここで、マージ規則は、例えば、図5に示すような情報であり、1つのJSPファイルが定義する複数の画面のうち、画面の違いとは言えないような細かな画面の違いを併合して画面数を低減するための規則である。また、マージ規則は、例えば、有識者によって予め定められ、マージ規則記憶部43に記憶されている。
マージ結果記憶部44は、後述するマージ処理部72によるマージ処理を実行した結果であるマージ結果を記憶する。
画面一覧記憶部45は、例えば、図6に示すような画面一覧を、後述する画面一覧の出力結果として記憶する。ここで、図6を参照して、画面一覧記憶部45が記憶する画面一覧のデータ構成について説明する。
図6は、本実施形態における画面一覧記憶部45のデータ構成の一例を示す構成図である。
この図において、画面一覧記憶部45は、「論理状態」を列とし、画面出力を定義する画面構成要素である「HTML要素」(Hyper Text Markup Language要素)を行とした画面の一覧表を画面一覧GL1として記憶している。ここで、「論理状態」は、条件分岐によって分岐される状態の組み合わせの論理状態を示しており、1つの列が1つの論理状態に対応する。また、「HTML要素」は、JSPファイルのソースコードから抽出されたHTML要素を示している。また、各行における“○”は、対応する「論理状態」において「HTML要素」を適用することを示し、“×”は、対応する「論理状態」において「HTML要素」を適用しないことを示している。なお、“*”は、マージ処理部72によるマージ処理によりマージされた「HTML要素」を示しており、その詳細については後述する。
例えば、図6に示す例では、「論理状態」が“条件1=真、条件2=真”及び“条件1=真、条件2=偽”である場合に、「HTML要素」である「<button name=“新規取引”>」は、“○”(表示)であることを示している。また、「論理状態」が“条件1=偽、条件2=真”及び“条件1=偽、条件2=偽”である場合に、「HTML要素」である「<button name=“新規取引”>」は、“×”(非表示)であることを示している。
また、図6に示す例では、画面一覧の各列は、1つの論理状態における画面(論理画面)を示している。例えば、列G1は、「論理状態」が“条件1=真、条件2=真”である場合の論理画面を示している。
このように、画面一覧は、1つのJSPファイルにおいて定義している複数の画面(論理画面)の設計仕様を示す設計書に相当する。
再び図1に戻り、入力部50は、例えば、キーボードやマウスなどの入力装置であり、使用者の操作により、各種情報を取得する。
表示部60(出力部)は、例えば、液晶ディスプレイ装置などの表示装置であり、ソースコード解析装置1を操作する際の操作画面や、ソースコード解析装置1の出力結果である画面一覧などを表示する。
制御部70は、例えば、CPU(Central Processing Unit)などを含むプロセッサであり、ソースコード解析装置1を統括的に制御する。制御部70は、抽出部71、マージ処理部72、画面一覧生成部73、表示処理部74、及びJSPファイル生成部75を備えている。
抽出部71は、ソース記憶部20からソースファイル(例えば、JSPファイル)に記述されているソースコードを取得し、取得したソースコードに含まれる画面出力を定義するHTML要素(画面構成要素)と、画面出力に関するIF文などの条件分岐とを抽出する。具体的に、抽出部71は、ソースコードを構文解析してHTML要素とIF文(条件分岐)とを抽出するとともに、抽出したIF文の条件式を、条件式を識別する条件ID(条件識別情報)に置き換えたIF文の記述と、抽出したHTML要素とを含む中間ソースコードを生成する。すなわち、抽出部71は、図2に示すようなソースコードSC1を取得して、取得したソースコードSC1を構文解析して、図3に示すようなソースコードSC2(中間ソースコード)を生成する。
ここで、図2及び図3を参照して、JSPファイルのソースコード、及び中間ソースコードの具体例について説明する。
図2は、本実施形態におけるJSPファイルのソースコードの一例を示す図である。
この図において、ソースコードSC1は、JSPファイルに記述されているソースコードの一例を示している。なお、ソースコードSC1には、IF文BL1〜BL3が含まれている。抽出部71は、ソースコードSC1をソース記憶部20から取得し、構文解析することにより、IF文BL1〜BL3及びHTML要素を抽出する。
また、図3は、本実施形態における中間ソースコードの一例を示す図である。
この図において、ソースコードSC2は、抽出部71によって生成された中間ソースコードの一例を示している。なお、ソースコードSC2には、条件IDに置き換えられたIF文BL4〜BL6が含まれている。抽出部71は、ソースコードSC1から抽出したIF文BL1〜BL3及びHTML要素のみのソースコードを生成し、IF文BL1〜BL3の条件式を、条件IDに置き換えて、IF文BL4〜BL6を含む中間ソースコード(ソースコードSC2)を生成する。
なお、抽出部71は、条件IDに置き換えの際に、図4に示すように、「条件ID」と「条件式」とを対応付けて、置換情報記憶部42に記憶させる。また、抽出部71は、生成した中間ソースコードを中間コード記憶部41に記憶させる。
また、抽出部71は、第1構文解析部711と第2構文解析部712とを備えている。
第1構文解析部711(第1パーサ)は、HTMLの構文解析を行う構文解析器である。第1構文解析部711は、ソース記憶部20から取得したソースコードのHTMLを構文解析し、各ノード(例えば、“<%・・・>”のタグ(“%”タグ))を意味付けする。
第2構文解析部712(第2パーサ)は、第1構文解析部711によって構文解析された各ノードをさらに、構文解析して、例えば、IF文などの分岐処理に関連した処理を解析する。
なお、抽出部71は、第1構文解析部711及び第2構文解析部712の解析結果を中間成果物として、中間コード記憶部41に記憶させる。
また、第1構文解析部711及び第2構文解析部712の詳細については、後述する。
マージ処理部72は、予め定められたマージ規則に基づいて、抽出部71が抽出した条件分岐(例えば、IF文)をマージ(併合)するか否かを判定するとともに、条件分岐をマージすると判定した場合に、当該条件分岐をマージするマージ処理を実行する。マージ処理部72は、中間コード記憶部41から中間ソースコード及び構文解析結果を取得するとともに、マージ規則記憶部43からマージ規則を取得する。マージ処理部72は、取得した中間ソースコードに含まれる条件分岐(例えば、IF文)を、構文解析結果及びマージ規則に基づいて、マージするか否かを判定する。そして、マージ処理部72は、条件分岐(例えば、IF文)をマージすると判定した場合に、マージ規則に基づいて、当該条件分岐によって分岐されて処理されるHTML要素のうちの1つにマージする。
図5は、本実施形態におけるマージ規則の一例を示す図である。
例えば、図5に示すマージ規則の例では、IF文に対する以下のような規則が、マージ規則記憶部43に記憶されており、マージ処理部72は、このマージ規則に基づいて、マージ処理を実行する。マージ処理部72は、マージ処理後のソースコードと、マージしたIFに関する情報とをマージ結果としてマージ結果記憶部44に記憶させる。
(規則1)IF文によって分岐されて処理される「HTML要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の有無”である場合に、IF文をマージし、「残すオプション」は、“存在する定数”である。
(規則2)IF文によって分岐されて処理される「HTML要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の違い(一方がスペースの場合)”である場合に、IF文をマージし、「残すオプション」は、“スペースでない定数”である。
(規則3)IF文によって分岐されて処理される「HTML要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の違い(両方ともスペース以外の場合)”である場合に、IF文をマージしない。
(規則4)IF文によって分岐されて処理される「HTML要素」が“テキストボックス”であり、その「オプションの違い」が“テキストボックスの有無”である場合に、IF文をマージしない。
(規則5)IF文によって分岐されて処理される「HTML要素」が“テキストボックス”であり、その「オプションの違い」が“テキストボックスのmaxlength(最大文字列)の値の違い”である場合に、IF文をマージし、「残すオプション」は、“値の大きい側”である。
(規則6)IF文によって分岐されて処理される「HTML要素」が“チェックボックス”であり、その「オプションの違い」が“checkedの有無”である場合に、IF文をマージし、「残すオプション」は、“checkedあり”である。
例えば、上述の(規則1)に基づいて、マージ処理部72は、IF文によって分岐されて処理される「HTML要素」が“テキスト出力”であり、その「オプションの違い」が“テキスト出力で表示する定数の有無”である場合に、IF文をマージすると判定する。この場合、マージ処理部72は、“存在する定数”をオプションとしたHTML要素(“テキスト出力”)に、IF文をマージする。
なお、マージ規則記憶部43は、図5に示すように、マージ規則として、「HTML要素」、「オプションの違い」、「マージの有無」、及び「残すオプション」を関連付けて記憶し、このようなマージ規則をマージ処理部72が、マージ処理のパラメータとして取得して、マージ処理を実行してもよい。また、マージ規則記憶部43は、上述したようなマージ規則を実行するプログラムを記憶しており、マージ処理部72が、マージ規則記憶部43が記憶するマージ規則に基づくプログラムをマージ処理として実行させてもよい。
画面一覧生成部73は、マージ処理部72によって処理された後のIF文、及びHTML要素に基づいて、HTML要素とIF文によって分岐される状態の組み合わせの一覧(図6の画面一覧GL1参照)を示す画面一覧を生成する。すなわち、画面一覧生成部73は、マージ結果記憶部44からマージ結果を取得し、マージ処理部72によって処理された中間ソースコードに残ったIF文の条件IDの論理状態の組み合わせと、HTML要素とに基づいて、図6に示すような画面一覧を生成し、生成した画面一覧を画面一覧記憶部45に記憶させる。
なお、図6において、“*”は、マージ処理部72によるマージ処理によりマージされたHTML要素を示している。画面一覧生成部73は、マージ結果記憶部44からマージしたIFに関する情報に基づいて、画面一覧においてマージ処理によりマージされたIF文のHTML要素に対応する箇所に“*”を挿入する。
また、画面一覧生成部73は、条件分岐(IF文)によって分岐される状態の組み合わせのうちで、常に偽となる組み合わせを削除して、画面一覧を生成する。画面一覧生成部73は、例えば、不図示のSMT(Satisfiability Modulo Theories)ソルバを備えており、SMTソルバを用いて常に偽となる恒偽の組み合わせである論理状態を検出し、検出した論理状態を画面一覧から削除する。具体的に、画面一覧生成部73は、マージ処理により残ったIF文の「条件ID」に対応する「条件式」を置換情報記憶部42から取得し、取得した「条件式」を入力としたSMTソルバの出力結果により、恒偽である論理状態を検出する。画面一覧生成部73は、検出した恒偽である論理状態を画面一覧から削除する。
表示処理部74(出力修理部)は、画面一覧生成部73が生成した画面一覧を表示部60に表示させる。表示処理部74は、例えば、ユーザによる入力部50からの操作に応じて、画面一覧生成部73が生成した画面一覧を表示部60に表示させる。また、表示処理部74は、ユーザによる入力部50からの操作に応じて、マージ結果記憶部44からマージしたIFに関する情報を取得し、画面一覧におけるマージされたIF文のHTML要素に対応する箇所(“*”)の詳細情報を表示部60に表示させる。
また、表示処理部74は、例えば、ユーザによる入力部50からの操作に応じて、画面一覧生成部73が生成した画面一覧を出力情報記憶部30に出力し、出力情報記憶部30に画面一覧を記憶させてもよい。
JSPファイル生成部75(ソースファイル生成部)は、画面一覧生成部73によって生成された画面一覧に基づいて、画面一覧に含まれる各画面を定義するソースファイル(JSPファイル)を生成する。JSPファイル生成部75は、例えば、ユーザによる入力部50からの操作に応じて、画面一覧記憶部45から画面一覧を取得し、各論理状態に対応するJSPファイルを生成する。なお、JSPファイル生成部75は、JSPファイルを生成する際に、置換情報記憶部42からIF文の「条件ID」に対応する「条件式」を取得し、「条件ID」を元のJSPファイルに記述されていた「条件式」に置き換える。また、JSPファイル生成部75は、1つの論理状態に対して1つのJSPファイルを生成する。JSPファイル生成部75は、生成した各画面を定義するJSPファイルを出力情報記憶部30に出力し、各画面を定義するJSPファイルを出力情報記憶部30に記憶させる。
次に、本実施形態におけるソースコード解析装置1の動作について、図面を参照して説明する。
ここでは、まず、ソースコード解析装置1のソースコード解析の全体の処理を説明する。
<ソースコード解析処理>
図7は、本実施形態におけるソースコード解析の手順の一例を示すフローチャートである。
この図において、まず、ソースコード解析装置1の制御部70は、JSPファイルのソースコードを取得する(ステップS101)。すなわち、制御部70の抽出部71は、ソース記憶部20からJSPファイルに記述されているソースコードを取得する。ここでは、一例として、抽出部71は、図2に示すソースコードSC1を取得する。
次に、抽出部71は、ソースコードを構文解析して、HTML要素とIF文とを抽出する(ステップS102)。抽出部71は、第1構文解析部711及び第2構文解析部712の構文解析結果に基づいて、HTML要素とIF文とを抽出する。なお、抽出部71は、第1構文解析部711及び第2構文解析部712の構文解析結果を中間成果物として、中間コード記憶部41に記憶させる。
次に、抽出部71は、IF文の条件式を条件IDに置き換えた中間ソースコードを生成する(ステップS103)。すなわち、抽出部71は、図2に示すソースコードSC1から図3に示す中間ソースコード(ソースコードSC2)を生成し、生成した中間ソースコードを中間コード記憶部41に記憶させる。なお、図3のIF文BL4及びIF文BL6に示すように、抽出部71は、同一の条件文には、同一の条件IDに置き換える。また、抽出部71は、図4に示すように、置き換えた「条件ID」と、「条件式」とを対応付けて置換情報として置換情報記憶部42に記憶させる。
次に、制御部70のマージ処理部72は、マージ規則に基づいてIF文をマージする(ステップS104)。マージ処理部72は、中間コード記憶部41から中間ソースコード及び構文解析結果を取得するとともに、マージ規則記憶部43からマージ規則を取得する。また、マージ処理部72は、取得した中間ソースコードに含まれるIF文を、構文解析結果及びマージ規則に基づいて、マージするか否かを判定する。そして、マージ処理部72は、IF文をマージすると判定した場合に、マージ規則に基づいて、当該IF文によって分岐されて処理されるHTML要素のうちの1つにマージする。ここで、図8を参照して、マージ処理の具体例について説明する。
図8は、本実施形態におけるIF文のマージ処理の一例を説明する説明図である。
この図において、図8(a)は、中間ソースコード(ソースコードSC2)を示し、図8(b)は、マージ処理された中間ソースコード(ソースコードSC3)を示している。
図8に示す例では、マージ処理部72は、図8(a)のソースコードSC2のIF文に関連する記述文BL7を、図5に示す「No.」が“6”のマージ規則(規則6)に基づいて、図8(b)のソースコードSC3の記述文BL8にマージするマージ処理を実行する。この場合、マージ処理部72は、記述文BL7が、IF文によって分岐されて処理される「HTML要素」が“チェックボックス”であり、その「オプションの違い」が“checkedの有無”であるため、マージ規則(規則6)に基づいて、IF文をマージすると判定する。そして、マージ処理部72は、記述文BL7をマージして、“checkedあり”であるHTML要素(記述文BL8)を残したソースコードSC3を生成する。
このように、IF文をマージすることにより、マージ処理部72は、ソースコードに含まれるIF文の数を低減することができる。
次に、制御部70の画面一覧生成部73は、残ったIF文とHTML要素とに基づいて
画面一覧を生成する(ステップS105)。すなわち、画面一覧生成部73は、マージ結果記憶部44からマージ結果を取得し、マージ処理部72によって処理された中間ソースコードに残ったIF文の条件IDの論理状態の組み合わせと、HTML要素とに基づいて、画面一覧を生成する。ここで、図9を参照して、画面一覧の生成の具体例について説明する。
図9は、本実施形態における画面一覧の生成処理の一例を説明する説明図である。
この図において、図9(a)は、マージ処理された中間ソースコード(ソースコードSC3)を示し、図9(b)は、ソースコードSC3から生成された画面一覧GL2を示している。画面一覧生成部73は、図9(b)に示すように、「論理状態」を列とし、画面出力を定義する「HTML要素」を行とした画面の一覧表を画面一覧GL2として生成する。
図9に示す例では、ソースコードSC3に残ったIF文が、“条件1”のみであるため、画面一覧GL2の論理状態は、“条件1=真”と“条件1=偽”の2つの論理状態となる。したがって、画面一覧生成部73は、論理状態が“条件1=真”の場合の画面情報(列G2)と、論理状態が“条件1=偽”の場合の画面情報(列G3)とを示す画面一覧GL2を生成する。
次に、画面一覧生成部73は、条件が恒偽となる画面を画面一覧から削除する(ステップS106)。画面一覧生成部73は、マージ処理により残ったIF文の「条件ID」に対応する「条件式」を置換情報記憶部42から取得し、取得した「条件式」を入力としたSMTソルバの出力結果(図10参照)により、恒偽である論理状態を検出する。画面一覧生成部73は、検出した恒偽である論理状態を画面一覧から削除する。
図10は、本実施形態におけるSMTソルバによる処理の一例を説明する説明図である。
この図に示しように、画面一覧生成部73は、「条件式」を入力としたSMTソルバの出力結果により、恒偽となる画面を画面一覧から削除する。
図10に示す例では、「条件1(残高==0)」が“真”で、且つ、「条件2(残高>0)」が“真”である場合に、SMTソルバの結果が恒偽であり、画面一覧生成部73は、この場合に対応する例を画面一覧から削除する。
なお、画面一覧生成部73は、生成した画面一覧を画面一覧記憶部45に記憶させる。
次に、制御部70の表示処理部74は、生成した画面一覧を出力する(ステップS107)。すなわち、表示処理部74は、画面一覧生成部73が生成した画面一覧を表示部60に表示させる。また、表示処理部74は、ユーザによる入力部50からの操作に応じて、マージ結果記憶部44からマージしたIFに関する情報を取得し、画面一覧におけるマージされたIF文のHTML要素に対応する箇所(“*”)の詳細情報を表示部60に表示させる。
次に、制御部70のJSPファイル生成部75は、画面一覧に基づいて画面ごとのJSPファイルを生成する(ステップS108)。すなわち、JSPファイル生成部75は、画面一覧生成部73によって生成された画面一覧に基づいて、画面一覧に含まれる各画面を定義するソースファイル(JSPファイル)を生成する。ここで、画面一覧の各列は、1つの論理状態を示しており、JSPファイル生成部75は、各列において対応するHTML要素を記述することで、画面ごとのJSPファイルを生成する。これにより、JSPファイル生成部75は、1つの論理状態に対して1つのJSPファイルを生成する。なお、JSPファイル生成部75は、JSPファイルを生成する際に、置換情報記憶部42からIF文の「条件ID」に対応する「条件式」を取得し、「条件ID」を元のJSPファイルに記述されていた「条件式」に置き換える。JSPファイル生成部75は、生成した画面ごとのJSPファイルを出力情報記憶部30に出力し、JSPファイルを出力情報記憶部30に記憶させる。
なお、上述した図7に示す例では、ステップS107の処理(画面一覧の出力処理)と、ステップS108の処理(JSPファイル生成処理)とを必ず行う場合について説明したが、ステップS107及びステップS108の処理をユーザによる入力部50からの操作に応じて、実行するようにしてもよい。
次に、抽出部71によるソースコードを構文解析について、図11を参照して説明する。
<構文解析処理>
図11は、本実施形態におけるソースコードの構文解析の一例を説明する説明図である。
この図において、図11(a)は、構文解析の対象となるソースコードの一例となるソースコードSC4を示している。また、図11(b)は、第1構文解析部711によって、ソースコードSC4が構文解析された解析結果であるツリー構造A1を示している。
第1構文解析部711は、ソースコードSC4に含まれるHTMLの各ノードのタグ(例えば、“%”タグ)を抽出し、図11(b)に示すようなツリー構造A1を生成するとともに、各ノードを意味付けする。例えば、ソースコードSC4の2行目(記述文BL9)の“<% userName=null %>”について、第1構文解析部711は、構文解析して“%”→“Expression(userName=null)”(ノードN1)として、ツリー構造A1に追加するとともに、意味付けする。
また、図11(c)は、第2構文解析部712によって、ツリー構造A1の“if”のノードN2に関する構文解析がされた解析結果であるツリー構造A2を示している。第2構文解析部712は、ノードN2に関連するソースコードSC4の4行目〜8行目(記述文BL10)を構文解析して、ツリー構造A2を生成し、各ノードを意味付けする。
抽出部71は、第1構文解析部711によってソースコードSC4を構文解析された解析結果であるツリー構造A1と、第2構文解析部712によって“if”のノードN2に関して構文解析であるツリー構造A2とを中間成果物として中間コード記憶部41に記憶させる。
抽出部71は、第1構文解析部711及び第2構文解析部712の構文解析結果に基づいて、HTML要素とIF文とを抽出する。
次に、上述した図7のステップS104に示すIF文のマージ処理の詳細について説明する。
<IF文のマージ処理>
まず、図12〜図16を参照して、本実施形態におけるIF文のマージ処理の一例を詳細に説明する。
図12は、本実施形態における中間ソースコードの別の一例を示す図である。
この図において、ソースコードSC5は、抽出部71によって生成された中間ソースコードの一例を示している。ここで、ソースコードSC5には、IF文の記述BL11〜BL13が含まれている。また、IF文の記述BL11は、「条件1」のIF文に対応する記述を示し、IF文の記述BL12は、「条件2」のIF文に対応する記述を示している。また、IF文の記述BL13は、「条件3」のIF文に対応する記述を示している。
なお、ソースコードSC5は、IF文がネスト構造(入れ子構造)になっている場合の一例を示し、IF文の記述BL12がIF文の記述BL11に含まれ、IF文の記述BL13がIF文の記述BL12に含まれる入れ子構造になっている。
図12に示す中間ソースコード(ソースコードSC5)は、抽出部71によって構文解析に基づいて、図13に示すような構文木として表現可能である。
図13は、本実施形態における中間ソースコードを構文木で表現した一例を示す図である。
この図において、ツリー構造A3(構文木)は、図12に示す中間ソースコード(ソースコードSC5)を異なる表現にしたものである。階層T10は、上述したIF文の記述BL11(「条件1」)に対応する階層を示し、最も上位の階層(最も浅い階層)である。また、階層T20は、上述したIF文の記述BL12(「条件2」)に対応する階層であることを示し、階層T10の下位の階層である。また、階層T30は、上述したIF文の記述BL13(「条件3」)に対応する階層を示し、階層T10の下位の階層であり最も下位の階層(最も深い階層)である。このように、ツリー構造A3において、階層T10、階層T20、及び階層T30が、入れ子構造を示している。抽出部71は、第1構文解析部711及び第2構文解析部712の構文解析結果に基づいて、ツリー構造A3に示すような構文木を中間ソースコードとして生成し、生成した構文木を示す情報を中間コード記憶部41に記憶させる。
なお、ツリー構造A3において、“if”などが記述されている楕円形のノードは、例えば、JSPファイルにおける制御表現を示し、“button”などの角の丸い四角形のノードは、タグ名を示し、“checked”などが記述されている通常の四角形のノードは、アトリビュート(属性)を示している。
マージ処理部72は、マージ処理を行う際に、条件IDに置き換えたIF文のうち、上述した構文木におけるIF文の記述のネスト構造(入れ子構造)の階層が深いIF文を優先してマージするか否かを判定する。マージ処理部72は、マージすると判定した場合に、マージ規則に基づいて、IF文をマージする。すなわち、マージ処理部72は、IF文の記述がネスト構造(入れ子構造)である場合に、最も深い階層(最も下位の階層)から順に再帰的にマージ処理を実行する。
例えば、マージ処理部72は、図13に示すツリー構造A3のマージ処理を行う場合に、まず、階層T30のマージ処理を実行する。すなわち、マージ処理部72は、階層T30において、“THEN”の記述と、“ELSE”の記述とを比較し、マージ規則に基づいてマージするか否かを判定する。この場合、上述した(規則6)に対応するため、マージ処理部72は、マージすると判定する。そして、マージ処理部72は、図14に示すように、(規則6)に基づいて、「checked」を残すIF文のマージ処理を実行する。
図14は、本実施形態におけるIF文のマージ処理の一例を説明する第1の図であり、この図において、ツリー構造A4(構文木)は、図13における階層T30をマージした後の構文木の状態を示している。
また、階層T21は、図13における階層T20に対応するIF文(「条件2」)を示すか階層であって、階層T30をマージした部分を含んだ階層を示している。なお、階層T10は、図13と同様である。
階層T21は、階層T30をマージ処理することにより、“ELSE”に、「type=“checkbox”」、「checked」、及び「maxlength=“50”」を含むIF文の記述となる。
次に、マージ処理部72は、図14に示すツリー構造A4において、階層T21のマージ処理を実行する。すなわち、マージ処理部72は、階層T21において、“THEN”の記述と、“ELSE”の記述とを比較し、マージ規則に基づいてマージするか否かを判定する。この場合、上述した(規則5)に対応するため、マージ処理部72は、マージすると判定する。そして、マージ処理部72は、図15に示すように、(規則5)に基づいて、「maxlength=“80”」を残すIF文のマージ処理を実行する。
図15は、本実施形態におけるIF文のマージ処理の一例を説明する第2の図であり、この図において、ツリー構造A5(構文木)は、図14における階層T21をマージした後の構文木の状態を示している。
また、階層T11は、図13における階層T10に対応するIF文(「条件1」)を示すか階層であって、階層T21をマージした部分を含んだ階層を示している。
階層T11は、階層T21をマージ処理することにより、“ELSE”に、「type=“checkbox”」、「checked」、及び「maxlength=“80”」を含むIF文の記述となる。
次に、マージ処理部72は、図15に示すツリー構造A5において、階層T11のマージ処理を実行する。すなわち、マージ処理部72は、階層T11において、“THEN”の記述と、“ELSE”の記述とを比較し、マージ規則に基づいてマージするか否かを判定する。この場合、例えば、上述した(規則1)〜(規則6)に対応する規則がないため、マージ処理部72は、マージしないと判定する。なお、図15に示す例では、階層T11は最上位のIFの階層であり、他にマージするか否かの未判定のIF文の記述がないので、マージ処理部72は、処理を終了する。すなわち、図15に示すツリー構造A5が、図13に示すツリー構造A3がIF文のマージ処理された中間ソースコードに対応する。
このように、マージ処理部72は、条件IDに置き換えたIF文のうち、上述した構文木におけるIF文の記述のネスト構造(入れ子構造)の階層が深いIF文を優先してマージ処理を実行する。
ここで、図16は、本実施形態におけるIF文のマージ処理がされた中間ソースコードの一例を示す図である。
この図において、ソースコードSC6は、図15に示すIF文のマージ処理がされたツリー構造A5を別の表現にしたものであり、図12に示す中間ソースコード(ソースコードSC5)のIF文を、マージ処理部72によってマージ規則に基づいてマージ処理された後の中間ソースコードを示している。また、IF文の記述BL14は、図12に示すIF文の記述BL11〜BL13がマージ処理部72によってマージされた後の記述を示している。
このように、マージ処理部72は、マージ規則に基づいて、図12に示す中間ソースコード(ソースコードSC5)をマージ処理して、図16に示す中間ソースコード(ソースコードSC6)を生成する。
次に、図17を参照して、本実施形態におけるIF文のマージ処理の手順を説明する。
図17は、本実施形態におけるIF文のマージ処理の一例を示すフローチャートである。
この図において、まず、マージ処理部72は、上述した構文木において最も階層の深い未判定のIF文を抽出する(ステップS201)。すなわち、マージ処理部72は、抽出部71(第1構文解析部711及び第2構文解析部712)による構文解析結果に基づいて中間ソースコードとして生成された構文木に含まれるIF文のうち、マージするか否か(マージ対象であるか否か)を未判定のIF文であって、構文木におけるIF文の入れ子構造の階層が最も深いIF文(最も下位のIF文)を抽出する。
次に、マージ処理部72は、IF文がマージ対象であるか否かを判定する(ステップS202)。すなわち、マージ処理部72は、中間コード記憶部41から取得した第1構文解析部711及び第2構文解析部712の構文解析結果と、マージ規則記憶部43から取得したマージ規則とに基づいて、当該IF文がマージ対象であるか否かを判定する。マージ処理部72は、IF文がマージ対象であると判定した場合(ステップS202:YES)に、処理をステップS203に進める。また、マージ処理部72は、IF文がマージ対象でないと判定した場合(ステップS202:NO)に、処理をステップS204に進める。
次に、ステップS203において、マージ処理部72は、IF文をマージ処理する。すなわち、マージ処理部72は、上述したように、マージ規則に基づいて、マージ対象のIF文によって分岐されて処理されるHTML要素のうちの1つにマージする。マージ処理部72は、ステップS203の処理を実行させた後に処理をステップS204に進める。
次に、ステップS204において、マージ処理部72は、未判定のIF文があるか否かを判定する。すなわち、マージ処理部72は、構文木において、マージするか否か(マージ対象であるか否か)を未判定のIF文が他にあるか否かを判定する。マージ処理部72は、未判定のIF文がある場合(ステップS204:YES)に、処理をステップS201に戻し、マージ処理を繰り返す。また、マージ処理部72は、未判定のIF文がない場合(ステップS204:NO)に、マージ処理を終了する。
マージ処理部72は、図17に示す処理を実行することにより、上述したネスト構造(入れ子構造)のIF文の記述を含む構文木において、階層が最も深いIF文(最も下位のIF文)から順にマージ処理を実行する。
以上説明したように、本実施形態におけるソースコード解析装置1は、抽出部71と、マージ処理部72と、画面一覧生成部73とを備えている。抽出部71は、画面を定義するソースファイル(例えば、JSPファイル)を記憶するソース記憶部20からソースファイルに記述されているソースコードを取得し、取得したソースコードに含まれる画面出力を定義する画面構成要素(例えば、HTML要素)と、画面出力に関する条件分岐(例えば、IF文)とを抽出する。マージ処理部72は、予め定められたマージ規則に基づいて、抽出部71が抽出した条件分岐を併合(マージ)するか否かを判定するとともに、条件分岐を併合(マージ)すると判定した場合に、当該条件分岐を併合するマージ処理を実行する。そして、画面一覧生成部73は、マージ処理部72によって処理された後の条件分岐及び画面構成要素に基づいて、画面構成要素と条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する。
これにより、本実施形態におけるソースコード解析装置1は、マージ規則に基づいて、論理状態の違いとは言えないようなわずかな違いを記述した条件分岐を削除することができるので、ソースコードに含まれる条件分岐の数を低減することができる。そのため、本実施形態におけるソースコード解析装置1は、例えば、ソースファイルが複数の画面を定義している場合に、全ての画面を網羅するように画面を分割すると、生成される画面数が爆発的に増加してしまうことを抑制することができる。よって、本実施形態におけるソースコード解析装置1は、ソースコードで定義される出力画面を適切に解析することができる。
また、本実施形態におけるソースコード解析装置1は、画面一覧を生成するので、ソースコードで定義される論理状態ごとの画面(論理画面)の数を把握することができる。そのため、本実施形態におけるソースコード解析装置1は、過去に作成されたソースコードを適切に解析することができるとともに、過去に作成されたソースコードを修正するなどの保守をするための作業工数(修正の影響調査工数やテスト工数)を低減することができる。また、本実施形態におけるソースコード解析装置1は、新しいシステム環境に移植するための作業工数を低減することができる。
また、本実施形態におけるソースコード解析装置1は、ソースコードから自動的に設計書に相当する画面一覧を生成するので、ソースコードを解析するリバースエンジニアリングのための作業工数、及び設計書を作成するための作業工数を低減することができる。
また、本実施形態におけるソースコード解析装置1が生成する画面一覧は、論理画面ごとの画面構成要素(HTML要素)を把握できるので、ユーザ(作業者)は、この画面位置に基づいて、保守性の高いソースコードを作成することができる。
また、本実施形態では、マージ処理部72は、条件分岐(例えば、IF文)を併合(マージ)すると判定した場合に、マージ規則に基づいて、当該条件分岐によって分岐されて処理される画面構成要素(例えば、HTML要素)のうちの1つに併合(マージ)する。
これにより、本実施形態におけるソースコード解析装置1は、マージ規則に基づいて、適切にソースコードに含まれる条件分岐の数を低減することができる。よって、本実施形態におけるソースコード解析装置1は、ソースコードで定義される出力画面を適切に解析することができる。
また、本実施形態では、抽出部71は、ソースコードを構文解析して画面構成要素(例えば、HTML要素)と条件分岐(例えば、IF文)とを抽出するとともに、抽出した条件分岐の条件式を、条件式を識別する条件識別情報(例えば、条件ID)に置き換えた条件分岐の記述と、抽出した画面構成要素とを含む中間ソースコードを生成する。そして、マージ処理部72は、マージ規則に基づいて、中間ソースコードに含まれる条件識別情報に置き換えた条件分岐に対して、併合(マージ)するか否かを判定する。
これにより、同一の条件式には、同一の条件IDが置き換えられるので、本実施形態におけるソースコード解析装置1は、中間ソースコードに含まれる同一の条件IDを同一の論理状態として扱うことができる。そのため、本実施形態におけるソースコード解析装置1は、ソースコードが定義する論理状態を適切に低減することができる。よって、本実施形態におけるソースコード解析装置1は、生成される画面数が爆発的に増加してしまうことを抑制することができる。
また、本実施形態では、抽出部71は、構文解析に基づいて中間ソースコードを構文木として生成する。そして、マージ処理部72は、条件識別情報(例えば、条件ID)に置き換えた条件分岐(例えば、IF文)のうち、構文木における条件分岐の入れ子構造(ネスト構造)の階層が深い条件分岐を優先してマージ処理を実行する。すなわち、マージ処理部72は、条件分岐が入れ子構造に記述されている場合に、階層が深い条件分岐から順にマージ処理を実行する。
これにより、本実施形態におけるソースコード解析装置1は、条件分岐が入れ子構造に記述されている場合に、適切にマージ処理を実行することができる。
また、本実施形態では、画面一覧生成部73は、条件分岐(例えば、IF文)によって分岐される状態の組み合わせのうちで、常に偽となる分岐される状態の組み合わせ(恒偽の組み合わせ)を削除して、画面一覧を生成する。
これにより、本実施形態におけるソースコード解析装置1は、システムの動作上利用されることのない論理画面を画面一覧から削除することができる。
また、本実施形態におけるソースコード解析装置1は、画面一覧生成部73によって生成された画面一覧に基づいて、画面一覧に含まれる各画面を定義するソースファイルを生成するJSPファイル生成部75を備える。
これにより、本実施形態におけるソースコード解析装置1は、1つのソースコード(JSPファイル)から保守性の高い論理画面ごとのソースコード(JSPファイル)を自動的に生成することができる。
本実施形態におけるソースコード解析装置1は、画面一覧生成部73が生成した画面一覧を出力する出力処理部(表示部60に表示させる表示処理部74)を備えている。
これにより、本実施形態におけるソースコード解析装置1は、生成した画面一覧を外部に出力することができる。よって、ユーザ(作業者)は、画面一覧を確認することができ、その結果、過去に作成されたソースコードを修正するなどの保守を容易に行うことができるとともに、保守性の高いソースコードを作成することができる。
なお、本実施形態によるソースコード解析方法は、抽出ステップと、マージ処理ステップと、画面一覧生成ステップとを含む。抽出ステップにおいて、抽出部71が、ソース記憶部20からソースファイル(例えば、JSPファイル)に記述されているソースコードを取得し、取得したソースコードに含まれる画面出力を定義する画面構成要素(例えば、HTML要素)と、画面出力に関する条件分岐(例えば、IF文)とを抽出する。次に、マージ処理ステップにおいて、マージ処理部72が、予め定められたマージ規則に基づいて、抽出ステップによって抽出された条件分岐を併合するか否かを判定するとともに、条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行する。そして、画面一覧生成ステップにおいて、画面一覧生成部73が、マージ処理ステップによって処理された後の条件分岐及び画面構成要素に基づいて、画面構成要素と条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する。
これにより、本実施形態によるソースコード解析方法は、本実施形態におけるソースコード解析装置1と同様の効果を奏する。
次に、第2の実施形態によるソースコード解析装置1について、図面を参照して説明する。
[第2の実施形態]
本実施形態では、マージ規則記憶部43に記憶されているマージ規則が優先順位付けされており、マージ処理部72が、マージ処理された後の論理画面の数が、適切な画面数になるように、マージ規則を優先順位にしたがって変更してマージ処理を実行する場合の一例について説明する。
なお、本実施形態におけるソースコード解析装置1の構成は、図1に示す第1の実施形態と同様であるので、ここではその説明を省略する。
次に、本実施形態におけるソースコード解析装置1の動作について、図18を参照して説明する。
図18は、第2の実施形態におけるソースコード解析の手順の一例を示すフローチャートである。
この図において、ステップS301からステップS303の処理は、図7に示すステップS101からステップS103の処理と同様であるため、ここではその説明を省略する。なお、本実施形態では、マージ規則は、例えば、第1のマージ規則を最優先とする複数のマージ規則のグループに分かれている場合について説明する。
続くステップS304において、ソースコード解析装置1の制御部70は、まず、マージ規則として第1のマージ規則を設定する。
次に、マージ処理部72は、マージ規則に基づいてIF文をマージする(ステップS305)。ここでは、マージ処理部72は、まず、第1のマージ規則に基づいて、IF文をマージするマージ処理を実行する。
続く、ステップS306及びステップS307の処理は、図7に示すステップS105及びステップS106の処理と同様である。
次に、ステップS308において、マージ処理部72は、生成された画面一覧における画面数が所定の画面数以下か否かを判定する。すなわち、マージ処理部72は、マージ処理された後のIF文によって分岐される状態の組み合わせの画面数(マージ処理された後の論理画面数)が所定の画面数以下であるか否かを判定する。
ここで、所定の画面数は、例えば、マージ処理を実行する前のIF文によって分岐される状態の組み合わせの画面数(マージ処理される前の論理画面数)に対する所定の割合の画面数(例えば、10%の画面数)でもよいし、ソースコードによって実行される機能数に応じた所定の画面数でもよい。なお、ソースコードによって実行される機能数に応じた所定の画面数とは、例えば、1つの機能に対して、入力画面、出力画面、修正画面、及び結果確認画面の5つの画面が妥当であるとした場合、(機能数×5)画面である。すなわち、例えば、1つのJSPファイルで5つの機能処理の出力画面を定義している場合に、機能数に応じた所定の画面数は、25画面(5機能×5画面)となる。
マージ処理部72は、マージ処理された後の論理画面数が所定の画面数以下である場合(ステップS308:YES)に、適切な論理画面数になったと判定し、処理をステップS310に進める。また、マージ処理部72は、マージ処理された後の論理画面数が所定の画面数より多い場合(ステップS308:NO)に、適切な論理画面数になっていないと判定し、処理をステップS309に進める。
次に、ステップS309において、マージ処理部72は、マージ規則を変更して、処理をステップS305に戻させて、再度、マージ処理を実行する。ここで、マージ処理部72は、例えば、マージ規則を優先順位にしたがって、第1のマージ規則から第2のマージ規則に変更して、再度マージ処理を実行する。なお、第2のマージ規則によるマージ処理を実行してもマージ処理された後の論理画面数が所定の画面数より多い場合には、マージ処理部72は、例えば、マージ規則を優先順位にしたがって、第2のマージ規則から第3のマージ規則に変更して、再度マージ処理を実行する。
このように、マージ処理部72は、マージ処理された後の条件分岐によって分岐される状態の組み合わせの画面数(マージ処理された後の論理画面数)が、所定の画面数以下になるように、マージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。さらに、マージ処理部72は、マージ処理された後の論理画面数が、マージ処理を実行する前の論理画面数に対する所定の割合の画面数以下、又は、ソースコードによって実行される機能数に応じた所定の画面数以下になるようにマージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。
また、ステップS310及びステップS311の処理は、図7に示すステップS107及びステップS108の処理と同様である。
以上説明したように、本実施形態では、マージ処理部72は、マージ処理された後の条件分岐によって分岐される状態の組み合わせの画面数(マージ処理された後の論理画面数)が、所定の画面数以下になるように、マージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。
これにより、本実施形態におけるソースコード解析装置1は、適切な論理画面数になるようにマージ処理を実行して、適切な論理画面数の画面一覧を生成することができる。そのため、本実施形態におけるソースコード解析装置1は、例えば、全ての画面を網羅するように画面を分割すると、生成される画面数が爆発的に増加してしまうことを防止することができる。
また、本実施形態では、マージ処理部72は、マージ処理された後の論理画面数が、マージ処理を実行する前の論理画面数に対する所定の割合の画面数以下、又は、ソースコードによって実行される機能数に応じた所定の画面数以下になるようにマージ規則を変更し、変更したマージ規則に基づいて、マージ処理を実行する。
これにより、本実施形態におけるソースコード解析装置1は、適切な論理画面数になるようにマージ処理を実行することができる。
なお、上述した実施形態では、所定の画面数以下になるようにマージ規則を変更しているが、所定の画面数の範囲内に収まるようにマージ規則を変更してもよい。また、所定の画面数は、ユーザ(作業者)によって入力部50から入力されてもよい。また、上述のマージ規則の変更には、複数段階に優先順位付けされたマージ規則の指定を変更するだけでなく、マージ規則の追加や削除、複数のマージ規則のうちから適宜選択することも含まれる。
また、上述の図18に示す例では、ステップS305及びステップS306の処理において画面一覧を生成した後に、ステップS308の処理によりマージ規則を変更して再びマージ処理を行うか否かを判定しているが、ステップS305の後に、ステップS308の処理をおこなってもよい。この場合、中間ソースコードに含まれる条件IDの種類数によってマージ規則を変更して再びマージ処理を行うか否かを判定してもよい。
なお、本発明は、上記の各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
例えば、上記の各実施形態において、画面を定義するソースファイルが、JSPファイルである場合について説明したが、これに限定されるものではなく、画面と処理とを1つのファイルに定義するソースファイルであれば、他の形式のソースファイルであってもよい。ソースファイルは、例えば、ASP(Active Server Pages)や、PHP(Hypertext Preprocessor)、Perl(パール)を利用して画面と処理とを1つのファイルに定義するソースファイルであってもよい。
また、上記の各実施形態において、条件分岐がIF文である場合について説明したが、SWITCH文などの条件分岐、WHILE文などのループ文に適用してもよい。
また、上記の各実施形態において、ソースコード解析装置1が表示処理部74及びJSPファイル生成部75を備える場合について説明したが、表示処理部74及びJSPファイル生成部75のいずれか一方を備える形態であってもよいし、表示処理部74及びJSPファイル生成部75を備えない形態であってもよい。
また、ソースコード解析装置1が出力処理部として表示部60に画面一覧を表示させる表示処理部74を備える場合について説明したが、単に外部に画面一覧を出力する出力処理部を備えてもよい。
また、上記の各実施形態において、ソースコード解析装置1が記憶部40を備える場合について説明したが、記憶部40又は記憶部40の一部をソースコード解析装置1の外部に備えてもよい。例えば、ネットワークを介してソースコード解析装置1に接続されているサーバ装置が記憶部40を備えてもよい。また、ソースコード解析装置1がソース記憶部20及び出力情報記憶部30を備えない場合について説明したが、ソースコード解析装置1がソース記憶部20及び出力情報記憶部30を備えてもよい。
また、上記の各実施形態において、ソースコード解析装置1が入力部50及び表示部60を備える場合について説明したが、ソースコード解析装置1が入力部50及び表示部60を備えなくてもよい。例えば、アプリケーションサーバ装置がソースコード解析装置1を備え、アプリケーションサーバ装置にネットワークを介して接続されたクライアント端末が入力部50及び表示部60を備えてもよい。
また、上記の各実施形態において、ソースコード解析装置1が論理画面ごとのJSPファイルを生成する場合について説明したが、さらに、例えば、XML(Extensible Markup Language)ファイルなどの画面の遷移に係る画面遷移定義ファイルを生成してもよい。この場合、ソースコード解析装置1は、論理画面ごとのJSPファイルに基づいて、適切な画面遷移定義ファイルを生成することができる。
また、ソースコード解析装置1は、ソースコードの解析前に予め存在している設計書がある場合には、設計書に記載されている画面構成要素(HTML要素)を用いて、画面一覧から不用な画面を削除してもよい。
また、上記の各実施形態において、ソースコード解析装置1は、マージ規則記憶部43が記憶するマージ規則に各マージ規則の適用の有無を示す情報を付加して、各マージ規則の適用の有無を設定できるようにしてもよい。このようにすることで、ソースコード解析装置1は、プロジェクトやプログラム用途に応じて適切なマージ規則を選択して使用することができる。
なお、本発明におけるソースコード解析装置1が備える各構成の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより上述したソースコード解析装置1が備える各構成における処理を行ってもよい。ここで、「記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行する」とは、コンピュータシステムにプログラムをインストールすることを含む。ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、インターネットやWAN、LAN、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。このように、プログラムを記憶した記録媒体は、CD−ROM等の非一過性の記録媒体であってもよい。
また、記録媒体には、当該プログラムを配信するために配信サーバからアクセス可能な内部または外部に設けられた記録媒体も含まれる。なお、プログラムを複数に分割し、それぞれ異なるタイミングでダウンロードした後にソースコード解析装置1が備える各構成で合体される構成や、分割されたプログラムのそれぞれを配信する配信サーバが異なっていてもよい。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
また、上述した機能の一部または全部を、LSI(Large Scale Integration)等の集積回路として実現してもよい。上述した各機能は個別にプロセッサ化してもよいし、一部、または全部を集積してプロセッサ化してもよい。また、集積回路化の手法はLSIに限らず専用回路、または汎用プロセッサで実現してもよい。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
1 ソースコード解析装置
20 ソース記憶部
30 出力情報記憶部
40 記憶部
41 中間コード記憶部
42 置換情報記憶部
43 マージ規則記憶部
44 マージ結果記憶部
45 画面一覧記憶部
50 入力部
60 表示部
70 制御部
71 抽出部
72 マージ処理部
73 画面一覧生成部
74 表示処理部
75 JSPファイル生成部
711 第1構文解析部
712 第2構文解析部

Claims (10)

  1. 画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出部と、
    予め定められたマージ規則に基づいて、前記抽出部が抽出した前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理部と、
    前記マージ処理部によって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成部と
    を備えることを特徴とするソースコード解析装置。
  2. 前記マージ処理部は、
    前記条件分岐を併合すると判定した場合に、前記マージ規則に基づいて、当該条件分岐によって分岐されて処理される前記画面構成要素のうちの1つに併合する
    ことを特徴とする請求項1に記載のソースコード解析装置。
  3. 前記抽出部は、
    前記ソースコードを構文解析して前記画面構成要素と前記条件分岐とを抽出するとともに、抽出した前記条件分岐の条件式を、条件式を識別する条件識別情報に置き換えた条件分岐の記述と、抽出した前記画面構成要素とを含む中間ソースコードを生成し、
    前記マージ処理部は、
    前記マージ規則に基づいて、前記中間ソースコードに含まれる前記条件識別情報に置き換えた条件分岐に対して、併合するか否かを判定する
    ことを特徴とする請求項1又は請求項2に記載のソースコード解析装置。
  4. 前記抽出部は、
    前記構文解析に基づいて前記中間ソースコードを構文木として生成し、
    前記マージ処理部は、
    前記条件識別情報に置き換えた条件分岐のうち、前記構文木における条件分岐の入れ子構造の階層が深い条件分岐を優先して前記マージ処理を実行する
    ことを特徴とする請求項3に記載のソースコード解析装置。
  5. 前記画面一覧生成部は、
    前記分岐される状態の組み合わせのうちで、常に偽となる前記分岐される状態の組み合わせを削除して、前記画面一覧を生成する
    ことを特徴とする請求項1から請求項4のいずれか一項に記載のソースコード解析装置。
  6. 前記マージ処理部は、
    前記マージ処理された後の前記分岐される状態の組み合わせの画面数が、所定の画面数以下になるように、前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行する
    ことを特徴とする請求項1から請求項5のいずれか一項に記載のソースコード解析装置。
  7. 前記マージ処理部は、
    前記マージ処理を実行した後における前記分岐される状態の組み合わせの画面数が、前記マージ処理を実行する前の前記分岐される状態の組み合わせの画面数に対する所定の割合の画面数以下、又は、前記ソースコードによって実行される機能数に応じた所定の画面数以下になるように前記マージ規則を変更し、変更した前記マージ規則に基づいて、マージ処理を実行する
    ことを特徴とする請求項6に記載のソースコード解析装置。
  8. 前記画面一覧生成部によって生成された前記画面一覧に基づいて、前記画面一覧に含まれる各画面を定義するソースファイルを生成するソースファイル生成部を備える
    ことを特徴とする請求項1から請求項7のいずれか一項に記載のソースコード解析装置。
  9. 抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、
    マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、
    画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップと
    を含むことを特徴とするソースコード解析方法。
  10. コンピュータに、
    抽出部が、画面を定義するソースファイルを記憶するソース記憶部から前記ソースファイルに記述されているソースコードを取得し、取得した前記ソースコードに含まれる画面出力を定義する画面構成要素と、前記画面出力に関する条件分岐とを抽出する抽出ステップと、
    マージ処理部が、予め定められたマージ規則に基づいて、前記抽出ステップによって抽出された前記条件分岐を併合するか否かを判定するとともに、前記条件分岐を併合すると判定した場合に、当該条件分岐を併合するマージ処理を実行するマージ処理ステップと、
    画面一覧生成部が、前記マージ処理ステップによって処理された後の前記条件分岐及び前記画面構成要素に基づいて、前記画面構成要素と前記条件分岐によって分岐される状態の組み合わせとの一覧を示す画面一覧を生成する画面一覧生成ステップと
    を実行させるためのプログラム。
JP2013128498A 2013-06-19 2013-06-19 ソースコード解析装置、ソースコード解析方法、及びプログラム Active JP6111150B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013128498A JP6111150B2 (ja) 2013-06-19 2013-06-19 ソースコード解析装置、ソースコード解析方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013128498A JP6111150B2 (ja) 2013-06-19 2013-06-19 ソースコード解析装置、ソースコード解析方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2015005031A JP2015005031A (ja) 2015-01-08
JP6111150B2 true JP6111150B2 (ja) 2017-04-05

Family

ID=52300910

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013128498A Active JP6111150B2 (ja) 2013-06-19 2013-06-19 ソースコード解析装置、ソースコード解析方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP6111150B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6993573B2 (ja) * 2018-02-06 2022-01-13 富士通株式会社 プログラム解析方法、プログラム解析装置およびプログラム解析プログラム
CN116521742B (zh) * 2023-06-25 2023-09-22 北京大学 源代码分析结果聚合方法、装置、电子设备及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07261990A (ja) * 1994-03-23 1995-10-13 Fujitsu Ltd プログラム解析表示装置
JP4686117B2 (ja) * 2003-06-05 2011-05-18 インターナショナル・ビジネス・マシーンズ・コーポレーション ソースコード変換装置、ソースコード変換方法、およびプログラム

Also Published As

Publication number Publication date
JP2015005031A (ja) 2015-01-08

Similar Documents

Publication Publication Date Title
US9996613B2 (en) System and method for accessibility assessment of a web application
EP1879106A2 (en) Source code generation method, apparatus and program
CN111414166B (zh) 代码的生成方法、装置、设备及存储介质
US9495150B2 (en) Information processing apparatus and method, and computer program product
KR101623174B1 (ko) 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체
US9390117B2 (en) Method of transforming sets of input strings into at least one pattern expression that is string expressing sets of input strings, method of extracting transformation pattern as approximate pattern expression, and computer and computer program for the methods
JP6440895B2 (ja) ソフトウェア分析装置及びソフトウェア分析方法
JP2008299723A (ja) プログラム検証方法、プログラム検証装置
JP6111150B2 (ja) ソースコード解析装置、ソースコード解析方法、及びプログラム
CN114398138A (zh) 界面生成方法、装置、计算机设备和存储介质
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
JP2006318005A (ja) 特許価値算出装置、特許価値算出方法およびプログラム
JP7260150B2 (ja) Webサイト設計支援装置、Webサイト設計支援方法、及びプログラム
JP5414633B2 (ja) アプリケーション実行装置及びアプリケーション実行方法
JP6364332B2 (ja) 仕様生成方法、仕様生成装置、及びプログラム
US7849404B2 (en) System for determining whether screen displayed by program satisfies specification
JP2018147106A (ja) プログラム分析装置、プログラム分析方法及びプログラム分析プログラム
CN112068826B (zh) 文本输入的控制方法、系统、电子设备和存储介质
JP6502044B2 (ja) データ解析装置、データ解析方法、および、プログラム。
CN110045961B (zh) 业务规则的管理方法及管理平台
CN111475403A (zh) 测试脚本的动态生成方法及相关装置
JP2015035174A (ja) 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体
KR101673151B1 (ko) 프로그램 소스 및 db 스키마의 연관 관계 변화 분석 방법 및 장치
JP2015225412A (ja) 文書要約装置、方法、及びプログラム
JP5600826B1 (ja) 非構造化データ処理システム、非構造化データ処理方法およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160425

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170208

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170214

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170313

R150 Certificate of patent or registration of utility model

Ref document number: 6111150

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250