(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-27
(45)【発行日】2024-10-07
(54)【発明の名称】不具合箇所特定支援装置および不具合箇所特定支援方法
(51)【国際特許分類】
G06F 11/07 20060101AFI20240930BHJP
G06F 11/36 20060101ALI20240930BHJP
【FI】
G06F11/07 190
G06F11/36 188
(21)【出願番号】P 2021105236
(22)【出願日】2021-06-24
【審査請求日】2024-02-01
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜弁理士法人
(72)【発明者】
【氏名】小関 万寿実
(72)【発明者】
【氏名】安田 和矢
(72)【発明者】
【氏名】秦野 康生
(72)【発明者】
【氏名】伊藤 信治
(72)【発明者】
【氏名】中村 知倫
(72)【発明者】
【氏名】原田 真雄
【審査官】松平 英
(56)【参考文献】
【文献】特開2019-21303(JP,A)
【文献】特開2021-5171(JP,A)
【文献】米国特許出願公開第2021/75812(US,A1)
【文献】徳本 晋 他,命令削除ミューテーションに基づく欠陥局所化の産業用ソフトウェアにおける評価,情報処理学会 論文誌(ジャーナル),日本,情報処理学会,2020年10月,Vol.61 No.10 ,pp.1617-1628
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/38
8/60-8/77
9/44-9/445
9/451
11/07
11/28-11/36
(57)【特許請求の範囲】
【請求項1】
ソースファイル内の各命令文間の関連性を示すソースファイル内関連性情報を取得する、ソースファイル内関連性取得部と、
テストケースの実行結果を保持するテスト実行情報と、前記テストケース実行時の前記ソースファイル内の各命令文の実行回数に基づき算出される疑惑値を保持するテスト結果起点疑惑値情報と、前記ソースファイル内関連性情報と、を用いて疑惑値を算出し、再計算疑惑値情報を生成する疑惑値再付与部と、
を備えることを特徴とする、
不具合箇所特定支援装置。
【請求項2】
前記ソースファイル内関連性取得部は、
前記ソースファイルに含まれる、ある1つの命令文に対して依存関係がある命令文および前記ある1つの命令文と類似性がある命令文の少なくともひとつを探索し抽出することで、前記ソースファイル内関連性情報を生成することを特徴とする、
請求項1に記載の不具合箇所特定支援装置。
【請求項3】
前記テスト実行情報は、テスト実行時の例外発生に関する命令文を特定する例外発生個所情報を含み、
前記疑惑値再付与部は、
前記例外発生に関する命令文と関連のある命令文を、前記ソースファイル内関連性情報を用いて抽出し、前記テスト結果起点疑惑値情報に記載の疑惑値よりも高い疑惑値を付与して再計算疑惑値情報を生成することを特徴とする、
請求項1に記載の不具合箇所特定支援装置。
【請求項4】
前記テスト実行情報は、テスト実行時の例外発生に関する命令文を特定する例外発生箇所情報を含み、
前記ソースファイルと、前記テスト実行情報と、前記テスト結果起点疑惑値情報を入力として前記ソースファイルの命令文の不具合可能性を判定し、不具合可能性情報を生成する不具合可能性判定部を備えることを特徴とする、
請求項1に記載の不具合箇所特定支援装置。
【請求項5】
前記不具合可能性判定部は、
前記不具合可能性情報において、前記テスト実行時の例外発生に関する命令文に対して、不具合可能性が高いことを示す情報を付与することを特徴とする、
請求項4に記載の不具合箇所特定支援装置。
【請求項6】
前記不具合可能性判定部は、
前記不具合可能性情報において、前記テスト結果起点疑惑値情報に含まれる最も疑惑値の高い命令文に対して、不具合可能性が高いことを示す情報を付与することを特徴とする、
請求項4に記載の不具合箇所特定支援装置。
【請求項7】
前記不具合可能性判定部は、
前記不具合可能性情報において、不具合に関係しない特定種類の命令文に対して、不具合可能性が低いことを示す情報を付与することを特徴とする、
請求項4に記載の不具合箇所特定支援装置。
【請求項8】
前記疑惑値再付与部は、
前記不具合可能性情報において不具合可能性が高いことを示す情報が付与された命令文のうち、前記テスト実行時の例外発生に関する命令文に対して、前記テスト結果起点疑惑値情報に記載の疑惑値よりも高い第1の疑惑値を付与して再計算疑惑値情報を生成することを特徴とする、
請求項4に記載の不具合箇所特定支援装置。
【請求項9】
前記疑惑値再付与部は、
前記不具合可能性情報において不具合可能性が高いことを示す情報が付与された命令文のうち、前記テスト実行時の例外発生に関する命令文以外の命令文に対して、前記テスト結果起点疑惑値情報に記載の疑惑値である第2の疑惑値を付与して再計算疑惑値情報を生成することを特徴とする、
請求項4に記載の不具合箇所特定支援装置。
【請求項10】
前記疑惑値再付与部は、
前記テスト実行時の例外発生に関する命令文と関連のある命令文を、前記ソースファイル内関連性情報を用いて抽出し、前記テスト結果起点疑惑値情報に記載の疑惑値よりも高い第3の疑惑値を付与して再計算疑惑値情報を生成することを特徴とする、
請求項4に記載の不具合箇所特定支援装置。
【請求項11】
前記疑惑値再付与部は、
前記不具合可能性情報にて不具合可能性が低いことを示す情報が付与された命令文に対して、前記テスト結果起点疑惑値情報に記載の疑惑値よりも低い第4の疑惑値を付与して再計算疑惑値情報を生成することを特徴とする、
請求項4に記載の不具合箇所特定支援装置。
【請求項12】
情報処理装置を用いてソースファイル内の不具合箇所を特定する不具合箇所特定支援方法であって、
ソースファイル内の各命令文間の関連性情報を含むソースファイル内関連性情報と、テストファイルを実行した際の例外発生箇所情報を含むテスト実行情報と、ソースファイル内の命令文にSBFLの手法で生成された疑惑値を付与したテスト結果起点疑惑値情報を用い、
前記ソースファイル内関連性情報を用いて、前記例外発生箇所情報に対応する命令文と関連性の高い命令文を抽出し、抽出した命令文に前記テスト結果起点疑惑値情報が付与した疑惑値より高い疑惑値を与える、
不具合箇所特定支援方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースファイルにおける不具合箇所の特定を支援する技術に関する。
【背景技術】
【0002】
ソフトウェア開発において、プログラムに故障(開発者の意図と異なる動作)が発生した場合、当該故障の原因を特定し、当該故障が発生しないようにプログラムを修正する。プログラムの故障を引き起こす原因を不具合(欠陥、フォールト、バグ)と呼ぶ。プログラムのソースファイル中から不具合を含む箇所を特定し、当該箇所を書き換えることで不具合を取り除く作業をデバッグと呼ぶ。ソフトウェア開発工程の中でもデバッグ作業には多くの時間を要することから、開発工程の短縮に向けてデバッグ支援技術が開発されている。不具合原因箇所抽出の自動化技術はその1つである。
【0003】
不具合原因箇所抽出の自動化技術の中で近年最も盛んに研究されている手法が、テストケースによるソースファイル(ソースコード)内の実行経路の情報を用いて自動で不具合原因箇所抽出を行うSpectrum-Based Fault Localization(SBFL)である。SBFLは、ソースファイル内の各行のうち、失敗テストケースで実行された行は不具合原因箇所である可能性が高く、成功テストケースで実行された行は不具合原因箇所である可能性が低い、というアイデアに基づいて不具合原因箇所抽出を行う手法である。SBFLでは、各行が失敗テストケース、及び成功テストケースで何回実行されたかという情報を用いて、その行が不具合原因箇所である可能性の高さを示す値(以下、「疑惑値」という。)が計算される。
【0004】
SBFLでは、テストケース実行時の実行経路(実行した行)と、テストの成功/失敗に関する情報のみから疑惑値を付与している。このことからソースファイル内の複数の命令文において同じ値の疑惑値の行が多く存在し、その中で順位付けをすることができず、不具合箇所の絞込みが困難になる問題がある。
【0005】
図1では、SBFLを用いた結果で、同値疑惑値が多数発生する例を示している。具体的には、
図1のソースコードでは、○印がついているL48の命令文が不具合箇所であるが、L45~L49まで同じ値の疑惑値0.6が付与されており、この場合、L45~L49までに順位の差はなく、不具合箇所の絞込みが困難となる。
【0006】
SBFLの問題に対し、特許文献1ではSBFLでの同値疑惑値多数発生時に不具合箇所の絞込みを支援する技術が開示されている。具体的には、コード規約違反回数に基づいて違反回数が多いソースファイルに対して、SBFLで算出された疑惑値を高く補正する。
【先行技術文献】
【特許文献】
【0007】
【発明の概要】
【発明が解決しようとする課題】
【0008】
SBFLの他の問題は、不具合箇所の中でもテストが成功する割合が高い箇所について、不具合箇所以外の箇所よりも疑惑値が小さくなり、不具合箇所の取りこぼしが発生することである。
【0009】
図2では、SBFLを用いた結果で、不具合箇所の疑惑値が不具合でない箇所の疑惑値よりも小さな例を示している。具体的には、
図2のソースコードでは、○印がついているL83およびL86の命令文が不具合箇所であるが、L86の命令文に関しては非不具合箇所であるL81、L82の疑惑値0.7よりも小さい疑惑値0.3が付与されており、L86の順位がL81、L82の順位よりも低くなる。
【0010】
特許文献1に記載された技術では、SBFLで算出された同一の疑惑値に対して、コード規約違反回数という追加情報により優劣をつけているが、元々疑惑値が低い不具合箇所に対しては高い疑惑値を付与することができず、該当の不具合箇所を上位で抽出することができない。
【0011】
本発明は、不具合箇所に適切な疑惑値を付与することにより、開発者の不具合箇所特定作業を支援し、デバッグ作業を効率化することを主な課題とする。
【課題を解決するための手段】
【0012】
本発明の好ましい一側面は、ソースファイル内の各命令文間の関連性を示すソースファイル内関連性情報を取得する、ソースファイル内関連性取得部と、テストケースの実行結果を保持するテスト実行情報と、前記テストケース実行時の前記ソースファイル内の各命令文の実行回数に基づき算出される疑惑値を保持するテスト結果起点疑惑値情報と、前記ソースファイル内関連性情報と、を用いて疑惑値を算出し、再計算疑惑値情報を生成する疑惑値再付与部と、を備えることを特徴とする、不具合箇所特定支援装置である。
【0013】
本発明の好ましい他の一側面は、情報処理装置を用いてソースファイル内の不具合箇所を特定する不具合箇所特定支援方法であって、ソースファイル内の各命令文間の関連性情報を含むソースファイル内関連性情報と、テストファイルを実行した際の例外発生箇所情報を含むテスト実行情報と、ソースファイル内の命令文にSBFLの手法で生成された疑惑値を付与したテスト結果起点疑惑値情報を用い、前記ソースファイル内関連性情報を用いて、前記例外発生箇所情報に対応する命令文と関連性の高い命令文を抽出し、抽出した命令文に前記テスト結果起点疑惑値情報が付与した疑惑値より高い疑惑値を与える、不具合箇所特定支援方法である。
【発明の効果】
【0014】
本発明によれば、不具合箇所に適切な疑惑値を付与することにより、開発者の不具合箇所特定作業を支援し、デバッグ作業を効率化することができる。
【図面の簡単な説明】
【0015】
【
図1】複数の命令文に同値疑惑値が付与された例を示す表図である。
【
図2】不具合箇所疑惑値が非不具合箇所疑惑値よりも小さく付与された例を示す表図である。
【
図3】本発明の実施形態における不具合箇所特定支援装置のハードウェア構成例を示すブロック図である。
【
図4】本発明の実施形態における不具合箇所特定支援装置の機能構成例を示すブロック図である。
【
図5】本発明の実施形態におけるソースファイル群の例を示すリスト図である。
【
図6】本発明の実施形態におけるテストファイル群の例を示すリスト図である。
【
図7】本発明の実施形態におけるテスト実行情報の例を示す表図である。
【
図8】本発明の実施形態におけるテスト結果起点疑惑値情報の例を示す表図である。
【
図9】本発明の実施形態におけるソースファイル内関連性情報の例を示す表図である。
【
図10】本発明の実施形態における不具合可能性情報の例を示す表図である。
【
図11】本発明の実施形態における再計算疑惑値情報の例を示す表図である。
【
図12】本発明の実施形態における不具合箇所特定支援処理のフローチャート図である。
【
図13】本発明の実施形態における疑惑値付与処理のフローチャート図である。
【発明を実施するための形態】
【0016】
以下、図面を参照しつつ、実施形態について説明する。以下の説明において、同一の又は類似する構成について同一の符号を付して、重複した説明を省略することがある。
【0017】
本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0018】
同一あるいは同様な機能を有する要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、複数の要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【0019】
本明細書等における「第1」、「第2」、「第3」などの表記は、構成要素を識別するために付するものであり、必ずしも、数、順序、もしくはその内容を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【0020】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【0021】
本明細書で引用した刊行物、特許および特許出願は、そのまま本明細書の説明の一部を構成する。
【0022】
本明細書において単数形で表される構成要素は、特段文脈で明らかに示されない限り、複数形を含むものとする。
【0023】
以下で説明される実施例では、例えば、SBFLで取りこぼす不具合箇所に対して、適切に疑惑値を付与することによって、開発者のデバッグ作業を効率化することを主な課題とする。このため、一つの実施例の不具合箇所特定支援装置は、ソースファイルを用いてソースファイル内関連性情報を抽出するソースファイル内関連性取得部と、テスト実行情報と、テスト結果起点疑惑値情報と、前記ソースファイル内関連性情報と、を用いて疑惑値を算出し付与する疑惑値再付与部と、を備える。さらに詳細な手段は後述する。
【0024】
図3は、不具合箇所特定支援装置100のハードウェア構成例である。不具合箇所特定支援装置100は、プロセッサ110、主記憶装置120、補助記憶装置130、入力装置140、出力装置150、及び通信装置160を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。
【0025】
プロセッサ110は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)を用いて構成されている。プロセッサ110が、主記憶装置120に格納されているプログラムを読み出して実行することにより、不具合箇所特定支援装置100の様々な機能が実現される。
【0026】
主記憶装置120は、プログラムやデータを記憶する装置であり、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)、不揮発性半導体メモリ(NVRAM(Non Volatile RAM))等である。
【0027】
補助記憶装置130は、例えば、ハードディスクドライブ、SSD(SolID State Drive)、光学式記憶装置(CD(Compact Disc)、DVD(Digital Versatile Disc)等)、ストレージシステム、ICカード、SDメモリカードや光学式記録媒体等の記録媒体の読取/書込装置、クラウドサーバの記憶領域等である。補助記憶装置130に格納されているプログラムやデータは主記憶装置120に随時読み込まれる。
【0028】
入力装置140は、例えば、キーボード、マウス、タッチパネル、カードリーダ、音声入力装置等である。出力装置150は、ユーザに処理経過や処理結果等の各種情報を提供するユーザインタフェースであり、例えば、画面表示装置(液晶モニタ、LCD(Liquid Crystal Display)、グラフィックカード等)、音声出力装置(スピーカ等)、印字装置等である。尚、例えば、不具合箇所特定支援装置100が通信装置160を介して他の装置との間で情報の入力や出力を行う構成としてもよい。
【0029】
通信装置160は、LANやインターネット等の通信手段を介した他の装置との間の通信を実現する有線方式又は無線方式の通信インタフェースであり、例えば、NIC(Network Interface Card)、無線通信モジュール、USB(Universal Serial Bus)モジュール、シリアル通信モジュール等である。
【0030】
不具合箇所特定支援装置100のハードウェア構成は、単体のコンピュータで構成してもよいし、あるいは、任意の部分が、ネットワークで接続された他のコンピュータで構成されてもよい。
【0031】
ここで、本実施形態で使用する用語を定義する。「ソースファイル」は、ソフトウェア開発の対象となるプログラムであり、開発者の意図と異なる動作を引き起こす不具合を含んでいることもある。「命令文」は、ソースファイルを構成するプログラムステートメントである。「テストファイル」は、ソースコードの動作を検査するプログラムを格納したファイルである。「テストメソッド」は、テストコードをまとまった処理の単位で分割したものであり、1つのメソッドの動作を検査するプログラムである。テストコードは、1以上のテストメソッドを含む。「メソッド」は、サブルーチンであり、引数というデータをインプットし、戻り値というアウトプットを得る。
【0032】
図4は不具合箇所特定支援装置の機能構成例を示す図である。不具合箇所特定支援装置100は、ソースファイル内関連性取得部210、不具合可能性判定部220、疑惑値再付与部230の各機能部を備える。これら機能部により実行される処理については、
図12のフローチャートで後述する。
【0033】
ソースファイル内関連性取得部210、不具合可能性判定部220、疑惑値再付与部230は、
図3のプロセッサ110が主記憶装置120に格納された不具合箇所特定支援プログラムを実行することにより構成される。
【0034】
情報記憶部240は、主に、
図3の補助記憶装置130により構成される。情報記憶部240は、ソースファイル群241と、テストファイル群242と、テスト実行情報243と、テスト結果起点疑惑値情報244と、ソースファイル内関連性情報245と、不具合可能性情報246と、再計算疑惑値情報247と、を記憶する。これら情報記憶部290内の各種情報の詳細については、
図5~
図11にて後述する。
【0035】
図5は、ソースファイル群241の例を示す図である。ソースファイル群241は、1以上のソースフォルダ510を含む。ソースフォルダ510は、フォルダ名がcoreである。ソースフォルダ510は、1以上のソースファイル520を含む。ソースファイル520は、ファイル名CreateCoreである。ソースファイル520は、1以上の行のソースコードを含み、
図5では17行の例を示す。ソースファイル520は、1行目~17行目にcreateという名前のメソッドを含む。
【0036】
なお、ソースフォルダは、1以上の他のソースフォルダを含んでもよい。また、ソースコードは、Java(登録商標)やC++等のプログラミング言語でもよく、その他の任意のプログラミング言語でもよい。
【0037】
ソースファイル520に含まれる不具合について、5行目および7行目について、メソッド“createData”を呼び出しているが、本来はメソッド“createDate”を呼び出すべき箇所とすると、5行目および7行目の命令文は不具合箇所と言える。
【0038】
図6は、テストファイル群242の例を示す図である。テストファイル群242は、1以上のテストフォルダ610を含む。テストフォルダ610は、フォルダ名がcoretestである。テストフォルダ610は、1以上のテストファイル620を含む。テストファイル620は、ファイル名がCreateCoreTestである。
【0039】
テストファイル620は、1以上の行のテストコードを含み、
図6では23行の例を示す。テストファイル620は、1行目~5行目にtestCreate1という名前のテストメソッドを含み、7行目~11行目にtestCreate2という名前のテストメソッドを含み、13行目~17行目にtestCreate3という名前のテストメソッドを含み、19行目~23行目にtestCreate4という名前のテストメソッドを含む。テストメソッドtestCreate1と、testCreate2と、testCreate3と、testCreate4は全て、
図5のソースファイル520に含まれるメソッドcreateの対応テストメソッドである。
【0040】
図7は、SBFLの技法で用いるテスト実行情報243の例を示す図である。テスト実行情報243は、テストファイル620を実行した結果のログから生成でき、1以上のエントリを含む。テスト実行情報243のエントリは、テストファイルを実行した際の成功または失敗の結果と、失敗の場合の例外発生箇所情報と、のカラムを含む。例外発生箇所情報は、例えばテスト実行時のスタックトレースとして出力された情報が当てはまる。スタックトレースは、例外発生時にどの処理がどの順番で呼ばれたかを示す。
【0041】
図7の例では、
図6のテストファイル620を実行した際のテスト実行情報を示している。
図7の例では、各カラムは、テストメソッド名、実行結果、失敗の場合の例外種類、失敗の場合の例外発生個所情報を含む。例外発生個所情報は、フォルダ名、ファイル名、行番号を含む。
【0042】
図7では、テストメソッド“testCreate2”が失敗しており、AssertionErrorを発生していることを示している。また。AssertionError発生時に、
図5に示すソースファイル“CreateCore”の5行目の命令文が処理されていることを示す。また、当該ソースファイル“CreateCore”の5行目の命令文が含まれるメソッド“create”が、
図6のテストファイル“CreateCoreTest”の9行目の命令文で呼び出されていることを示す。
【0043】
図8は、テスト結果起点疑惑値情報244の例を示す図である。テスト結果起点疑惑値情報244は、従来のSBFLの技法によってテストファイル620実行後に予め生成される。テスト結果起点疑惑値情報244は、1以上のエントリを含む。テスト結果起点疑惑値情報244のエントリは、対象のソースフォルダ名と、対象のソースファイル名と、対象の命令文の行番号と、対象の命令文の疑惑値と、のカラムを含む。
【0044】
疑惑値は、ソースファイル内の各命令文が、失敗テストメソッド、及び成功テストメソッドで何回実行されたかという情報を用いて算出される。特許文献1の技術等により疑惑値を修正してもよい。
図8は、
図6のテストコード実行時に、
図5に示すソースファイルに対して生成されたテスト結果起点疑惑値情報を示す。
【0045】
図8に示すテスト結果起点疑惑値情報では、
図5に示すソースファイル“CreateCore”の不具合箇所である5行目の命令文に対しては疑惑値1.0が、7行目の命令文に関しては疑惑値0.0が付与されており、特に7行目の命令文に関しては不具合箇所でない他の命令文よりも疑惑値が低い。
【0046】
図9は、ソースファイル内関連性情報245の例を示す図である。ソースファイル内関連性取得部210は、ソースファイルを入力としてソースファイル内関連性情報245を生成する。また、ソースファイル内関連性情報245は、併せて不具合可能性情報246を入力としてもよい。
【0047】
ソースファイル内関連性情報245は、1以上のエントリを含む。ソースファイル内関連性情報245のエントリは、比較元の命令文を含むソースファイル名と、比較元命令文の行番号と、関連する命令文を含むソースファイル名と、関連する命令文の行番号と、比較元命令文との関連性と、のカラムを含む。関連性の種類としては、類似命令文、使用変数設定命令文、などがある。比較元の命令文を含むソースファイルと関連する命令文を含むソースファイルは、同じものでもよいし、異なるものでもよい。
【0048】
ソースファイル内関連性取得部210によるソースファイル内関連性情報245の生成についての詳細は、
図12のS1210に示し後述する。
【0049】
図10は、不具合可能性情報246の例を示す図である。不具合可能性判定部220では、ソースファイルと、テスト実行情報243と、テスト結果起点疑惑値情報244と、を入力として、ソソースファイル内の各命令文の不具合可能性を判定し、不具合可能性情報246を生成する。
【0050】
不具合可能性情報246は1以上のエントリを含む。不具合可能性情報246のエントリは、ソースファイル名と、行番号と、不具合可能性の値と、不具合可能性の値設定の理由と、のカラムを含む。不具合可能性の値とは
図10のようにレベルで示してもよいし、定量的な値で示してもよい。不具合可能性判定部220による不具合可能性情報246の生成についての詳細は、
図12のS1220に示し後述する。
【0051】
図11は、再計算疑惑値情報247の例を示す図である。疑惑値再付与部230は、ソースファイル群241と、テスト実行情報243と、テスト結果起点疑惑値情報244と、ソースファイル内関連性情報245と、を入力として、再計算疑惑値情報247を生成する。また、疑惑値再付与部230は、併せて不具合可能性情報246を入力としてもよい。
【0052】
再計算疑惑値情報247は、1つ以上のエントリを含む。再計算疑惑値情報247のエントリは、対象のフォルダ名と、対象のソースファイル名と、対象の命令文の行番号と、対象の命令文の疑惑値と、のカラムを含む。また、再計算疑惑値情報247のエントリは、併せて、テスト結果起点疑惑値情報244から疑惑値の変更があった場合、疑惑値変更内容と、疑惑値変更理由のカラムを含んでもよい。疑惑値再付与部230による再計算疑惑値情報247の生成についての詳細は、
図12のS1230に示す。
【0053】
図12は、不具合箇所特定支援装置100が実施する処理(以下、不具合箇所特定支援処理1200と称する)を説明するフローチャートである。以下、
図12を用いて、不具合箇所特定支援処理1200について説明する。尚、不具合箇所特定支援装置100は、例えば、ユーザからの指示を契機として不具合箇所特定支援処理1200を開始する。また、不具合箇所特定支援装置100は、例えば、スケジュールされたタイミングでバッチ処理等により自動的に不具合箇所特定支援処理1200を開始する。以下において、符号の前に付している文字「S」は処理ステップを意味する。
【0054】
まず、ソースファイル内関連性取得部210は、情報記憶部240に記憶されているソースファイル群241を読み込み、ソースファイル520内の各命令文に対して、他命令文との命令文との関連性を抽出し、ソースファイル内関連性情報245を生成する(S1210)。
【0055】
抽出する関連性の種類としては、類似命令文、使用変数設定命令文、などがある。類似命令文と使用変数設定命令の抽出について、
図5に示すソースファイル520を用いて説明する。尚、
図9は、
図5のソースファイルを入力としてソースファイル内関連性取得部210が生成するソースファイル内関連性情報245を示す。
【0056】
まず、類似命令文の抽出について説明する。類似命令文は、命令文相互において共通する要素が含まれる度合いで判断することができる。類似命令文の判断は、例えば命令文に含まれるトークン(変数名、メソッド名など)の種類数を用いて、比較元命令文に含まれるトークンと、比較先命令文に含まれるトークンの共通トークン数を求め、共通トークン数と比較先命令文に含まれるトークン数の差分が、予め設定する閾値以下であれば類似と判断する。
【0057】
図9のソースファイル内関連性情報を求める例では、類似命令文探索の際の、共通トークン数と比較先命令文に含まれるトークン数の差分の閾値を1とする。
図5のソースファイル520では、比較元命令文である5行目の命令文に含まれるトークンは(String、result、createData、str、name)、比較先命令文である7行目の命令文のトークンは(String、result、createData、name)となり、比較元命令文と比較先命令文の共通トークン数は4となる。共通トークン数と比較先命令文に含まれるトークン数の差分は、|4-5|=1となり、閾値1以下となるため、比較先命令文である7行目の命令文は比較元である5行目の命令文の類似命令文と判断される。そのため、
図9に示すソースファイル内関連性情報245では、比較元命令文であるCreateCoreファイルの5行目の類似命令文として、同じくCreateCoreファイルの7行目が該当する、と示している。
【0058】
なお、差分の閾値は任意であり、また差分で判定する他、比較先命令文に含まれるトークン中の共通トークン数の比率等で判断してもよい。
【0059】
続いて、使用変数設定命令文の抽出について説明する。使用変数設定命令文とは、比較元命令文で使用している変数に、値を代入する命令文のことである。使用変数設定命令文の判断は、例えば比較元命令文にメソッド呼出し命令が含まれる場合に、該当のメソッド呼出しで引数として用いている変数に対して直近で値を代入している命令文を、構文木解析を用いて探索することにより実施する。
【0060】
ここで、
図5のソースファイル520では、比較元命令文である5行目のメソッド呼出し“createData(str, name)”での引数“name”に直近で値を代入している命令文は、3行目の“String name = tmp.get(“data”);”であるため、3行目の命令文は5行目の命令文に対する使用変数設定命令文と判断される。そのため、
図9に示すソースファイル内関連性情報では、比較元命令文であるCreateCoreファイルの5行目の使用変数設定箇所として、同じくCreateCoreファイルの3行目が該当する、と示している。
【0061】
このように、同じパラメータに対して定義、代入、あるいは使用等の処理を行う命令文は相互に関連する可能性が高く、共通して不具合が発生する可能性がある。
【0062】
次に、不具合可能性判定部220は、ソースファイル520と、テスト実行情報243と、テスト結果起点疑惑値情報244を読み込み、ソースファイル内の各命令文の不具合可能性を判定し、不具合可能性情報246を生成する(S1220)。このとき、ソースファイル群241には、通常複数のソースファイルが含まれているので、例えばソースファイルを1件ずつ呼び出して、判定対象ソースファイルとして不具合を判定する。
【0063】
ソースファイル内の命令文に対する不具合可能性の判定について、
図5に示すソースファイルと、
図7に示すテスト実行情報と、
図8に示すテスト結果起点疑惑値情報と、を用いて説明する。尚、
図10に示す不具合可能性情報246は、
図5に示すソースファイル520と、
図7に示すテスト実行情報243と、
図8に示すテスト結果起点疑惑値情報244と、を入力として不具合可能性判定部220が生成する不具合可能性情報を示す。
【0064】
不具合可能性判定部220は、例えば、テスト実行情報243の例外発生箇所情報で示されるソースファイルの命令文について、例外発生時に呼び出されていることから不具合可能性を高いと判断し、不具合可能性が高いことを示す情報を付与する。
図7のテスト実行情報243の例では、
図5に示すソースファイル”CreateCore”について、5行目の命令文で例外発生時に呼び出されていると示されている。そのため、
図10では、ソースファイル”CreateCore”の5行目について、不具合可能性の値を“高”としている。また、不具合可能性“高”の判断理由として、「例外発生箇所」であることを示している。
【0065】
また、不具合可能性判定部220は、例えば、テスト結果起点疑惑値情報244で示される疑惑値が最も高い命令文について、失敗テストでの実行される傾向にあり、かつ成功テストで実行されない傾向にあることから、不具合可能性が高いと判断する。これは従来のSBFLの原理に基づく処理である。
【0066】
図8のテスト結果起点疑惑値情報244の例では、
図5に示すソースファイル”CreateCore”について、3行目と、4行目と、5行目の命令文に最高疑惑値1.0が付与されていることを示している。そのため、
図10では、ソースファイル”CreateCore”の3行目と、4行目と、5行目について、不具合可能性の値を“高”としている。また、”CreateCore”の3行目と、4行目の不具合可能性“高”の判断理由として、「テスト起因疑惑値最高箇所」であることを示している。
【0067】
ここで、ソースファイル”CreateCore”の5行目のように、テスト起因疑惑値最高箇所と例外発生箇所であることが重複する場合には、双方の不具合可能性判断理由を示しても、
図10のようにどちらか一方のみの不具合可能性判断理由を示しても、どちらかの表記をして構わない。
【0068】
また、不具合可能性判定部220は、ソースファイル内の不具合に関係しない特定種類の命令を抽出し、不具合可能性が低いことを示す情報を付加する。例えば、ソースファイル内のデバッグ用の命令文について、テスト実行結果に関連しないことから、不具合可能性が低いと判断する。
図5のソースファイルの例では、11行目および14行目の命令文“ System.err.println(e.getMessage());”は標準エラー出力を、12行目および15行目の命令文“e.printStackTrace();”はスタックトレースへの出力を意味し、それぞれデバッグ用の命令である。そのため、
図10では、ソースファイル“CreateCore”の11行目と、12行目と、14行目と、15行目について、不具合可能性の値を“低”としている。また、不具合可能性“低”の判断理由として、「デバッグ命令」であることを示している。
【0069】
ここで、不具合箇所特定支援処理1200の処理ステップの順序について、ソースファイル内関連性取得部210の実行(S1210)と、不具合可能性判定部220の処理(S1220)の順序は前後しても良い。すなわち、S1230の前に両者が準備できれば良い。
【0070】
不具合可能性判定部220を先に実行する場合、後に実行するソースファイル内関連性取得部210では、ソースファイルと併せて、不具合可能性情報246を入力として読み込んでもよい。ソースファイル内関連性取得部210で不具合可能性情報246を読み込んだ場合は、不具合可能性情報246で不具合可能性が“高”と示されている箇所のみを比較元命令文として、関連する命令文情報を抽出してもよい。
【0071】
次に、疑惑値再付与部230は、テスト実行情報243と、テスト結果起点疑惑値情報244と、ソースファイル内関連性情報245と、不具合可能性情報246を用いて疑惑値を算出し、再計算疑惑値情報247を生成する(S1230)。
【0072】
図13は、疑惑値再付与部230が実施する処理(以下、疑惑値再付与処理1300と称する)を説明するフローチャートである。以下、
図13を用いて、
図11に示す再計算疑惑値情報を生成する疑惑値再付与処理1300について説明する。尚、
図11に示す再計算疑惑値情報は、
図5に示すソースファイルに関して、
図7に示すテスト実行情報と、
図8に示すテスト結果起点疑惑値情報と、
図9に示すソースファイル内関連性情報と、
図10に示す不具合可能性情報を用いて疑惑値を再付与した結果を表す。また、疑惑値再付与部230は、例えば、スケジュールされたタイミングでバッチ処理等により自動的に疑惑値再付与処理1300を開始する。
【0073】
まず、疑惑値再付与部230は、テスト結果起点疑惑値情報244の情報を参照して、再計算疑惑値情報247の元データを生成する(S1310)。具体的には、例えば、
図8に示すテスト結果起点疑惑値情報244のエントリに、疑惑値変更内容のカラムと疑惑値変更理由のカラムを付け加えたデータを、再計算疑惑値情報247の元データとする。
【0074】
次に、疑惑値再付与部230は、不具合可能性が高い命令文の関連命令文に疑惑値を付与し、再計算疑惑値情報247を更新する(S1320)。具体的には、不具合可能性情報246にて不具合可能性が“高”と示されている命令文の関連命令文情報を、ソースファイル内関連性情報245から抽出する。そして、再計算疑惑値情報247に該当の命令文情報が存在する場合は再計算疑惑値情報247の該当疑惑値を書換え、再計算疑惑値情報247に該当の命令文情報が存在しない場合は命令文情報および疑惑値情報を追加する。不具合可能性が高い命令文に関連性のある命令文に対する疑惑値算出としては、例えば、テスト結果起点疑惑値情報における最高疑惑値を付与する。以下で具体例を説明する。
【0075】
図10に示す不具合可能性情報で不具合可能性が“高”と示されている、ソースファイル“CreateCore”の5行目の命令文に関連性のある命令文は、
図9に示すソースファイル内関連性情報から、ソースファイル“CreateCore”の7行目と3行目の命令文が該当することが分かる。そのため、疑惑値再付与部230は、ソースファイル“CreateCore”の7行目と3行目の命令文に対し、
図8に示すテスト結果起点疑惑値情報の最高疑惑値1.0を付与し、再計算疑惑値情報を更新する。
【0076】
更新した結果は、
図11の再計算疑惑値情報の例の#4行目に示される。尚、ソースファイル“CreateCore”の3行目の命令文については、
図8に示すテスト結果起点疑惑値情報にて既に最高疑惑値1.0が付与されているため、疑惑値の変更はない。以上から、
図5に示すソースファイル“CreateCore”内の不具合箇所である7行目の命令文に対し、適切に疑惑値が付与されることが分かる。
【0077】
以上の操作では、不具合可能性が高い命令文に関連する命令文の疑惑値を増加するという処理を行っている。上記の例では、関連する命令文に最高疑惑値1.0を付与することにしているが、所定点数を加算したり、係数をかけるなどしてもよい。
【0078】
次に、疑惑値再付与部230は、不具合可能性が高い命令文に疑惑値を付与し、再計算疑惑値情報247を更新する(S1330)。具体的には、不具合可能性情報246にて不具合可能性が“高”と示されている命令文を抽出する。そして、再計算疑惑値情報247に該当の命令文情報が存在する場合は再計算疑惑値情報247の該当疑惑値を書換え、再計算疑惑値情報247に該当の命令文情報が存在しない場合は命令文情報および疑惑値情報を追加する。例外発生箇所の命令文に対する疑惑値算出としては、例えば、テスト結果起点疑惑値情報244の最高疑惑値よりも高い疑惑値を付与する。以下で具体例を示す。
【0079】
図10に示す不具合可能性情報にて不具合可能性が“高”と示されているソースファイル“CreateCore”の5行目の命令文は例外発生箇所であることが分かる。そのため、疑惑値再付与部230は、ソースファイル“CreateCore”の5行目の命令文に対し、
図8に示すテスト結果起点疑惑値情報の最高疑惑値1.0よりも高い疑惑値1.5を付与し、再計算疑惑値情報を更新する。更新した結果は、
図11の再計算疑惑値情報の例の#1行目に示される。以上から、
図5に示すソースファイル“CreateCore”内の不具合箇所である5行目の命令文に対し、それ以外の箇所よりも高い疑惑値が付与されたことが分かる。
【0080】
次に、疑惑値再付与部230は、再計算疑惑値情報247が保持する、不具合可能性が低い命令文の疑惑値情報を削除する(S1340)。具体的には、不具合可能性情報246にて不具合可能性が“低”と示されている命令文に対して、再計算疑惑値情報247に疑惑値情報が存在する場合は、該当の疑惑値情報を削除する。以下で具体例を示す。
【0081】
図10に示す不具合可能性情報にて不具合可能性が“低”と示されているソースファイル“CreateCore”の11行目および12行目の命令文について、
図8に示すテスト結果起点疑惑値情報にて疑惑値0.25が付与されている。そのため、疑惑値再付与部230は、疑惑値再付与情報からソースファイル“CreateCore”の11行目および12行目の疑惑値を削除する。削除した結果は、
図11の再計算疑惑値情報の例の#11行目および#12行目に示される。以上から、
図5に示すソースファイル“CreateCore”内の命令文の内、テスト実行結果に関連せず、不具合になりえない箇所に疑惑値が付与されないことが分かる。
【0082】
以上説明したように、本実施形態に係る不具合箇所特定支援装置100は、不具合可能性が高い例外発生箇所などの命令文に関連性がある命令文をソースファイル内関連性情報245をもとに特定し、高い疑惑値を付与する。これにより、テスト結果起点の疑惑値算出結果に対して同値疑惑値の補正を実施する方法に比べて、不具合箇所の命令文の疑惑値を高めて取りこぼしを防ぐことができるため、不具合箇所特定の工程を効率化する。
【0083】
また、本実施形態に係る不具合箇所特定支援装置100は、不具合可能性情報246に応じてテスト結果起点の疑惑値を操作する。これにより、テスト結果起点疑惑値情報244の同値疑惑値の補正にも対応することができる。
【0084】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【符号の説明】
【0085】
100…不具合箇所特定支援装置、210…ソースファイル内関連性取得部、220…不具合可能性判定部、230…疑惑値再付与部、240…情報記憶部、241…ソースファイル群、242…テストファイル群、243…テスト実行情報、244手数と結果起点疑惑値情報、245…ソースファイル内関連性情報、246…不具合可能性情報、247…再計算疑惑値情報