JP7447723B2 - 情報処理プログラム、情報処理方法、および情報処理装置 - Google Patents

情報処理プログラム、情報処理方法、および情報処理装置 Download PDF

Info

Publication number
JP7447723B2
JP7447723B2 JP2020125270A JP2020125270A JP7447723B2 JP 7447723 B2 JP7447723 B2 JP 7447723B2 JP 2020125270 A JP2020125270 A JP 2020125270A JP 2020125270 A JP2020125270 A JP 2020125270A JP 7447723 B2 JP7447723 B2 JP 7447723B2
Authority
JP
Japan
Prior art keywords
code
test
test execution
processing
information processing
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
JP2020125270A
Other languages
English (en)
Other versions
JP2022021600A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020125270A priority Critical patent/JP7447723B2/ja
Publication of JP2022021600A publication Critical patent/JP2022021600A/ja
Application granted granted Critical
Publication of JP7447723B2 publication Critical patent/JP7447723B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
従来、ソフトウェアを実現するソースコード内から、ソフトウェアに意図しない挙動を起こさせるバグの原因となる箇所を探し、バグの原因となる箇所を自動修正するための、APR(Automated Program Repair)と呼ばれる技術がある。この際、ソースコード内から、バグの原因となる箇所を探すための、バグ局所化(Fault Localization)と呼ばれる技術が用いられることがある。
先行技術としては、例えば、プログラムの不具合に対する複数の修復候補の各々に対してテキスト類似度スコアを決定し、複数の修復候補をテキスト類似度スコアに基づき分類した結果に基づき複数の修復候補から特定の修復候補を選択するものがある。
特開2017-151977号公報
しかしながら、従来技術では、ソースコード内の、それぞれ異なる種類のバグの原因となる複数の箇所を網羅的に修正することが難しい場合がある。例えば、ソースコードに対して何らかの修正案を適用した結果、ソースコード内のいずれか一つのバグの原因となる箇所が修正されたとしても、他のバグの原因となる箇所が修正されずに残っているため、修正案が妥当であるか否かを正しく判断することができない。
1つの側面では、本発明は、それぞれ異なる種類のバグの原因となるソースコード内の複数の箇所を修正可能にすることを目的とする。
1つの実施態様によれば、テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得し、前記テスト対象コードと、取得した前記テスト実行コードのそれぞれとに基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定し、特定した前記対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される前記テスト対象コードに含まれる処理コード群同士の包含関係を特定し、特定した前記包含関係に基づいて、前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、前記一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する情報処理プログラム、情報処理方法、および情報処理装置が提案される。
一態様によれば、それぞれ異なる種類のバグの原因となるソースコード内の複数の箇所を修正可能にすることが可能になる。
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。 図2は、バグ修正システム200の一例を示す説明図である。 図3は、情報処理装置100のハードウェア構成例を示すブロック図である。 図4は、情報処理装置100の機能的構成例を示すブロック図である。 図5は、情報処理装置100の具体的な機能的構成例を示すブロック図である。 図6は、テストPRG601と本体PRG602との一例を示す説明図である。 図7は、対応テスト実行メソッド群を特定する一例を示す説明図(その1)である。 図8は、対応テスト実行メソッド群を特定する一例を示す説明図(その2)である。 図9は、対応テスト実行メソッド群を特定する一例を示す説明図(その3)である。 図10は、対応テスト実行メソッド群を特定する一例を示す説明図(その4)である。 図11は、対応テスト実行メソッド群を特定する一例を示す説明図(その5)である。 図12は、テスト関係グラフを生成する一例を示す説明図(その1)である。 図13は、テスト関係グラフを生成する一例を示す説明図(その2)である。 図14は、テスト関係グラフを生成する一例を示す説明図(その3)である。 図15は、テスト関係グラフを生成する一例を示す説明図(その4)である。 図16は、修正パッチを生成する一例を示す説明図(その1)である。 図17は、修正パッチを生成する一例を示す説明図(その2)である。 図18は、修正パッチを生成する一例を示す説明図(その3)である。 図19は、修正パッチを生成する一例を示す説明図(その4)である。 図20は、修正パッチを生成する一例を示す説明図(その5)である。 図21は、情報処理装置100の動作の具体例を示す説明図(その1)である。 図22は、情報処理装置100の動作の具体例を示す説明図(その2)である。 図23は、情報処理装置100の動作の具体例を示す説明図(その3)である。 図24は、全体処理手順の一例を示すフローチャートである。 図25は、分類処理手順の一例を示すフローチャートである。 図26は、特定処理手順の一例を示すフローチャートである。 図27は、生成処理手順の一例を示すフローチャートである。
以下に、図面を参照して、本発明にかかる情報処理プログラム、情報処理方法、および情報処理装置の実施の形態を詳細に説明する。
(実施の形態にかかる情報処理方法の一実施例)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。情報処理装置100は、APRを実現し、ソースコードに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができるコンピュータである。情報処理装置100は、例えば、サーバやPC(Personal Computer)などである。
従来では、APRを実現する際、バグの原因となる箇所を絞り込むために、バグ局所化の一種である、SBFL(Spectrum-Based Fault Localization)と呼ばれる技術が用いられる傾向がある。SBFLは、ソースコードに対して複数のテストを実行し、それぞれのテストの実行結果の妥当性と、それぞれのテストで実行されたソースコード内の命令文を記録したログ情報とに基づいて、命令文ごとに、バグの原因である可能性の高さを示す疑惑値(Suspiciousness Score)を算出する。
テストは、ソースコードの処理内容の妥当性を判定することを目的とし、具体的には、ソースコード内の1以上の命令文で形成される処理コードの処理内容の妥当性を判定することを目的とする。テストは、例えば、テスト実行コードによって定義される。テスト実行コードは、ソースコード内の1以上の命令文で形成される処理コードを、テスト実行用に呼び出すコードである。テスト実行用とは、テストを実行し、ソースコード内の1以上の命令文で形成される処理コードの処理内容の妥当性を判定する用途を意味する。
そして、APRは、ソースコード内の、算出された疑惑値が比較的高い命令文から順に、当該命令文を修正する処理と、複数のテストにより、当該命令文を修正した後のソースコードの処理内容の妥当性を検証する処理とを実行することになる。ここで、APRは、検証した結果、当該命令文を修正した後のソースコードが妥当であると判断すれば、当該命令文を修正したことが妥当であったと判断する。一方で、APRは、検証した結果、当該命令文を修正した後のソースコードが妥当ではないと判断すれば、当該命令文を修正したことが妥当ではないと判断し、当該命令文を修正したことを取り消す。
しかしながら、従来では、APRにより、ソースコード内の、それぞれ異なる種類のバグの原因となる複数の箇所を網羅的に修正することは難しい。例えば、ソースコード内の、疑惑値が最も高い命令文を修正し、複数のテストにより、疑惑値が最も高い命令文を修正した後のソースコードの処理内容の妥当性を検証する場合が考えられる。
この場合、修正により、ソースコード内のいずれか一つのバグの原因となる箇所が修正されたとしても、他のバグの原因となる箇所が修正されずに残っているため、疑惑値が最も高い命令文を修正した後のソースコードは、妥当ではないと判断されてしまう。結果として、疑惑値が最も高い命令文に対する修正が取り消され、バグの原因となっている疑惑値が最も高い命令文が修正されることなく、ソースコード内に残ったままになる。また、疑惑値が高い順に、他の命令文を修正する場合も、同様に、当該命令文を修正した後のソースコードは、妥当ではないと判断されてしまう。このように、APRにより、ソースコード内の、それぞれ異なる種類のバグの原因となる複数の箇所を網羅的に修正することは難しい。
また、例えば、下記参考文献1を参考に、同種のバグの原因となる複数の命令文を纏めて修正しようとする手法が考えられるが、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正することはできない。
参考文献1 : Saha, Seemanta, et al. “Harnessing evolution for multi-hunk program repair.” 2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE). IEEE, 2019.
また、下記参考文献2を参考に、論理的推論により、バグの原因である可能性が相対的に高い、命令文の組み合わせを特定し、特定した組み合わせの単位で修正しようとする手法が考えられるが、組み合わせを精度よく特定することができない場合がある。例えば、比較的多くの命令文をテスト実行用に呼び出して実行するテストが存在すると、論理的推論が難しくなる傾向があり、組み合わせを精度よく特定することができなくなる傾向がある。このため、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正することが難しい場合がある。
参考文献2 : Abreu, Rui, Peter Zoeteweij, and Arjan JC Van Gemund. “Simultaneous debugging of software faults.” Journal of Systems and Software 84.4 (2011): 573-586.
また、下記参考文献3を参考に、同一のバグに関するテストが同一のグループに属するよう、複数のテストをグループ分けし、グループの単位で、ソースコードを修正し、修正した後のソースコードの処理内容の妥当性を検証しようとする手法が考えられる。例えば、この手法では、類似する実行パスを有するテストが、同一のグループに分類される。この手法では、複数のテストを精度よくグループ分けすることができない。例えば、同一のバグに関し、入力値が異なる複数のテストは、異なる実行パスを有することがあり、同一のグループに分類されない。このため、この手法では、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正することが難しい場合がある。
参考文献3 : Jones, James A., James F. Bowring, and Mary Jean Harrold. “Debugging in parallel.” Proceedings of the 2007 international symposium on Software testing and analysis. 2007.
また、下記参考文献4を参考に、同一のバグに関する命令文が同一のグループに属するよう、ソースコード内の複数の命令文をグループ分けし、グループの単位で修正し、修正した後のグループの処理内容の妥当性を検証しようとする手法が考えられる。例えば、この手法では、類似する実行カバレッジを有する命令文が、同一のグループに分類される。この手法では、比較的多くの命令文をテスト実行用に呼び出して実行するテストが存在すると、ソースコード内の複数の命令文を精度よくグループ分けすることができない。このため、この手法では、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正することが難しい場合がある。
参考文献4 : 特開2016-38612号公報
そこで、本実施の形態では、APRを実現し、ソースコードに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる情報処理方法について説明する。
(1-1)情報処理装置100は、テスト対象コード101を取得する。テスト対象コード101は、例えば、ソースコードである。テスト対象コード101は、例えば、Java言語により記述される。テスト対象コード101は、複数存在していてもよい。情報処理装置100は、例えば、テスト対象コード101の入力を受け付けることにより、テスト対象コード101を取得する。テスト対象コード101は、複数の処理コードを含む。処理コードは、例えば、メソッドである。以下、処理コードは、メソッドであるとする。情報処理装置100は、テスト対象コード101に含まれるメソッド群に対するテストを実行するテスト実行コード102を複数取得する。情報処理装置100は、例えば、テスト実行コード102の入力を受け付けることにより、テスト実行コード102を取得する。メソッド群は、1以上のメソッドの集まりであり、例えば、パッケージ、または、クラスであってもよい。クラスは、1以上のメソッドを含む。パッケージは、1以上のクラスを含む。
(1-2)情報処理装置100は、テスト対象コード101と、テスト実行コード102のそれぞれとに基づいて、テスト対象コード101に含まれるメソッドと、少なくとも当該メソッドに対するテストを実行するテスト実行コード102との対応関係を特定する。情報処理装置100は、例えば、テスト対象コード101と、テスト実行コード102のそれぞれとをテキスト解析する。そして、情報処理装置100は、例えば、テキスト解析した結果に基づいて、テスト対象コード101に含まれるメソッドと、少なくとも当該メソッドに対するテストを実行するテスト実行コード102との対応関係を特定する。図1の例では、情報処理装置100は、テスト対象コード101に含まれるメソッド1と、テスト実行コード1、および、テスト実行コード2とが対応することを特定する。また、情報処理装置100は、テスト対象コード101に含まれるメソッド2と、テスト実行コード2とが対応することを特定する。
(1-3)情報処理装置100は、特定した対応関係に基づいて、それぞれ異なるテスト実行コード102によりテストが実行される、テスト対象コード101に含まれるメソッド群同士の包含関係を特定する。図1の例では、情報処理装置100は、テスト実行コード1によりテストが実行されるメソッド1が、テスト実行コード2によりテストが実行されるメソッド1とメソッド2とで形成されるメソッド群に包含されることを特定する。
(1-4)情報処理装置100は、特定した包含関係に基づいて、テスト実行コード102のそれぞれを実行していくことにより、テスト対象コード101に対する修正処理を実施する。修正処理は、例えば、テスト対象コード101を自動修正することである。修正処理は、例えば、テスト対象コード101に対する修正内容を規定した修正案を生成することであってもよい。この際、情報処理装置100は、包含関係を有する組み合わせのうち、一方のメソッド群に包含される他方のメソッド群に対するテストを実行するテスト実行コード102を、一方のメソッド群に対するテストを実行するテスト実行コード102よりも先に実行する。図1の例では、情報処理装置100は、テスト実行コード1を、テスト実行コード2より先に実行するよう、テスト実行コード102のそれぞれを実行していくことにより、テスト対象コード101に対する修正処理を実施する。
これにより、情報処理装置100は、APRを実現し、テスト対象コード101に含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる。このため、情報処理装置100は、開発者にかかる作業負担の低減化を図ることができる。情報処理装置100は、比較的多くの命令文をテスト実行用に呼び出して実行するテスト実行コード102が存在しても、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正可能にすることができる。情報処理装置100は、設定された入力値が異なる複数のテスト実行コード102が存在しても、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正可能にすることができる。
ここでは、複数のテスト実行コード102が、それぞれ異なるデータである場合について説明したが、これに限らない。例えば、複数のテスト実行コード102が、1つのデータに包含されている場合があってもよい。
ここでは、テスト対象コード101、および、テスト実行コード102が、Java言語により記述される場合について説明したが、これに限らない。例えば、テスト対象コード101、および、テスト実行コード102が、Java言語以外により記述される場合があってもよい。Java言語以外とは、例えば、C言語である。
ここでは、情報処理装置100が、テスト対象コード101と、テスト実行コード102との入力を受け付けることにより、テスト対象コード101と、テスト実行コード102とを取得する場合について説明したが、これに限らない。例えば、情報処理装置100が、テスト対象コード101と、テスト実行コード102とを、他のコンピュータから受信することにより取得する場合があってもよい。この場合、情報処理装置100と、他のコンピュータとを含むバグ修正システムが形成される。
(バグ修正システム200の一例)
次に、図2を用いて、図1に示した情報処理装置100を適用した、バグ修正システム200の一例について説明する。
図2は、バグ修正システム200の一例を示す説明図である。図2において、バグ修正システム200は、情報処理装置100と、1以上のクライアント装置201とを含む。
バグ修正システム200において、情報処理装置100とクライアント装置201は、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
情報処理装置100は、テスト対象コードと、複数のテスト実行コードとを、クライアント装置201から受信する。情報処理装置100は、受信したテスト対象コードと、複数のテスト実行コードとをテキスト解析した結果に基づいて、テスト対象コードに含まれるメソッドと、当該メソッドをテスト実行用に呼び出すテスト実行コードとの対応関係を特定する。情報処理装置100は、特定した対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される、テスト対象コードに含まれるメソッド群同士の包含関係を特定する。
情報処理装置100は、特定した包含関係に基づいて、受信した複数のテスト実行コードのうち、いずれのテスト実行コードをいずれのテスト実行コードよりも先に実行すればよいのかを規定した先後情報を設定する。情報処理装置100は、設定した先後情報に従って、受信した複数のテスト実行コードを実行し、テスト対象コードに対する修正処理を実施する。修正処理は、例えば、テスト対象コードを自動修正すること、または、テスト対象コードに対する修正内容を規定した修正案を生成することなどである。情報処理装置100は、修正されたテスト対象コード、または、テスト対象コードに対する修正内容を規定した修正案を、クライアント装置201に送信する。
クライアント装置201は、開発者に用いられるコンピュータである。クライアント装置201は、テスト対象コードと、テスト実行コードとを、情報処理装置100に送信する。クライアント装置201は、修正されたテスト対象コード、または、テスト対象コードに対する修正内容を規定した修正案を、情報処理装置100から受信し、開発者が参照可能に出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、他のコンピュータへの送信、または、記憶領域への記憶などである。クライアント装置201は、例えば、サーバ、PC、スマートフォン、または、端末装置などである。これにより、クライアント装置201は、テスト対象コードを修正する際に開発者にかかる作業負担の低減化を図ることができる。
ここでは、情報処理装置100が、単独で、上述した各種処理を実行する場合について説明したが、これに限らない。例えば、情報処理装置100が、他のコンピュータと協働する場合があってもよい。具体的には、他のコンピュータが、それぞれ異なるテスト実行コードによりテストが実行される、テスト対象コードに含まれるメソッド群同士の包含関係を特定する場合があってもよい。そして、情報処理装置100が、包含関係を、他のコンピュータから取得し、取得した包含関係に基づいて、先後情報を設定し、複数のテスト実行コードを実行し、テスト対象コードに対する修正処理を実施する場合があってもよい。
(情報処理装置100のハードウェア構成例)
次に、図3を用いて、情報処理装置100のハードウェア構成例について説明する。
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。図3において、情報処理装置100は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F(Interface)303と、記録媒体I/F304と、記録媒体305とを有する。また、各構成部は、バス300によってそれぞれ接続される。
ここで、CPU301は、情報処理装置100の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることにより、コーディングされている処理をCPU301に実行させる。
ネットワークI/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303は、例えば、モデムやLANアダプタなどである。
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、情報処理装置100から着脱可能であってもよい。
情報処理装置100は、上述した構成部の他、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を有していなくてもよい。
(クライアント装置201のハードウェア構成例)
クライアント装置201のハードウェア構成例は、図3に示した、情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
(情報処理装置100の機能的構成例)
次に、図4を用いて、情報処理装置100の機能的構成例について説明する。
図4は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、記憶部400と、取得部401と、第1特定部402と、第2特定部403と、修正部404と、出力部405とを含む。
記憶部400は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、記憶部400が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部400が、情報処理装置100とは異なる装置に含まれ、記憶部400の記憶内容が情報処理装置100から参照可能である場合があってもよい。
取得部401~出力部405は、制御部の一例として機能する。取得部401~出力部405は、具体的には、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、または、ネットワークI/F303により、その機能を実現する。各機能部の処理結果は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
記憶部400は、各機能部の処理において参照され、または更新される各種情報を記憶する。記憶部400は、1以上のテスト対象コードを記憶する。テスト対象コードは、ソースコードである。テスト対象コードは、例えば、Java言語により記述される。テスト対象コードは、Java言語以外により記述される場合があってもよい。Java言語以外は、例えば、C言語である。
テスト対象コードは、実行単位の処理コードを複数含む。処理コードは、例えば、メソッドである。処理コードは、例えば、パッケージ、または、クラスである場合があってもよい。処理コードは、例えば、関数であってもよい。以下、処理コードが、メソッドである場合について説明する。テスト対象コードは、具体的には、図5に後述する本体PRG(program)である。
記憶部400は、複数のテスト実行コードを記憶する。テスト実行コードは、ソースコードである。テスト実行コードは、テスト対象コードに対するテストを実行することを、処理内容として規定するソースコードである。テスト実行コードは、例えば、テスト対象コードに含まれるメソッド群をテスト実行用に呼び出し、当該メソッド群に対するテストを実行することを、処理内容として規定する。テスト実行コードは、テスト対象コードのうち、いずれかのメソッド群をテスト実行用に呼び出す他、他のメソッド群をテスト実行用以外に呼び出すことを、処理内容として規定することがある。テスト実行用以外とは、テスト準備用、または、テスト検証用などの用途である。テスト実行コードは、例えば、Java言語により記述される。テスト実行コードは、Java言語以外により記述される場合があってもよい。Java言語以外は、例えば、C言語である。
テスト実行コードは、例えば、メソッドである。テスト実行コードは、例えば、パッケージ、または、クラスである場合があってもよい。テスト実行コードは、それぞれ、テスト対象コードに対し、互いに種類が異なるテストを実行することが好ましい。メソッド群は、1以上のメソッドの集まりであり、例えば、パッケージ、または、クラスである。テスト実行コードは、具体的には、図5に後述するテストPRGに含まれるテスト実行メソッドである。
取得部401は、各機能部の処理に用いられる各種情報を取得する。取得部401は、取得した各種情報を、記憶部400に記憶し、または、各機能部に出力する。また、取得部401は、記憶部400に記憶しておいた各種情報を、各機能部に出力してもよい。取得部401は、例えば、利用者の操作入力に基づき、各種情報を取得する。利用者は、例えば、開発者である。取得部401は、例えば、情報処理装置100とは異なる装置から、各種情報を受信してもよい。
取得部401は、例えば、テスト対象コードと、複数のテスト実行コードとを取得する。取得部401は、例えば、利用者の操作入力に基づき、テスト対象コードと、複数のテスト実行コードとの入力を受け付けることにより、テスト対象コードと、複数のテスト実行コードとを取得する。取得部401は、例えば、テスト対象コードと、複数のテスト実行コードとを、着脱可能な記録媒体305から読み出すことにより取得する場合があってもよい。取得部401は、例えば、テスト対象コードと、複数のテスト実行コードとを、他のコンピュータから受信することにより取得する場合があってもよい。他のコンピュータは、例えば、クライアント装置201である。
取得部401は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、利用者による所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。取得部401は、例えば、テスト対象コードと、複数のテスト実行コードとを取得したことを、第1特定部402と、第2特定部403と、修正部404と、出力部405との処理を開始する開始トリガーとして受け付ける。
第1特定部402は、取得したテスト対象コードと、取得した複数のテスト実行コードとに基づいて、取得したテスト対象コードに含まれるメソッドと、少なくとも当該メソッドに対するテストを実行するテスト実行コードとの対応関係を特定する。第1特定部402は、テスト対象コードに含まれるメソッドと、少なくとも当該メソッドをテスト実行用に呼び出して実行すると判断されるテスト実行コードとが、対応関係を有すると特定する。第1特定部402は、テスト対象コードに含まれるメソッドと、当該メソッドをテスト実行用以外で呼び出して実行するテスト実行コードとが、対応関係を有さないと特定することが好ましい。これにより、第1特定部402は、テスト実行コードを実行する順序を決定する指針となる情報を得ることができる。
第1特定部402は、例えば、テスト実行コードに対応する名称と、テスト対象コードに含まれるメソッドに対応する名称との類似度を算出する。類似度は、例えば、Jaccard係数値である。そして、第1特定部402は、例えば、算出した類似度に基づいて、取得したテスト対象コードに含まれるメソッドと、少なくとも当該メソッドに対するテストを実行するテスト実行コードとの対応関係を特定する。
第1特定部402は、具体的には、テスト実行コードと、テスト対象コードに含まれるメソッドとの組み合わせごとに、当該テスト実行コードに対応する名称と、当該メソッドに対応する名称との類似度を算出する。そして、第1特定部402は、具体的には、算出した類似度が閾値以上となる組み合わせが、対応関係を有すると特定する。閾値は、例えば、予め利用者によって設定される。これにより、第1特定部402は、テスト実行コードと、テスト対象コードに含まれるメソッドとの対応関係を精度よく特定することができる。
第1特定部402は、例えば、テスト実行コードと、テスト対象コードに含まれるメソッドとの呼出関係を特定する。そして、第1特定部402は、例えば、特定した呼出関係に基づいて、取得したテスト対象コードに含まれるメソッドと、少なくとも当該メソッドに対するテストを実行するテスト実行コードとの対応関係を特定する。これにより、第1特定部402は、テスト実行コードに対応する、テスト対象コードに含まれるメソッドを特定することができない状況を回避し易くすることができる。
第2特定部403は、特定した対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される、テスト対象コードに含まれるメソッド群同士の包含関係を特定する。第2特定部403は、例えば、いずれかのテスト実行コードによりテストが実行されるメソッド群が、他のテスト実行コードによりテストが実行されるメソッド群に包含されることを特定する。これにより、第2特定部403は、テスト実行コードを実行する順序を決定する指針となる情報を得ることができる。
第2特定部403は、特定したメソッド群同士の包含関係に基づいて、テスト実行コード同士の包含関係を特定する。第2特定部403は、いずれかのメソッド群に対するテストを実行するテスト実行コードが、当該メソッド群を包含する他のメソッド群に対するテストを実行するテスト実行コードに包含されるよう、テスト実行コード同士の包含関係を特定する。これにより、第2特定部403は、テスト実行コードを実行する順序を決定する指針となる情報を得ることができる。
修正部404は、特定した包含関係に基づいて、取得した複数のテスト実行コードを実行していくことにより、テスト対象コードに対する修正処理を実施する。修正処理は、例えば、テスト対象コードを自動修正することである。修正処理は、例えば、テスト対象コードに対する修正内容を規定した修正案を生成することであってもよい。この際、修正部404は、いずれかのメソッド群に対するテストを実行するテスト実行コードを、当該メソッド群を包含する他のメソッド群に対するテストを実行するテスト実行コードよりも先に実行するよう、複数のテスト実行コードを実行する。これにより、修正部404は、APRを実現し、テスト対象コードに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる。
修正部404は、例えば、テスト実行コード同士の包含関係に基づいて、いずれかのテスト実行コードを、当該テスト実行コードを包含する他のテスト実行コードよりも先に実行するよう、複数のテスト実行コードを実行する順序を決定する。修正部404は、決定した順序に従って、複数のテスト実行コードを実行していくことにより、テスト対象コードに対する修正処理を実施する。これにより、修正部404は、APRを実現し、テスト対象コードに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる。
修正部404は、具体的には、決定した順序に従って、他のテスト実行コードを包含していないテスト実行コードを実行した結果に基づいて、テスト対象コードを修正する。次に、修正部404は、具体的には、決定した順序に従って、他のテスト実行コードを包含し、未実行のテスト実行コードを包含していないテスト実行コードを実行した結果に基づいて、テスト対象コードを修正することを繰り返す。これにより、修正部404は、APRを実現し、テスト対象コードに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる。
修正部404は、例えば、テストを実行する対象とするメソッドの数が相対的に少ないテスト実行コードを、テストを実行する対象とするメソッドの数が相対的に多いテスト実行コードよりも先に実行するよう、複数のテスト実行コードを実行する順序を決定する。修正部404は、決定した順序に従って、複数のテスト実行コードを実行していくことにより、テスト対象コードに対する修正処理を実施する。これにより、修正部404は、APRを実現し、テスト対象コードに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる。
出力部405は、少なくともいずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、出力部405は、少なくともいずれかの機能部の処理結果を利用者に通知可能にし、情報処理装置100の利便性の向上を図ることができる。
出力部405は、例えば、修正したテスト対象コードを、利用者が参照可能に出力する。また、出力部405は、例えば、生成した修正案を、利用者が参照可能に出力してもよい。これにより、出力部405は、テスト対象コードを修正する際、利用者にかかる作業負担の低減化を図ることができる。
(情報処理装置100の具体的な機能的構成例)
次に、図5を用いて、情報処理装置100の具体的な機能的構成例について説明する。
図5は、情報処理装置100の具体的な機能的構成例を示すブロック図である。情報処理装置100は、本体PRG501と、テストPRG502とを取得する。情報処理装置100は、分類部510と、特定部520と、生成部530とを含む。ここで、分類部510と、特定部520と、生成部530とは、具体的には、取得部401と、第1特定部402と、第2特定部403と、修正部404と、出力部405との機能を実現する。
分類部510は、本体PRG501に含まれるメソッドごとに、テストPRG502に含まれるテスト実行メソッドを分類し、メソッドごとの対応テスト実行メソッド群の一覧511を生成する。分類部510は、Test to Code Traceability技術を用いて、メソッドごとの対応テスト実行メソッド群の一覧511を生成する。本体PRG501に含まれるメソッドごとに、テストPRG502に含まれるテスト実行メソッドを分類する具体例については、例えば、図7~図11を用いて後述する。
これにより、分類部510は、分類した対応テスト実行メソッド群の単位で、修正パッチの生成および検証を実施可能にすることができる。このため、分類部510は、本体PRG501に、それぞれ異なる種類の複数のバグの原因となる箇所が含まれていても、生成した修正パッチの妥当性を正しく検証可能にすることができる。また、分類部510は、Test to Code Traceability技術を用いるため、本体PRG501に含まれるメソッドごとに、テストPRG502に含まれるテスト実行メソッドを分類する精度の向上を図ることができる。
特定部520は、一覧511に基づいて、テスト実行メソッド間の包含関係を特定し、テスト実行メソッド間の包含関係を表すテスト関係グラフ521を生成する。テスト関係グラフ521は、木構造である。テスト関係グラフ521は、テスト実行メソッドをノードとし、テスト実行メソッド間の包含関係をエッジとする。テスト関係グラフ521は、テスト実行メソッドのノードを、当該テスト実行メソッドを包含する他のテスト実行メソッドのノードの下位に、エッジで接続するよう形成される。下位とは、木構造の葉ノード側である。テスト関係グラフ521を生成する具体例については、例えば、図12~図15を用いて後述する。
これにより、特定部520は、テスト実行メソッド間の包含関係に基づいて、規模が比較的小さいテストを実行するテスト実行メソッドから先に利用して、修正パッチの生成および検証を実施可能にすることができる。このため、特定部520は、本体PRG501に、それぞれ異なる種類の複数のバグの原因となる箇所が含まれていても、生成した修正パッチの妥当性を正しく検証可能にすることができる。また、分類部510は、バグの原因となる箇所が複数修正された後、規模が比較的大きいテストを実行するテスト実行メソッドを利用することができ、本体PRG501内の、バグの原因となる箇所が網羅的に修正されたか否かを検証可能にすることができる。
生成部530は、テスト関係グラフ521に基づいて、テスト実行メソッドを選択し、本体PRG501に対する修正パッチを生成することを繰り返す。生成部530は、例えば、選択したテスト実行メソッドに基づいて、単一バグ局所化処理540を実行し、バグとなる箇所を特定し、単一バグ局所化結果541を生成する。次に、生成部530は、例えば、単一バグ局所化結果541に基づいて、単一バグ修正パッチ生成処理550を実行し、単一バグに対する修正パッチ551を生成する。そして、生成部530は、単一バグ修正パッチ検証処理560を実行し、修正パッチ551の妥当性を検証し、修正パッチ551を保持するか、または、破棄する。生成部530は、保持した修正パッチ551を纏めることにより、複数バグに対する修正パッチ561を生成して出力する。
これにより、生成部530は、APRを実現し、本体PRG501に含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる。このため、生成部530は、開発者にかかる作業負担の低減化を図ることができる。生成部530は、比較的多くの命令文をテスト実行用に呼び出して実行するテスト実行メソッドが存在しても、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正可能にすることができる。生成部530は、設定された入力値が異なる複数のテスト実行メソッドが存在しても、それぞれ異なる種類のバグの原因となる複数の命令文を網羅的に修正可能にすることができる。
(情報処理装置100の動作の一例)
次に、図6~図20を用いて、情報処理装置100の動作の一例について説明する。まず、図6を用いて、テストPRG601と本体PRG602との一例について説明する。
図6は、テストPRG601と本体PRG602との一例を示す説明図である。情報処理装置100は、テストPRG601と本体PRG602とを取得する。テストPRG601のtestM1_1、testM1_2、testM2_1、testM1M2、testC1、testIssue222、または、testIssue234などが、テスト実行メソッドである。本体PRG602のm1、m2、m3、または、onClickなどが、テスト対象メソッドとなり得る本体メソッドである。
図中の「バグ有」は、バグの原因となる箇所を含む本体メソッドまたは本体クラスを示すために表記されている。図中の「バグ有」は、説明の都合上、図中に表記されたものであり、本体PRG602内に、コメントとして実際に表記されたものではない。次に、図7~図11を用いて、情報処理装置100が、本体PRG602に含まれるテスト対象メソッドごとに、対応テスト実行メソッド群を特定する一例について説明する。
図7~図11は、対応テスト実行メソッド群を特定する一例を示す説明図である。図7~図11において、情報処理装置100は、テスト実行メソッドの全体集合Uを分類する。情報処理装置100は、例えば、本体PRG602の本体メソッドMiごとに、少なくとも本体メソッドMiに対するテストを実行する対応テスト実行メソッド群を含むテストケース集合UMiを特定する。例えば、U={TestC1#testM1_1、TestC1#testM1_2、・・・}である。M1=C1#m1である。ここで、AAA#xxxは、AAAがクラス名を表し、xxxがメソッド名を表す。
図7において、情報処理装置100は、Test to code traceability技術を用いて、各テスト実行メソッドに対応するテスト対象メソッドMiを特定する。テスト対象メソッドMiは、テスト実行メソッドによってテスト実行用に呼び出される、本体PRG602のいずれかの本体メソッドMiである。ここで、Test to code traceability技術については、例えば、下記参考文献5を参照することができる。
参考文献5 : Qusef, Abdallah, et al. “Recovering test-to-code traceability using slicing and textual analysis.” Journal of Systems and Software 88 (2014): 147-168.
図7の例では、情報処理装置100は、テスト実行メソッドに付されたテスト実行メソッド名と、本体PRG602の本体メソッドMiに付された本体メソッド名との類似度に基づいて、テスト実行メソッドに対応するテスト対象メソッドMiを特定する。類似度は、例えば、テスト実行メソッド名に含まれる単語と、本体メソッド名に含まれる単語との類似度である。情報処理装置100は、具体的には、テスト実行メソッドに付されたテスト実行メソッド名との類似度が閾値以上となる本体メソッド名を有する本体メソッドMiを、当該テスト実行メソッドに対応するテスト対象メソッドMiに特定する。
図7の例では、情報処理装置100は、テスト実行メソッド名=TestC1#testM1_1と、本体メソッド名=C1#m1との類似度が閾値以上であると判定する。このため、情報処理装置100は、テスト実行メソッド名=TestC1#testM1_1が付されたテスト実行メソッドと、本体メソッド名=C1#m1が付された本体メソッドとが対応すると判定する。そして、情報処理装置100は、テスト実行メソッド名=TestC1#testM1_1と、本体メソッド名=C1#m1との組み合わせを、表700に記憶する。
情報処理装置100は、例えば、テスト実行メソッドが呼び出す本体メソッドMiであっても、テスト実行メソッド名との類似度が閾値未満である本体メソッド名を有する本体メソッドMiは、テスト対象メソッドMiに特定しなくてもよい。例えば、テスト実行メソッドは、テスト実行用以外に、テスト準備用、または、テスト検証用に、本体メソッドMiを呼び出す場合があるため、テスト実行メソッドが呼び出す本体メソッドMiが、テスト対象メソッドMiであるとは限らない。これに対し、情報処理装置100は、類似度を考慮し、テスト対象メソッドMiを精度よく特定することができる。次に、図8の説明に移行する。
図8において、情報処理装置100が、類似度に基づいて、いずれかのテスト実行メソッドに対応するテスト対象メソッドMiについては特定することができなかったという状況が考えられる。図8の例では、情報処理装置100は、例えば、テストPRG601のテスト実行メソッドtestIssue222、および、testIssue234に対応するテスト対象メソッドMiを特定していない。以下の説明では、類似度に基づいて、対応するテスト対象メソッドMiが特定されなかったテスト実行メソッドを、「特定失敗テスト実行メソッド」と表記する場合がある。次に、図9の説明に移行する。
図9において、情報処理装置100は、特定失敗テスト実行メソッドと、本体PRG602内の本体メソッドMiとの呼出関係を特定する。そして、情報処理装置100は、特定失敗テスト実行メソッドによって呼び出される本体メソッドMiを、特定失敗テスト実行メソッドに対応するテスト対象メソッドMiに特定する。情報処理装置100は、特定失敗テスト実行メソッドに付されたテスト実行メソッド名と、特定したテスト対象メソッドMiに付されたテスト対象メソッド名との組み合わせを、表900に記憶する。次に、図10の説明に移行する。
図10において、情報処理装置100は、表700と、表900とに基づいて、本体メソッドMiごとに、テスト実行メソッドを分類する。情報処理装置100は、分類した結果、それぞれの本体メソッドMiに対応する、対応テスト実行メソッド群を生成し、表1000に記憶する。次に、図11の説明に移行する。
図11に示すように、情報処理装置100は、表1000により、テスト実行メソッドの全体集合Uを、本体PRG602内のそれぞれの本体メソッドMiに対する対応テスト実行メソッド群を含むテストケース集合UMiに分類したことになる。図11の例では、情報処理装置100は、全体集合Uを、本体メソッドM1に対する対応テスト実行メソッド群を含むテストケース集合UM1と、本体メソッドM2に対する対応テスト実行メソッド群を含むテストケース集合UM2とに分類したことになる。次に、図12~図15を用いて、情報処理装置100が、テスト関係グラフを生成する一例について説明する。
図12~図15は、テスト関係グラフを生成する一例を示す説明図である。図12において、情報処理装置100は、表1200に示す、テスト実行メソッドに対応する対応テスト対象メソッド群に基づいて、テスト実行メソッド間の包含関係を特定する。表1200は、表700、および、表900を纏めることにより得られる。テスト実行メソッドAが、テスト実行メソッドBを包含する(A⊇B)とは、テスト実行メソッドAに対応するテスト対象メソッド集合TAが、テスト実行メソッドBに対応するテスト対象メソッド集合TBを包含する(TA⊇TB)ことを意味する。
情報処理装置100は、例えば、いずれかのテスト実行メソッドが、当該テスト実行メソッドに対応する対応テスト対象メソッド群に包含される他の対応テスト対象メソッド群に対応する他のテスト実行メソッドを包含すると判定する。情報処理装置100は、例えば、判定した結果に基づいて、テスト実行メソッド間の包含関係を特定する。図12の例では、情報処理装置100は、テスト実行メソッドtestM1M2が、テスト実行メソッドtestM1_1、testM1_2、testM2_1を包含すると特定する。また、情報処理装置100は、テスト実行メソッドtestC1が、テスト実行メソッドtestM1M2を包含すると特定する。
情報処理装置100は、特定したテスト実行メソッド間の包含関係を表す包含関係グラフを生成する。包含関係グラフの一部は、例えば、グラフ1210である。グラフ1210に示すように、包含関係グラフは、木構造である。包含関係グラフは、テスト実行メソッドをノードとし、テスト実行メソッド間の包含関係をエッジとする。包含関係グラフは、テスト実行メソッドのノードを、当該テスト実行メソッドを包含する他のテスト実行メソッドのノードの下位に、エッジで接続するよう形成される。下位とは、木構造の葉ノード側である。次に、図13の説明に移行する。
図13において、情報処理装置100は、包含関係グラフに基づいて、テスト関係グラフ1300を生成する。テスト関係グラフ1300は、テスト実行メソッド間の包含関係を表すと共に、テスト実行メソッドとテスト対象メソッドとの対応関係を表す。テスト関係グラフ1300は、包含関係グラフを含み、テスト対象メソッドを葉ノードとする。次に、図14の説明に移行する。
図14に示すように、情報処理装置100は、テスト関係グラフ1300により、本体PRG602の各メソッドMiに対するテストケース集合UMiを判別可能にすることができる。情報処理装置100は、例えば、テスト関係グラフ1300により、本体PRG602のメソッドM1に対するテストケース集合UM1、および、本体PRG602のメソッドM3に対するテストケース集合UM3などを判別可能にすることができる。次に、図15の説明に移行する。
図15において、情報処理装置100は、テスト関係グラフ1300に、レイヤを設定する。情報処理装置100は、例えば、テスト対象メソッドの数に基づいて、複数のレイヤを設定する。そして、情報処理装置100は、例えば、それぞれのテスト実行メソッドを、それぞれのテスト実行メソッドに対応するテスト対象メソッドの数に基づいて、複数のレイヤのいずれかのレイヤに属させる。
情報処理装置100は、具体的には、全体のテスト対象メソッドの数を、レイヤの数に設定し、上下の階層構造を有する複数のレイヤを設定する。複数のレイヤは、最下層のレイヤから、レイヤ番号が順に割り振られる。最下層のレイヤは、例えば、レイヤ番号=1が割り振られる。レイヤは、テスト対象メソッドの数が、レイヤ番号と同一であるテスト実行メソッドが属することになる。
情報処理装置100は、具体的には、テスト実行メソッドを、当該テスト実行メソッドに対応するテスト対象メソッドの数と同一であるレイヤ番号を有するレイヤに属させることになる。このため、テスト実行メソッドの規模が小さいほど、テスト実行メソッドは、下層のレイヤに属することになる。
これにより、情報処理装置100は、それぞれ異なる種類の複数のバグを網羅的に修正するための指針となる、テスト関係グラフを生成することができる。情報処理装置100は、例えば、テスト実行メソッドの規模を考慮して、規模の比較的小さいテスト実行メソッドから先に利用することができ、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を、一つずつ修正可能にすることができる。次に、図16~図20を用いて、情報処理装置100が、修正パッチを生成する一例について説明する。
図16~図20は、修正パッチを生成する一例を示す説明図である。図16において、情報処理装置100は、テスト対象メソッドMiごとに、テスト対象メソッドMiに対応するテストケース集合UMi単位で、属するレイヤが下層であるテスト実行メソッドから順に利用して、APRを実施する。次に、図17~図20の説明に移行し、情報処理装置100が、APRを実施する具体例について説明する。
図17において、情報処理装置100は、レイヤ1以下に属するテスト実行メソッドに基づいて、テスト対象メソッドMiに対する修正パッチを生成する。情報処理装置100は、例えば、テスト対象メソッドC#m1に対するレイヤ1以下に属するテスト実行メソッド群{testM1_1、testM1_2、・・・}を利用して、SBFLを実施し、バグが存在すると判断し、修正パッチを生成する。
図17の例では、情報処理装置100は、テスト対象メソッドC#m2に対するレイヤ1以下に属するテスト実行メソッド群{testM2_1,・・・}を利用して、SBFLを実施し、バグが存在しないと判断したため、修正パッチを生成しない。情報処理装置100は、テスト対象メソッドC#m3に対するレイヤ1以下に属するテスト実行メソッド群が存在しないため、修正パッチを生成しない。情報処理装置100は、他のテスト対象メソッドに対しても同様の処理を実行する。次に、図18の説明に移行する。
図18において、情報処理装置100は、レイヤ2以下に属するテスト実行メソッド群に基づいて、テスト対象メソッドMiに対する生成済みの修正パッチの妥当性を検証する。また、情報処理装置100は、レイヤ2以下に属するテスト実行メソッド群に基づいて、修正パッチを未生成のテスト対象メソッドMiがあれば、テスト対象メソッドMiに対する修正パッチを生成する。次に、図19の説明に移行する。
図19の例では、情報処理装置100は、テスト対象メソッドC#m1に対するレイヤ2以下に属するテスト実行メソッド群{testM1M2、testM1_1、testM1_2、・・・}に基づいて、生成済みの修正パッチの妥当性を検証する。情報処理装置100は、生成済みの修正パッチが妥当でなければ、テスト対象メソッドC#m1に対するレイヤ1以下に属するテスト実行メソッド群{testM1_1、testM1_2、・・・}を利用して、修正パッチを生成し直す。
また、情報処理装置100は、同様に、テスト対象メソッドC#m2に対する生成済みの修正パッチの妥当性を検証する。また、情報処理装置100は、テスト対象メソッドC#m3に対するレイヤ2以下に属するテスト実行メソッド群{testM2M3}に基づいて、テスト対象メソッドC#m3に対する修正パッチを生成する。情報処理装置100は、他のテスト対象メソッドに対しても同様の処理を実行する。次に、図20の説明に移行する。
図20において、情報処理装置100は、図18および図19と同様に、レイヤNまで、1つずつ上位のレイヤに移行し、移行したレイヤ以下に属するテスト実行メソッド群に基づいて、修正パッチを検証し、または、修正パッチを生成することを繰り返す。そして、情報処理装置100は、レイヤNまで移行した後、生成済みの修正パッチを纏めることにより、本体PRG602に対する修正パッチを生成する。
これにより、情報処理装置100は、本体PRG602における、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を修正可能な、修正パッチを利用者が参照可能にすることができる。また、情報処理装置100は、本体PRG602における、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を、自動修正してもよい。このため、情報処理装置100は、開発者にかかる作業負担の低減化を図ることができる。
情報処理装置100は、妥当であると判断される修正パッチが生成されなかった場合、参考情報として、生成済みの修正パッチを出力してもよい。情報処理装置100は、1つの本体メソッドMiに、複数のバグの原因となる箇所が含まれる場合、レイヤ1に属するテスト実行メソッド群に基づいて、修正パッチを修正するにあたり、既存の複数バグに対する局所化技術を適用する場合があってもよい。
(情報処理装置100の動作の具体例)
次に、図21~図23を用いて、情報処理装置100の動作の具体例について説明する。
図21~図23は、情報処理装置100の動作の具体例を示す説明図である。情報処理装置100は、図21に示すテストPRG2100を取得する。テストPRG2100は、テストPRG601の具体例である。情報処理装置100は、図22に示す本体PRG2200を取得する。本体PRG2200は、本体PRG602の具体例である。
ここで、本体メソッドshowAddress、showPurchaseHistoryに、バグの原因となる箇所が存在する。このため、例えば、テスト実行メソッドtestShowAddress_1、testShowAddress_2などがテスト失敗となる状況である。また、例えば、テスト実行メソッドtestShowAddress_en、testShowPurchaseHistory_jp、testShowAllAccountInfo_jpなどがテスト失敗となる状況である。次に、図23の説明に移行する。
図23において、情報処理装置100が、図21に示すテストPRG2100と、図22に示す本体PRG2200とを、処理対象とした場合について説明する。
まず、情報処理装置100は、レイヤ1以下に属するテスト実行メソッド群を利用したAPRを実施する。図23に示すように、APRは、自動バグ局所化の後、修正パッチを生成して検証し、修正パッチが妥当でなければ、修正パッチを生成し直すという処理を繰り返し、修正パッチが妥当であれば、修正パッチを出力することである。
情報処理装置100は、例えば、テスト対象メソッドshowAddressに対するレイヤ1以下に属するテスト実行メソッド群{testShowAddress_1、testShowAddress_2}を読み出す。そして、情報処理装置100は、例えば、読み出したテスト実行メソッド群{testShowAddress_1、testShowAddress_2}を利用して、testShowAddressに対する修正パッチを生成する。
結果として、バグが解消され、テスト実行メソッド群{testShowAddress_1、testShowAddress_2}がテスト成功となるため、テスト対象メソッドshowAddressに対するAPRが完了する。
例えば、テスト対象メソッドsetLanguageに対するレイヤ1以下に属するテスト実行メソッド群{testSetLanguage}がテスト成功となる。このため、情報処理装置100は、例えば、テスト対象メソッドsetLanguageに対するAPRが不要と判断する。情報処理装置100は、例えば、テスト対象メソッドshowPurchaseHistoryに対するレイヤ1以下に属するテスト実行メソッド群が存在しないため、修正パッチを生成しない。
次に、情報処理装置100は、レイヤ2以下に属するテスト実行メソッド群を利用したAPRを実施する。
情報処理装置100は、例えば、テスト対象メソッド{showAddress、setLanguage}に対して、同時にAPRを実施する。情報処理装置100は、具体的には、生成済みパッチを適用する。情報処理装置100は、具体的には、テスト対象メソッド{showAddress、setLanguage}に対するレイヤ2以下に属するテスト実行メソッド群を読み出す。情報処理装置100は、具体的には、読み出したテスト実行メソッド群{testShowAddress_1、testShowAddress_2、testSetLanguage、testShowAddress_en}を実行する。
ここで、テスト対象メソッドshowAddressのバグの原因となる箇所が解消されている。このため、テスト実行メソッド群{testShowAddress_1、testShowAddress_2、testSetLanguage、testShowAddress_en}がテスト成功となる。従って、テスト対象メソッド{showAddress、setLanguage}に対するAPRが完了する。
情報処理装置100は、例えば、テスト対象メソッド{setLanguage、showPurchaseHistory}に対して、同時にAPRを実施する。情報処理装置100は、具体的には、テスト対象メソッド{setLanguage、showPurchaseHistory}に対するレイヤ2以下に属するテスト実行メソッド群を読み出す。情報処理装置100は、具体的には、読み出したテスト実行メソッド群{testSetLanguage、testShowPurchaseHistory_jp}を実行する。
ここで、テスト対象メソッドtestShowPurchaseHistory_jpは、バグの原因となる箇所が含まれたままである。このため、テスト実行メソッド群{testSetLanguage、testShowPurchaseHistory_jp}がテスト失敗となる。従って、情報処理装置100は、具体的には、テスト対象メソッド{setLanguage、showPurchaseHistory}のうち、いずれかのテスト対象メソッドに対する修正パッチを生成する。ここで、情報処理装置100は、より具体的には、テスト実行メソッド群{testSetLanguage、testShowPurchaseHistory_jp}がテスト成功となるよう、修正パッチを生成する。情報処理装置100は、より具体的には、テスト対象メソッドshowPurchaseHistoryに対する修正パッチを生成する。
情報処理装置100は、例えば、テスト対象メソッド{showAddress、showPurchaseHistory}に対して、同時にAPRを実施する。情報処理装置100は、具体的には、テスト対象メソッド{setAddress、showPurchaseHistory}に対するレイヤ2以下に属するテスト実行メソッド群が存在しないため、処理を行わない。
次に、情報処理装置100は、レイヤ3以下に属するテスト実行メソッド群を利用したAPRを実施する。
情報処理装置100は、例えば、テスト対象メソッド{showAddress、setLanguage、showPurchaseHistory}に対して、同時にAPRを実施する。情報処理装置100は、具体的には、テスト対象メソッド{showAddress、showPurchaseHistory}に対して、生成済みパッチを適用する。情報処理装置100は、具体的には、テスト対象メソッド{showAddress、setLanguage、showPurchaseHistory}に対するレイヤ3以下に属するテスト実行メソッド群=すべてのテスト実行メソッドを実行する。
ここで、テスト対象メソッドshowAddress、showPurchaseHistoryのバグの原因となる箇所が解消されているため、すべてのテスト実行メソッドがテスト成功となる。従って、テスト対象メソッド{showAddress、setLanguage、showPurchaseHistory}に対するAPRが完了する。情報処理装置100は、すべてのテスト実行メソッドがテスト成功となったため、本体PRG2200全体に対するAPRを完了する。
情報処理装置100は、生成済みの修正パッチを纏めて、本体PRG2200全体に対する修正パッチとして出力する。これにより、情報処理装置100は、本体PRG2200に含まれる、それぞれ種類の異なる複数のバグのそれぞれのバグの原因となる箇所を網羅的に修正可能にすることができる。
一方で、従来手法では、いずれかのテスト対象メソッドに対して修正パッチを生成した場合、すべてのテスト実行メソッドがテスト成功とならなければ、修正パッチを破棄することになり、APRが完了しないことになる。このため、従来手法では、本体PRG2200に、それぞれ種類の異なる複数のバグのそれぞれのバグの原因となる箇所が含まれると、APRを完了することが難しくなる。
例えば、従来手法で、テスト対象メソッドshowAddressに対する修正パッチが生成され、適用される場合が考えられる。この場合、テスト対象メソッドshowPurchaseHistoryには、バグの原因となる箇所が残っている。このため、テスト実行メソッドtestShowPurchaseHistory_jp、testShowAllAccountInfo_jpがテスト失敗となり、修正パッチが破棄され、APRが完了しない。これに対し、情報処理装置100は、APRを完了することができ、本体PRG2200全体に対する修正パッチを出力することができる。
また、それぞれのテスト対象メソッドに対して生成し得る修正パッチのすべての組み合わせで、バグが解消されるか否かを検証する手法が考えられるが、処理量の膨大化を招くことがある。これに対し、情報処理装置100は、本体PRG2200に含まれる、それぞれ種類の異なる複数のバグのそれぞれのバグの原因となる箇所を網羅的に修正する際にかかる処理量の低減化を図ることができる。
(全体処理手順)
次に、図24を用いて、情報処理装置100が実行する、全体処理手順の一例について説明する。全体処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図24は、全体処理手順の一例を示すフローチャートである。図24において、まず、情報処理装置100は、本体PRGと、テストPRGとを取得する(ステップS2401)。
次に、情報処理装置100は、本体PRGと、テストPRGとに基づいて、図25に後述する分類処理を実行する(ステップS2402)。そして、情報処理装置100は、本体PRGと、テストPRGとに基づいて、図26に後述する特定処理を実行する(ステップS2403)。
次に、情報処理装置100は、本体PRGと、テストPRGとに基づいて、図27に後述する生成処理を実行する(ステップS2404)。そして、情報処理装置100は、全体処理を終了する。これにより、情報処理装置100は、APRを実現し、本体PRGに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能にすることができる。このため、情報処理装置100は、開発者にかかる作業負担の低減化を図ることができる。
(分類処理手順)
次に、図25を用いて、情報処理装置100が実行する、分類処理手順の一例について説明する。分類処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図25は、分類処理手順の一例を示すフローチャートである。図25において、まず、情報処理装置100は、Test to Code Traceability技術を用いて、テストPRGに含まれるそれぞれのテスト実行メソッドに対応するテスト対象メソッドを特定する(ステップS2501)。
次に、情報処理装置100は、テスト実行メソッドと、本体PRGに含まれる本体メソッドとの呼出関係を特定する。そして、情報処理装置100は、特定した呼出関係に基づいて、テストPRGに含まれる複数のテスト実行メソッドのうち、対応するテスト対象メソッドが特定されなかったテスト実行メソッドに対応するテスト対象メソッドを特定する(ステップS2502)。
次に、情報処理装置100は、特定した結果に基づいて、テスト対象メソッドごとにテスト実行メソッドを分類し、それぞれのテスト対象メソッドに対応するテスト実行メソッド群で形成されるテストケース集合を生成する(ステップS2503)。
そして、情報処理装置100は、分類処理を終了する。これにより、情報処理装置100は、生成したテストケース集合の単位で、修正パッチの生成および検証を実施可能にすることができる。このため、情報処理装置100は、本体PRGに、それぞれ異なる種類の複数のバグの原因となる箇所が含まれていても、生成した修正パッチの妥当性を正しく検証可能にすることができる。
(特定処理手順)
次に、図26を用いて、情報処理装置100が実行する、特定処理手順の一例について説明する。特定処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図26は、特定処理手順の一例を示すフローチャートである。図26において、まず、情報処理装置100は、テスト対象メソッド同士の包含関係に基づいて、テスト実行メソッド同士の包含関係を特定する(ステップS2601)。
次に、情報処理装置100は、それぞれのテスト対象メソッドに対応するテストケース集合と、テスト実行メソッド同士の包含関係とに基づいて、テスト関係グラフを生成する(ステップS2602)。そして、情報処理装置100は、特定処理を終了する。これにより、情報処理装置100は、テスト実行メソッド同士の包含関係に基づいて、規模が比較的小さいテストを実行するテスト実行メソッドから先に利用して、修正パッチの生成および検証を実施可能にすることができる。このため、情報処理装置100は、本体PRGに、それぞれ異なる種類の複数のバグの原因となる箇所が含まれていても、生成した修正パッチの妥当性を正しく検証可能にすることができる。
(生成処理手順)
次に、図27を用いて、情報処理装置100が実行する、生成処理手順の一例について説明する。生成処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図27は、生成処理手順の一例を示すフローチャートである。図27において、まず、情報処理装置100は、i=1に設定する(ステップS2701)。
次に、情報処理装置100は、テスト関係グラフのレイヤiを選択する(ステップS2702)。そして、情報処理装置100は、本体PRGに含まれる、まだ処理対象として選択していないテスト対象メソッドMjを、処理対象に選択する(ステップS2703)。
次に、情報処理装置100は、本体PRGに対して、生成済みの修正パッチを適用する(ステップS2704)。そして、情報処理装置100は、選択したテスト対象メソッドMjに関する修正パッチを生成済みであるか否かを判定する(ステップS2705)。
ここで、生成済みではない場合(ステップS2705:No)、情報処理装置100は、ステップS2706の処理に移行する。一方で、生成済みである場合(ステップS2705:Yes)、情報処理装置100は、ステップS2707の処理に移行する。
ステップS2706では、情報処理装置100は、レイヤi以下にある1以上のテスト対象メソッドMjに対するテストを実行した結果に基づいて、テスト対象メソッドMjに関する修正パッチを生成する(ステップS2706)。そして、情報処理装置100は、ステップS2704の処理に戻る。
ステップS2707では、情報処理装置100は、レイヤi以下にある1以上のテスト対象メソッドMjに対するテストを実行した結果に基づいて、本体PRGに対して適用したそれぞれの修正パッチの妥当性を検証する(ステップS2707)。
次に、情報処理装置100は、本体PRGを、修正パッチを適用する前の状態に戻す(ステップS2708)。そして、情報処理装置100は、検証結果が成功であるか否かを判定する(ステップS2709)。
ここで、検証結果が成功ではない場合(ステップS2709:No)、情報処理装置100は、ステップS2710の処理に移行する。一方で、検証結果が成功である場合(ステップS2709:Yes)、情報処理装置100は、ステップS2711の処理に移行する。
ステップS2710では、情報処理装置100は、iを、最後に修正パッチを生成したレイヤの階層を示す番号に設定する(ステップS2710)。そして、情報処理装置100は、ステップS2702の処理に戻る。
ステップS2711では、情報処理装置100は、本体PRGの中に、まだ処理対象として選択していないテスト対象メソッドMjが残っているか否かを判定する(ステップS2711)。
ここで、テスト対象メソッドMjが残っている場合(ステップS2711:Yes)、情報処理装置100は、ステップS2703の処理に戻る。一方で、テスト対象メソッドMjが残っていない場合(ステップS2711:No)、情報処理装置100は、ステップS2712の処理に移行する。
ステップS2712では、情報処理装置100は、iをインクリメントする(ステップS2712)。そして、情報処理装置100は、iが、最上位レイヤの階層を示す番号を超えたか否かを判定する(ステップS2713)。
ここで、iが、最上位レイヤの階層を示す番号を超えていない場合(ステップS2713:No)、情報処理装置100は、ステップS2702の処理に移行する。一方で、iが、最上位レイヤの階層を示す番号を超えている場合(ステップS2713:Yes)、情報処理装置100は、ステップS2714の処理に移行する。
ステップS2714では、情報処理装置100は、生成した修正パッチ群を出力する(ステップS2714)。そして、情報処理装置100は、生成処理を終了する。これにより、情報処理装置100は、APRを実現し、本体PRGに含まれる、それぞれ異なる種類のバグの原因となる複数の箇所を、網羅的に修正可能な修正パッチ群を出力することができる。このため、情報処理装置100は、開発者にかかる作業負担の低減化を図ることができる。
以上説明したように、情報処理装置100によれば、テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得することができる。情報処理装置100によれば、テスト対象コードと、取得したテスト実行コードのそれぞれとに基づいて、取得したテスト対象コードに含まれる処理コードと、当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定することができる。情報処理装置100によれば、特定した対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行されるテスト対象コードに含まれる処理コード群同士の包含関係を特定することができる。情報処理装置100によれば、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、修正処理を実施することができる。これにより、情報処理装置100は、テスト対象コードに含まれる、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を修正可能にすることができる。
情報処理装置100によれば、テスト実行コードに対応する名称と、テスト対象コードに含まれる処理コードに対応する名称との類似度を算出することができる。情報処理装置100によれば、算出した類似度に基づいて、取得したテスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定することができる。これにより、情報処理装置100は、処理コードと、テスト実行コードとの対応関係を特定する精度の向上を図ることができる。
情報処理装置100によれば、テスト実行コードと、テスト対象コードに含まれる処理コードとの呼出関係を特定することができる。情報処理装置100によれば、特定した呼出関係に基づいて、取得したテスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定することができる。これにより、情報処理装置100は、処理コードと、テスト実行コードとの対応関係を特定することができない状況を回避することができる。
情報処理装置100によれば、テストを実行する対象とする処理コードの数が相対的に少ないテスト実行コードを、テストを実行する対象とする処理コードの数が相対的に多いテスト実行コードよりも先に実行するよう、修正処理を実施することができる。これにより、情報処理装置100は、テスト実行コードの規模の大きさを考慮して、修正処理を実施可能にすることができ、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を、順に修正可能にすることができる。
情報処理装置100によれば、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを実行し、テスト対象コードを修正した後、一方の処理コード群に対するテストを実行するテスト実行コードを実行することができる。これにより、情報処理装置100は、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を、順に修正することができる。
情報処理装置100によれば、テスト対象コードを修正することができる。これにより、情報処理装置100は、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を修正済みのテスト対象コードを、利用者が利用可能にすることができる。
情報処理装置100によれば、テスト対象コードに対する修正内容を規定した情報を生成することができる。これにより、情報処理装置100は、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を修正可能にする情報を、利用者が利用可能にすることができる。
情報処理装置100によれば、メソッドであるテスト実行コードを処理対象とすることができる。これにより、情報処理装置100は、テスト実行コードがメソッド単位である場合に対応し、テスト対象コードに含まれる、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を修正可能にすることができる。
情報処理装置100によれば、メソッドである処理コードを処理対象とすることができる。これにより、情報処理装置100は、処理コードがメソッド単位である場合に対応し、テスト対象コードに含まれる、それぞれ異なる種類の複数のバグのそれぞれのバグの原因となる箇所を修正可能にすることができる。
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをPCやワークステーションなどのコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。記録媒体は、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、MO(Magneto Optical disc)、DVD(Digital Versatile Disc)などである。また、本実施の形態で説明した情報処理プログラムは、インターネットなどのネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得し、
前記テスト対象コードと、取得した前記テスト実行コードのそれぞれとに基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定し、
特定した前記対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される前記テスト対象コードに含まれる処理コード群同士の包含関係を特定し、
特定した前記包含関係に基づいて、前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、前記一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
(付記2)前記テスト実行コードに対応する名称と、前記テスト対象コードに含まれる処理コードに対応する名称との類似度を算出する、処理を前記コンピュータに実行させ、
前記対応関係を特定する処理は、
算出した前記類似度に基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定する、ことを特徴とする付記1に記載の情報処理プログラム。
(付記3)前記テスト実行コードと、前記テスト対象コードに含まれる処理コードとの呼出関係を特定する、処理を前記コンピュータに実行させ、
前記対応関係を特定する処理は、
特定した前記呼出関係に基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定する、ことを特徴とする付記1または2に記載の情報処理プログラム。
(付記4)前記実施する処理は、
テストを実行する対象とする処理コードの数が相対的に少ないテスト実行コードを、テストを実行する対象とする処理コードの数が相対的に多いテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、ことを特徴とする付記1~3のいずれか一つに記載の情報処理プログラム。
(付記5)前記実施する処理は、
前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを実行し、前記テスト対象コードを修正した後、前記一方の処理コード群に対するテストを実行するテスト実行コードを実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、ことを特徴とする付記1~4のいずれか一つに記載の情報処理プログラム。
(付記6)前記修正処理は、前記テスト対象コードを修正する、ことを特徴とする付記1~5のいずれか一つに記載の情報処理プログラム。
(付記7)前記修正処理は、前記テスト対象コードに対する修正内容を規定した情報を生成する、ことを特徴とする付記1~5のいずれか一つに記載の情報処理プログラム。
(付記8)前記テスト実行コードは、メソッドである、ことを特徴とする付記1~7のいずれか一つに記載の情報処理プログラム。
(付記9)前記処理コードは、メソッドである、ことを特徴とする付記1~8のいずれか一つに記載の情報処理プログラム。
(付記10)テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得し、
前記テスト対象コードと、取得した前記テスト実行コードのそれぞれとに基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定し、
特定した前記対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される前記テスト対象コードに含まれる処理コード群同士の包含関係を特定し、
特定した前記包含関係に基づいて、前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、前記一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、
処理をコンピュータが実行することを特徴とする情報処理方法。
(付記11)テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得し、
前記テスト対象コードと、取得した前記テスト実行コードのそれぞれとに基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定し、
特定した前記対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される前記テスト対象コードに含まれる処理コード群同士の包含関係を特定し、
特定した前記包含関係に基づいて、前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、前記一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、
制御部を有することを特徴とする情報処理装置。
100 情報処理装置
101 テスト対象コード
102 テスト実行コード
200 バグ修正システム
201 クライアント装置
210 ネットワーク
300 バス
301 CPU
302 メモリ
303 ネットワークI/F
304 記録媒体I/F
305 記録媒体
400 記憶部
401 取得部
402 第1特定部
403 第2特定部
404 修正部
405 出力部
501,602,2200 本体PRG
502,601,2100 テストPRG
510 分類部
511 一覧
520 特定部
521,1300 テスト関係グラフ
530 生成部
540 単一バグ局所化処理
541 単一バグ局所化結果
550 単一バグ修正パッチ生成処理
551,561 修正パッチ
560 単一バグ修正パッチ検証処理
700,900,1000,1200 表
1210 グラフ

Claims (9)

  1. テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得し、
    前記テスト対象コードと、取得した前記テスト実行コードのそれぞれとに基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定し、
    特定した前記対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される前記テスト対象コードに含まれる処理コード群同士の包含関係を特定し、
    特定した前記包含関係に基づいて、前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、前記一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、
    処理をコンピュータに実行させることを特徴とする情報処理プログラム。
  2. 前記テスト実行コードに対応する名称と、前記テスト対象コードに含まれる処理コードに対応する名称との類似度を算出する、処理を前記コンピュータに実行させ、
    前記対応関係を特定する処理は、
    算出した前記類似度に基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定する、ことを特徴とする請求項1に記載の情報処理プログラム。
  3. 前記テスト実行コードと、前記テスト対象コードに含まれる処理コードとの呼出関係を特定する、処理を前記コンピュータに実行させ、
    前記対応関係を特定する処理は、
    特定した前記呼出関係に基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定する、ことを特徴とする請求項1または2に記載の情報処理プログラム。
  4. 前記実施する処理は、
    テストを実行する対象とする処理コードの数が相対的に少ないテスト実行コードを、テストを実行する対象とする処理コードの数が相対的に多いテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、ことを特徴とする請求項1~3のいずれか一つに記載の情報処理プログラム。
  5. 前記実施する処理は、
    前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを実行し、前記テスト対象コードを修正した後、前記一方の処理コード群に対するテストを実行するテスト実行コードを実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、ことを特徴とする請求項1~4のいずれか一つに記載の情報処理プログラム。
  6. 前記修正処理は、前記テスト対象コードを修正する、ことを特徴とする請求項1~5のいずれか一つに記載の情報処理プログラム。
  7. 前記修正処理は、前記テスト対象コードに対する修正内容を規定した情報を生成する、ことを特徴とする請求項1~5のいずれか一つに記載の情報処理プログラム。
  8. テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得し、
    前記テスト対象コードと、取得した前記テスト実行コードのそれぞれとに基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定し、
    特定した前記対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される前記テスト対象コードに含まれる処理コード群同士の包含関係を特定し、
    特定した前記包含関係に基づいて、前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、前記一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、
    処理をコンピュータが実行することを特徴とする情報処理方法。
  9. テスト対象コードに含まれる、1以上の処理コードを含む処理コード群に対するテストを実行するテスト実行コードを複数取得し、
    前記テスト対象コードと、取得した前記テスト実行コードのそれぞれとに基づいて、前記テスト対象コードに含まれる処理コードと、少なくとも当該処理コードに対するテストを実行するテスト実行コードとの対応関係を特定し、
    特定した前記対応関係に基づいて、それぞれ異なるテスト実行コードによりテストが実行される前記テスト対象コードに含まれる処理コード群同士の包含関係を特定し、
    特定した前記包含関係に基づいて、前記包含関係を有する処理コード群の組み合わせのうち、一方の処理コード群に包含される他方の処理コード群に対するテストを実行するテスト実行コードを、前記一方の処理コード群に対するテストを実行するテスト実行コードよりも先に実行するよう、取得した前記テスト実行コードのそれぞれを実行していくことにより、前記テスト対象コードに対する修正処理を実施する、
    制御部を有することを特徴とする情報処理装置。
JP2020125270A 2020-07-22 2020-07-22 情報処理プログラム、情報処理方法、および情報処理装置 Active JP7447723B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2020125270A JP7447723B2 (ja) 2020-07-22 2020-07-22 情報処理プログラム、情報処理方法、および情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020125270A JP7447723B2 (ja) 2020-07-22 2020-07-22 情報処理プログラム、情報処理方法、および情報処理装置

Publications (2)

Publication Number Publication Date
JP2022021600A JP2022021600A (ja) 2022-02-03
JP7447723B2 true JP7447723B2 (ja) 2024-03-12

Family

ID=80220544

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020125270A Active JP7447723B2 (ja) 2020-07-22 2020-07-22 情報処理プログラム、情報処理方法、および情報処理装置

Country Status (1)

Country Link
JP (1) JP7447723B2 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015001825A (ja) 2013-06-14 2015-01-05 富士電機株式会社 テストスケジュール決定装置、プログラム
US20180165182A1 (en) 2016-12-09 2018-06-14 Fujitsu Limited Automated software program repair
US20180293058A1 (en) 2017-04-08 2018-10-11 Oracle International Corporation Flow-based scoping

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015001825A (ja) 2013-06-14 2015-01-05 富士電機株式会社 テストスケジュール決定装置、プログラム
US20180165182A1 (en) 2016-12-09 2018-06-14 Fujitsu Limited Automated software program repair
US20180293058A1 (en) 2017-04-08 2018-10-11 Oracle International Corporation Flow-based scoping

Also Published As

Publication number Publication date
JP2022021600A (ja) 2022-02-03

Similar Documents

Publication Publication Date Title
US10872034B2 (en) Method, device and computer program product for executing test cases
US10503478B2 (en) System and method for guiding a user in a software development lifecycle using machine learning
US9959199B2 (en) Diagnosis of test failures in software programs
Miller et al. The relevance of classic fuzz testing: Have we solved this one?
US8209658B2 (en) Method of creating signatures for classifying program failures
CN110109681B (zh) 不同平台间代码的转换方法及系统
US10049031B2 (en) Correlation of violating change sets in regression testing of computer software
US9135149B2 (en) Test case arrangment and execution
CN108923997B (zh) 一种基于python的云服务节点自动测试方法及装置
US9921947B2 (en) Test selection method and test selection apparatus
US11080179B2 (en) Device, system, and method for automatically detecting and repairing a bug in a computer program using a genetic algorithm
KR101860674B1 (ko) 크래시 리포트 그룹핑 방법, 서버 및 컴퓨터 프로그램
US8327189B1 (en) Diagnosing an incident on a computer system using a diagnostics analyzer database
JP2017174418A (ja) モデルチェックのためのデータ構造抽象化
US11194703B2 (en) System testing infrastructure for analyzing soft failures in active environment
CN110955409B (zh) 在云平台上创建资源的方法和装置
JP7447723B2 (ja) 情報処理プログラム、情報処理方法、および情報処理装置
JP7384054B2 (ja) 自動化されたソフトウェアプログラム修復
JP2020129372A (ja) 自動化されたソフトウェアプログラム修復
CN114676126B (zh) 基于数据库的数据校验方法、装置、设备及存储介质
KR102256894B1 (ko) 크래시 리포트 그룹핑 방법, 서버 및 컴퓨터 프로그램
CN115373885A (zh) 一种故障修复方法、装置、存储介质及电子设备
US11775643B2 (en) Method and system for labeling object and generating security policy of operating system
CN115186001A (zh) 一种补丁处理方法和装置
JP2023003882A (ja) 不具合箇所特定支援装置および不具合箇所特定支援方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230407

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: 20240130

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240212

R150 Certificate of patent or registration of utility model

Ref document number: 7447723

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150