(57)【要約】      （修正有）【課題】エラー情報に対応するバージョンのソースコードの特定を容易にするソースコード特定装置を提供する。【解決手段】エラー情報抽出部１２は、スタックトレースからエラー情報を抽出し、ソースコード情報抽出部１４は、ソースコード４からソースコード情報を抽出する。差分検出部１６は、エラー情報とソースコード情報に基づいて差分情報を検出する。ＳＣＭ操作部１８は、ＳＣＭ（ｓｏｆｔｗａｒｅ  ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｍａｎａｇｅｍｅｎｔ）装置２と連携して、差分情報に基づく差分発生コミットＩＤを特定し、差分発生コミットＩＤに対応するバージョンまでソースコードをロールバックする。【選択図】図２
2018128867.tif 000002
【特許請求の範囲】
【請求項１】
特定のソースコードに含まれる命令と、該命令の該特定のソースコード上の記述位置とを含むソースコード情報を受け付け、
ソースコードに含まれる命令のうち、該ソースコードの実行に応じて発生したエラーに関連する命令と、該命令の該ソースコード上の記述位置とを含むエラー情報を受け付け、
受け付けた前記エラー情報のうち、受け付けた前記ソースコード情報に含まれないエラー情報が存在する場合、ソースコードの変更履歴情報を記憶する記憶部を参照して、該エラー情報に含まれる記述位置に記述された命令に対して行われた変更を特定し、
前記特定のソースコードを、特定した前記変更が行われる前のソースコードに変更する処理を実行させる指示を出力する、
処理をコンピュータに実行させることを特徴とするソースコード特定プログラム。
【請求項２】
前記変更履歴情報を記憶する記憶部は、複数の版のソースコード及びソースコードの変更履歴情報を管理するソース管理装置の記憶部であり、
前記特定のソースコードは、特定の版のソースコードであり、
前記ソースコード情報は、ソースコードを記憶する複数の記憶部の記憶部識別子を含み、
前記エラー情報は、前記エラーに関連する命令を記憶する記憶部の記憶識別子を含み、
前記特定する処理は、前記エラー情報のうち前記ソースコード情報に含まれない差分エラー情報が存在する場合、該差分エラー情報に含まれる記憶識別子で識別される記憶部に対して行われた変更を特定し、
前記出力する処理は、前記特定の版のソースコードを、特定した前記変更が行われる前の版のソースコードに変更する処理を実行させる指示を出力することを特徴とする請求項１に記載のソースコード特定プログラム。
【請求項３】
前記変更を特定して前記変更が行われる前の版のソースコードに変更する処理は、ソースコードの第１の版と第１の版の次の版である第２の版の間で変更された記憶部の記憶部識別子の一覧を取得し、前記差分エラー情報に含まれる記憶部識別子が前記一覧に含まれる場合に前記特定の版のソースコードを前記第１の版のソースコードに変更することを特徴とする請求項２に記載のソースコード特定プログラム。
【請求項４】
前記記憶部識別子の一覧を取得する処理は、ソースコードの２つの版の間で行われた変更を識別する変更識別子の一覧を取得し、取得した一覧に含まれる２つを指定して前記ソース管理装置から取得することを特徴とする請求項３に記載のソースコード特定プログラム。
【請求項５】
前記差分エラー情報に含まれる記憶部識別子が複数ある場合には、前記変更を特定して前記変更が行われる前のソースコードに変更する処理を記憶部識別子の数だけ繰り返すことを特徴とする請求項３に記載のソースコード特定プログラム。
【請求項６】
特定のソースコードに含まれる命令と、該命令の該特定のソースコード上の記述位置とを含むソースコード情報を受け付け、
ソースコードに含まれる命令のうち、該ソースコードの実行に応じて発生したエラーに関連する命令と、該命令の該ソースコード上の記述位置とを含むエラー情報を受け付け、
受け付けた前記エラー情報のうち、受け付けた前記ソースコード情報に含まれないエラー情報が存在する場合、ソースコードの変更履歴情報を記憶する記憶部を参照して、該エラー情報に含まれる記述位置に記述された命令に対して行われた変更を特定し、
前記特定のソースコードを、特定した前記変更が行われる前のソースコードに変更する処理を実行させる指示を出力する、
処理をコンピュータが実行することを特徴とするソースコード特定方法。
【請求項７】
特定のソースコードに含まれる命令と、該命令の該特定のソースコード上の記述位置とを含むソースコード情報を受け付けるソース受付部と、
ソースコードに含まれる命令のうち、該ソースコードの実行に応じて発生したエラーに関連する命令と、該命令の該ソースコード上の記述位置とを含むエラー情報を受け付けるエラー受付部と、
前記エラー受付部が受け付けた前記エラー情報のうち、前記ソース受付部が受け付けた前記ソースコード情報に含まれないエラー情報が存在する場合、ソースコードの変更履歴情報を記憶する記憶部を参照して、該エラー情報に含まれる記述位置に記述された命令に対して行われた変更をする特定部と、
前記特定のソースコードを、前記特定部が特定した前記変更が行われる前のソースコードに変更する処理を実行させる指示を出力する出力部と、
を有することを特徴とするソースコード特定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード特定プログラム、ソースコード特定方法及びソースコード特定装置に関する。
【背景技術】
【０００２】
ソフトウェアにおいてトラブルが発生した場合、ソフトウェアの保守者は、トラブルの解決のため、そのトラブルがどういった種類のものかという情報以外に、どういった経緯でトラブルが発生したのかを確認する必要がある。そのために、スタックトレースが利用される。スタックトレースとは、プログラムの実行過程が記録されたものであり、スタックトレースを利用することによって、保守者は、問題発生時にソースコード中の処理がどのような順序で行われたかを確認することができる。
【０００３】
図１８は、ソースコードとスタックトレースの例を示す図である。図１８では、「Exception  in  thread  main  java.lang.NullPointerException  at  Sample.hoge  (Sample.java:3)」は、クラス「Sample」のメソッド「hoge」の実行中に、ソースコードの３行目で例外「java.lang.NullPointerException」が発生したことを示す。また、メソッド「hoge」は、ソースコードの７行目においてメソッド「main」により呼び出されている。このようにプログラムの動作をソースコード上で追うことで、保守者は、問題の原因と対処法の調査を行うことができる。なお、ソースコードは、ファイル「Sample.java」に記憶される。また、「java」は登録商標である。
【０００４】
また、トレース情報とプログラム情報との対応関係に基づき第１と第２のプログラムの差分情報とトレース差分情報との対応関係を解析し、解析した対応関係を第１、第２のプログラム情報のうち少なくと一方に対応付けて表示する技術がある。この技術によれば、複数プログラムの動作解析の不十分さを解消することができる。
【０００５】
また、新旧バージョン間で相違するコードとして抽出された差分コード集合と、特定機能について旧バージョン以降に追加されたテストケースにより実行されたコードである実行済コード集合の積集合を計算する技術がある。この技術によれば、特定機能に関連して変更されたコードを要素ノードとする特定差分集合を生成するので、ソースコードに対して複数の機能に対応して複数の変更がなされている場合でも差分コードと機能との対応付けを効率的に行うことができる。したがって、より効率的なプログラム開発を支援することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−４３１９８号公報
【特許文献２】特開２０１０−６７１８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
スタックトレースによる問題の調査には、対応するソースコードの入手が必要となる。しかしながら、ソースコードは機能変更や不具合修正により変更が行われるため、ソースコードには複数のバージョンがある。図１９は、ソースコードの変更例を示す図である。図１９は、オリジナルのソースコードに対して、メソッド名及びクラス名の変更が行われた例、行の削除が行われた例、行の追加が行われた例を示す。図１９では、４つのバージョンがある。
【０００８】
このように、ソースコードには複数のバージョンがあるため、スタックトレースと対応するソースコードのバージョンを特定することが必要になる。特に、稼働中のシステムでトラブルが発生した場合、トラブル発生時の情報としてスタックトレースのみが取得可能でバージョンの情報が取得できないことが多い。ソースコードのバージョンが異なると、ソースコードとスタックトレースとの正しい対応が取れず、保守者は、プログラムの実行過程を正しく把握できない。
【０００９】
図２０は、従来のバージョン特定方法の問題を説明するための図である。図２０に示すように、保守者は、スタックトレースを検索装置９に与える（１）。ここで、スタックトレースには、ファイル名と、クラス名と、メソッド名と、行番号とがエラー情報として含まれる。
【００１０】
そして、検索装置９は、該当ソフトウェアの最新バージョン（Ｖｅｒ．Ｚ）のソースコードに対して、エラー情報に一致するコードを検索する（２，３）。エラー情報に一致するコードがある場合には、バージョンの特定が完了するが、エラー情報に一致するコードがない場合には、保守者は、検索装置９に１つ前のバージョン（Ｖｅｒ．Ｙ）を検索させる（４）。そして、保守者は、１つずつ前のバージョンを指定して、エラー情報に一致するコードが検索されるまで、検索装置９に検索を行わせる（５）。
【００１１】
このように、保守者は、１つずつ前のバージョンを指定して、エラー情報に一致するコードを検索装置９に検索させる必要があり、バージョンの特定が手間がかかるという問題がある。
【００１２】
本発明は、１つの側面では、エラー情報に対応するバージョンのソースコードの特定を容易にすることを目的とする。
【課題を解決するための手段】
【００１３】
１つの態様では、ソースコード特定プログラムは、コンピュータに、以下の処理を実行させる。まず、ソースコード特定プログラムは、特定のソースコードに含まれる命令と、該命令の該特定のソースコード上の記述位置とを含むソースコード情報を受け付ける処理を実行させる。そして、ソースコード特定プログラムは、ソースコードに含まれる命令のうち、該ソースコードの実行に応じて発生したエラーに関連する命令と、該命令の該ソースコード上の記述位置とを含むエラー情報を受け付ける処理を実行させる。そして、ソースコード特定プログラムは、受け付けたエラー情報のうち、受け付けたソースコード情報に含まれないエラー情報が存在する場合、ソースコードの変更履歴情報を記憶する記憶部を参照して、該エラー情報に含まれる記述位置に記述された命令に対して行われた変更を特定する処理を実行させる。そして、ソースコード特定プログラムは、特定のソースコードを、特定した変更が行われる前のソースコードに変更する処理を実行させる指示を出力する処理を実行させる。
【発明の効果】
【００１４】
１つの側面では、本発明は、エラー情報に対応するバージョンのソースコードの特定を容易にすることができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施例に係るソースコード特定装置によるソースコード特定方法を説明するための図である。
【図２】図２は、ソースコード特定装置の機能構成を示す図である。
【図３】図３は、エラー情報の一例を示す図である。
【図４】図４は、ソースコード情報の一例を示す図である。
【図５】図５は、差分情報の一例を示す図である。
【図６】図６は、コミットＩＤを説明するための図である。
【図７】図７は、変更ファイルの一覧の取得を説明するための図である。
【図８】図８は、差分発生コミットＩＤの検出を説明するための図である。
【図９】図９は、差分情報の中に複数のファイル名が含まれる場合の差分発生コミットＩＤの検出を説明するための図である。
【図１０】図１０は、ファイルが削除されている場合の差分発生コミットＩＤの検出を説明するための図である。
【図１１】図１１は、ロールバック処理を説明するための図である。
【図１２】図１２は、ソースコード特定処理のフローを示すフローチャートである。
【図１３】図１３は、エラー情報を抽出する処理のフローを示すフローチャートである。
【図１４】図１４は、ソースコード情報を抽出する処理のフローを示すフローチャートである。
【図１５】図１５は、差分情報を検出する処理のフローを示すフローチャートである。
【図１６】図１６は、差分発生コミットＩＤを検出する処理のフローを示すフローチャートである。
【図１７】図１７は、実施例に係るソースコード特定プログラムを実行するコンピュータのハードウェア構成を示す図である。
【図１８】図１８は、ソースコードとスタックトレースの例を示す図である。
【図１９】図１９は、ソースコードの変更例を示す図である。
【図２０】図２０は、従来のバージョン特定方法の問題を説明するための図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示するソースコード特定プログラム、ソースコード特定方法及びソースコード特定装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１７】
まず、実施例に係るソースコード特定装置によるソースコード特定方法について説明する。図１は、実施例に係るソースコード特定装置によるソースコード特定方法を説明するための図である。図１に示すように、ソースコード特定装置１は、スタックトレースを受け付ける（１）。そして、ソースコード特定装置１は、該当ソフトウェアの最新バージョン（Ｖｅｒ．Ｚ）のソースコードに対して、スタックトレースに含まれるエラー情報に一致するコードを検索する（２，３）。
【００１８】
そして、ソースコード特定装置１は、エラー情報に一致するコードがある場合には、バージョンの特定が完了する。一方、エラー情報に一致するコードがない場合には、ソースコード特定装置１は、変更履歴に関する情報をＳＣＭ（software  configuration  management）装置２から取得し（４，５）、エラー情報と一致するソースコードのバージョンを特定する。ここで、ＳＣＭ装置２は、ソフトウェアの変更履歴とともに複数のバージョンのソースコードを管理する装置である。そして、ソースコード特定装置１は、特定したバージョンまでＳＣＭ装置２にソースコードをロールバックさせる（６）。
【００１９】
このように、ソースコード特定装置１は、エラー情報に一致するコードを含むバージョンをＳＣＭ装置２と連携して特定することによって、スタックトレースに対応するソースコードを特定することができる。
【００２０】
次に、ソースコード特定装置１の機能構成について説明する。図２は、ソースコード特定装置１の機能構成を示す図である。図２に示すように、ソースコード特定装置１は、受付部１１と、エラー情報抽出部１２と、エラー情報記憶部１３と、ソースコード情報抽出部１４と、ソースコード情報記憶部１５と、差分検出部１６と、差分情報記憶部１７と、ＳＣＭ操作部１８とを有する。
【００２１】
受付部１１は、スタックトレースとリポジトリの入手先の情報を利用者から受け付ける。ここで、リポジトリの入手先とは、該当ソフトウェアを管理するＳＣＭ装置２である。そして、受付部１１は、スタックトレースをエラー情報抽出部１２に渡し、リポジトリの入手先の情報をＳＣＭ操作部１８に渡す。なお、利用者は、例えば、キーボード、タッチスクリーンを利用してスタックトレースとリポジトリの入手先の情報を入力する。あるいは、受付部１１は、スタックトレースとリポジトリの入手先の情報をファイルから読み込んでもよい。
【００２２】
エラー情報抽出部１２は、スタックトレースからエラー情報を抽出し、エラー情報記憶部１３に格納する。エラー情報記憶部１３は、エラー情報を記憶する。図３は、エラー情報の一例を示す図である。図３（ａ）は、スタックトレースを示し、図３（ｂ）は、図３（ａ）のスタックトレースから抽出されたエラー情報を示す。
【００２３】
図３（ｂ）に示すように、エラー情報は、ファイル名と、クラス名と、メソッド名と、行番号とを対応付ける。ファイル名は、ソースコードを記憶するファイルの名前である。ソースコードは１つ又は複数のファイルに格納される。クラス名は、実行されたメソッドが属するクラスの名前である。メソッド名は実行されたメソッドの名前である。行番号は、ソースコード上でメソッドが呼び出された行の番号である。例えば、ソースコードの３行目で呼び出されたメソッド「hoge」は、クラス「Sample」に属し、ソースコードはファイル「Sample.java」に記憶される。
【００２４】
ソースコード情報抽出部１４は、ＳＣＭ装置２が提供するソースコード４からソースコード情報を抽出して、ソースコード情報記憶部１５に格納する。ソースコード情報記憶部１５は、ソースコード情報を記憶する。図４は、ソースコード情報の一例を示す図である。図４（ａ）は、ソースコード４を示し、図４（ｂ）は、図４（a）に示したソースコード４から抽出されたソースコード情報を示す。
【００２５】
図４（ｂ）に示すように、ソースコード情報は、ファイル名と、クラス名と、メソッド名と、行番号とをソースコード４の行毎に対応付ける。ファイル名は、ソースコード４を記憶するファイルの名前である。クラス名は、行が属するクラスの名前である。メソッド名は、行が属するメソッドの名前である。行番号は、ソースコード４での行の番号である。例えば、ファイル「Sample.java」に記憶されたソースコード４の２行目は、クラス「Sample」に属し、メソッド「hoge」に属する。
【００２６】
差分検出部１６は、エラー情報とソースコード情報の差分を検出し、検出した差分を差分情報として差分情報記憶部１７に格納する。具体的には、差分検出部１６は、エラー情報のうち、ソースコード情報に含まれない情報を差分情報として検出する。差分情報記憶部１７は、差分情報を記憶する。図５は、差分情報の一例を示す図である。図５（ａ）は、エラー情報を示す。図５（ｂ）は、ソースコード情報を示す。図５（ｃ）は、図５（ａ）のエラー情報と図５（ｂ）のソースコード情報の差分情報を示す。
【００２７】
図５（ｃ）に示すように、差分情報は、ファイル名と、クラス名と、メソッド名と、行番号とを対応付ける。ファイル名は、差分が存在するソースコード４を記憶するファイルの名前である。クラス名は、差分が存在するクラスの名前である。メソッド名は、差分が存在するメソッドの名前である。行番号は、差分が存在する行のエラー情報での番号である。例えば、ファイル「Sample.java」に記憶されたソースコード４のクラス「Sample」に属し、メソッド「main」に属する行「９」は、ソースコード情報にはないが、エラー情報にある。
【００２８】
ＳＣＭ操作部１８は、差分情報を用いてスタックトレースに対応するバージョンを特定し、特定したバージョンのソースコード４を表示装置に表示する。具体的には、ＳＣＭ操作部１８は、まず、ＳＣＭ装置２からコミットＩＤの一覧を取得する。ここで、コミットＩＤとは、ソースコード４に対する変更を識別するための一意のＩＤ（identifier）である。
【００２９】
図６は、コミットＩＤを説明するための図である。図６において、Ｖｅｒ．Ｙに対してコミットＩＤ「7bf6731」の変更を行うことによりＶｅｒ．Ｚが得られる。また、Ｖｅｒ．Ｘに対してコミットＩＤ「68f326b」の変更を行うことによりＶｅｒ．Ｙが得られる。
【００３０】
ＳＣＭ装置２では、コミットＩＤを指定することで任意のバージョンへのソースコード４のロールバック（巻き戻し）が可能である。また、ＳＣＭ操作部１８は、ＳＣＭ装置２に対して特定のコマンドを実行することでコミットＩＤの一覧を時系列順に取得できる。図６では、「7bf6731」を最も新しいコミットＩＤとし、「034b07c」を最も古いコミットＩＤとするコミットＩＤの一覧が得られている。また、各コミットＩＤには、コミットの内容を示すコミットメッセージが対応付けられている。
【００３１】
そして、ＳＣＭ操作部１８は、コミットＩＤのうち連続する２つのコミットＩＤを指定してコマンドを実行することでＳＣＭ装置２からコミット間の変更ファイルの一覧を取得する。ＳＣＭ装置２は、ファイル内での変更以外のファイルの追加、ファイルの削除についても検出できる。図７は、変更ファイルの一覧の取得を説明するための図である。図７は、コミットＩＤ「7bf6731」と「68f326b」を指定して変更ファイルの一覧を取得した場合を示す。
【００３２】
図７では、「---a/」から始まる行が変更前のファイル名を表しており、「+++b/」から始まる行が変更後のファイル名を表している。変更前と変更後のファイル名が同じ場合には、ファイル内の記述が変更されている。また、比較対象のファイルがない場合には、「/dev/null」が表示される。図７（ａ）は、ファイル「Sample.java」内での変更を示し、図７（ｂ）は、ファイル「Sample.java」の追加及び削除を示す。
【００３３】
そして、ＳＣＭ操作部１８は、差分情報中にあるファイルが変更されている場合、指定した２つのコミットＩＤのうち古い方のコミットＩＤを差分発生コミットＩＤとして検出する。図８は、差分発生コミットＩＤの検出を説明するための図である。
【００３４】
図８に示すように、ＳＣＭ操作部１８が２つのコミットＩＤ「68f626b」と「7bf6731」との間の変更ファイルの一覧を調べると、差分情報の中に記載のあるファイル「Sample.java」は変更されていない。そこで、ＳＣＭ操作部１８は、次に２つのコミットＩＤ「e64c789」と「68f626b」との間の変更ファイルの一覧を調べる。すると、差分情報の中に記載のあるファイル「Sample.java」が変更されているので、ＳＣＭ操作部１８は、コミットＩＤ「e64c789」を差分発生コミットＩＤとして検出する。
【００３５】
このように、ＳＣＭ操作部１８は、新しい方から順番に２つのコミットＩＤの間の変更ファイルの一覧を、差分情報に含まれるファイルがあるまで繰り返し調べることによって、差分発生コミットＩＤを特定する。
【００３６】
図９は、差分情報の中に複数のファイル名が含まれる場合の差分発生コミットＩＤの検出を説明するための図である。図９に示すように、例えば、２つのファイル名「Sample.java」と「Yomple.java」が差分情報に含まれる場合、ＳＣＭ操作部１８は、変更ファイルの一覧にいずれかのファイル名が含まれると、差分発生コミットＩＤを検出する。図９では、２つのコミットＩＤ「e64c789」と「68f626b」との間の変更ファイルの一覧に「Sample.java」が含まれているため、コミットＩＤ「e64c789」を差分発生コミットＩＤとして検出する。
【００３７】
このように、ＳＣＭ操作部１８は、差分情報の中に複数のファイル名が含まれる場合、変更ファイルの一覧に複数のファイル名のうちのいずれかのファイル名が含まれると、差分発生コミットＩＤを検出する。その理由は、ＳＣＭ操作部１８は、一度のロールバックで全ての差分を解決するのではなく、段階的にロールバックを行うためである。
【００３８】
図１０は、ファイルが削除されている場合の差分発生コミットＩＤの検出を説明するための図である。図１０に示すように、２つのコミットＩＤ「68f626b」と「7bf6731」の間の変更ファイルの一覧に「OtherFile.java」の削除があり、差分情報の中に「OtherFile.java」があると、ＳＣＭ操作部１８は、コミットＩＤ「68f626b」を差分発生コミットＩＤとして検出する。
【００３９】
このように、ＳＣＭ操作部１８は、削除されたファイルを利用して差分発生コミットＩＤを検出することもできる。また、ＳＣＭ操作部１８は、ファイルの名称変更に関しても、「旧ファイル名のファイル削除」と「新ファイル名のファイル追加」を組合せて、差分発生コミットＩＤを検出することができる。
【００４０】
ＳＣＭ操作部１８は、差分発生コミットＩＤを検出すると、ロールバック処理を行う。すなわち、ＳＣＭ操作部１８は、差分発生コミットＩＤを指定してコマンドを実行することでＳＣＭ装置２にロールバックを指示し、ソースコード４のバージョンを変更する。図１１では、「git  checkout  e64c789」がロールバックを指示するコマンドである。
【００４１】
そして、ＳＣＭ操作部１８は、バージョンを変更したソースコード４からソースコード情報を抽出し、エラー情報との対応付けが完了するまで、差分発生コミットＩＤの検出、ロールバック、ソースコード情報の抽出を繰り返す。そして、ＳＣＭ操作部１８は、エラー情報とソースコード情報が対応すると、ソースコード４を表示装置に表示する。
【００４２】
図１１は、ロールバック処理を説明するための図である。図１１では、差分発生コミットＩＤは「e64c789」であり、ソースコード４が「e64c789」に対応するバージョンに変更される。
【００４３】
次に、ソースコード特定処理のフローについて説明する。図１２は、ソースコード特定処理のフローを示すフローチャートである。図１２に示すように、ソースコード特定装置１は、スタックトレース、リポジトリの入手先の情報を受け付け（ステップＳ１）、リポジトリの入手先から、最新版のソースコード４を取得する（ステップＳ２）。
【００４４】
そして、ソースコード特定装置１は、スタックトレースからエラー情報を抽出し（ステップＳ３）、最新版のソースコード４からソースコード情報を抽出する（ステップＳ４）。そして、ソースコード特定装置１は、差分情報を検出し（ステップＳ５）、差分情報が存在するか否かを判定する（ステップＳ６）。
【００４５】
そして、差分情報が存在する場合には、ソースコード特定装置１は、差分発生コミットＩＤを検出し（ステップＳ７）、差分発生コミットＩＤが検出されたか否かを判定する（ステップＳ８）。そして、差分発生コミットＩＤが検出された場合には、ソースコード特定装置１は、差分発生コミットＩＤを指定してソースコード４のロールバックをＳＣＭ装置２に指示する（ステップＳ９）。そして、ソースコード特定装置１は、ロールバックされたバージョンのソースコード４からソースコード情報を抽出し（ステップＳ１０）、ステップＳ５に戻る。
【００４６】
一方、差分発生コミットＩＤが検出されない場合には、ソースコード特定装置１は、ステップＳ１１へ移動する。また、差分情報が存在しない場合には、ソースコード特定装置１は、エラー情報とソースコード４が対応したので、ステップＳ１１へ移動する。
【００４７】
そして、ソースコード特定装置１は、結果を表示する（ステップＳ１１）。すなわち、ソースコード特定装置１は、エラー情報とソースコード４が対応した場合には、ソースコード４を結果として表示し、差分発生コミットＩＤが検出されない場合には、ソースコード４のバージョンが特定できなかった旨を結果として表示する。
【００４８】
このように、ソースコード特定装置１は、ＳＣＭ装置２と連携してソースコード４を差分発生コミットＩＤまでロールバックする処理を繰り返すことで、エラー情報と一致するソースコード４を特定することができる。
【００４９】
次に、エラー情報を抽出する処理のフローについて説明する。図１３は、エラー情報を抽出する処理のフローを示すフローチャートである。なお、エラー情報を抽出する処理は、図１２のステップＳ３の処理に対応する。
【００５０】
図１３に示すように、エラー情報抽出部１２は、スタックトレースを取得し（ステップＳ２１）、スタックトレースの終わりか否かを判定する（ステップＳ２２）。そして、スタックトレースの終わりでない場合には、エラー情報抽出部１２は、スタックトレースから１行読み込み（ステップＳ２３）、「at」から始まる行であるか否かを判定する（ステップＳ２４）。
【００５１】
そして、「at」から始まる行である場合には、エラー情報抽出部１２は、ファイル名、クラス名、メソッド名及び行番号をエラー情報記憶部１３に格納し（ステップＳ２５）、ステップＳ２２に戻る。
【００５２】
一方、エラー情報抽出部１２は、「at」から始まる行でない場合には、ステップＳ２２へ戻り、スタックトレースの終わりである場合には、処理を終了する。
【００５３】
このように、エラー情報抽出部１２は、スタックトレースを１行ずつ読み込んでファイル名、クラス名、メソッド名及び行番号をエラー情報記憶部１３に格納することで、エラー情報を抽出することができる。
【００５４】
次に、ソースコード情報を抽出する処理のフローについて説明する。図１４は、ソースコード情報を抽出する処理のフローを示すフローチャートである。なお、ソースコード情報を抽出する処理は、図１２のステップＳ４及びステップＳ１０の処理に対応する。
【００５５】
図１４に示すように、ソースコード情報抽出部１４は、ソースコード４を取得し（ステップＳ３１）、ソースコード４を１行読み込む（ステップＳ３２）。そして、ソースコード情報抽出部１４は、ソースコード４の終わりであるか否かを判定し（ステップＳ３３）、終わりでない場合には、空白行であるか否かを判定する（ステップＳ３４）。そして、空白行である場合には、ソースコード情報抽出部１４は、ステップＳ３２に戻る。
【００５６】
一方、空白行でない場合には、ソースコード情報抽出部１４は、クラスの宣言文があるか否かを判定し（ステップＳ３５）、クラスの宣言文がない場合には、ステップＳ３７へ進み、クラスの宣言文がある場合には、現在のクラス名を更新する（ステップＳ３６）。
【００５７】
そして、ソースコード情報抽出部１４は、メソッドの宣言文があるか否かを判定し（ステップＳ３７）、メソッドの宣言文がない場合には、ステップＳ３９へ進み、メソッドの宣言文がある場合には、現在のメソッド名を更新する（ステップＳ３８）。
【００５８】
そして、ソースコード情報抽出部１４は、ファイル名、現在のクラス名、現在のメソッド名及び行番号をソースコード情報記憶部１５に格納し（ステップＳ３９）、ステップＳ３２に戻る。また、ステップＳ３３において、ソースコード４の終わりである場合には、ソースコード情報抽出部１４は、処理を終了する。
【００５９】
このように、ソースコード情報抽出部１４は、ソースコード４を１行ずつ読み込んでファイル名、クラス名、メソッド名及び行番号をソースコード情報記憶部１５に格納することで、ソースコード情報を抽出することができる。
【００６０】
次に、差分情報を検出する処理のフローについて説明する。図１５は、差分情報を検出する処理のフローを示すフローチャートである。なお、差分情報を検出する処理は、図１２のステップＳ５の処理に対応する。
【００６１】
図１５に示すように、差分検出部１６は、エラー情報、ソースコード情報を取得し（ステップＳ４１）、エラー情報の終わりか否かを判定する（ステップＳ４２）。そして、エラー情報の終わりでない場合には、差分検出部１６は、エラー情報から１行読み込み（ステップＳ４３）、ソースコード情報内に一致するものがあるか否かを判定する（ステップＳ４４）。
【００６２】
そして、ソースコード情報内に一致するものがある場合には、差分検出部１６は、ステップＳ４２に戻る。一方、ソースコード情報内に一致するものがない場合には、差分検出部１６は、読み込んだ行に含まれるファイル名、クラス名、メソッド名及び行番号を差分情報記憶部１７に格納し（ステップＳ４５）、ステップＳ４２に戻る。また、エラー情報の終わりである場合には、差分検出部１６は、処理を終了する。
【００６３】
このように、差分検出部１６は、エラー情報の各行についてソースコード情報内に一致するものがあるか否かを調べることによって、差分情報を検出することができる。
【００６４】
次に、差分発生コミットＩＤを検出する処理のフローについて説明する。図１６は、差分発生コミットＩＤを検出する処理のフローを示すフローチャートである。なお、差分発生コミットＩＤを検出する処理は、図１２のステップＳ７の処理に対応する。
【００６５】
図１６に示すように、ＳＣＭ操作部１８は、差分情報を取得し（ステップＳ５１）、ＳＣＭ装置２からコミットＩＤの一覧を取得する（ステップＳ５２）。そして、ＳＣＭ操作部１８は、新しい方から、２つのコミットＩＤを指定して変更ファイルの一覧を取得する（ステップＳ５３）。
【００６６】
そして、ＳＣＭ操作部１８は、差分情報の終わりか否かを判定し（ステップＳ５４）、差分情報の終わりでない場合には、差分情報を１行読み込む（ステップＳ５５）。そして、ＳＣＭ操作部１８は、当該行に含まれるファイル名に対応するファイルが変更ファイルの一覧にあるか否かを判定する（ステップＳ５６）。
【００６７】
そして、ＳＣＭ操作部１８は、当該行に含まれるファイル名に対応するファイルが変更ファイルの一覧にない場合には、ステップＳ５４に戻り、ある場合には、２つのコミットＩＤのうち古い方を差分発生コミットＩＤとして出力する（ステップＳ５７）。また、ＳＣＭ操作部１８は、差分情報の終わりである場合には、２つのコミットＩＤを古い方に１つずらし（ステップＳ５８）、ステップＳ５３に戻る。
【００６８】
このように、ＳＣＭ操作部１８は、差分情報に含まれるファイル名が変更ファイルの一覧にあるか否かを判定することによって、差分発生コミットＩＤを検出することができる。
【００６９】
上述してきたように、実施例では、エラー情報抽出部１２がスタックトレースからエラー情報を抽出し、ソースコード情報抽出部１４がソースコード４からソースコード情報を抽出する。そして、差分検出部１６が、エラー情報とソースコード情報に基づいて差分情報を検出する。そして、ＳＣＭ操作部１８が、ＳＣＭ装置２と連携して、差分情報に基づく差分発生コミットＩＤを特定し、差分発生コミットＩＤに対応するバージョンまでソースコード４をロールバックする。したがって、ソースコード特定装置１は、エラー情報に対応するバージョンのソースコード４を特定して表示することができる。
【００７０】
また、実施例では、ＳＣＭ装置２と連携してソースコード４を特定するので、全てのバージョンのソースコード４をメモリにロードする必要がなく、メモリリソースを削減することができる。
【００７１】
また、実施例では、ＳＣＭ操作部１８は、２つのコミットＩＤを指定してＳＣＭ装置２から変更ファイルの一覧を取得し、取得した変更ファイルの一覧に、エラー情報に含まれるファイル名と一致するファイル名があるかを判定する。そして、取得した変更ファイルの一覧に、エラー情報に含まれるファイル名と一致するファイル名がある場合に、ＳＣＭ操作部１８は、２つのコミットＩＤのうち古い方を差分発生コミットＩＤとして特定する。したがって、ＳＣＭ操作部１８は、差分情報に基づく差分発生コミットＩＤを特定することができる。
【００７２】
また、実施例では、ＳＣＭ操作部１８は、コミットＩＤの一覧をＳＣＭ装置２から取得し、取得したコミットＩＤの一覧に含まれる２つのコミットＩＤを指定してＳＣＭ装置２から変更ファイルの一覧を取得する。したがって、ＳＣＭ操作部１８は、各コミットで変更されたファイルを簡単に特定することができる。
【００７３】
また、実施例では、ＳＣＭ操作部１８は、差分情報にファイル名が複数含まれる場合に、差分発生コミットＩＤの特定と特定した差分発生コミットＩＤに基づくロールバックとをファイル名の数だけ繰り返す。したがって、ソースコード特定装置１は、ソースコード４を複数のファイルに記憶して複数のファイルが更新された場合にも、エラー情報に対応するバージョンのソースコード４を特定することができる。
【００７４】
なお、実施例では、ソースコード特定装置１について説明したが、ソースコード特定装置１が有する構成をソフトウェアによって実現することで、同様の機能を有するソースコード特定プログラムを得ることができる。そこで、ソースコード特定プログラムを実行するコンピュータについて説明する。
【００７５】
図１７は、実施例に係るソースコード特定プログラムを実行するコンピュータのハードウェア構成を示す図である。図１７に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ（Central  Processing  Unit）５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００７６】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００７７】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００７８】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００７９】
そして、コンピュータ５０において実行されるソースコード特定プログラムは、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、ソースコード特定プログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされたソースコード特定プログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【００８０】
また、実施例では、ソースコード４がＪａｖａ（登録商標）で記載されたプログラムである場合について説明したが、本発明はこれに限定されるものではなく、ソースコード４が他のオブジェクト指向言語で記載されたプログラムの場合にも同様に適用することができる。
【符号の説明】
【００８１】
１    ソースコード特定装置
２    ＳＣＭ装置
４    ソースコード
９    検索装置
１１    受付部
１２    エラー情報抽出部
１３    エラー情報記憶部
１４    ソースコード情報抽出部
１５    ソースコード情報記憶部
１６    差分検出部
１７    差分情報記憶部
１８    ＳＣＭ操作部
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１】
2018128867.tif 000003
【図２】
2018128867.tif 000004
【図３】
2018128867.tif 000005
【図４】
2018128867.tif 000006
【図５】
2018128867.tif 000007
【図６】
2018128867.tif 000008
【図７】
2018128867.tif 000009
【図８】
2018128867.tif 000010
【図９】
2018128867.tif 000011
【図１０】
2018128867.tif 000012
【図１１】
2018128867.tif 000013
【図１２】
2018128867.tif 000014
【図１３】
2018128867.tif 000015
【図１４】
2018128867.tif 000016
【図１５】
2018128867.tif 000017
【図１６】
2018128867.tif 000018
【図１７】
2018128867.tif 000019
【図１８】
2018128867.tif 000020
【図１９】
2018128867.tif 000021
【図２０】
2018128867.tif 000022