(57)【要約】      （修正有）【課題】効率的にソースコードまたはデータファイルの試験不合格要因箇所を特定するデバッグ支援装置及びデバッグ支援プログラムを提供する。【解決手段】デバッグ支援装置は、小差分リスト初期化部２１と試験不合格小差分リスト探索部２３を有する。小差分リスト初期化部は、第１記憶部１１に記憶された第１試験合格ソースコードおよびデータファイルの第１データテーブルと、第２記憶部１２に記憶された試験不合格ソースコードおよびデータファイルの第２データテーブルとの差分を抽出して細分化した小差分のリストを作成して第３記憶部１４に記憶させる。試験不合格小差分リスト探索部は、第１試験合格ソースコードおよびデータファイルに前記リストに含まれる小差分の組合せを適用して試験を実施することを繰り返し、試験に不合格となる小差分の組合せを探索して出力する。【選択図】図２
2019057118.tif 000002
【特許請求の範囲】
【請求項１】
第１記憶部に記憶された第１試験合格ソースコードおよびデータファイルの第１データテーブルと、第２記憶部に記憶された試験不合格ソースコードおよびデータファイルの第２データテーブルとの差分を抽出して細分化した小差分のリストを作成して第３記憶部に記憶させる小差分リスト初期化部と、
前記第１試験合格ソースコードおよびデータファイルに前記リストに含まれる小差分の組合せを適用して試験を実施することを繰り返し、試験に不合格となる小差分の組合せを探索して出力する小差分リスト探索部とを有するデバッグ支援装置。
【請求項２】
前記小差分リスト探索部は、試験に不合格となる最小の組合せを探索する請求項１記載のデバッグ支援装置。
【請求項３】
前記小差分リスト探索部は、試験に合格となる小差分の組合せをもとに、第２試験合格ソースコードおよびデータファイルを作成する請求項１または請求項２記載のデバッグ支援装置。
【請求項４】
前記小差分リスト探索部を複数設け、それぞれ異なる前記リストに含まれる小差分の組合せをもとに、並列に試験を実施する請求項１乃至３記載の何れかに記載のデバッグ支援装置。
【請求項５】
前記小差分リスト探索部は、前記リストに含まれる複数の小差分の組合せを、試験に合格する蓋然性についての事前情報をもとに並べ替えた、試験に合格する蓋然性が高い小差分の組合せの順に、前記第１試験合格ソースコードおよびデータファイルに適用して試験を実施する請求項１乃至４の何れかに記載のデバッグ支援装置。
【請求項６】
前記小差分リスト探索部は、前記リストに含まれる小差分の組合せのうち、小差分の組合せ数が一定数を越える小差分の組合せを除外して、前記第１試験合格ソースコードおよびデータファイルに適用して試験を実施する請求項１乃至５の何れかに記載のデバッグ支援装置。
【請求項７】
コンピュータを、
第１記憶部に記憶された第１試験合格ソースコードおよびデータファイルの第１データテーブルと、第２記憶部に記憶された試験不合格ソースコードおよびデータファイルの第２データテーブルとの差分を抽出して細分化した小差分のリストを作成して第３記憶部に記憶させる小差分リスト初期化部と、
前記第１試験合格ソースコードおよびデータファイルに前記リストに含まれる小差分の組合せを適用して試験を実施することを繰り返し、試験に不合格となる小差分の組合せを探索して出力する小差分リスト探索部として機能させるためのデバッグ支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発等において使用されるデバッグ支援装置、デバッグ支援プログラムに関する。
【背景技術】
【０００２】
バージョン管理システムにおいて、特定のバージョンＡで試験合格になった後の別のバージョンＢで試験不合格になるデグレードの場合に、ＡＢ間の各バージョンに対して試験合格不合格を二分探索することにより、試験合格から不合格への変化点であるコミットを特定するデバッグ支援機能がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−３５７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のデバッグ支援機能においては、デグレード点をコミットの単位で特定しているため、該当コミットに含まれる差分が大きい場合には、開発担当者の技能、知識や経験則に基づいて差分の中から試験合格不合格の変化要因を解析してデグレード要因箇所を特定する必要があった。
【０００５】
特にブランチ間のマージを行う際には、該当コミットに含まれるソースコード差分が大きくなりやすくデグレードも起こりやすいため、開発担当者がデグレード要因を解析してソースコードの該当箇所を特定する必要のあることが多かった。
【０００６】
また、テスト用データファイルを拡充する際には、拡充前データファイルが考慮していなかったコーナーケースを追加することによりプログラムの潜在欠陥が表れやすいが、どの追加データで潜在欠陥が表れるのかをテストケースによって完全に明らかにするのは難しいため、開発担当者が潜在欠陥を解析して当該データを特定する必要があった。
【０００７】
そのため、技能、知識や経験則を備えた開発担当者でなければソースコードおよびデータファイルの試験不合格要因箇所を特定するのが難しく、工数がかかるという問題があった。
【０００８】
本発明は上記の課題を解決するためになされたものであり、効率的にソースコードまたはデータファイルの試験不合格要因箇所を特定することを可能とするデバッグ支援装置、デバッグ支援プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
実施形態によれば、デバッグ支援装置は、小差分リスト初期化部と小差分リスト探索部を有する。小差分リスト初期化部は、第１記憶部に記憶された第１試験合格ソースコードおよびデータファイルの第１データテーブルと、第２記憶部に記憶された試験不合格ソースコードおよびデータファイルの第２データテーブルとの差分を抽出して細分化した小差分のリストを作成して第３記憶部に記憶させる。小差分リスト探索部は、前記第１試験合格ソースコードおよびデータファイルに前記リストに含まれる小差分の組合せを適用して試験を実施することを繰り返し、試験に不合格となる小差分の組合せを探索して出力する。
【図面の簡単な説明】
【００１０】
【図１】本実施形態におけるデバッグ支援装置の構成を示すブロック図。
【図２】本実施形態におけるデバッグ支援装置において実現される機能構成を示すブロック図。
【図３】第１実施形態の小差分リスト初期化部の処理を説明するフローチャート。
【図４】第１実施形態の試験合格中間ソースコードおよびデータファイル初期化部の処理を説明するフローチャート。
【図５】第１実施形態の試験不合格小差分リスト探索部の処理を説明するフローチャート。
【図６】試験合格ソースコードおよびデータファイルのデータテーブルの一例を示す図。
【図７】試験不合格ソースコードおよびデータファイルのデータテーブルの一例を示す図。
【図８】小差分リストのデータテーブルの一例を示す図。
【図９】小差分組合せ選択候補リストのデータテーブルの一例を示す図。
【図１０】選択対象小差分組合せのデータテーブルの一例を示す図。
【図１１】試験合格中間ソースコードおよびデータファイルのデータテーブルの一例を示す図。
【図１２】更新試験合格中間ソースコードおよびデータファイルのデータテーブルの一例を示す図。
【図１３】更新小差分リストのデータテーブルの一例を示す図。
【図１４】終了時小差分リストのデータテーブルの一例を示す図。
【図１５】終了時試験合格中間ソースコードおよびデータファイルのデータテーブルの一例を示す図。
【図１６】第２実施形態のデバッグ支援装置の構成を示すブロック図。
【図１７】第３実施形態の小差分組合せ選択候補リストのデータテーブルの一例を示す図。
【発明を実施するための形態】
【００１１】
以下、実施形態について図面を参照して説明する。  
（第１実施形態）
第１実施形態のデバッグ支援装置及びデバッグ支援プログラムは、プログラムが試験で合格になったバージョンＡのソースコードおよびデータファイルと不合格になったバージョンＢのソースコードおよびデータファイルとの差分を抽出して細分化した小差分のリストを作成し、試験で合格になったソースコードおよびデータファイルに前記の小差分リストから取り出した小差分の組合せを適用して試験を実施することを繰返し、合格になった小差分組合せを用いて小差分のリストと試験で合格になったソースコードおよびデータファイルを更新することで、枝刈りをしながら試験不合格になる小差分の組合せで最小のものを探索する。
【００１２】
これにより、開発担当者の技能、知識や経験則に基づく必要なく、自動的かつ効率的にソースコードまたはデータファイルの試験不合格要因箇所を特定することを可能にする。
【００１３】
図１は、第１実施形態におけるデバッグ支援装置１の構成を示すブロック図である。デバッグ支援装置１は、例えばパーソナルコンピュータによって実現される。デバッグ支援装置１は、プロセッサ２、メモリ３、記憶装置４、入力装置５、および表示装置６を有する。
【００１４】
プロセッサ２は、メモリ３に記憶された基本プログラム（ＯＳ）やアプリケーションプログラムを実行して、各種の機能を実現する。例えば、プロセッサ２は、デバッグ支援プログラムを実行することで、パーソナルコンピュータをデバッグ支援装置１として動作させる。プロセッサ２は、本実施形態におけるデバッグ支援プログラムを実行することにより、デバッグ支援処理を実行して、パーソナルコンピュータをデバッグ支援装置１として動作させる。
【００１５】
メモリ３は、プロセッサ２により実行されるプログラムや一時的なデータ等が記憶される。例えば、メモリ３には、記憶装置４から読み出されるデバッグ支援プログラム４Ａなどの各種プログラムの他、各種処理で使用されるデータが記憶される。
【００１６】
記憶装置４は、各種のプログラムや各種データが記憶される。記憶装置４に記憶されるプログラムには、デバッグ支援プログラム４Ａが含まれる。また、記憶装置４には、デバッグ支援プログラム４Ａに基づくテスト支援処理で使用されるデータを記憶する記憶部１０が設けられる。
【００１７】
表示装置６は、ＬＣＤ（Liquid Crystal Display）などであり、プロセッサ２の処理に応じた画面を表示させる。入力装置５は、キーボードやポインティングデバイスなどであり、作業者等により操作される。
【００１８】
図２は、本実施形態におけるデバッグ支援装置１において、プロセッサ２によりデバッグ支援プログラム４Ａを実行することにより実現される機能構成を示すブロック図である。デバッグ支援装置１は、記憶部１０とデバッグ支援処理部２０とを備える。
【００１９】
記憶部１０は、試験合格ソースコードおよびデータファイル記憶部１１、試験不合格ソースコードおよびデータファイル記憶部１２、試験合格ソースコードおよびデータファイル記憶部１３、及び小差分リスト記憶部１４とを備える。
【００２０】
デバッグ支援処理部２０は、小差分リスト初期化部２１、試験合格中間ソースコードおよびデータファイル初期化部２２、及び試験不合格小差分リスト探索部２３を備える。
【００２１】
試験合格ソースコードおよびデータファイル記憶部１１は、試験合格になった特定のバージョンのソースコードおよびデータファイルとして、試験合格ソースコードおよびデータファイルのデータテーブル１１１を記憶する。
【００２２】
試験不合格ソースコードおよびデータファイル記憶部１２は、試験不合格になった別のバージョンのソースコードおよびデータファイルとして、試験不合格ソースコードおよびデータファイルのデータテーブル１２１を記憶する。
【００２３】
試験合格中間ソースコードおよびデータファイル記憶部１３は、試験不合格になる小差分の組合せを探索する途中で、試験合格になった中間ソースコードおよびデータファイルとして、試験合格中間ソースコードおよびデータファイルのデータテーブル１３１を記憶する。
【００２４】
小差分リスト記憶部１４は、試験不合格になる小差分の組合せを探索する途中で、試験合格中間ソースコードおよびデータファイルのデータテーブル１３１と試験不合格ソースコードおよびデータファイルのデータテーブル１２１との差分を細分化した小差分リストとして、小差分リストのデータテーブル１４１を記憶する。
【００２５】
小差分リスト初期化部２１は、試験合格ソースコードおよびデータファイル記憶部１１から試験合格ソースコードおよびデータファイルのデータテーブル１１１を取得し、試験不合格ソースコードおよびデータファイル記憶部１２から試験不合格ソースコードおよびデータファイルのデータテーブル１２１を取得し、両者の差分を抽出して細分化した小差分リストを作成して、小差分リストのデータテーブル１４１の初期状態として小差分リスト記憶部１４に保存する。
【００２６】
試験合格中間ソースコードおよびデータファイル初期化部２２は、試験合格ソースコードおよびデータファイル記憶部１１から試験合格ソースコードおよびデータファイルのデータテーブル１１１を取得し、試験合格中間ソースコードおよびデータファイルのデータテーブル１３１の初期状態として試験合格中間ソースコードおよびデータファイル記憶部１３に保存する。
【００２７】
試験不合格小差分リスト探索部２３は、試験合格中間ソースコードおよびデータファイル記憶部１３から試験合格中間ソースコードおよびデータファイルのデータテーブル１３１を取得し、小差分リスト記憶部１４から小差分リストのデータテーブル１４１と小差分組合せ選択候補リストのデータテーブル１４２を取得して小差分組合せ１４３を選択し、試験実行処理の結果に基づいて、更新小差分リストのデータテーブル１４４により小差分リスト記憶部１４を、また更新試験合格中間ソースコードおよびデータファイルのデータテーブル１３２により試験合格中間ソースコードおよびデータファイル記憶部１３を、それぞれ繰り返し更新することにより、終了時小差分リストのデータテーブル１４５および終了時試験合格ソースコードおよびデータファイルのデータテーブル１３３を出力する。
【００２８】
終了時小差分リストのデータテーブル１４５は、探索目的である試験不合格になる小差分の組合せで最小のものである。
【００２９】
終了時試験合格ソースコードおよびデータファイルのデータテーブル１３３は、試験不合格になる小差分の組合せで最小のものに対応した、試験合格になる小差分の組合せで最大のものを適用したソースコードおよびデータファイルである。
【００３０】
なお、第１実施形態では、試験合格になる小差分の組合せを探索しているが、例えば予め決められた数以下となる小差分の組合せを探索するようにしても良い。
【００３１】
次に、第１実施形態のデバッグ支援装置１の動作について、図３、図４及び図５に示すフローチャートを参照しながら説明する。  
図３は、第１実施形態の小差分リスト初期化部２１の処理を説明するフローチャートである。小差分リスト初期化部２１は、差分算出処理（ステップ２１１）と、細分化処理（ステップ２１２）とを実行する。
【００３２】
まず、小差分リスト初期化部２１による差分算出処理（ステップ２１１）について説明する。  
小差分リスト初期化部２１は、試験合格ソースコードおよびデータファイル記憶部１１から試験合格ソースコードおよびデータファイルのデータテーブル１１１を取得し、試験不合格ソースコードおよびデータファイル記憶部１２から試験不合格ソースコードおよびデータファイルのデータテーブル１２１を取得する。また、小差分リスト初期化部２１は、データファイルのデータテーブル１１１と試験不合格ソースコードおよびデータファイルのデータテーブル１２１との差分を算出する。その際、差分算出処理２１１は、例えば一般に利用される差分算出法であるＷｕのアルゴリズムや動的計画法など、またはそれらを実装したｄｉｆｆツールなどを用いることができる。
【００３３】
図６は、試験合格ソースコードおよびデータファイルのデータテーブル１１１の一例を示す図である。試験合格ソースコードおよびデータファイルのデータテーブル１１１には、ファイルパス（ファイル名）と、当該ファイル内容とが格納されている。
【００３４】
図７は、試験不合格ソースコードおよびデータファイルのデータテーブル１２１の一例を示す図である。試験不合格ソースコードおよびデータファイルのデータテーブル１２１は、ファイルパス（ファイル名）と、当該ファイル内容とが格納されている。
【００３５】
次に、小差分リスト初期化部２１による細分化処理（ステップ２１２）について説明する。  
小差分リスト初期化部２１は、差分算出処理により算出した差分を小差分に細分化し、小差分リストのデータテーブル１４１の初期状態として小差分リスト記憶部１４に保存する。小差分に細分化する単位は、例えば、差分のうち１行を１小差分とする、または差分のうち連続する行を１小差分とする。図６及び図７に示すデータテーブル１１１，１２１の場合、例えば、ファイル名が「ｆａｍｉｌｙ．ｔｘｔ」のデータファイルについては差分のうち１行を１小差分とし、ファイル名が「ｄｉｓｃｏｕｎｔ．ｃ」のソースコードについては差分のうち連続する行を１小差分とする。
【００３６】
差分のうち１行を１小差分とする場合、行単位で最小の試験不合格になる小差分の組合せを算出できる代わりに、探索対象となる小差分の組合せが後者よりも多いために処理時間が長くなる。差分のうち連続する行を１小差分とする場合、探索対象となる小差分の組合せが前者よりも少ないために処理時間が短くなる代わりに、連続する行単位で最小の試験不合格になる小差分の組合せまでしか算出できず、１小差分が行単位で最小の試験不合格になる小差分の組合せより大きい、あるいは同じとなる。
【００３７】
なお、前述した小差分リスト初期化部２１による細分化処理では、データファイルについては差分のうち１行を１小差分として、ソースコードについては差分のうち連続する行を１小差分としているが、これに限定されるものではない。
【００３８】
図８は、小差分リストのデータテーブル１４１の一例を示す図である。小差分リストのデータテーブル１４１は、小差分毎に付される通番ＩＤと、ファイルパス（ファイル名）と、操作種別（挿入、削除、置換）と、合格側行範囲と、不合格側行範囲と、差分の不合格側の内容とが格納されている。
【００３９】
図４は、第１実施形態の試験合格中間ソースコードおよびデータファイル初期化部２２の処理を説明するフローチャートである。試験合格中間ソースコードおよびデータファイル初期化部２２は、コピー処理（ステップ２２１）を実行する。
【００４０】
試験合格中間ソースコードおよびデータファイル初期化部２２は、コピー処理により、試験合格ソースコードおよびデータファイル記憶部１１から試験合格ソースコードおよびデータファイルのデータテーブル１１１を取得し、このデータテーブル１１１を試験合格中間ソースコードおよびデータファイルのデータテーブル１３１の初期状態として試験合格中間ソースコードおよびデータファイル記憶部１３に保存する。
【００４１】
図１１は、試験合格中間ソースコードおよびデータファイルのデータテーブル１３１の一例を示す図である。試験合格中間ソースコードおよびデータファイルのデータテーブル１３１は、ファイルパス（ファイル名）と、当該ファイル内容とが格納されている。
【００４２】
図５は、第１実施形態の試験不合格小差分リスト探索部２３の処理を説明するフローチャートである。試験不合格小差分リスト探索部２３は、小差分組合せループ処理（ステップ２３１）、小差分組合せ取得処理（ステップ２３２）、差分適用処理（ステップ２３３）、試験実行処理（ステップ２３４）、試験合格中間ソースコードおよびデータファイル更新処理（ステップ２３５）、小差分リスト更新処理（ステップ２３６）、小差分組合せループ終端（ステップ２３７）、及び合格判定処理（ステップ２３８）を実行する。
【００４３】
試験不合格小差分リスト探索部２３は、小差分組合せループ処理（ステップ２３１）により、小差分組合せ選択候補リストのデータテーブル１４２を取得し、リストの各行を順番に選択して小差分組合せ取得処理（ステップ２３２）以降を実行する。
【００４４】
図９は、小差分組合せ選択候補リストのデータテーブル１４２の一例を示す図である。小差分組合せ選択候補リストのデータテーブル１４２は、小差分リストのデータテーブル１４１の通番ＩＤの全ての組合せを漏れなくリストアップしたものが格納されている。すなわち、小差分組合せ選択候補リストのデータテーブル１４２には、全ての小差分の組合せが定義される。
【００４５】
試験不合格小差分リスト探索部２３は、小差分組合せ取得処理（ステップ２３２）により、小差分組合せ選択候補リストのデータテーブル１４２のうちで小差分組合せループ処理２３１で選択された行に対応する小差分リストのデータテーブル１４１の行を、選択対象小差分組合せのデータテーブル１４３として取得する。
【００４６】
図１０は、選択対象小差分組合せのデータテーブル１４３の一例を示す図である。選択対象小差分組合せのデータテーブル１４３は、通番ＩＤと、ファイルパス（ファイル名）と、操作種別（挿入、削除、置換）と、合格側行範囲と、不合格側行範囲と、差分の不合格側の内容とが格納されている。図１０は、図９に示すＩＤ組合せ「１」に対応する行に対応する選択対象小差分組合せのデータテーブル１４３である。例えば、図９に示すＩＤ組合せ「１，２，３」に対応する選択対象小差分組合せのデータテーブル１４３では、通番ＩＤ「１，２，３」のデータが含まれる。
【００４７】
試験不合格小差分リスト探索部２３は、差分適用処理（ステップ２３３）により、試験合格中間ソースコードおよびデータファイルのデータテーブル１３１に対して、選択対象小差分組合せのデータテーブル１４３の内容（小差分）を適用して、試験対象とするソースコードおよびデータファイルを生成する。試験不合格小差分リスト探索部２３は、選択対象小差分組合せのデータテーブル１４３の操作種別が「挿入」の場合には該当行に差分の不合格側の内容を挿入し、操作種別が「削除」の場合には該当行を削除し、操作種別が「置換」の場合には該当行を差分の不合格側の内容で置換する。その際には一般に利用されるｐａｔｃｈツールを用いることができる。
【００４８】
試験不合格小差分リスト探索部２３は、試験実行処理（ステップ２３４）により、差分適用後のソースコードおよびデータファイルの試験を実施する。試験不合格小差分リスト探索部２３は、差分適用後のソースコードおよびデータファイルについて試験を実施した結果、試験合格あるいは試験不合格を判定する（ステップ２３８）。試験合格と判定される場合、試験不合格小差分リスト探索部２３は、試験合格中間ソースコードおよびデータファイル更新処理（ステップ２３５）と小差分リスト更新処理（ステップ２３６）を実行する。
【００４９】
試験不合格小差分リスト探索部２３は、試験合格中間ソースコードおよびデータファイル更新処理（ステップ２３５）により、差分適用後のソースコードおよびデータファイルである、更新試験合格中間ソースコードおよびデータファイルのデータテーブル１３２で試験合格中間ソースコードおよびデータファイルのデータテーブル１３１を更新する。
【００５０】
図１２は、更新試験合格中間ソースコードおよびデータファイルのデータテーブル１３２の一例を示す図である。更新試験合格中間ソースコードおよびデータファイルのデータテーブル１３２は、ファイルパスと、当該ファイル内容とが格納されている。図１２に示すデータテーブル１３２は、図１１に示す試験合格中間ソースコードおよびデータファイルのデータテーブル１３１に対して、図１０に示す選択対象小差分組合せのデータテーブル１４３の内容が適用されたことにより、ファイル名が「ｄｉｓｃｏｕｎｔ．ｃ」のソースコードの２行目「＃ｉｎｃｌｕｄｅ＜ｓｔｄｉｏ．ｈ＞」が削除されている。
【００５１】
また、試験不合格小差分リスト探索部２３は、小差分リスト更新処理（ステップ２３６）により、試験合格の場合に小差分リストのデータテーブル１４１から当該小差分の組合せを削除し、合格側行を更新試験合格中間ソースコードおよびデータファイルのデータテーブル１３２に対応したものに更新した、更新小差分リストのデータテーブル１４４で小差分リストのデータテーブル１４１を更新する。
【００５２】
試験不合格小差分リスト探索部２３は、小差分リストのデータテーブル１４１および試験合格中間ソースコードおよびデータファイル１３１を更新した後、小差分組合せループ処理２３１の最初からループ処理を実行する。このとき、前回の小差分組合せループ処理２３１の開始時と比べて小差分リストのデータテーブル１４１の要素数が一つ以上減っており、小差分組合せループ処理２３１が終了するまでの繰り返し回数の期待値は減っている。
【００５３】
図１３は、更新小差分リストのデータテーブル１４４の一例を示す図である。更新小差分リストのデータテーブル１４４は、通番ＩＤと、ファイルパス（ファイル名）と、操作種別（挿入、削除、置換）と、合格側行範囲と、不合格側行範囲と、差分の不合格側の内容とが格納されている。
【００５４】
一方、試験不合格小差分リスト探索部２３は、差分適用後のソースコードおよびデータファイルについて試験を実施した結果、試験不合格と判定される場合（ステップ２３８、不合格）、小差分組合せループ終端（ステップ２３７）において、試験不合格で小差分の組合せに残りがある場合には次の組合せを選択して小差分組合せループ処理２３１以降の処理を再開する。試験不合格小差分リスト探索部２３は、試験不合格で小差分組合せ選択候補リストのデータテーブル１４２に残りの小差分の組合せがない場合には処理を終了する。
【００５５】
試験不合格小差分リスト探索部２３は、処理終了時、小差分リストのデータテーブル１４１を終了時小差分リストのデータテーブル１４５として出力し、試験合格中間ソースコードおよびデータファイルのデータテーブル１３１を終了時試験合格中間ソースコードおよびデータファイルのデータテーブル１３３として出力する。
【００５６】
図１４は、終了時小差分リストのデータテーブル１４５の一例を示す図である。終了時小差分リストのデータテーブル１４５は、通番ＩＤと、ファイルパス（ファイル名）と、操作種別（挿入、削除、置換）と、合格側行範囲と、不合格側行範囲と、差分の不合格側の内容とが格納されている。終了時小差分リストのデータテーブル１４５の項目は、小差分単位での試験不合格の真因箇所、および真因箇所に依存する箇所によって構成されている。
【００５７】
図１４に示すように、終了時小差分リストのデータテーブル１４５から、ファイル名「ｄｉｓｃｏｕｎｔ．ｃ」のソースコードの合格側行範囲「１５」、不合格側行範囲「１５」の内容と、ファイル名「ｆａｍｉｌｙ．ｔｘｔ」のデータファイルの合格側行範囲「１３」、不合格側行範囲「１４」の内容がデグレード要因箇所であることが特定できる。
【００５８】
図１５は、終了時試験合格中間ソースコードおよびデータファイルのデータテーブル１３３の一例を示す図である。終了時試験合格中間ソースコードおよびデータファイルのデータテーブル１３３は、ファイルパスと、当該ファイル内容とが格納されている。
【００５９】
終了時試験合格中間ソースコードおよびデータファイルのデータテーブル１３３では、図１４に示す終了時小差分リストのデータテーブル１４５の内容を含まない、試験合格になる小差分の組合せにより構成されている。
【００６０】
このようにして、第１実施形態のデバッグ支援装置１では、プログラムが試験で合格になったバージョンＡのソースコードおよびデータファイル（試験合格ソースコードおよびデータファイルのデータテーブル１１１）と、不合格になったバージョンＢのソースコードおよびデータファイル（試験不合格ソースコードおよびデータファイルのデータテーブル１２１）との差分を抽出して細分化した小差分のリスト（小差分リストのデータテーブル１４１）を作成し、試験で合格になったソースコードおよびデータファイルに小差分リストから取り出した小差分の組合せを適用して試験を実施することを繰返し、合格になった小差分組合せを用いて小差分のリストと試験で合格になったソースコードおよびデータファイルを更新することで枝刈り（不要な探索の打ち切り）をしながら不合格になる小差分の組合せで最小のものを探索することができる。すなわち、デグレード点をソースコードおよびデータファイルに対するコミットの単位で特定するのではなく、コミットを構成する小差分組合せの単位で特定することにより、開発担当者の技能、知識や経験則に基づいて差分の中から試験合格不合格の変化要因を解析する必要がなく、自動的かつ効率的にソースコードまたはデータファイルの試験不合格要因箇所を特定することが可能となる。
【００６１】
（第２実施形態）  
次に、第２実施形態のデバッグ支援装置１Ｂについて説明する。  
図１６は、第２実施形態のデバッグ支援装置１Ｂの構成を示すブロック図である。第２実施形態のデバッグ支援装置１Ｂは、記憶部１０と、デバッグ支援処理部２０Ａと、デバッグ支援処理部２０Ｂとを備える。なお、デバッグ支援装置１Ｂは、基本的に第１実施形態のデバッグ支援装置１と同様に構成されるものとし、同じ名称を付した構成部については第１実施形態と同じものとして詳細な説明を省略する。
【００６２】
記憶部１０は、試験合格ソースコードおよびデータファイル記憶部１１と、試験不合格ソースコードおよびデータファイル記憶部１２と、試験合格ソースコードおよびデータファイル記憶部１３と、小差分リスト記憶部１４とを備える。
【００６３】
デバッグ支援処理部２０Ａは、小差分リスト初期化部２１と、試験合格中間ソースコードおよびデータファイル初期化部２２とを備える。
【００６４】
デバッグ支援処理部２０Ｂは、複数の試験不合格小差分リスト探索部２３（２３−３，２３−２，２３−３）を備える。複数の試験不合格小差分リスト探索部２３は、小差分組合せ選択候補リストのデータテーブル１４２からそれぞれ異なる小差分組合せを選択して、並列に、それぞれ第１実施形態の試験不合格小差分リスト探索部２３と同様に処理を実行する。
【００６５】
このように、第２実施形態のデバッグ支援装置１Ｂによれば、複数の試験不合格小差分リスト探索部２３を複数並列に配置したことにより、それぞれの試験不合格小差分リスト探索部２３が異なる小差分の組合せを選択して同時並列に探索することが可能になるため、処理時間を短くすることができる。小差分組合せ選択候補リストのデータテーブル１４２にある小差分の組合せの全てに対して総当たりで探索すると、小差分の数が増えるほど組合せ数が増大して、試験不合格小差分リスト探索部２３における処理の繰り返し回数がきわめて多くなるが、試験不合格小差分リスト探索部２３を複数設けて平行に処理することで、探索が終了するまでにかかる時間を現実的な範囲に収めることが可能となる。
【００６６】
なお、図１６に示すデバッグ支援装置１Ｂでは、３つの試験不合格小差分リスト探索部２３−３，２３−２，２３−３が設けられているが、３つに限らない。
【００６７】
（第３実施形態）  
次に、第３実施形態について説明する。第３実施形態は、第１実施形態のデバッグ支援装置１および第２実施形態のデバッグ支援装置１Ｂの試験不合格小差分リスト探索部２３における小差分組合せループ処理（ステップ２３１）を変更する。
【００６８】
第３実施形態の小差分組合せループ処理（ステップ２３１Ｂ）では、小差分組合せ選択候補リストのデータテーブル１４２Ｂを取得し、リストの各行を順番に選択して小差分組合せ取得処理（ステップ２３２）以降を実行する。
【００６９】
第３実施形態の小差分組合せ選択候補リストのデータテーブル１４２Ｂは、第１実施形態において説明した図９に示す小差分の組合せ（通番ＩＤの全ての組合せ）を、小差分組合せ選択候補リストのデータテーブル１４２Ｂに関する事前情報に基づいて、試験に合格する蓋然性が高い順に並べ替えられている。
【００７０】
小差分の組合せの並べ替えは、例えば次のようにして実行することができる。
【００７１】
小差分組合せ選択候補リストのデータテーブル１４２Ｂに関する事前情報の例の一つとして、もし小差分組合せの一つＡ１が他の小差分Ａ２に依存することが構文解析などにより明らかであれば、Ａ２を含まないＡ１は必ず不合格になるというものがある。他の小差分組合せに依存しないと思われる小差分組合せを前に、他の小差分組合せに明らかに依存する小差分組合せを後に並べる。
【００７２】
小差分組合せ選択候補リストのデータテーブル１４２Ｂに関する事前情報の例の一つとして、もし小差分組合せの一つＢ１が不合格ならばＢ１が依存しない小差分Ｂ２を追加しても必ず不合格であるが、Ｂ１が合格ならば小差分Ｂ３を追加すると不合格になる可能性があるため、組合せに含まれる小差分の数が少ないほど試験に合格する蓋然性が高いというものがある。小差分組合せ選択候補リストのデータテーブル１４２の例のように、組合せに含まれる小差分の数が少ないものから順に並べる。
【００７３】
小差分組合せ選択候補リストのデータテーブル１４２Ｂに関する事前情報の例の一つとして、もし小差分組合せの一つＣ１が前回のループで不合格ならばＣ１が前回の更新小差分組合せＣ２に依存していなければ必ず今回のループでも不合格になるため、前回のループで不合格になった小差分組合せよりも試験していない小差分組合せの方が試験に合格する蓋然性が高いというものがある。前回のループで試験していない小差分組合せを前に、前回のループで不合格になった小差分組合せを後に並べる。
【００７４】
図１７（Ａ）は、試験に合格する蓋然性が高い順に小差分組合せを並べた小差分組合せ選択候補リストのデータテーブル１４２Ｂの一例を示す図である。なお、図１７（Ｂ）には、図１７（Ａ）に示す各小差分組合せに対する並べ替えをした理由を示している。
【００７５】
例えば、図１７（Ａ）に示す通番ＩＤ「２」の小差分組合せについては、定数定義の挿入を、意味解析を伴わない構文解析により識別でき、なおかつ、他小差分に依存する見込みが低いと想定できるため、小差分組合せの前の方に並べている。同様に、通番ＩＤ「４」〜「８」の小差分組合せについては、データ定義の挿入が他小差分に依存する見込みが低いと想定できるため、小差分組合せの前の方に並べている。
【００７６】
また、小差分の数が少ない組合せほど他小差分に依存する見込みが低いと想定できるため、小差分の数が一つの組合せ（通番ＩＤ「１」〜「８」）を列挙した後に、小差分の数が二つの組合せ（通番ＩＤ「２，４」「２，５」…）を列挙するように並べている。
【００７７】
なお、小差分組合せ選択候補リストのデータテーブル１４２Ｂは、小差分リスト初期化部２１が生成しても良いし、試験不合格小差分リスト探索部２３が小差分組合せループ処理２３１において小差分組合せ選択候補リストのデータテーブル１４２をもとに生成しても良い。
【００７８】
このようにして、第３実施形態のデバッグ支援装置１またはデバッグ支援装置１Ｂでは、小差分組合せ選択候補リストのデータテーブル１４２Ｂにおいて、試験に合格する蓋然性が高い小差分組合せから順に並べることにより、小差分リストのデータテーブル１４１および小差分組合せ選択候補リストのデータテーブル１４２を更新するまでの探索回数の期待値を減らすことが可能になる。このため、小差分組合せ選択候補リストのデータテーブル１４２Ｂに関する事前情報を利用することで、処理時間を短くすることができる。
【００７９】
（第４実施形態）
次に、第４実施形態について説明する。第４実施形態は、第１実施形態のデバッグ支援装置１および第２実施形態のデバッグ支援装置１Ｂの試験不合格小差分リスト探索部２３における小差分組合せループ処理（ステップ２３１）変更する。
【００８０】
第４実施形態の小差分組合せループ処理（ステップ２３１Ｃ）は、小差分組合せ選択候補リストのデータテーブル１４２を取得し、リストの各行を順番に選択して小差分組合せ取得処理２３２以降を実行する。このとき小差分組合せ選択候補リストのデータテーブル１４２は、組合せに含まれる小差分の数（小差分の組合せ数）が一定の打ち切り値を越える選択候補を除外し、小差分の数が打ち切り値を越えない選択候補のみを残すものとする。
【００８１】
例えば、小差分の数（組合せ数）が４つの小差分組合せについて試験実行処理（ステップ２３４）を実行した結果、試験不合格となる場合には、５つ以降の小差分組合せについても試験不合格となる可能性が高い。従って、組合せに含まれる小差分の数が一定（この場合、３つ、あるいは４つの小差分の数）を越える選択候補を除外することで、実効性のない処理が実行されないようにする。
【００８２】
このようにして、第４実施形態のデバッグ支援装置１またはデバッグ支援装置１Ｂでは、小差分組合せ選択候補リストのデータテーブル１４２の選択候補から打ち切り値を越える選択候補を除外したことにより、選択候補を減らすことが可能になるから、探索精度が低下する代わりに処理時間を短くすることができる。
【００８３】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フレキシブルディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、光磁気ディスク（ＭＯ）、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【００８４】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【００８５】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が上記実施形態を実現するための各処理の一部を実行しても良い。
【００８６】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【００８７】
また、記憶媒体は１つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【００８８】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パーソナルコンピュータ等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【００８９】
また、各実施形態におけるコンピュータとは、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【００９０】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９１】
１…デバッグ支援装置、２…プロセッサ、３…メモリ、４…記憶装置、４Ａ…デバッグ支援プログラム、１０…記憶部、１１…試験合格ソースコードおよびデータファイル記憶部、１２…試験不合格ソースコードおよびデータファイル記憶部、１３…試験合格ソースコードおよびデータファイル記憶部、１４…小差分リスト記憶部、２０，２０Ａ，２０Ｂ…デバッグ支援処理部、２１…小差分リスト初期化部、２２…試験合格中間ソースコードおよびデータファイル初期化部、２３，２３−１，２３−２，２３−３…試験不合格小差分リスト探索部。
【図１】
2019057118.tif 000003
【図２】
2019057118.tif 000004
【図３】
2019057118.tif 000005
【図４】
2019057118.tif 000006
【図５】
2019057118.tif 000007
【図６】
2019057118.tif 000008
【図７】
2019057118.tif 000009
【図８】
2019057118.tif 000010
【図９】
2019057118.tif 000011
【図１０】
2019057118.tif 000012
【図１１】
2019057118.tif 000013
【図１２】
2019057118.tif 000014
【図１３】
2019057118.tif 000015
【図１４】
2019057118.tif 000016
【図１５】
2019057118.tif 000017
【図１６】
2019057118.tif 000018
【図１７】
2019057118.tif 000019