(57)【要約】【課題】ソースコードにエラーがある場合やソースコード作成規約に適合していない箇所がある場合に、修正箇所が広範囲におよぶ場合あっても、ソースコードをソースコード作成規約に従って変換することを可能とする。【解決手段】本発明におけるソースコード変換装置は、ソースコードの全てについて、事前に構造及び呼出関係の解析を行い、ソースコードの解析結果に基づいて変換対象となる箇所の抽出を行い、抽出された変換対象箇所に対応するソースコードの書き換え対象箇所を特定し、該当箇所のソースコードの書き換えを行う。【選択図】図１
2014134962.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションを構成するために作成された複数のソースコードをコンピュータによって変換するソースコード変換装置であって、
前記複数のソースコードの構造及び呼出関係を解析するソースコード構造解析部と、
前記ソースコード構造解析部によって解析されたソースコードの構造及び呼出関係を記憶するソースコード構造記憶部と、
前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係から１又は複数の変換対象箇所を抽出し、抽出された変換対象箇所に対応する１または複数のソースコードの書き換えを行うソースコード変換処理部と
から構成されることを特徴とするソースコード変換装置。
【請求項２】
請求項１記載のソースコード変換装置であって、
前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係が、前記アプリケーションのソースコード作成規約に従った構造及び呼出関係になっているかを検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定するソースコード検査処理部と、
前記ソースコード検査処理部によって特定された１又は複数の規約違反箇所を記憶する検査結果記憶部と
を備え、
前記ソースコード変換処理部は、前記検査結果記憶部に記憶されている１又は複数の規約違反箇所を変換対象箇所として抽出し、抽出された変換対象箇所に対応する１又は複数のソースコードの書き換えを行う
ことを特徴とするソースコード変換装置。
【請求項３】
請求項２記載のソースコード変換装置であって、
前記ソースコード検査処理部は、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係がソースコードの種類に対応した構造及び呼出関係になっているかをソースコード作成規約として用いて検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定する
ことを特徴とするソースコード変換装置。
【請求項４】
アプリケーションを構成するために作成された複数のソースコードをコンピュータにより変換するソースコード変換方法であって、
アプリケーションを構成するために作成された複数のソースコードの構造及び呼出関係を解析するステップと、
解析されたソースコードの構造及び呼出関係をソースコード構造記憶部に記憶するステップと、
前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係から１又は複数の変換対象箇所を抽出し、抽出された変換対象箇所に対応する１または複数のソースコードの書き換えを行うステップと
をコンピュータにより実行することを特徴とするソースコード変換方法。
【請求項５】
請求項４記載のソースコード変換方法であって、
さらに、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係が、前記アプリケーションのソースコード作成規約に従った構造及び呼出関係になっているかを検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定するステップと、
特定された１又は複数の規約違反箇所を検査結果記憶部に記憶するステップと
を有し、
前記ソースコードの書き換えを行うステップは、前記検査結果記憶部に記憶されている１又は複数の規約違反箇所を変換対象箇所として抽出し、抽出された変換対象箇所に対応する１又は複数のソースコードの書き換えを行うステップとしてコンピュータにより実行することを特徴とするソースコード変換方法。
【請求項６】
請求項５記載のソースコード変換方法であって、
前記規約違反箇所を特定するステップは、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係がソースコードの種類に対応した構造及び呼出関係になっているかをソースコード作成規約として用いて検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定するステップとしてコンピュータにより実行することを特徴とするソースコード変換方法。
【請求項７】
コンピュータに読み込まれることによって、請求項１ないし３のいずれか１項記載のソースコード変換装置を実現するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード変換装置、ソースコード変換方法及びソースコード変換プログラムに関し、特に、アプリケーションの作成に用いられる複数のソースコードにソースコード作成規約に適合していない箇所がある場合に、適合していない箇所をソースコード作成規約に適合するように変換を行う、ソースコード変換装置、ソースコード変換方法及びソースコード変換プログラムに関するものである。
【背景技術】
【０００２】
近年、コンピュータで利用されるアプリケーションのソフトウェア開発においては、アプリケーションの品質を向上させるために、アプリケーションの作成に用いられるソースコードの内容を解析し、エラーとなる箇所やソースコードの作成規約に適合していない箇所を検出したら、適合していない箇所を自動的に修正する技術が知られている。
【０００３】
例えば、公知例１においては、ソースコードの構文解析を行い、エラーとなる箇所を検出したら過去のエラー原因を元にエラーとなる箇所を修正する技術が開示されている。さらには、公知例２においては、ソースコードのエラー箇所を辞書情報に基づいて検索し、エラー箇所を検出したら辞書情報を元に正しい記述に修正する技術が公開されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−６７１０３号公報
【特許文献２】特開平５−２５７７３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来技術におけるソースコードの変換方式は、ソースコードを逐次チェックし、エラーとなる箇所や仕様通りに作成されていない箇所を検出したら該当箇所を修正するものである。例えば、公知例１における方法は、ソースコードを行単位で読み込み、構文解析を行い、構文解析によりエラーが検出されたらソースコードの修正を行うものである。
【０００６】
したがって、従来技術においては、ソースコード中のエラーとなる箇所を単純に置換することにより変換することは可能であるが、ソースコードの記述に構文上問題がなく、ソースコード作成規約に定められた処理が定められた箇所に記載されていないといった場合に、ソースコード作成規約で定められた位置に所定の処理を追記するといった処理を行うことが難しい。
【０００７】
さらには、ソースコードの修正範囲が広範囲におよぶ場合、例えば、１つのエラー箇所に対応して１つのソース内で分散して複数の修正が必要な場合や、修正対象のソースコードが複数のファイルに跨っている場合においても、従来技術においては、エラーとなる箇所のみの修正しか行えないため対応することが難しい。
【０００８】
本発明は上記課題を解決する事を可能としたものであり、ソースコードにエラーがある場合やソースコード作成規約に適合していない箇所がある場合に、修正箇所が広範囲におよぶ場合あっても、ソースコードをソースコード作成規約に従って変換することを可能とする、ソースコード変換装置、ソースコード変換方法及びソースコード変換プログラムを提供することを目的とするものである。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明におけるソースコード変換装置は、アプリケーションを構成するために作成された複数のソースコードをコンピュータによって変換するソースコード変換装置であって、前記複数のソースコードの構造及び呼出関係を解析するソースコード構造解析部と、前記ソースコード構造解析部によって解析されたソースコードの構造及び呼出関係を記憶するソースコード構造記憶部と、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係から１又は複数の変換対象箇所を抽出し、抽出された変換対象箇所に対応する１または複数のソースコードの書き換えを行うソースコード変換処理部とから構成されることを特徴とする。
【００１０】
本発明におけるソースコード変換装置は、ソースコード構造解析部によって、アプリケーションを構成するために作成された複数のソースコードの全てについて、事前に構造及び呼出関係の解析を行い、その解析結果は、ソースコード構造記憶部に記憶される。そして、ソースコード変換処理部によって、ソースコード構造記憶部に記憶されているソースコードの解析結果に基づいて変換対象となる箇所の抽出を行い、抽出された変換対象箇所に対応するソースコードの書き換え対象箇所を特定し、該当箇所のソースコードの書き換えを行う。本態様においては、ソースコード変換処理部が事前に解析されたソースコードの構造や呼出関係に基づいて変換対象箇所を特定することにより、変換対象箇所が分散している場合や複数のソースコードに跨っている場合であっても、変換対象箇所を特定することが可能である。
【００１１】
また、本発明の一態様においては、前記ソースコード変換装置であって、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係が、前記アプリケーションのソースコード作成規約に従った構造及び呼出関係になっているかを検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定するソースコード検査処理部と、前記ソースコード検査処理部によって特定された１又は複数の規約違反箇所を記憶する検査結果記憶部とを備え、前記ソースコード変換処理部は、前記検査結果記憶部に記憶されている１又は複数の規約違反箇所を変換対象箇所として抽出し、抽出された変換対象箇所に対応する１又は複数のソースコードの書き換えを行うことを特徴とする。
【００１２】
この態様におけるソースコード変換装置においては、ソースコード検査処理部によって、ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係がソースコード作成規約に従っているかどうかを事前に検査を行い規約違反箇所の特定を行う。特定された規約違反箇所は検査結果記憶部に記憶される。ソースコード変換処理部は、検査結果記憶部に記憶されている規約違反箇所をソースコードの変換対象箇所として特定し、該当箇所のソースコードの書き換えを行う。本態様においては、ソースコード検査処理部においてソースコードの構造及び呼出関係がソースコード作成規約に従っているかどうかを事前に検証することにより、ソースコード作成規約に違反する箇所を特定することが可能となり、特定された規約違反箇所を変換対象箇所とすることで、ソースコード作成規約に違反する箇所を変換対象箇所として特定することが可能である。
【００１３】
また、本発明の一態様においては、前記ソースコード変換装置であって、前記ソースコード検査処理部は、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係がソースコードの種類に対応した構造及び呼出関係になっているかをソースコード作成規約として用いて検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定することを特徴とする。
【００１４】
この態様におけるソースコード変換装置においては、ソースコードの種類に対応した構造及び呼出関係になっているかをソースコード作成規約として用いることにより、複数のソースコードに跨って規定されている呼出関係が定義されているソースコード作成規約に違反する箇所を特定することが可能となる。
【００１５】
さらに、本発明におけるソースコード変換方法は、アプリケーションを構成するために作成された複数のソースコードの構造及び呼出関係を解析するステップと、解析されたソースコードの構造及び呼出関係をソースコード構造記憶部に記憶するステップと、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係から１又は複数の変換対象箇所を抽出し、抽出された変換対象箇所に対応する１または複数のソースコードの書き換えを行うステップとをコンピュータにより実行することを特徴とする。
【００１６】
また、本発明の一態様においては、前記ソースコード変換方法であって、さらに、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係が、前記アプリケーションのソースコード作成規約に従った構造及び呼出関係になっているかを検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定するステップと、特定された１又は複数の規約違反箇所を検査結果記憶部に記憶するステップとを有し、前記ソースコードの書き換えを行うステップは、前記検査結果記憶部に記憶されている１又は複数の規約違反箇所を変換対象箇所として抽出し、抽出された変換対象箇所に対応する１又は複数のソースコードの書き換えを行うステップとしてコンピュータにより実行することを特徴とする。
【００１７】
また、本発明の一態様においては、前記ソースコード変換方法であって、前記規約違反箇所を特定するステップは、前記ソースコード構造記憶部に記憶されているソースコードの構造及び呼出関係がソースコードの種類に対応した構造及び呼出関係になっているかをソースコード作成規約として用いて検査し、ソースコード作成規約に従っていない１又は複数の規約違反箇所を特定するステップとしてコンピュータにより実行することを特徴とする。
【００１８】
さらに、本発明におけるソースコード変換プログラムは、コンピュータに読み込まれることによって、上述したソースコード変換装置を実現するためのプログラムである。
【発明の効果】
【００１９】
本発明によれば、ソースコードの構造及び呼出関係を事前に解析し、解析結果に基づいて変換対象箇所の特定を行うことにより、変換対象箇所が分散している場合や複数のソースコードに跨っている場合であっても、変換対象箇所を特定しソースコードの書き換えを行うことが可能となる。さらには、ソースコードの構造及び呼出関係を事前に解析し、解析結果からソースコード作成規約に違反する箇所を特定し、変換対象箇所とすることで、ソースコード作成規約に違反するソースコードをソースコード作成規約に則した内容に書き換えることが可能となる。
【図面の簡単な説明】
【００２０】
【図１】本発明のソースコード変換装置の全体構成図を示す図である。
【図２】本発明の実施例１におけるクラス構造の解析結果のデータ構造を示す図である。
【図３】本発明の実施例１におけるメソッド構造の解析結果のデータ構造を示す図である。
【図４】本発明の実施例１におけるインスタンス構造の解析結果のデータ構造を示す図である。
【図５】本発明の実施例１におけるメソッド呼出関係の解析結果のデータ構造を示す図である。
【図６】本発明の実施例１におけるソースコード変換規則の定義を示す図である。
【図７】本発明の実施例２におけるソースコード変換規則の定義を示す図である。
【図８】本発明の実施例２におけるソースコード変換規則の定義を示す図である。
【図９】本発明の実施例１における全体処理フローチャートを示す図である。
【図１０】本発明の実施例１におけるソースコード構造解析処理の処理フローを示す図である。
【図１１】本発明の実施例１におけるソースコード変換処理の処理フローチャートを示す図である。
【図１２】本発明の実施例３における検査規則の定義を示す図である。
【図１３】本発明の実施例３における検査結果のデータ構造を示す図である。
【図１４】本発明の実施例３における全体処理フローチャートを示す図である。
【図１５】本発明の実施例３におけるソースコード検査処理の処理フローチャートを示す図である。
【図１６】本発明の実施例３におけるソースコード変換処理の処理フローチャートを示す図である。
【図１７】本発明の実施例３におけるソースコード変換規則を示す図である。
【発明を実施するための形態】
【００２１】
以下に、本願の開示するソースコード変換装置、ソースコード変換方法及びソースコード変換プログラムの実施例を図面に基づいて説明する。以下に示す実施例においては、アプリケーションを構成するために作成された複数のソースコードについて、複数ソースコードの構造及び呼出関係を解析し、解析結果に基づいて変換対象箇所の抽出を行い、抽出された変換対象箇所に対応するソースコードの該当箇所の書き換えを行う実施例について説明を行う。しかしながら、本願の開示するソースコード変換装置、ソースコード変換方法及びソースコード変換プログラムの実施例は以下で説明するものに限られるわけでなく、ソースコードの変換を自動的に行う各種装置、方法およびプログラムにも同様に適用することが可能である。
【実施例１】
【００２２】
最初に、本実施例に係るソースコード変換装置の全体構成の概要について説明する。図１は、本実施例に係るソースコード変換装置の全体構成を示す図である。ソースコード変換装置１は、ソースコード構造解析処理部１０１、ソースコード構造記憶部１０４、ソースコード変換処理部１０２、変換規則記憶部１０５とから構成される。さらに、ソースコード変換処理部１０２は、ソースコード検査処理部１０３、検査規則記憶部１０７、検査結果記憶部１０６とから構成されていてもよい。ソースコード変換処理部１０２がさらに、ソースコード検査処理部１０３、検査規則記憶部１０７、検査結果記憶部１０６とから構成される場合については実施例３として後述する。
【００２３】
ソースコード変換装置１は、コンピュータに保存されている修正対象となるソースコード一式を入力データとして読み取り、読み取ったソースコード一式の構造及び呼出関係を解析する。そして、解析結果に基づいてソースコードの変換を行い、変換されたソースコード一式を、コンピュータ内に保存する。
【００２４】
ソースコード変換装置１が有する各処理部及び記憶部について説明する。
【００２５】
まず、ソースコード構造解析処理部１０１とソースコード構造記憶部１０４について説明する。
【００２６】
ソースコード構造解析処理部１０１は、修正対象となるソースコード一式をコンピュータ上から読み取りソースコードの構造及び呼出関係の解析を行う。ソースコードの構造解析は、読み取ったソースコードそれぞれについて構文解析を行うことによって行われる。例えば、ソースコードがＶＩＳＵＡＬ  ＢＡＳＩＣ（登録商標）言語で作成されている場合、ＶＩＳＵＡＬ  ＢＡＳＩＣ言語の構文ルールに基づいて、ソースコード内で定義されているクラス定義、メソッド定義、インスタンス定義、などの箇所を抽出しソースコード構造として解析する。
【００２７】
それぞれの定義箇所の抽出は、例えば、言語の構文ルールに基づいて作成された正規表現によって抽出してもよいし、ソースコードを行単位で読み込んで行データと言語の構文ルールとの比較を行うことによって、どのような定義なのかを判別することによって抽出してもよい。例えば、言語の構文ルールによって、「クラス定義はＣｌａｓｓの文字列が定義文字として含まれている行で始まり、Ｅｎｄ  Ｃｌａｓｓの記述で終わる」と定められている場合は、「Ｃｌａｓｓ」および「Ｅｎｄ  Ｃｌａｓｓ」の文字列定義箇所を正規表現や行データの比較などにより検索することで、クラス定義箇所の抽出を行い、クラス定義行の内容及びクラス定義の開始行、終了行の抽出を行う。
【００２８】
さらに、ソースコードの構造解析は、読み取ったソースコードそれぞれについての呼出関係についても解析される。ソースコードの呼出関係についても、ソースコードの構造解析を行う場合と同様に、読み取ったソースコードそれぞれについて構文解析を行うことによって行われる。例えば、ソースコードはＶＩＳＵＡＬ  ＢＡＳＩＣ言語で作成されている場合、ＶＩＳＵＡＬ  ＢＡＳＩＣ言語の構文ルールに基づいて、ソースコード内で定義されているインスタンス定義の箇所を抽出し、さらに抽出したインスタンス定義から、インスタンスの生成元となるクラスおよびインスタンス定義から呼び出しているメソッドの抽出を行うことにより、どのクラスのどのメソッドを呼び出しているのかを解析する。
【００２９】
これらのインスタンス定義箇所の抽出、クラスおよびメソッドの抽出は、例えば、言語の構文ルールに基づいて作成された正規表現によって抽出してもよいし、ソースコードを行単位で読み込んで行データと言語の構文ルールとの比較を行うことによって、どのような定義なのかを判別することによって抽出してもよい。
【００３０】
例えば、言語の構文ルールによって、インスタンス定義は「インスタンス名＝ｎｅｗ  クラス名」として定義されることが定められており、メソッド呼出は「インスタンス名．メソッド名」として記述されることが定められている場合は、まず、ｎｅｗの文字列の定義箇所を正規表現や行データの比較などによって検索することで、インスタンス定義箇所の抽出を行い、インスタンス名およびクラス名を取得する。そして、取得したインスタンス名の文字列を、正規表現や行データの比較などによって検索することによって呼び出しているメソッド名を取得する。
【００３１】
ソースコード構造記憶部１０４には、ソースコード構造解析処理部１０１によって解析されたソースコードの構造及び呼出関係が記憶される。ソースコード構造解析処理部１０１によって解析された構造及び呼出関係がどのようなデータ構造としてソースコード構造記憶部１０４に記憶されるかのデータ構造の例として、クラス構造、メソッド構造、インスタンス構造、メソッド呼出関係、のそれぞれについて説明する。
【００３２】
図２は、クラス構造の解析結果としてソースコード構造記憶部１０４に記憶されるデータ構造の例である。クラス構造の解析結果としては図２に示されるように「クラス名」「ファイル名」「開始行番号」「終了行番号」「修飾子」「継承元」の情報を有する。「クラス名」は定義されているクラスの名称を、「ファイル名」は定義されているクラスが記述されているソースコードのファイル名称の保存場所を含めたフルパス形式を、「開始行番号」は定義されているクラスが記述されているファイル名で表されるソースコード内での開始行番号を、「終了行番号」は定義されているクラスが記述されているファイル名で表されるソースコード内での終了行番号を、「修飾子」は定義されているクラスがどの範囲からアクセスできるかを表すアクセス修飾子を、「継承元」は定義されているクラスが継承している継承元クラスを、それぞれ記憶するものである。
【００３３】
例えば、「クラス名」が“Ｍ＿ＳＨＡＩＮＶｉｅｗ”、「ファイルパス」が“ＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂ”、「開始行番号」が“４”、「終了行番号」が“８９”、「修飾子」が“Ｐｕｂｌｉｃ”、「継承元」が“ＢａｓｅＰａｇｅ”として記憶されている場合は、クラスＭ＿ＳＨＡＩＮＶｉｅｗが修飾子ＰｕｂｌｉｃとしてＢａｓｅＰａｇｅクラスを承継して定義されており、ＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂのファイル内の４行目から８９行目に記述されている事を表す。
【００３４】
図３は、メソッド構造の解析結果としてソースコード構造記憶部１０４に記憶されるデータ構造の例である。メソッド構造の解析結果としては、図３に示されるように「メソッド名」「パラメータ」「戻り値型」「ファイル名」「クラス名」「開始行番号」「終了行番号」の情報を有する。「メソッド名」は定義されているメソッドの名称を、「パラメータ名」は定義されているメソッドが受け取る引数パラメータを、「戻り値型」は定義されているメソッドが返却する値の型を、「ファイル名」は定義されているメソッドが記述されているソースコードのファイル名称の保存場所を含めたフルパス形式を、「クラス名」は定義されているメソッドが記述されているクラス名を、「開始行番号」は定義されているメソッドが記述されているファイル名で表されるソースコード内での開始行番号を、「終了行番号」は定義されているメソッドが記述されているファイル名で表されるソースコード内での終了行番号を、それぞれ記憶するものである。
【００３５】
例えば、「メソッド名」が“Ｐａｇｅ＿Ｌｏａｄ”、「パラメータ」が“Ｏｂｊｅｃｔ，ＥｖｅｎｔＡｒｇｓ”、「戻り値型」が“Ｓｔｒｉｎｇ”、「ファイル名」が“ＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂ”、「クラス名」が“Ｍ＿ＳＨＡＩＮＶｉｅｗ”、「開始行番号」が“７”、「終了行番号」が“２３”、として記憶されている場合は、メソッドＰａｇｅ＿ＬｏａｄはＭ＿ＳＨＡＩＮＶｉｅｗクラスに定義されており、引数としてパラメータＯｂｊｅｃｔとＥｖｅｎｔＡｒｇｓを受け取り、戻り値型としてＳｔｒｉｎｇを返し、ＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂのファイル内の７行目から２３行目に記述されている事を表す。
【００３６】
図４は、インスタンス構造の解析結果としてソースコード構造記憶部１０４に記憶されるデータ構造の例である。インスタンス構造の解析結果としては図４に示されるように「宣言変数名」「インスタンス型」「ファイル名」「クラス名」「メソッド名」「宣言行番号」の情報を有する。「宣言変数名」は定義さているインスタンスの名称を、「インスタンス型」は定義されているインスタンスのクラス型を、「ファイル名」は定義されているインスタンスが記述されているソースコードのファイル名称の保存場所を含めたフルパス形式を、「クラス名」は定義されているインスタンスが記述されているクラス名を、「メソッド名」は定義されているインスタンスが記述されているメソッド名を、「宣言行番号」は定義されているインスタンスが記述されているファイル名で表されるソースコード内での宣言行番号を、それぞれ記憶するものである。
【００３７】
例えば、「宣言変数名」が“ｐａｒａｍ”、「インスタンス型」が“Ｍ＿ＳＨＡＩＮＭＡＮＡＧＥＲＰａｒａｍ”、「ファイル名」が“ＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂ”、「クラス名」が“Ｍ＿ＳＨＡＩＮＶｉｅｗ”、「メソッド名」が“ＩｎｓｅｒｔＢｕｔｔｏｎ＿Ｃｌｉｃｋ”、「宣言行番号」が“３７”、として記憶されている場合は、インスタンスｐａｒａｍはインスタンス型がＭ＿ＳＨＡＩＮＭＡＮＡＧＥＲＰａｒａｍとして、Ｍ＿ＳＨＡＩＮＶｉｅｗクラス内のＩｎｓｅｒｔＢｕｔｔｏｎ＿Ｃｌｉｃｋメソッド内に定義されており、ＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂのファイル内の３７行目に記述されている事を表す。
【００３８】
図５は、メソッド呼出関係の解析結果としてソースコード構造記憶部１０４に記憶されるデータ構造の例である。メソッド呼出関係の解析結果としては図５に示されるように「ファイル名」「クラス名」「メソッド名」「呼出先クラス名」「呼出先メソッド名」「呼出先メソッドパラメータ」「呼出行番号」の情報を有する。「ファイル名」はメソッド呼出処理が記述されているソースコードのファイル名称の保存場所を含めたフルパス形式を、「クラス名」はメソッド呼出処理が記述されているクラス名を、「メソッド名」はメソッド呼出処理が記述されているメソッド名を、「呼出先クラス」は呼出先のメソッドが定義されているクラス名を、「呼出先メソッド名」は呼出先メソッドの名称を、「呼出先メソッドパラメータ」はメソッド呼出処理によって呼び出すメソッドに引き渡すパラメータを、「呼出行番号」はメソッド呼出処理が記述されているファイル名で表されるソースコード内での行番号を、それぞれ記憶するものである。
【００３９】
例えば、「ファイル名」が“ＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂ”、「クラス名」が“Ｍ＿ＳＨＡＩＮＶｉｅｗ”、「メソッド名」が“ＩｎｓｅｒｔＢｕｔｔｏｎ＿Ｃｌｉｃｋ”、「呼出先クラス名」が“Ｖａｌｉｄａｔｏｒ”、「呼出先メソッド名」が“ＳｅｒｖｅｒＶａｌｉｄａｔｅ”、「呼出先メソッドパラメータ」が“ｐａｒａｍ”、「呼出行番号」が“３２”、として定義されている場合は、Ｍ＿ＳＨＡＩＮＶｉｅｗクラスのメソッドＩｎｓｅｒｔＢｕｔｔｏｎ＿ＣｌｉｃｋからＶａｌｉｄａｔｏｒクラスのＳｅｒｖｅｒＶａｌｉｄａｔｅメソッドにパラメータｐａｒａｍを渡して呼出を行っており、その呼出はＷｅｂＡＳＭａｓｔｅｒ／Ｍ＿ＳＨＡＩＮＶｉｅｗ．ｖｂのファイル内の３２行目に記述されている事を表す。
【００４０】
次に、ソースコード変換処理部１０２と変換規則記憶部１０５について説明する。
【００４１】
ソースコード変換処理部１０２は変換規則記憶部１０５に記憶されている変換規則を読み取り、変換規則に基づいてソースコード構造記憶部１０４に記憶されているソースコードの構造及び呼出関係から変換対象箇所の特定を行う。変換対象箇所が特定されたら、修正対象となるソースコードをコンピュータ上から読み込み、変換対象箇所のソースコードの書き換えが必要かどうかを判断し、書き換えが必要であると判断された場合には、ソースコードの書き換えを行う。そして、変換されたソースコード一式をコンピュータ上に保存する。
【００４２】
図６は、変換規則記憶部１０５に記憶されている変換規則の例を示したものである。例えば、変換規則は図６に示されるようなＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）データ形式で変換規則が記憶されている。図６の例では、メソッド内のＣａｔｃｈの記述行とＥｎｄ  Ｔｒｙの記述行の間にＬＭ．ＷｒｉｔｅＢｕｔｔｏｎＥｖｅｎｔ（Ｍｅ，ｓｅｎｄｅｒ，ｅ）という記述がされていなかった場合に、当該記述を追記するという変換規則の例を表している。具体的には、図６の５行目の＜ｍｅｔｈｏｄ  ｔａｒｇｅｔｗｏｒｄ１＝“￥ｓＣａｔｃｈ￥ｓ”  ｔａｒｇｅｔｗｏｒｄ２＝“￥ｓＥｎｄ￥ｓＴｒｙ￥ｓ”＞の記述が変換対象の元となる箇所の記述の定義であり、６行目の＜ｉｔｅｍ  ｍｏｄｅ＝“ｉｎｓｅｒｔ”  ｔａｒｇｅｔ＝“ＬＭ．ＷｒｉｔｅＢｕｔｔｏｎＥｖｅｎｔ（Ｍｅ，ｓｅｎｄｅｒ，ｅ）”  ／＞の記述が変換対象の元となる記述をどのように変換するのかの変換ルールの定義である。
【００４３】
図６の５行目の変換元となる箇所の定義では、ｍｅｔｈｏｄタグに属性値としてｔａｒｇｅｔｗｏｒｄ１とｔａｒｇｅｔｗｏｒｄ２が定義されているため、メソッド定義内に記述されているｔａｒｇｅｔｗｏｒｄ１とｔａｒｇｅｔｗｏｒｄ２の定義文字にマッチする間の箇所が変換対象箇所となる。すなわち、メソッド定義内のＣａｔｃｈの記述行とＥｎｄ  Ｔｒｙの記述行の間の記述が変換対象の元となる箇所になる。
【００４４】
そして、図６の６行目の変換対象の元なる記述をどのように変換するかの定義では、ｉｔｅｍタグに属性値として、ｍｏｄｅとｔａｒｇｅｔが定義されている。ｍｏｄｅにはどのように変換するのかが定義されており、ｔａｒｇｅｔは変換の内容が定義されている。当該例においては、ｍｏｄｅの値が“ｉｎｓｅｒｔ”と定義されており、ｔａｒｇｅｔの値が“ＬＭ．ＷｒｉｔｅＢｕｔｔｏｎＥｖｅｎｔ（Ｍｅ，ｓｅｎｄｅｒ，ｅ）”とされているため、変換対象の元となる箇所にｔａｒｇｅｔの値をｉｎｓｅｒｔ、すなわち、値を挿入する、という定義になっている。
【００４５】
このように変換規則を定義することにより、メソッド内のＣａｔｃｈの記述行とＥｎｄ  Ｔｒｙの記述行の間にＬＭ．ＷｒｉｔｅＢｕｔｔｏｎＥｖｅｎｔ（Ｍｅ，ｓｅｎｄｅｒ，ｅ）という記述がされていなかった場合に、当該記述を追記するという変換規則の定義となる。
【００４６】
次にフローチャートを用いて、ソースコード変換装置がどのようにソースコードの変換処理を行うのか、具体的な処理フローを説明する。
【００４７】
図９は実施例１におけるソースコード変換処理の全体処理フローを表したフローチャート図である。ソースコード変換装置１においては、まず初めに、修正対象となるソースコード一式の構造及びメソッド呼出関係の構造解析が行われる（Ｓ９０１）。この解析処理は、事前にソースコードの全体について、ソースコード構造解析処理部１０１によって行われ、解析結果はソースコード構造記憶部１０４に記憶される。ソースコード構造解析処理の詳細については後述する。
【００４８】
ソースコード全体の構造解析が事前に行われると、ソースコードの変換処理が行われる（Ｓ９０２）。ソースコードの変換処理はソースコード変換処理部１０２によって行われる。ソースコードの変換は変換規則記憶部１０５に記憶されている変換規則ごとに行われる。いずれの変換規則の変換処理を行うのか、指示を受け付けて、指示された変換規則の変換処理のみを行うようにしてもよいし、すべての変換規則の変換処理を繰り返しすべて行うようにしてもよい。ソースコードの変換処理はソースコード構造記憶部１０４に記憶されているソースコードの構造に基づいて変換箇所の特定を行い、特定された変換箇所に該当するソースコードの書き換えが行われる。ソースコード変換処理の詳細については後述する。
【００４９】
ここで、１つの変換規則の変換処理が行われ、次の変換規則の変換処理を行う際には、再度ソースコードの構造解析処理が行われる（Ｓ９０３）。これは、Ｓ９０２のソースコード変換処理によって解析結果の元となるソースコードの内容が書き換わっているため、再度の構造解析処理が必要なためである。Ｓ９０３におけるソースコードの解析処理は、ソースコード全体について、再度、構造解析を行ってもよいし、ソースコード変換処理部によって変換されたソースコードに関連するソースコードについてのみ、再度、構造解析を行うようにしてもよい。
【００５０】
次に、ソースコード構造解析処理部１０１によって行われる、ソースコード構造解析処理の詳細について説明する。
【００５１】
図１０は実施例１におけるソースコード構造解析処理部１０１によって行われる、ソースコード構造解析処理の処理フローを表したフローチャート図である。
【００５２】
ソースコード構造解析処理部１０１は解析対象となるソースコード一式をコンピュータ上から読み込みを行うと、読み込んだソースコードからクラス定義一覧の取得を行う（Ｓ１００１）。クラス定義の取得は、ソースコードが記載されている言語のクラス定義の構文ルールに基づいて、正規表現によって抽出してもよいし、ソースコードを行単位で読み込んで行データと言語のクラス定義の構文ルールとの比較を行うことによって取得してもよい。以下の処理で述べる、メソッド定義、インスタンス定義、メソッド呼出定義などの取得についても同様である。
【００５３】
クラス定義の一覧が取得されたら、取得したクラス定義ごとに繰り返し処理を行う（Ｓ１００２）。まず、取得したクラス定義についてクラス構造情報をソースコードから取得して、取得したクラス構造情報をソースコード構造記憶部１０４に記憶する（Ｓ１００３）。ここで記憶するクラス構造情報は図２に示されているような「クラス名」「ファイル名」「開始行番号」「終了行番号」「修飾子」「継承元」などである。
【００５４】
次に、当該クラス定義内に定義されているメソッド定義の一覧を取得する（Ｓ１００４）。メソッド定義一覧の取得は、当該クラスが定義されているファイル名のファイルの開始行番号から終了行番号の間に定義されているメソッド定義の一覧を取得することによって行われる。
【００５５】
メソッド定義の一覧が取得されたら、取得したメソッド定義ごとに繰り返し処理を行う（Ｓ１００５）。まず、取得したメソッド定義についてメソッド構造情報をソースコードから取得して、取得したメソッド構造情報をソースコード構造記憶部１０４に記憶する（Ｓ１００６）。ここで記憶するメソッド構造情報は図３に示されているような「メソッド名」「パラメータ」「戻り値型」「ファイル名」「クラス名」「開始行番号」「終了行番号」などである。
【００５６】
その次に、当該メソッド定義内に定義されているインスタンス定義の一覧を取得する。インスタンス定義一覧の取得は、当該メソッドが定義されているファイル名のファイルの開始行番号から終了行番号の間に定義されているインスタンス定義の一覧を取得することによって行われる。インスタンス定義の一覧を取得したら、それぞれのインスタンス構造情報をソースコードから取得して、取得したインスタンス構造情報をソースコード構造記憶部１０４に記憶する（Ｓ１００７）。ここで記憶するインスタンス構造情報は図４に示されているような「宣言変数名」「インスタンス型」「ファイル名」「クラス名」「メソッド名」「宣言行番号」などである。
【００５７】
その次に、当該メソッド定義内に他のメソッドの呼出処理を行っているメソッド呼出箇所の一覧を取得する。メソッド呼出箇所一覧の取得は、当該メソッドが定義されているファイル名のファイルの開始行番号から終了行番号の間に定義されているメソッド呼出定義の一覧を取得することによって行われる。メソッド呼出定義の一覧を取得したら、それぞれのメソッド呼出情報をソースコードから取得して、取得したメソッド呼出情報をソースコード構造記憶部１０４に記憶する（Ｓ１００８）。ここで記憶するメソッド呼出情報は図５に示されているような「ファイル名」「クラス名」「メソッド名」「呼出先クラス名」「呼出先メソッド名」「呼出メソッドパラメータ」「呼出行番号」などである。
【００５８】
そして、Ｓ１００４で取得したメソッド定義の一覧すべてについてＳ１００６からＳ１００８の処理を行ったかをチェックする（Ｓ１００９）。取得したメソッド定義すべてについて処理が行われていない場合は、Ｓ１００５に戻って処理を行っていないメソッド定義について処理を行う（Ｓ１００９：ＮＯ）。取得したメソッド定義すべてについて処理が行われている場合（Ｓ１００９：ＹＥＳ）は、Ｓ１００１で取得したクラス定義の一覧すべてについて、Ｓ１００２からＳ１００９の処理を行ったかをチェックする（Ｓ１０１０）。取得したクラス定義すべてについて処理が行われていない場合は、Ｓ１００２に戻って、処理を行っていないクラス定義について処理を行う（Ｓ１０１０：ＮＯ）。取得したクラス定義すべてについて処理を行っていた場合（Ｓ１０１０：ＹＥＳ）は、ソースコードの構造解析処理を終了する。
【００５９】
次に、ソースコード変換処理部１０２によって行われるソースコード変換処理の詳細について説明する。
【００６０】
図１１は実施例１におけるソースコード変換処理部１０２によって行われる、ソースコード変換処理の処理フローを表したフローチャート図である。
【００６１】
まず、ソースコード変換処理部１０２は変換規則記憶部１０５からソースコードの変換規則の一覧を取得する（Ｓ１１０１）。そして、取得した変換規則ごとに繰り返し処理を行う（Ｓ１１０２）。例えば、変換規則は図６に示されているようなＸＭＬデータ形式で作成されている。
【００６２】
次に、変換規則から変換処理の対象となる記述の定義を取得し、変換対象箇所の一覧をソースコード構造記憶部１０４から取得し変換対象箇所およびソースコードを特定する（Ｓ１１０３）。例えば、図６の定義例においては、変換元となる箇所としてメソッド定義内に記述されているｔａｒｇｅｔｗｏｒｄ１とｔａｒｇｅｔｗｏｒｄ２の定義文字にマッチする間の箇所が定義されているため、ソースコード構造記憶部１０４に記憶されているメソッド構造情報から、メソッド一覧の取得を行い、取得されたメソッドに対応する「ファイル名」の「開始行番号」と「終了行番号」の間にｔａｒｇｅｔｗｏｒｄ１とｔａｒｇｅｔｗｏｒｄ２の定義文字が含まれる箇所を変換対象箇所として特定する。
【００６３】
変換対象箇所が特定できたら、取得した変換対象箇所の一覧についてそれぞれの箇所を繰り返し処理する（Ｓ１１０４）。そして、変換対象箇所について、変換規則の定義情報を元に、ソースコードの変換が必要かどうかを判定する（Ｓ１１０５）。例えば、図６の定義例においては、変換対象の元となる箇所にｔａｒｇｅｔの値を挿入する、という定義になっているため、当該変換対象箇所にｔａｒｇｅｔの値が存在するかどうかを判定する。ｔａｒｇｅｔの値が存在した場合は、すでに必要な記述がされているということであり、ソースコードの変換は不要であると判断され、ｔａｒｇｅｔの値が存在しない場合は、必要な記述がされていないということなので、ソースコードの変換が必要であると判断される。
【００６４】
ソースコードの変換が必要であると判断された場合は（Ｓ１１０５：ＹＥＳ）、ソースコードの変換処理を行い変換したソースコードをコンピュータ上に記録する（Ｓ１１０６）。図６の定義例においては、変換規則の定義に従ってｔａｒｇｅｔｗｏｒｄ１とｔａｒｇｅｔｗｏｒｄ２の定義文字の間にｔａｒｇｅｔの値を記述する。ソースコードの変換が必要ないと判断された場合は（Ｓ１１０５：ＮＯ）、ソースコードの変換処理は行わない。
【００６５】
その次に、全ての変換対象箇所について処理を行ったかを確認し（Ｓ１１０７）、未処理の変換対象箇所がある場合は（Ｓ１１０７：ＮＯ）、Ｓ１１０４に戻り次の変換対象箇所の処理を行う。未処理の変換対象箇所がない場合は（Ｓ１１０７：ＹＥＳ）、全ての変換規則について処理を行ったかを判定し（Ｓ１１０８）、未処理の変換規則がある場合は（Ｓ１１０８：ＮＯ）、Ｓ１１０２に戻り、未処理の変換規則について繰り返し処理を行う。すべての変換規則について処理を行った場合は（Ｓ１１０８：ＹＥＳ）、ソースコード変換処理を終了する。
【００６６】
以上が、実施例１におけるソースコード変換装置のソースコードの変換処理の詳細となる。本実施例においては、ソースコード変換処理部が事前に解析されたソースコードの構造や呼出関係に基づいて変換対象箇所を特定することにより、変換対象箇所が分散している場合や複数のソースコードに跨っている場合であっても、変換対象箇所を特定しソースコードの変換処理を行うことが可能となっている。
【実施例２】
【００６７】
実施例２では、ソースコードの種類に対応してソースコードの変換処理を行う場合について説明する。ここでいうソースコードの種類とは、ソースコードにどのような処理が記述されているかの種別である。例えば、画面処理を行うソースコード、データベース処理を行うソースコードといった、処理目的による種別の事をいう。
【００６８】
実施例１においては、ソースコード内において特定の記述が必要な箇所に、必要な記述がされていない場合に、記述を追記して書き換える例について説明を行った。例えば、図６の変換規則では、メソッド内の特定箇所に特定の記述を追記するという場合の定義例であった。しかし、ソースコードの作成規約によっては、全てのソースコードに対して同様に処理を記述するのではなく、ソースコードの種類に応じて記述する処理の内容が異なる場合がある。例えば、画面処理を行うソースコード内のメソッドに記述する例外処理と、データベース処理を行うソースコード内のメソッドに記述する例外処理と、記述内容が異なるような場合である。
【００６９】
このような場合においては、変換規則記憶部１０５に記憶されている変換規則の定義を複数用意しておくことで対応することができる。例えば、図７は、画面処理を行うソースコードのメソッドに対して例外処理が記述されていなかった場合に例外処理を記述する変換規則の定義例であり、図８は、データベース処理を行うソースコードのメソッドに対して例外処理が記述されていなかった場合に例外処理を記述する変換規則の定義例である。
【００７０】
まず、図７の変換規則の定義においては、画面処理を行うソースコードのメソッドに対して例外処理が記述されていなかった場合に例外処理を記述する変換規則の定義例として、メソッド記述の開始直後に例外処理記述の開始の記述を行い、メソッド記述の終了直前に例外処理記述の終了の記述を行うことを定義している。
【００７１】
具体的には、図７の５行目において、ｍｅｔｈｏｄタグのｔａｒｇｅｔｗｏｒｄの値としてメソッド記述の開始文字列の正規表現を定義することで、メソッド記述の開始位置を変換対象箇所として特定している。さらに、ｔａｒｇｅｔｃｌａｓｓの値として“Ｖｉｅｗ”を定義することにより、変換対象のクラスとして定義されているＶｉｅｗクラスを承継しているクラスのソースコード、すなわち画面処理のソースコードとして指定している。このように変換対象のソースコードを指定できることにより、ソースコードの種類に対応したソースコードの変換処理が可能となる。
【００７２】
また、図７の変換規則の定義例に示されている様に、１つの変換規則の定義内に複数の変換規則を記述してもよい。例えば、図７においては、５行目と１０行目にｍｅｔｈｏｄタグが記述されている。このように変換規則を定義することによって、５行目から８行目の変換規則の定義では、メソッド記述の開始直後に例外処理記述の開始の記述がされていなかった場合には、例外処理記述の開始を追記するといった定義を行い、１０行目から１４行目の変換規則の定義では、メソッド記述の終了直前に例外処理の終了の記述がされていなかった場合には、例外処理記述の終了を追記するといった定義を行うことができる。
【００７３】
次に、図８の変換規則の定義においては、データベース処理を行うソースコードのメソッドに対して例外処理が記述されていなかった場合に例外処理を記述する変換規則の定義例として、メソッドの記述行に例外処理の記述がされていなかったら、メソッド記述行に例外処理の記述を行うことを定義している。
【００７４】
具体的には、図８の５行目において、ｍｅｔｈｏｄタグのｔａｒｇｅｔｗｏｒｄの値としてメソッド記述の開始文字列の正規表現を定義することで、メソッド記述の開始位置を変換対象箇所として特定している。さらに、ｔａｒｇｅｔｃｌａｓｓの値としてＭａｎａｇｅｒを定義することにより、変換対象のクラスをとして定義されているＭａｎａｇｅｒクラスを承継しているクラスのソースコード、すなわちデータベース処理のソースコードとして指定している。そして、図８の７行目において、ｉｔｅｍタグのｍｏｄｅの値を“ａｄｄ”と定義することによって、変換対象箇所にｔａｒｇｅｔの値がなかった場合に、ｔａｒｇｅｔの値を追記するといった定義を行っている。
【００７５】
以上のようにソースコードの種類に対応して複数の変換規則を定義し、変換規則記憶部１０５に記憶させておくことで、ソースコード変換装置１は、ソースコードの種別に応じたソースコードの変換を行うことが可能となる。この場合における、ソースコードの変換処理の処理フローについては実施例１と、同様な処理フローとなる。
【００７６】
すなわち、実施例１において説明した図１１のソースコード変換処理の処理フローのＳ１１０１において、図７に示すような画面処理を行うソースコードに対する変換規則の定義や、図８に示すようなデータベース処理を行うソースコードに対する変換規則の定義の取得を行い、取得した変換規則に対応した変換箇所一覧の取得（Ｓ１１０３）および変換処理の必要性の判断（Ｓ１１０５）、変換処理の実行を行う（Ｓ１１０６）。
【００７７】
以上が、実施例１、実施例２におけるソースコード変換装置１のソースコードの変換処理の詳細となる。なお、変換規則の定義例として図６および図７、図８において、ＸＭＬによる定義例を示したが、変換規則の定義は実施例に示した形式に限定されるのではなく、実施例に示したような変換処理を行う定義データであればどのような形式の定義データであってもよい。
【実施例３】
【００７８】
実施例１および実施例２においては、変換規則記憶部１０５に記憶されている変換規則の定義によってソースコードの変換対象となる箇所を特定し、変換処理を行う実施例について説明を行ったが、ソースコードの変換対象となる箇所の特定は、変換規則の定義によって行うのではなく、事前にソースコードの検査を行い、検査結果に対応してソースコードの変換処理を行うようにしてもよい。
【００７９】
このような処理を行うために、実施例３におけるソースコード変換装置１は、実施例１のソースコード変換装置１のソースコード変換処理部１０２がさらに、ソースコード検査処理部１０３、検査規則記憶部１０７および検査結果記憶部１０６とから構成される。実施例３におけるソースコード変換装置１においても実施例１におけるソースコード変換装置１と同様に、コンピュータに保存されている修正対象となるソースコード一式を入力データとして読み取り、読み取ったソースコード一式の構造及び呼出関係を解析する。そして、解析結果に基づいてソースコードの変換を行い、変換されたソースコード一式を、コンピュータ内に保存する。
【００８０】
まず、実施例３におけるソースコード変換装置１のソースコード変換処理部１０２がさらに有する、ソースコード検査処理部１０３、検査規則記憶部１０７および検査結果記憶部１０６について説明する。
【００８１】
ソースコード検査処理部１０３は、検査対象となるソースコード一式をコンピュータ上から読み取りソースコードが検査規則記憶部１０７に記憶されている検査規則通りの構成になっているかどうかの検査の処理を行う。ソースコードの検査はソースコード構造記憶部１０４に記憶されている事前解析されたソースコードの構造及び呼出関係に基づいて検査される。
【００８２】
図１２は、検査規則記憶部１０７に記憶されている検査規則の例を示したものである。例えば、検査規則は図１２に示されるようなソースコード形式で検査規則が記憶されている。図１２は、ソースコード中のＣａｔｃｈの記述行とＥｎｄ  Ｔｒｙの記述行の間にログを出力する記述がされているかどうかを検査する検査規則である。
【００８３】
図１２の検査規則に基づいて、ソースコード検査処理部１０３がどのようにソースコードの検査を行うかについて説明する。検査規則記憶部１０７は検査規則を読み込むと、読み込んだ検査規則を順次実行することでソースコードの検査を行う。
【００８４】
まず、検査規則記憶部１０７は、図１２の２１行目の記述に基づいて、ソースコード構造記憶部１０４からすべてのメソッド定義一覧を取得する。そして、取得したメソッド定義ごとに、２４行目から４５行目の検査処理を行う。具体的には、２７行目において、検査を行うメソッド定義の「ファイル名」「開始行番号」「終了行番号」の情報に基づいて、ソースコードからＣａｔｃｈ句の記述情報を取得する。そして、３０行目において、取得したＣａｔｃｈ句の記述情報にＬｏｇ出力処理が記述されているかを検査する。Ｌｏｇ出力処理の記述がされていなかった場合は、３９行目において、検査結果を検査結果記憶部１０６に記憶する。
【００８５】
検査結果記憶部１０６には、ソースコード検査処理部１０３において検査されたソースコードの検査結果が記憶される。図１３は検査結果記憶部１０６に記憶される検査結果のデータ構造の例である。検査結果は図１３に示されるように「チェックＩＤ」「ファイル名」「開始行番号」「終了行番号」「指摘事項」の情報を有する。「チェックＩＤ」は検査規則のチェックＩＤを、「ファイル名」は検査規則によって検査されたソースコードのファイル名称の保存場所を含めたフルパス形式を、「開始行番号」は検査規則によって検査されたファイル名で表されるソースコード内での開始行番号を、「終了行番号」は検査規則によって検査されたファイル名で表されるソースコード内での終了行番号を、「指摘事項」は検査規則によって検査された結果の指摘事項を、それぞれ記憶するものである。
【００８６】
例えば、「チェックＩＤ」が“Ｆ５０００１”、「ファイル名」が“Ｄ：￥ｓｒｃ￥ＣｏｍｍｏｎＵｔｉｌ．ｖｂ”、「開始行番号」が“２１”、「終了行番号」が“２８”、「指摘事項」が“例外発生個所にログ出力処理が記載されていません。”、と記憶されている場合は、Ｄ：￥ｓｒｃ￥ＣｏｍｍｏｎＵｔｉｌ．ｖｂのソースコードをＦ５０００１のルールＩＤの検査規則で検査した結果、２１行目から２８行目について、例外発生個所にログ出力処理が記載されていなかったということを表す。
【００８７】
次にフローチャートを用いて、実施例３において、ソースコード変換装置がどのようにソースコードの変換処理を行うのか、具体的な処理フローを説明する。
【００８８】
図１４は実施例３におけるソースコード変換処理の全体処理フローを表したフローチャート図である。実施例３におけるソースコード変換装置１においては、まず初めに、修正対象となるソースコード一式の構造及びメソッド呼出関係の構造解析が行われる（Ｓ１４０１）。この解析処理は、事前にソースコードの全体について、ソースコード構造解析処理部１０１によって行われ、解析結果はソースコード構造記憶部１０４に記憶される。ソースコード構造解析処理の詳細については実施例１におけるソースコード解析処理と同様である。
【００８９】
ソースコード全体の構造解析が事前に行われると、次にソースコード全体の検査処理が行われる（Ｓ１４０２）。ソースコードの検査処理はソースコード検査処理部１０３にて行われる。ソースコード検査処理の詳細については後述する。
【００９０】
ソースコードの検査処理行われたら、次にソースコードの変換処理が行われる（Ｓ１４０３）。ソースコードの変換処理はソースコード変換処理部１０２によって行われる。ソースコードの変換は変換規則記憶部１０５に記憶されている変換規則ごとに行われる。いずれの変換規則の変換処理を行うのか、指示を受け付けて、指示された変換規則の変換処理のみを行うようにしてもよいし、すべての変換規則の変換処理を繰り返しすべて行うようにしてもよい。ソースコードの変換処理は検査結果記憶部１０６に記憶されているソースコードの検査結果に基づいて変換箇所の特定を行い、特定された変換箇所に該当するソースコードの書き換えが行われる。ソースコード変換処理の詳細については後述する。
【００９１】
ここで、１つの変換規則の変換処理が行われ、次の変換規則の変換処理を行う際には、再度ソースコードの構造解析処理が行われる（Ｓ１４０４）。これは、Ｓ１４０３のソースコード変換処理によって解析結果の元となるソースコードの内容が書き換わっているため、再度の構造解析処理が必要なためである。Ｓ１４０３におけるソースコードの解析処理は、ソースコード全体について、再度、構造解析を行ってもよいし、ソースコード変換処理部によって変換されたソースコードに関連するソースコードについてのみ、再度、構造解析を行うようにしてもよい。
【００９２】
図１５は、実施例３においてソースコード検査処理部１０３において行われる。ソースコード検査処理の処理フローを表したフローチャート図である。図１５のフローチャートに基づいてソースコード検査処理について詳述する。まず、ソースコード検査処理部１０３は検査規則記憶部１０７から検査規則の一覧を取得する（Ｓ１５０１）。そして、取得した検査規則ごとに繰り返し処理を行う（Ｓ１５０２）。例えば、検査規則は図１２に示されているようなソースコード形式で作成されている。
【００９３】
次に、検査規則の定義を逐次実行することにより、検査処理を実行する（Ｓ１５０３）。例えば、図１２の検査規則に基づいた検査においては、ソースコードからＣａｔｃｈ句にＬｏｇ出力処理の記述がされているかどうかが検査される。そして、検査の結果が検査結果記憶部１０６に記録される（Ｓ１５０４）。検査結果は、検査の結果が不適合であった場合のみ記録される。例えば、図１２の検査規則に基づいた検査においては、ソースコードからＣａｔｃｈ句にＬｏｇ出力処理の記述がされていない箇所の一覧が記録される。
【００９４】
その次に、全ての検査規則について検査処理を行ったかを確認し（Ｓ１５０５）、未検査の検査規則がある場合は（Ｓ１５０５：ＮＯ）、Ｓ１５０２に戻り次の検査規則の処理を行う。未検査の規則がない場合は（Ｓ１５０５：ＹＥＳ）、ソースコード検査処理を終了する。
【００９５】
次に、ソースコード変換処理部１０２によって行われる、ソースコード変換処理の詳細について説明する。
【００９６】
図１６は実施例３におけるソースコード変換処理部１０２によって行われるソースコード変換処理の処理フローを表したフローチャート図である。
【００９７】
まず、ソースコード変換処理部１０２は検査結果記憶部１０６からソースコードの検査結果の一覧を取得する（Ｓ１６０１）。そして、検査結果があるかどうかを判定する（Ｓ１６０２）。検査結果が無かった場合は、変換対象の元となる箇所が無いということなので処理を終了する（Ｓ１６０２：ＮＯ）。検査結果が存在した場合は（Ｓ１６０２：ＹＥＳ）、変換規則記憶部１０５からソースコードの変換規則の一覧を取得する（Ｓ１６０３）。そして、取得した変換規則ごとに繰り返し処理を行う（Ｓ１６０４）。例えば、変換規則は図１７に示されているようなＸＭＬデータ形式で作成されている。
【００９８】
次に、変換規則の定義に基づいて、変換対象箇所の一覧を検査結果記憶部１０７から取得し、取得した情報に基づいて、変換対象箇所およびソースコードを特定することによってソースコードの変換処理を実行する（Ｓ１６０５）。具体的には、図１７に示されている様に変換規則が定義されている場合、図１７の５行目において、ｆｉｌｅタグにｔａｒｇｅｔＣｈｅｃｋＩＤの値として“Ｆ５００１”が定義されているため、変換対象箇所は、検査結果記憶部１０６に記憶されている検査結果のうち、チェックＩＤが“Ｆ５００１”で記憶されている箇所となる。
【００９９】
すなわち、チェックＩＤが“Ｆ５００１”でチェックされた箇所の一覧を検査結果記憶部１０６から取得し、検査結果から「ファイル名」「開始行番号」「終了行番号」を取得する。そして、検査結果の情報に基づいて、ソースコードから変換対象箇所を特定する。変換対象箇所が特定されたら、実施例１の場合と同様に変換規則に基づいてソースコードの変換処理を実行する。
【０１００】
ソースコード変換処理を実行したら、全ての変換規則について処理を行ったかを確認し（Ｓ１６０６）、未処理の変換規則がある場合は（Ｓ１６０６：ＮＯ）、Ｓ１６０４に戻り次の変換規則の処理を行う。未処理の変換規則がない場合は（Ｓ１６０６：ＹＥＳ）、ソースコード変換処理を終了する。
【０１０１】
以上が、実施例３におけるソースコード変換装置のソースコードの変換処理の詳細となる。実施例３におけるソースコード変換装置においては、事前に検査規則に基づいて、ソースコードの検査を行い、ソースコードの記述が検査結果に適合しない箇所のみをソースコードの変換元として特定することによって、より適切に変換箇所の特定を行うことが可能となる。
【０１０２】
さらには、ソースコードの種類に対応した構造及び呼出関係になっているかをソースコード作成規約として用いることにより、ソースコードの構造及び呼出関係が規定通りになっていない箇所を規定通りに変換することや、複数ソースコードに跨ってソースコードの変換が必要となる場合に、変換箇所の特定を事前に行い、変換処理を行うことが可能となる。
【０１０３】
以上、実施例１ないし実施例３において、本発明におけるソースコード変換装置の構成について説明を行ったが、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示された構成要素と同一であることを要しない。
【０１０４】
すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ソースコード構造解析処理部１０１またはソースコード構造記憶部１０４を外部の装置としてネットワーク経由で接続するようにしてもよい。
【０１０５】
また、上記実施例においては、ソースコード変換装置に基づいて説明を行ったが、上記実施例はハードウェアロジックやプログラムによって各種の処理を実行することが実現されているコンピュータに処理を実行させる方法であってもよいし、上記実施例を行う予め用意されたプログラムをコンピュータに読み込ませて実行するようなプログラムであってもよい。
【符号の説明】
【０１０６】
１  ソースコード変換装置
１０１  ソースコード構造解析処理部
１０２  ソースコード変換処理部
１０３  ソースコード検査処理部
１０４  ソースコード構造記憶部
１０５  変換規則記憶部
１０６  検査結果記憶部
１０７  検査規則記憶部
【図１】
2014134962.tif 000003
【図２】
2014134962.tif 000004
【図３】
2014134962.tif 000005
【図４】
2014134962.tif 000006
【図５】
2014134962.tif 000007
【図６】
2014134962.tif 000008
【図７】
2014134962.tif 000009
【図８】
2014134962.tif 000010
【図９】
2014134962.tif 000011
【図１０】
2014134962.tif 000012
【図１１】
2014134962.tif 000013
【図１２】
2014134962.tif 000014
【図１３】
2014134962.tif 000015
【図１４】
2014134962.tif 000016
【図１５】
2014134962.tif 000017
【図１６】
2014134962.tif 000018
【図１７】
2014134962.tif 000019