(57)【要約】【課題】  ソフトウェアのデバッグ作業を効率化できるデバッグ支援システム、方法、プログラム及び記録媒体を提供する。【解決手段】  第１と第２のソースコードの作成日時などの履歴情報の入出力を行うバージョン管理部と前記第１と前記第２のソースコードとを比較するソースコード比較部と、前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を記録するテスト項目実行部と、バグとなったテスト項目が通過した経路に存在する関係の差分情報を抽出する関係差分情報抽出部と、前記抽出された関係の差分情報が発生したリビジョンを前記バージョン管理部から抽出する修正リビジョン抽出部とを備える。【選択図】      図１
2015011372.tif 000002
【特許請求の範囲】
【請求項１】
第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとのソースコードの作成日時、変更日時、変更箇所及びソースコード作成時又は変更時のリビジョンなどの履歴情報の入出力を行うバージョン管理部と、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力するソースコード比較部と、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と関連付けて記録するテスト項目実行部と、
前記テスト項目実行部が記録する実行経路を保存する実行経路情報保存部と、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報に基づいてバグとなったテスト項目が通過した実行経路に存在する関係を有する差分情報を抽出する関係差分情報抽出部と、
前記抽出された関係を有する差分情報が発生したリビジョンを前記バージョン管理部から抽出する修正リビジョン抽出部とを備えることを特徴とするデバッグ支援システム。
【請求項２】
前記バージョン管理部は、前記第１のソースコードを記憶する第１の記憶部と、前記２のソースコードを記憶する第２の記憶部とを有することを特徴とする請求項１に記載のデバッグ支援システム。
【請求項３】
前記テスト項目実行部は、前記第２のソースコードに対して複数のテスト項目についてテストを実行した際に、エラーとなったテスト項目のみを抽出し、エラーとなったテスト項目に関する情報を限定することにより、当該テスト項目がどの経路を通過するかを示す経路情報を記録することを特徴とする請求項１又は請求項２に記載のデバッグ支援システム。
【請求項４】
バージョン管理部から第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとを出力し、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力し、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と対応付けて記録し、
前記テスト項目実行部が記録する実行経路を保存し、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報からバグとなったテスト項目が通過した実行経路に存在する関係の差分情報のみを抽出し、
前記抽出された関係の差分情報が発生したリビジョンを前記バージョン管理部から抽出することを特徴とするデバッグ支援方法。
【請求項５】
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に、エラーとなったテスト項目のみを抽出し、エラーとなったテスト項目に関する情報を限定することにより、当該テスト項目がどの経路を通過するかを示す経路情報を記録することを特徴とする請求項４に記載のデバッグ支援方法。
【請求項６】
バージョン管理部から第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとを出力する処理と、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力する処理と、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と対応付けて記録する処理と、
前記テスト項目実行部が記録する実行経路を保存する処理と、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報からバグとなったテスト項目が通過した実行経路に存在する関係の差分情報のみを抽出する処理と、
前記抽出された関係の差分情報が発生したリビジョンを前記バージョン管理部から抽出する処理とをコンピュターに実行させることを特徴とするデバッグ支援プログラム。
【請求項７】
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に、エラーとなったテスト項目のみを抽出し、エラーとなったテスト項目に関する情報を限定することにより、当該テスト項目がどの経路を通過するかを示す経路情報を記録する処理を行うことを特徴とする請求項６に記載のデバッグ支援プログラム。
【請求項８】
バージョン管理部から第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとを出力する処理と、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力する処理と、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と対応付けて記録する処理と、
前記テスト項目実行部が記録する実行経路を保存する処理と、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報からバグとなったテスト項目が通過した実行経路に存在する関係の差分情報のみを抽出する処理と、
前記抽出された関係の差分情報が発生したリビジョンを前記バージョン管理部から抽出する処理とをコンピュターに実行させるプログラムが記録された記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ支援システム、方法、プログラム及び記録媒体に関する。
【背景技術】
【０００２】
近年、ソフトウェアの開発は、新規開発だけではなく、既存ソフトウェアの保守や改善に係る開発も多い。例えば、既存ソフトウェアの稼動後、ユーザのビジネス内容や用途、作業内容の変化等に伴い、ソフトウェアの機能を追加する要求、新しいバージョン等への仕様変更の要求等が発生し、また、動作中に不具合が見つかった場合にもそれらに応じてプログラムを修正する必要が発生する。
【０００３】
それらの発生に伴い、前記修正された機能やプログラムに関係して、その影響を受ける他の既存の機能を有するプログラムについても修正が必要になる場合があり、その修正を実施しない場合、その機能は通常通りの動作を行わなくなるエラーとなる原因（デグレードバグ、以下はバグと称する）が発生する。
【０００４】
従って、既存ソフトウェアの保守や改善等では、ソフトウェアを修正する際に、仕様が変わらない箇所が、修正後に修正前と同じ動作をすることを確認するために、修正前に実施したものと同じテスト項目の実施が行われる。このようなテストは回帰テスト（リグレッションテスト）と呼ばれる。
【０００５】
回帰テストは、一般にテスト支援ツール等を使うことにより自動化されることが多い。テスト結果を確認しながら、バグとなったコードを特定するには、テストを行うための入力内容や、バグの内容を調べ、テストデータを入力してから出力するまでのどの経路のどの処理においてバグが生じていたのかを割り出さなければならない作業（デバッグ作業）は人手で行う必要がある。
【０００６】
また、単純にテストによってバグと特定されたコードを修正するだけでなく、バグの原因となったコードをどういった経緯でプログラマがコーディングした原因を調査し、同じような問題が他に起きないか確認することも重要となる。
【０００７】
通常、プログラムをデバッグする際には、対象となるプログラム全体を扱うため、プログラムが大きくなるとデバッグ時にはバグの原因の特定だけで時間がかかってしまい、このことがプログラム開発の効率を悪化させている。このため、様々なデバッグ支援技術の開発が進んでいる。
【０００８】
これまでに、デバッグ支援技術として、例えば、特許文献１（特開２００４−１１８４４３号公報）に記載された技術がある。特許文献１では、ハードウェア記述言語により設計されたＬＳＩ（large scale integration）回路の機能を検証するための設計データ及びテストベンチ（テストプログラム）を版数管理と差分チェックを行いながら、シミュレーション装置へ供給してシミュレーション及び再シミュレーションによるリグレッションテストを行うことにより、設計変更が起きるたびに、リグレッションテストを実行することができ、常に最新の設計データによるリグレッションテストを行うことができる。
【０００９】
しかし、上記技術では、システムに既に登録済の設計データと新規入力の設計データとの間に差分がある場合、その差分に基づいて、リグレッションテストを実行すべきか否かを判断し、前記差分による影響範囲が特定できない場合、常に最新の設計データとテストベンチとを組にしてリグレッションテストを実行することができる。しかしながら、特許文献１には、前記差分がどのテスト項目にあったのか、バグとなったテスト項目に関係する部分だけを抽出し、関係する差分情報が、いつ作りこまれたかのかの情報を合わせて出力するという作業が必要となるという問題が残っている。
【００１０】
また、別のデバッグ支援技術として、特許文献２（特開２００７−１９９８００号公報）に記載された技術がある。特許文献２ではユーザの操作により指定された前記プログラムの修正前後のソースコードを比較して修正内容を含む修正対象を検出し、前記修正対象から線形的に前記修正対象の影響を受ける影響内容を含む影響対象を検出することができる。
【００１１】
特許文献２によれば、プログラムの修正対象の影響範囲の調査漏れを効果的に防止し、高い信頼性で影響範囲での修正作業を支援することができる。しかしながら、特許文献２には、前記特許文献１と同様に、バグとなった修正対象に関係する部分だけを抽出し、関係する修正内容が、いつ作りこまれたかのかの情報を合わせて出力するという作業が必要となるという問題が未だ残っている。
【００１２】
さらに、別のデバッグ支援技術として、特許文献３（特開２０１０−１２２９５９号公報）に記載された技術がある。特許文献３では、プログラムの詳細な解析を必要とせず、また、ユーザが変更箇所を指定しなくても、各テスト項目の通過モジュール情報と、修正前後で変更があったモジュールとに基づいて、回帰テストとして実行すべきテスト項目を抽出することができる。
【００１３】
特許文献３によれば、プログラムを変更した場合は、変更後のプログラムの内に変更された部分のみ、即ち、プログラムの差分に着目して、変更後のプログラムの妥当性を検証することができれば、効率的である。しかしながら、特許文献３のテスト支援システムは、通過モジュール情報と、プログラム修正の前後で変更があったモジュールとを利用してテスト項目を抽出することはできる。しかしながら、修正前及び修正後のソースコードの差分がどのテスト項目にあったのか、当該差分がいつ作りこまれたかのかの情報を合わせて出力するという処理ができない。
【００１４】
さらにまた、別のデバッグ支援技術として、特許文献４（特開２００９−２１１２６４号公報）に記載された技術がある。特許文献４では、デグレード判定データベースに記憶している版数と、デグレードの可能性のあるテストの識別情報を示す判断対象テスト識別情報と、それらの組合せに対応した１又は２以上の修正位置を示す修正位置情報とに基づいて、リグレッションテストをする必要がある箇所を自動的に判別することを可能とする。
【００１５】
特許文献４によれば、リグレッションテストをする必要があるテストを抽出し、障害検出から修正後のリグレッションテストまでテストを自動化することができる。しかしながら、前記特許文献３のテスト支援システムと同じように、障害検出前及び障害修正後のソースコードの差分がどのテスト項目にあったのか、当該差分がいつ作りこまれたかのかの情報を合わせて出力するという処理ができない。
【００１６】
さらにまた、別のデバッグ支援技術として、特許文献５（特開２００８−１２９６６１号公報）に記載された技術がある。特許文献５では、過去の修正により修正を行ったプログラムに含まれる複数の関数を特定する複数の関数識別子と、当該の関数識別子と新たな修正において修正を行ったプログラムに含まれる複数の関数を特定する複数の関数識別子のうち一致する関数識別子の数を求め、当該一致する関数識別子の数に基づいて、過去の修正により修正を行ったプログラムに含まれる関数の修正識別子により特定される修正（その過去の修正）をテストするテストケースの優先度を決定する。プログラムの開発者は、決定した優先度により、リストされるテストケースのうちどのテストケースが変更による再びエラーとなる可能性の高さを示す優先度を決定することができる。
【００１７】
しかし、上記技術では、過去の修正に対して更に修正が必要となる場合のテストケースの優先度を決定するものであり、新規修正により再びバグとなる関数の特定、及びバグの原因となった修正箇所を特定するという作業が必要となるという問題が残っている。
【００１８】
さらにまた、別のデバッグ支援技術として、特許文献６（特開２００７−４２５５号公報）に記載された技術がある。特許文献６では、正常に動作していた時点のソースコードとバグとなった時点のソースコードの差分情報を提示することにより、バグの原因となった修正箇所を特定する作業の効率化を図っている。
【００１９】
しかし、上記技術では差分情報にバグとなったテスト項目に存在する関係を有しない情報も含まれるため、バグとなったテスト項目が通過した経路に存在する関係を有する差分情報部分だけを抽出し、抽出した関係の差分情報が、いつ作りこまれたかのかの情報を出力することできない。
【００２０】
よって、デバッグ支援技術は数多く提案されているが、差分情報にバグとなったテスト項目が通過した経路に存在する関係の部分だけを抽出し、当該関係の差分情報が、いつ作りこまれたかのかの情報を合わせて出力するという作業が必要となるという課題がまだ残っている。
【先行技術文献】
【特許文献】
【００２１】
【特許文献１】特開２００７−００４２５５号公報
【特許文献２】特願２０１２−２８０８１４明細書
【特許文献３】特開２０１０−１５２７１５号公報
【特許文献４】特開２００８−１２９６６１号公報
【特許文献５】特開２００８−１２９６６１号公報
【特許文献６】特開２００８−１２９６６１号公報
【発明の概要】
【発明が解決しようとする課題】
【００２２】
本発明は、このような課題に鑑みてなされたものであり、ソフトウェアのデバッグ作業を効率化することができるデバッグ支援システム、方法、プログラム及び記録媒体を提供することを主たる目的とする。
【課題を解決するための手段】
【００２３】
上記目的を達成するために、本発明のデバッグ支援システムは、第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとのソースコードの作成日時、変更日時、変更箇所及びソースコード作成時又は変更時のリビジョンなどの履歴情報の入出力を行うバージョン管理部と、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力するソースコード比較部と、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と関連付けて記録するテスト項目実行部と、
前記テスト項目実行部が記録する実行経路を保存する実行経路情報保存部と、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報に基づいてバグとなったテスト項目が通過した実行経路に存在する関係を有する差分情報を抽出する関係差分情報抽出部と、
前記抽出された関係を有する差分情報が発生したリビジョンを前記バージョン管理部から抽出する修正リビジョン抽出部とを備えることを特徴とする。
【００２４】
また、本発明のデバッグ支援方法は、バージョン管理部から第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとを出力し、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力し、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と対応付けて記録し、
前記テスト項目実行部が記録する実行経路を保存し、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報からバグとなったテスト項目が通過した実行経路に存在する関係の差分情報のみを抽出し、
前記抽出された関係の差分情報が発生したリビジョンを前記バージョン管理部から抽出することを特徴とする。
【００２５】
更に、本発明は、バージョン管理部から第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとを出力する処理と、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力する処理と、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と対応付けて記録する処理と、
前記テスト項目実行部が記録する実行経路を保存する処理と、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報からバグとなったテスト項目が通過した実行経路に存在する関係の差分情報のみを抽出する処理と、
前記抽出された関係の差分情報が発生したリビジョンを前記バージョン管理部から抽出する処理とをコンピュターに実行させるデバッグ支援プログラムを提供する。
【００２６】
更にまた、本発明は、バージョン管理部から第１のソースコードと、前記第１のソースコードに含まれるソースコードの少なくとも一部に修正又は変更が加えられた第２のソースコードとを出力する処理と、
前記バージョン管理部から出力する前記第１のソースコード及び前記第２のソースコードとを比較し、差分情報を出力する処理と、
前記第２のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と対応付けて記録する処理と、
前記テスト項目実行部が記録する実行経路を保存する処理と、
前記実行経路情報保存部に保存する前記実行経路と前記ソースコード比較部が出力する前記差分情報とを参照し、前記差分情報からバグとなったテスト項目が通過した実行経路に存在する関係の差分情報のみを抽出する処理と、
前記抽出された関係の差分情報が発生したリビジョンを前記バージョン管理部から抽出する処理とをコンピュターに実行させるプログラムが記録された記録媒体を提供する。
【発明の効果】
【００２７】
本発明によれば、バグとなった原因の特定作業の効率化を図ることができるという効果がある。
【図面の簡単な説明】
【００２８】
【図１】本発明の第１の実施形態に係るデバッグ支援システムの構成を示すブロック図である。
【図２】本発明の第１の実施形態に係る関係の差分情報とリビジョン情報を抽出する手順を示すフローチャート図である。
【図３】本発明の第１の実施形態に係る変更前に記述のソースコードを示す説明図である。
【図４】本発明の第１の実施形態に係る変更前のソースコードに対する３つのテスト項目と想定される返り値（期待値）を示す説明図である。
【図５】本発明の第１の実施形態に係る変更後に記述のソースコードの一例を示す説明図である。
【図６】本発明の第１の実施形態に係る変更後に記述のソースコードの別の一例を示す説明図である。
【図７】本発明の第１の実施形態に係る３つのテスト項目が通過した経路を示す説明図である。
【図８】本発明の第１の実施形態に係る３つのテスト項目の内、バグとなったテスト項目が通過した経路のみを示す説明図である。
【図９】本発明の第２の実施形態に係るデバッグ支援システムの構成を示すブロック図である。
【図１０】本発明の第１の実施形態に係るデバッグ支援システのハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【００２９】
以下、本発明の実施形態について図面を参照して詳細に説明する。
［第１の実施形態］
図１は、本実施形態に係るデバッグ支援システム１００の構成図である。デバッグ支援システム１００はバージョン管理部１０１、ソースコード比較部１０４、テスト項目実行部１０５、実行経路情報保存部１０６、関係差分情報抽出部１０７、修正リビジョン抽出部１０８、表示部１０９を有する。
【００３０】
以下、デバッグ支援システム１００を構成する各部の機能について説明する。
【００３１】
バージョン管理部１０１は、正常に動作していたときのソースコード（以下、正常動作時ソースコードと称する）を記憶する第１の記憶部１０２と、バグとなったときのソースコード（以下、エラー発生時ソースコードと称する）を記憶する第２の記憶部１０３とを備え、ソースコードの作成日時、変更日時、変更箇所、及びソースコード作成時、又は変更時の番号（リビジョン）などの履歴情報の記憶、変更及び入出力を行う。
【００３２】
前記第１の記憶部１０２と前記第２の記憶部１０３とは、ＨＤＤ（ハードディスクドライブ）、ＳＳＤ（ソリッドステートドライブ）、ＤＲＡＭ（Dynamic Random Access Memory）などを使用することができる。また、前記第１の記憶部１０２と前記第２の記憶部１０３とは一つの記憶部にしても良い。また、外部の記憶装置を利用しても良い。
【００３３】
また、本実施形態のソースコードは、複数のモジュールを含む。モジュールは、ソースコード内で定義されたプログラムの論理的構成要素である。変更後のソースコードは、変更前のソースコードのモジュールの少なくとも一部が修正又は変更されている。
【００３４】
即ち、正常動作時ソースコードは、テストが正常に動作していた時点のソースコードを表す。エラー発生時ソースコードは、回帰テストでエラー発生時のソースコードを表す。エラー発生時のソースコードは、正常動作時のソースコードのモジュールの少なくとも一部が修正又は変更されている。
【００３５】
正常動作時ソースコードとエラー発生時ソースコードのそれぞれは、第１の記憶部１０２及び第２の記憶部１０３に記憶する。バージョン管理部１０１は、ソースコードの開発者、コミトメッセージ、作成日時、変更日時、変更箇所、及びソースコード作成時、又は変更時の番号（リビジョン）などの履歴情報の記憶、変更及び入出力を管理している。
ソースコード比較部１０４は、ユーザが回帰テストの開始を指示すると、バージョン管理部１０１に問い合わせることにより正常動作時ソースコードとエラー発生時ソースコードのそれぞれを取得することが可能である。
【００３６】
ソースコード比較部１０４は、前記取得した正常動作時ソースコードと、エラー発生時ソースコードとを比較し、変更があった内容を特定して、特定した変更内容からプログラムの機能変更に関係する部分を差分情報として関係差分情報抽出部１０７に出力する。
【００３７】
テスト項目実行部１０５は、修正後のソースコードのテストを実行したときに、テスト対象の各テスト項目がどのモジュール（以下は、経路を称する）を通過するかを示す経路情報を実行経路情報保存部１０６に保存する。
【００３８】
また、テスト項目実行部１０５は、修正後のソースコードのテストを実行したときに、テスト対象のテスト項目からエラーなったテスト項目のみを抽出してエラーとなったテスト項目の情報を限定することにより、当該テスト項目がどの経路を通過するかを示す経路情報を実行経路情報保存部１０６に記録しても良い。
【００３９】
実行経路情報保存部１０６は、ＨＤＤ（ハードディスクドライブ）、ＳＳＤ（ソリッドステートドライブ）、ＤＲＡＭ（Dynamic Random Access Memory）などのような記憶装置を備えて、修正後のソースコードに対して複数のテスト項目のテストを実行した際に処理が通過する経路を、テスト項目と関連付けて保存する。
【００４０】
また、実行経路情報保存部１０６は、修正後のソースコードに対して、各テスト項目のテストを実行するテスト項目実行部を兼ねていてもよい。その場合、テスト項目実行部（テスト項目実行部１０５に相当する）は、各テスト項目のテストを実行しつつ、そのテスト項目の実行経路情報を、前記記憶装置に記録する。当該記憶装置は、外部のものを利用して良い。
【００４１】
関係差分情報抽出部１０７は、実行経路情報保存部１０６が保存する各テスト項目の通過経路情報と、ソースコード比較部１０４が出力する差分情報とに基づいて、テストの結果、バグとなったテスト項目が通過した経路に存在する関係を有する差分情報を抽出して修正リビジョン抽出部１０８に出力する。尚、ここのテストの結果は、テスト項目実行部１０５から実行されたものである。
【００４２】
修正リビジョン抽出部１０８は、関係差分情報抽出部１０７が出力する関係の差分情報について、その差分が発生したリビジョン情報をバージョン管理部１０１に問合せて抽出して表示部１０９に出力する。
【００４３】
表示部１０９は、表示装置であり、この場合は、ディスプレイーであり、関係差分情報抽出部１０７が出力する関係の差分情報と修正リビジョン抽出部１０８が出力するリビジョン情報を合わせて表示する。尚、この表示部は、外部の表示装置を利用しても良い。
＜差分情報とリビジョン情報を抽出する動作の説明＞
図２は、本発明の回帰テストにおける関係の差分情報とリビジョン情報を抽出する手順を示している。
【００４４】
ユーザが回帰テストを指示すると、ソースコード比較部１０４は、バージョン管理部１０１より正常動作時ソースコード１０２とエラー発生時ソースコード１０３をそれぞれ取得し、両者を比較して、変更内容を特定する。
【００４５】
ここの変更内容は、開発者の名前、リビジョンやコミットメッセージの変更などのプログラムの機能が変わらないものや、プログラムの機能変更に伴いソースコードの軽微な変更などのものを含む。
【００４６】
前記特定した変更内容から機能の変更に係るもののみ、例えば、クラス、メソッド名や関数などを抽出して差分情報として関係差分情報抽出部１０７に出力する（ステップＳ１１）
また、テスト項目実行部１０５は、各テスト項目について実行経路を求め、実行経路情報保存部１０６に保存して関係差分情報抽出部１０７に出力する（ステップＳ１２）。
次に、関係差分情報抽出部１０７は、ソースコード比較部１０４が出力する差分情報と実行経路情報保存部１０６が保存する実行経路情報とを照らし合わせ、バグとなったテスト項目が通過した経路に存在する関係の差分情報のみを抽出して修正リビジョン抽出部１０８に出力する（ステップＳ１３）。
【００４７】
そして、修正リビジョン抽出部１０８が、関係差分情報抽出部１０７が出力する関係の差分情報について、その差分が発生したリビジョンをバージョン管理部１０１に問合せて取得して表示部１０９に出力する（ステップＳ１４）。
【００４８】
最後に、表示部１０９は、関係差分情報抽出部１０７が抽出した関係の差分情報とその差分が発生したリビジョン情報とを合わせて表示し、ユーザに提示する（ステップＳ１５）。
（第１の実施例）
以下、具体例を用いて本発明の実施形態の動作を説明する。
【００４９】
まず、図３は、修正前に記述のソースコードを示す。ソースコードの記述に、Ｃ言語などのプログラミング言語や、オブジェクト指向のプログラミング言語を用いることができる。ソースコードは、ソフトウェアプログラムのソースコードには限定されず、ハードウェア記述言語（ＨＤＬ）などで記述されたハードウェアのソースコードであってもよい。また、修正前と修正後のソースコードの記述に用いられる言語は、共通の言語であってもよいし、別個の言語であってもよい。
【００５０】
この実施例の場合は、共通のＪａｖａ（登録商標）言語を用いている。また、ソースコードはバージョン管理部で管理されているものとする。
【００５１】
図３に示すように、登録者は、開発者Ａであり、コミットメッセージは、“Ｖ１．０ソースコード登録”であり、ソースコードには、Ｍａｉｎ、ＳｕｂＡ、ＳｕｂＢの３つのクラスが記述されており、登録されたリビジョンは１である。
【００５２】
図４は、本実施例で回帰テストを実施する３つのテスト項目と想定される返り値（期待値）を示す。例えば、“テスト項目１”のテスト時は、Ｍａｉｎクラスのｆｕｎｃメソッドを、引数＝０で呼び出し、ソースコードに記述された処理を行う。
【００５３】
また、“テスト項目２”のテスト時は、Ｍａｉｎクラスのｆｕｎｃメソッドを、引数＝１で呼び出し、ソースコードに記述された処理を行う。
【００５４】
更に、“テスト項目３”のテスト時は、Ｍａｉｎクラスのｆｕｎｃメソッドを、引数＝−１で呼び出し、ソースコードに記述された処理を行う。
【００５５】
修正前のソースコードに対して、図４に示す３つのテスト項目のテストを行うと、全てのテスト項目が想定通りの結果を返す。
【００５６】
次に、図５と図６は、修正後に記述のソースコードを示す。図５には、登録者は、開発者Ｂであり、コミットメッセージは、“ＳｕｂＢのｍメソッドの処理をユーティリティメソッドとして定義”であり、ソースコードには、Ｍａｉｎ、ＳｕｂＡ、ＳｕｂＢ、Ｕｔｉｌの４つのクラスが記述されており、登録されたリビジョンは２である。
【００５７】
図５に示すように“Ｍａｉｎ．ｆｕｎｃ”メソッド、及び“ＳｕｂＡ．ｍ”メソッドが変更されておらず、“ＳｕｂＢ．ｍ”メソッドが変更され、新たにＵｔｉｌ．ｍメソッドを作成し、ＳｕｂＢのｍメソッドの処理をユーティリティメソッドとして定義している。そして、ＳｕｂＢクラスからＵｔｉｌクラスのメソッドを呼び出すよう変更されている。
【００５８】
また、図６には、登録者は、開発者Ｃであり、コミットメッセージは、“ＳｕｂＡの処理をユーティリティメソッドを使用するよう修正”であり、ソースコードには、Ｍａｉｎ、ＳｕｂＡ、ＳｕｂＢ、Ｕｔｉｌの４つのクラスが記述されており、登録されたリビジョンは３である。
【００５９】
図６に示すように、“Ｍａｉｎ．ｆｕｎｃ”メソッドが変更されておらず、“ＳｕｂＢ．ｍ”メソッドの変更に加えて、“ＳｕｂＡ．ｍ”メソッド“も変更され、新たにＵｔｉｌ．ｍメソッドを作成し、ＳｕｂＡのｍメソッドの処理をユーティリティメソッドとして定義している。
【００６０】
そして、ソースコードにはさらにＳｕｂＡクラスからもＵｔｉｌクラスのメソッドを呼び出すよう変更されている。
【００６１】
ユーザは、図６に示す修正後のソースコードに対して、プログラムの仕様が変更されていないことを確認するために、図４のテスト項目を利用して回帰テストを行う。
【００６２】
この際、ソースコード比較部１０４は、図２のステップＳ１１で、修正前のソースコード（図３に示すソースコード）と、修正後のソースコード（図６に示すソースコード）とを比較する。
【００６３】
また、ソースコード比較部１０４は、ソースコードに記述されたテキストを比較することで、変更があった内容を特定する。
【００６４】
本実施形態では、前記特定した変更内容は、登録者、コミットメッセージ、リビジョン及び“ＳｕｂＡ．ｍメソッド、ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍ”を含む。
【００６５】
尚、プログラムの機能変更に係る変更内容は“ＳｕｂＡ．ｍメソッド、ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍ”であり、この変更情報を差分情報として抽出して関係差分情報抽出部１０７に出力する。
【００６６】
また、図２のステップＳ１２で、テスト項目実行部１０５は、各テスト項目を実行し、各テスト項目で通過する経路を、テスト項目ごとに、実行経路情報保存部１０６に保存する。図７に示すように、３つのテスト項目が通過した経路を示している。
【００６７】
例えば、テスト項目１は、Ｍａｉｎクラスのｆｕｎｃメソッドが引数＝０で呼び出されるので、３行目の条件式（ａ＞０）が負になり、ＳｕｂＢ．ｍメソッドが引数＝０で呼び出される。ＳｕｂＢ．ｍメソッドでは、更にＵｔｉｌ．ｍメソッドが呼び出されるため、実行経路情報はＭａｉｎ．ｆｕｎｃ、ＳｕｂＢ．ｍ、Ｕｔｉｌ．ｍとなり、その情報を実行経路情報保存部１０６に保存する。
【００６８】
テスト項目２は、Ｍａｉｎクラスのｆｕｎｃメソッドが引数＝１で呼び出されるので、３行目の条件式（ａ＝１）が正になり、ＳｕｂＡ．ｍメソッドが引数＝１で呼び出される。ＳｕｂＡ．ｍメソッドでは、更にＵｔｉｌ．ｍメソッドが呼び出されるため、実行経路情報はＭａｉｎ．ｆｕｎｃ、ＳｕｂＡ．ｍ、Ｕｔｉｌ．ｍとなり、その情報を実行経路情報保存部１０６に保存する。
【００６９】
テスト項目３は、Ｍａｉｎクラスのｆｕｎｃメソッドが引数＝−１で呼び出されるので、３行目の条件式（ａ＝−１）が負になり、ＳｕｂＢ．ｍメソッドが引数＝−１で呼び出される。ＳｕｂＢ．ｍメソッドでは、更にＵｔｉｌ．ｍメソッドが呼び出されるため、実行経路情報はＭａｉｎ．ｆｕｎｃ、ＳｕｂＢ．ｍ、Ｕｔｉｌ．ｍとなり、その情報を実行経路情報保存部１０６に保存する。
【００７０】
すべてのテスト項目を実施した後、実行経路情報保存部１０６に保存される情報を図７に示す。本実施例では、実行経路情報として実行したメソッド名のみを保存しているが、より詳細に実行した行まで保存してもよい。
【００７１】
テスト項目実行部１０５の実行手段として、例えばＪａｖａでＪＵｎｉｔを用いたテストであれば、ｊｃｏｖｅｒａｇｅのようなカバレッジツールを用いてカバレッジ情報を取得するといった手段が考えられる。
【００７２】
また、他の手段として、エラー発生時ソースコードに対し、例えばメソッドの開始、終了時にデバッグ文を追加するといった処理を実施後にテストを実行し、そのデバッグ文から実行したメソッド情報を取得するといった手段も考えられる。テスト項目実行部１０５にどの手段を用いてもよい。
【００７３】
さらに、テスト項目実行部１０５は、図８に示すように、３つのテスト項目の内、バグとなったテスト項目３が通過した経路のみを実行経路情報保存部１０６に保存する。
関係差分情報抽出部１０７は、ステップＳ１３で、実行経路情報保存部１０６に保存された実行経路情報（図７）を参照し、回帰テストでＮＧ（エラー）となったテスト項目３の実行経路情報である“Ｍａｉｎ．ｆｕｎｃ、ＳｕｂＢ．ｍ、Ｕｔｉｌ．ｍ”を実行経路情報保存部１０６から取得する。
【００７４】
また、関係差分情報抽出部１０７は、ソースコード比較部１０４から前記差分情報である“ＳｕｂＡ．ｍメソッド、ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍ”を受け取り、ＮＧとなったテスト項目３の実行経路情報に存在する差分情報のみを抽出する。
【００７５】
図７を参照すると、テスト項目３で実行される経路は“Ｍａｉｎ．ｆｕｎｃ”、“ＳｕｂＢ．ｍ”、“Ｕｔｉｌ．ｍ”メソッドである。
【００７６】
一方、図２のステップＳ１１で、ソースコード比較部１０４から取得した前記差分情報は、“ＳｕｂＡ．ｍメソッド、ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍ”であるため、関係の差分情報が“ＳｕｂＢ．ｍ”及び“Ｕｔｉｌ．ｍ”メソッドの２つであることがわかる。
【００７７】
そして、図２のステップＳ１３で、関係差分情報抽出部１０７は、この関係の差分情報である“ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍ”の２つを抽出する。
【００７８】
修正リビジョン抽出部１０８は、ステップＳ１４で、関係差分情報抽出部１０７により抽出されたＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍメソッドのそれぞれについて、修正されたリビジョンをバージョン管理部１０１に問い合わせる。
【００７９】
図５に示すように、ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍのどちらもリビジョン２で変更されているため、バージョン管理部１０１は、修正リビジョン抽出部１０８にそのリビジョン情報（この場合は、数字の２）を出力する。
【００８０】
表示部１０９は、ステップＳ１５で、関係差分情報抽出部１０７で抽出された関係の差分情報（ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍメソッド）と修正リビジョン抽出部１０８で抽出された当該差分情報が発生したリビジョン情報（この場合は、数字の２）とを受け取り、修正後のソースコードの回帰テストでＮＧとなった原因の調査として、ＳｕｂＢ．ｍメソッドおよびＵｔｉｌ．ｍメソッド、およびリビジョン２を確認すれば良い旨を表示する。
【００８１】
表示部１０９では確認すべきクラスやメソッド名、および修正前のソースコードと修正後のソースコードの差分情報に、バグとなったテスト項目が通過した経路に存在する関係を有する差分情報と、その差分が発生したリビジョン情報を合わせて表示することとなっている。しかしながら、リビジョン情報はバージョン管理部への該当リビジョン情報へのリンクとしても良い。また、同一箇所への修正リビジョンが複数存在する場合、最新のリビジョン情報のみ表示しても全て表示してもどちらでも良い。それらは設定により切り替えられるものとする。
[第２の実施形態]
次に、本発明の第２の実施形態について図面を参照して詳細に説明する。なお、本実施形態の説明において、本発明の第２の実施形態に係るデバッグ支援システム８００の入出力部、表示部及び送受信部の以外に、本発明の第１の実施形態に係るデバッグ支援システム１００と同様なシステム構成や同様に動作するステップを有するため、それにおける詳細な説明を省略する。
【００８２】
即ち、本発明の第２の実施形態に係るデバッグ支援システム９００の構成は、図９に示すように、デバッグ支援システム９００は、キーボード９０２及びマウス９０３を有する入出力部９０１、ソースコード比較部９０４、テスト項目実行部９０５、関係差分情報抽出部９０６、修正リビジョン抽出部９０７、ディスプレイー９０９を有する表示部９０８及び送受信部９１０を備える。
【００８３】
デバッグ支援システム９００はネットワーク９１１を介して外部機器と接続している。
【００８４】
前記入出力部９０１は、記憶装置９１２を備え、キーボード９０２とマウス９０３とが接続されて、キーボード９０２やマウス９０３から送られてくる信号を、バスを介して各部に転送する。
【００８５】
ユーザが入出力部９０１を操作して、ネットワーク９１１を介して外部機器にアクセスし、例えば、ＣＤ−ＲＯＭ等の外部記録媒体により入力されるまたはＬＡＮまたはインターネット等のネットワークを介して、ネットワークに通信可能に接続されたサーバ等からデバッグ作業に必要な各情報、例えば、正常動作時ソースコードと、エラー発生時ソースコードと、ソースコードの作成日時、変更日時、変更箇所点及びソースコード作成時、変更時の番号（リビジョン）などの履歴情報を、送受信部を介して前記記憶装置９１２に記憶する。
【００８６】
ソースコード比較部９０４は、前記送受信部から取得した正常動作時ソースコードと、エラー発生時ソースコードとを比較し、変更があった内容を特定する。特定した変更内容から機能の変更に係る変更内容を抽出して差分情報として関係差分情報抽出部９０６に出力する。
【００８７】
テスト項目実行部９０５は、修正後のソースコードのテストを実行したときに、テスト対象の各テスト項目がどの経路を通過するかを示す経路情報を抽出して関係差分情報抽出部９０６に渡す。
【００８８】
関係差分情報抽出部９０６は、テスト項目実行部９０５から受け取った各テスト項目の通過経路情報と、ソースコード比較部９０４が出力する差分情報とに基づいて、バグとなったテスト項目が通過した経路に存在する関係の差分情報のみを抽出する。
【００８９】
修正リビジョン抽出部９０７は、関係差分情報抽出部９０６が出力する関係の差分情報について、その差分が発生したリビジョン情報を前記記憶装置８１２に問合せて抽出する。
【００９０】
表示部９０８は、外部の表示装置、例えば、ディスプレイー９０９と接続しており、関係差分情報抽出部９０６が出力する関係の差分情報と修正リビジョン抽出部９０７が出力するリビジョン情報を合わせてディスプレイー９０９に表示する。
【００９１】
前記送信部９１０は、ユーザの指示があれば、前記表示部９０８に表示している関係の差分情報及びリビジョン情報を、ネットワーク９１１を介して外部機器に送信する。
【００９２】
これにより、本発明の第２の実施形態としてのデバッグ支援システムにおいて、バグとなったテスト項目が通過した経路に存在する関係の差分情報と当該差分情報が発生したリビジョン情報を合わせてユーザに提示することができ、または、ユーザの指示により、外部機器にそれらの情報を送信することが可能となる。
【００９３】
前述したように、本発明の第１及び第２の実施形態によれば、回帰テストにおいて、バグとなったテスト項目が通過した経路に存在する関係の差分情報と当該差分情報が発生したリビジョン情報を合わせてユーザに提示することが可能となるため、ソフトウェアのデバッグ作業を効率化することができる。
【００９４】
また、上述した本発明の各実施形態において、各フローチャートを参照して説明した処理機能は、コンピュータによって実現することができる。その場合、デバッグ支援システムが有すべき機能の処理内容を記述したプログラムが提供される。
【００９５】
図１０は、本発明の第１の実施形態または第２の実施形態としてのデバッグ支援システムのハードウェア構成の一例を示すブロック図である。
【００９６】
図１０に示すように、本発明の第１の実施形態または第２の実施形態としてのデバッグ支援システムの処理機能は、ＲＯＭ１００３（Read Only Memory）又は記憶装置（ＨＤＤ）１００４に記憶されたコンピュータ・プログラムをＣＰＵ１００１（Central Processing Unit）がＲＡＭ１００２（Random Access Memory）に読み込んで実行することにより、上記処理機能がコンピュータ上で実現される。
【００９７】
なお、上記のデバッグ支援システムの内部構成は一例である。デバッグ支援システムは
、ＣＰＵ１００１のみを備え、外部に備えられた、記憶装置１００４、外部機器接続インタフェース１００５、及びネットワークインタフェース１００６を用いて動作してもよい。
【００９８】
また、前記処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体には、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。
【００９９】
磁気記録装置には、ＨＤＤ、フレキシブルディスク（ＦＤ）、磁気テープ（ＭＴ）などがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc - Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）などがある。光磁気記録媒体には、ＭＯ（Magneto - Optical disk）などがある。
【０１００】
上記プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、
ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュー
タに格納しておき、ネットワークを通じて、サーバコンピュータから他のコンピュータに
そのプログラムを転送することもできる。
【０１０１】
上記プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプロ
グラム若しくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納
する。
【０１０２】
そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラム
に従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを
読み取り、そのプログラムに従った処理を実行することもできる。
【０１０３】
また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１０４】
以上、本発明の実施の形態を説明したが、上記については単に本発明の原理を示すものである。本発明は上記に示して説明した構成および応用例に限定されるものではなく、さらに、多数の変形、変更が当業者にとって可能である。
【０１０５】
さらに、本発明に他の任意の構成物や工程が付加されてもよい。また、本発明は前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【産業上の利用可能性】
【０１０６】
本発明は、例えば、保守又は改善作業を含むソフトウェア開発全般に適用できる。
【符号の説明】
【０１０７】
１００  デバッグ支援システム
１０１  バージョン管理部
１０２  第１の記憶部
１０３  第２の記憶部
１０４  ソースコード比較部
１０５  テスト項目実行部
１０６  実行経路情報保存部
１０７  関係差分情報抽出部
１０８  修正リビジョン抽出部
１０９  表示部
９００  デバッグ支援システム
９０１  入出力部
９０２  キーボード
９０３  マウス
９０４  ソースコード比較部
９０５  テスト項目実行部
９０６  関係差分情報抽出部
９０７  修正リビジョン抽出部
９０８  表示部
９０９  ディスプレイー
９１０  送受信部
９１１  ネットワーク
９１２  記憶装置
１００１  ＣＰＵ
１００２  ＲＡＭ
１００３  ＲＯＭ
１００４  記憶装置
１００５  外部機器接続インタフェース
１００６  ネットワークインタフェース
【図１】
2015011372.tif 000003
【図２】
2015011372.tif 000004
【図３】
2015011372.tif 000005
【図４】
2015011372.tif 000006
【図５】
2015011372.tif 000007
【図６】
2015011372.tif 000008
【図７】
2015011372.tif 000009
【図８】
2015011372.tif 000010
【図９】
2015011372.tif 000011
【図１０】
2015011372.tif 000012