JP2022014468A - テスト支援装置及びテスト支援方法 - Google Patents
テスト支援装置及びテスト支援方法 Download PDFInfo
- Publication number
- JP2022014468A JP2022014468A JP2020116748A JP2020116748A JP2022014468A JP 2022014468 A JP2022014468 A JP 2022014468A JP 2020116748 A JP2020116748 A JP 2020116748A JP 2020116748 A JP2020116748 A JP 2020116748A JP 2022014468 A JP2022014468 A JP 2022014468A
- Authority
- JP
- Japan
- Prior art keywords
- test
- test case
- existing
- unit
- cases
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】新たなテスト要件に対して、既存テストケースの中から最も再利用度の高いテストケースを抽出する。【解決手段】新規テスト要件を入力して参照テストケースを出力する装置は、新規テスト要件を入力するテスト要件取得部と、新規テスト要件について自然言語解析によりテスト要件数値化データを生成するテスト要件解析部と、既存テストケースをテスト要件数値化データに基づいて解析して、再利用可能な候補を出力テストケース候補として生成するテストケース解析部と、出力テストケース候補を参照テストケースとして出力するテストケース出力部と、を有し、テストケース解析部はテスト要件数値化データに基づいて既存テストケースを出力テストケース候補として生成し、出力テストケース候補のそれぞれに対する再利用度を算出し、テストケース出力部は再利用度に基づいて出力テストケース候補の中から参照テストケースを決定する。【選択図】図1A
Description
本発明は、テスト支援装置及びテスト支援方法に関する。
既存のソフトウェア部品を再利用してソフトウェアを新規に構築する際に、上位層のソフトウェア部品で利用される下位層のソフトウェア部品を既存のソフトウェア部品の中から検索するための技術として、特許文献1に記載の技術が知られている。
この特許文献1には、ソフトウェア部品間の階層構造やバリエーションを考慮した上で、必要なソフトウェア部品を効率よく検索可能な技術を提供することを課題とし、解決手段として、上位層ソフトウェア部品に対応する下位層ソフトウェア部品の情報を検索するソフトウェア部品情報検索システムであって、互いに同一の名称を有する複数の下位層ソフトウェア部品であるバリエーション部品の中から、検索結果を必要なバリエーションのものに絞り込む機能を有することが記載されている。
また、特許文献2において、ソフトウェアの入力値及び出力値に関する要求を含む仕様に対して、1個のソフトウェアの少なくとも1つの機能を検証するためにコンピュータによってテストケースを自動的に形成するための解決手段が開示されている。
解決手段として、組み合わせ要求と順序要求とを区別するステップと、モデル化された仕様を取得するために、真偽表で組み合わせ要求をモデル化し、有限状態機械で順序要求をモデル化するステップと、前記ソフトウェアの前記入力値を、前記入力値が承継である確率及び前記入力値の間の遷移時間に関連付けて演算行列を確立するステップと、前記演算行列にモンテカルロドローを実行することによりテストされる前記入力値の承継を選択するステップと、それぞれ選択された承継を前記モデル化された仕様を考慮して予測される前記出力値に関係付けるテスト行を含むテストケースを決定するステップと、決定される前記テストケースが以下の基準、機能コードの検証された割合、要求の検証された割合、検証時間、及び検証コストの少なくとも1つに対して既定の閾値に到達することを可能にする場合、前記決定工程を停止するステップが記載されている。
特許文献1では、ソフトウェア部品間の階層構造やバリエーションを考慮することで、必要なソフトウェア部品を必要なバリエーションのものに絞り込むことはできるが、絞り込み結果が複数存在する場合にどのソフトウェア部品を参照すべきかを選択するためには人手による確認が必要となるため、ソフトウェア部品を効率よく再利用することができない、という問題があった。
特許文献2では、要求をモデル化することで、要求に対応するテストケースを検索することはできるが、対応するテストケースが複数存在する場合に、どのテストケースを参照すべきかを選択するためには人手による確認が必要となるため、テストケースを効率よく生成することができない、という問題があった。
そこで本発明では、外部から与えられたテスト要件に対し、過去に生成したテストケースの中から、検証すべきソフトウェアが該テスト要件を満たしているか否かを判定するために開発が必要なテストケースを、効率よく生成するテスト支援装置を提供することを目的とする。
本発明は、プロセッサとメモリを有して、新規テスト要件を受け付けて、再利用可能な参照テストケースを出力するテスト支援装置であって、自然言語で記述された前記新規テスト要件を受け付けるテスト要件取得部と、前記受け付けた新規テスト要件について自然言語解析を実施してテスト要件数値化データを生成するテスト要件解析部と、過去に生成された既存テストケースを前記テスト要件数値化データに基づいて解析して、再利用可能な前記既存テストケースの候補を出力テストケース候補として生成するテストケース解析部と、前記出力テストケース候補の一部又は全部を参照テストケースとして出力するテストケース出力部と、を有し、前記テストケース解析部は、前記テスト要件数値化データに基づいて1つ以上の既存テストケースを出力テストケース候補として生成するテストケース候補抽出部と、前記出力テストケース候補のそれぞれに対する再利用度を算出する再利用性評価部と、を有し、前記テストケース出力部は、前記再利用性評価部が算出した前記再利用度に基づいて前記出力テストケース候補の中から参照テストケースを決定する。
本発明によれば、外部から与えられたテスト要件に対して、過去に生成したテストケースの中から最も再利用度の高いテストケースを用いて、テストケースを効率よく生成することが可能となる。
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
本実施例は、テスト支援装置に関するものであって、特に、組み込みシステムの制御ソフトウェアの開発に用いるテスト技術に関する。
以下、本発明に好適な実施形態の例(実施例)を説明する。
<構成>
図1Aは、本発明におけるテスト支援装置の機能の概要を示すブロック図である。
図1Aは、本発明におけるテスト支援装置の機能の概要を示すブロック図である。
<テスト支援装置>
本発明にかかるテスト支援装置について図1Aを用いて説明する。テスト支援装置0は、自然言語で記述された新規テスト要件11を取得するテスト要件取得部1と、テスト要件から自然言語処理などの手法を用いてテスト要件数値化データを生成するテスト要件解析部2と、過去の組み込みソフトウェア開発プロジェクトにおいて人手で開発した既存のテストケースを前記テスト要件数値化データに基づき解析して参照テストケース12の候補として出力するテストケース解析部3と、前記参照テストケース12の候補のうち最も再利用度の高い参照テストケース12を出力するテストケース出力部4から構成される。
本発明にかかるテスト支援装置について図1Aを用いて説明する。テスト支援装置0は、自然言語で記述された新規テスト要件11を取得するテスト要件取得部1と、テスト要件から自然言語処理などの手法を用いてテスト要件数値化データを生成するテスト要件解析部2と、過去の組み込みソフトウェア開発プロジェクトにおいて人手で開発した既存のテストケースを前記テスト要件数値化データに基づき解析して参照テストケース12の候補として出力するテストケース解析部3と、前記参照テストケース12の候補のうち最も再利用度の高い参照テストケース12を出力するテストケース出力部4から構成される。
また、テストケース解析部3は、前記テスト要件数値化データに基づき1つ以上の既存テストケースをテストケース候補として生成するテストケース候補抽出部301と、前記テストケース候補のそれぞれに対する再利用度を算出する再利用性評価部302から構成される。
テスト支援装置0は、再利用性(再利用度)の高い既存テストケースを参照テストケース12とすることにより、ユーザ等は、前記参照テストケース12の一部のみを修正すれば、検証対象のソフトウェアがテスト要件を満たしているかを判定するためのテストケースを生成できる。これにより、少ない工数でテストケースを生成することが可能となる。
図1Bは、テスト支援装置0のハードウェアを含む構成の一例を示すブロック図である。テスト支援装置0は、プロセッサ21と、メモリ22と、ストレージ装置23と、入力装置24と、出力装置25と、ネットワーク装置26を含む計算機である。
入力装置24は、キーボードやマウス或いはタッチパネル等で構成される。出力装置25はディスプレイなどで構成される。ネットワーク装置26は、図示しないネットワークに接続されて他の装置と通信を行う。
メモリ22には、テスト要件取得部1と、テスト要件解析部2と、テストケース解析部3と、テストケース出力部4がプログラムとしてロードされて、プロセッサ21によって実行される。なお、テストケース解析部3は、テストケース候補抽出部301と、再利用性評価部302から構成される。
プロセッサ21は、各機能部のプログラムに従って処理を実行することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ21は、テストケース解析プログラムに従って処理を実行することでテストケース解析部3として機能する。他のプログラムについても同様である。さらに、プロセッサ21は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
<テスト要件とテストケース>
図2は自然言語で記述されたテスト要件111の一例を示す図である。テスト要件111は検証対象の制御ソフトウェアが満たしているべき振る舞い、すなわちテストにおいて検証すべき内容を自然言語で記述したデータであり、No.112と、テスト要件113をひとつのエントリに含む。
図2は自然言語で記述されたテスト要件111の一例を示す図である。テスト要件111は検証対象の制御ソフトウェアが満たしているべき振る舞い、すなわちテストにおいて検証すべき内容を自然言語で記述したデータであり、No.112と、テスト要件113をひとつのエントリに含む。
テスト要件111は、所定のシステムのユニットテスト、組み合わせテスト、システムテスト等に用いられ、システムがユーザの要求を満たしているか否かを判定するために使用される。
例えば、No.=1のテスト要件”If mode is STATE1 and input is low, output is 0 and mode remains STATE1”においては、制御ソフトウェアはモードSTATE1において入力がlowの場合にモードSTATE1を保持する必要がある。
この場合、モードSTATE1において制御ソフトウェアにlowを入力し、次に、制御ソフトウェアのモードを測定し、最後に、モードがSTATE1となっていることを判定することにより、制御ソフトウェアが該テスト要件を満たしていることを確認することができる。
このように、制御ソフトウェアがテスト要件を満たしていることを確認するために制御ソフトウェアに与える具体的な入力及び制御ソフトウェアが計測する具体的な出力を定めたものがテストケースである。テストケースを自動で実行するため、テストケースを計算機で解釈可能な形式言語で記述する。
図3は計算機が解釈可能な形式言語で記述されたテストケースの一例を示す図である。テストケース121は、図に示したように検証すべき内容を、例えばテストの自動実行が可能なPCのようなテスト装置で実施できるよう形式的に記述したデータである。
<テスト要件解析部>
図4はテスト要件解析部2で行われる処理の一例を示すフローチャートである。
図4はテスト要件解析部2で行われる処理の一例を示すフローチャートである。
ステップS21にて、テスト要件解析部2は、テスト要件取得部1から新規テスト要件11を受け取る。ステップS22にて、テスト要件解析部2は前記受け取った新規テスト要件11の自然言語解析を行う。
ステップS23にて、テスト要件解析部2は前記自然言語解析の結果をテスト要件数値化データ200としてテストケース解析部3に出力する。このようにして、テスト要件解析部2はテスト要件をテスト要件数値化データに変換して処理を終了する。
<自然言語解析>
図5は、テスト要件解析部2において実行される自然言語解析処理(S22)について、その処理の詳細なフローチャートである。
図5は、テスト要件解析部2において実行される自然言語解析処理(S22)について、その処理の詳細なフローチャートである。
ステップS222にて、テスト要件解析部2は新規テスト要件11をテスト要件の構成単位である単語に分割して前記各単語をキューに登録する。ステップS223にて、テスト要件解析部2は前記キューに単語が存在しているか否かを判定し、存在している場合にはステップS224に進み、存在しない場合にはステップS229に進んで処理を終了する。
ステップS224にて、テスト要件解析部2は前記キューから単語をポップする。ステップS225にて、テスト要件解析部2は前記ポップした単語が既出単語リストに存在しているか否かを判定し、前記ポップした単語が前記既出単語リストに存在している場合にはステップS226に進み、前記ポップした単語が前記既出単語リストに存在しない場合にはステップS227に進む。
ステップS226にて、テスト要件解析部2は前記既出単語リストに記載の該当既出単語の出現回数をインクリメントしてからステップS223に戻って上記処理を繰り返す。ステップS227にて、テスト要件解析部2は前記ポップした単語を既出単語リストに追加する。ステップS228にて、テスト要件解析部2は該単語の出現回数を1で初期化してからステップS223に戻って上記処理を繰り返す。
上記自然言語解析処理により、テスト支援装置0は自然言語で記述された新規テスト要件11を、前記テスト要件に含まれる単語の出現回数を並べた数値ベクトルに変換し、テスト要件数値化データ200を生成することができる。
<テスト要件数値化データ>
図6は、図2に記載の各テスト要件111に対して、テスト要件数値化データ200を生成した結果を示している。それぞれのテスト要件に対して、各単語が何度出現したかを表形式で保存したデータである。例えば、No.=1のテスト要件” If mode is STATE1 and input is low, output is 0 and mode remains STATE1”に関しては、単語ifは1回、modeは2回出現しているため、表で該当する箇所にそれぞれ1、2が記載され、単語theは出現していないため該当する箇所に0が記載される。
図6は、図2に記載の各テスト要件111に対して、テスト要件数値化データ200を生成した結果を示している。それぞれのテスト要件に対して、各単語が何度出現したかを表形式で保存したデータである。例えば、No.=1のテスト要件” If mode is STATE1 and input is low, output is 0 and mode remains STATE1”に関しては、単語ifは1回、modeは2回出現しているため、表で該当する箇所にそれぞれ1、2が記載され、単語theは出現していないため該当する箇所に0が記載される。
テスト要件解析部2は、上述のようにテスト要件113の単語の出現回数を並べて数値ベクトルに変換し、テスト要件数値化データ200を生成する。
<テストケース候補抽出部>
図7は、テストケース解析部3を構成するテストケース候補抽出部301の構成を示した図である。
図7は、テストケース解析部3を構成するテストケース候補抽出部301の構成を示した図である。
前記テストケース候補抽出部301は、既存テストケース保存部3011と、コードクローン解析部3012と、クラスタリング実施部3014と、テストケース候補決定部3016から構成される。
テストケース候補抽出部301は、入力された新規テスト要件11の数値化データと、過去に開発した既存テスト要件30112の数値化データを比較し、後述するように入力された新規テスト要件11の数値化データがどのクラスタに属するかを決定し、そのクラスタに含まれる既存テストケースをテストケース候補として出力する。
<既存テストケース保存部>
既存テストケース保存部3011は、テストケース候補抽出部301の構成要素の1つであって、過去の組み込みソフトウェア開発プロジェクトにおいて人手で開発した既存のテストケースを既存テストケース30111として保存する。
既存テストケース保存部3011は、テストケース候補抽出部301の構成要素の1つであって、過去の組み込みソフトウェア開発プロジェクトにおいて人手で開発した既存のテストケースを既存テストケース30111として保存する。
既存テストケース30111は、検証すべき振る舞いを自然言語で記述したテスト要件を基に生成されており、各テストケースは検証すべき振る舞いを記述した既存テスト要件30112と紐付けされた状態で保存されている。前記紐付けは、各既存テストケース30111と各既存テスト要件30112をタグ付けする手法又は各既存テストケース30111と各既存テスト要件30112の対応付けを表形式で記述する手法により行う。
なお、既存テストケース保存部3011に保存する既存テストケース30111は、例えば、車両におけるECU(Electronic Control Unit)などの制御コントローラをテストするHiLS(Hardware in the Loop Simulator)などの試験装置が読み込み及び実行可能な形式で記述したものであり、図3はその一例である。また、既存テストケース30111に紐付けされたテスト要件を既存テスト要件30112と呼ぶ。
<コードクローン解析部>
コードクローン解析部3012は、テストケース候補抽出部301の構成要素の1つであって、既存テストケース保存部3011に保存された既存テストケース30111同士の類似度を評価する。
コードクローン解析部3012は、テストケース候補抽出部301の構成要素の1つであって、既存テストケース保存部3011に保存された既存テストケース30111同士の類似度を評価する。
前記類似度の評価は、既存テストケース30111に共通するコードクローンの割合に基づく。すなわち、コードクローン解析部3012は、2つの既存テストケース30111において記述された形式言語の間のコードクローンを解析して、形式言語の要素数に対するコードクローンの要素数の占める割合を類似度として算出する。
図11はコードクローン解析部3012の構成を示した図である。コードクローン解析部3012は、既存テストケース30111をトークンに分割する字句解析部30121、既存テストケース30111に存在するトークンの数をカウントするトークンカウント部30123と、既存テストケース保存部3011に保存された既存テストケース30111同士に共通するコードクローンを抽出するコードクローン抽出部30125から構成される。
<字句解析部>
字句解析部30121は、既存テストケース30111をトークンごとに分割し、トークン分割テストケース30122に変換する。前記トークンとは、演算子や括弧といったテストケースを構成する最小の単位である。図12は、図3に示した既存テストケース30111をトークン分割テストケース30122に変換した例である。この例においては、字句解析部30121は、inputやmodeなどの変数名、==や<などの演算子、及び括弧ごとに既存テストケース30111を分割する。
字句解析部30121は、既存テストケース30111をトークンごとに分割し、トークン分割テストケース30122に変換する。前記トークンとは、演算子や括弧といったテストケースを構成する最小の単位である。図12は、図3に示した既存テストケース30111をトークン分割テストケース30122に変換した例である。この例においては、字句解析部30121は、inputやmodeなどの変数名、==や<などの演算子、及び括弧ごとに既存テストケース30111を分割する。
<トークンカウント部>
トークンカウント部30123は、トークン分割テストケース30122に存在するトークンの総数をカウントする。
トークンカウント部30123は、トークン分割テストケース30122に存在するトークンの総数をカウントする。
図14はトークンカウント部30123において実行される処理の一例を示すフローチャートである。ステップS301231にて、トークンカウント部30123は、字句解析部30121からトークン分割テストケース30122を受け取る。
ステップS301232にて、トークンカウント部30123は既存テストケース30111及び該既存テストケースを変換したトークン分割テストケース30122を識別するためのインデックスiを0で初期化する。
ステップS301233にて、トークンカウント部30123はインデックスiがテストケース数より小さいか否かを判定し、テストケース数より小さい場合にはステップS301234に進み、テストケース数以上である場合にはステップS30123Aに進む。
ステップS301234にて、トークンカウント部30123はトークン数をカウントするための変数Countを1で初期化する。
ステップS301235にて、トークンカウント部30123はトークン分割テストケース[i]の先頭のトークンを抽出する。
ステップS301236にて、トークンカウント部30123はトークン分割テストケース[i]にトークンが存在しているか否かを判定し、存在している場合にはステップS301237に進み、存在しない場合にはステップS301238に進む。
ステップS301237にて、トークンカウント部30123は変数CountをインクリメントしてからステップS301235に戻って上記処理を繰り返す。
ステップS301238にて、トークンカウント部30123はインデックスiをインクリメントする。ステップS301239にて、トークンカウント部30123はトークン数データ[i]にCountを代入してからステップS301233に戻って上記処理を繰り返す。
ステップS30123Aにて、トークンカウント部30123はトークン数データ30124を出力して処理を終了する。
これにより、トークンカウント部30123は、既存テストケース30111同士の類似度を算出する際に必要となる、テストケースに含まれるトークンの総数を出力することができる。
<トークン数データ>
図13はトークン数データ30124の例を示した図である。トークン数データ30124は、テストケースの識別子とトークン数をひとつのエントリに含む。トークン数データ30124は、それぞれのテストケースに含まれるトークンの数を表形式で保存したデータである。
図13はトークン数データ30124の例を示した図である。トークン数データ30124は、テストケースの識別子とトークン数をひとつのエントリに含む。トークン数データ30124は、それぞれのテストケースに含まれるトークンの数を表形式で保存したデータである。
<コードクローン抽出部>
コードクローン抽出部30125は、既存テストケース保存部3011に保存された既存テストケース30111同士に共通するコードクローンを抽出する。
コードクローン抽出部30125は、既存テストケース保存部3011に保存された既存テストケース30111同士に共通するコードクローンを抽出する。
図15は、コードクローン抽出部30125において実行される処理全体を表すフローチャートである。
ステップS301251にて、コードクローン抽出部30125は、トークン分割テストケース30122を入力として受け取り、前記受け取ったトークン分割テストケース30122に含まれる各トークンを配列TCに格納する。
コードクローン抽出部30125は、既存テストケース保存部3011に保存されるすべての既存テストケース30111を配列TCに格納する。したがって、配列TCは2次元配列となる。すなわち、行方向インデックスを用いてトークン分割テストケース30122を識別し、列方向インデックスを用いて該トークン分割テストケース30122に含まれる各トークンを識別する。
ステップS301252にて、コードクローン抽出部30125は、トークン数データ30124を入力として受け取る。
ステップS301253にて、コードクローン抽出部30125は、トークン分割テストケース30122を識別するためのインデックスiを0で初期化する。
ステップS301254にて、コードクローン抽出部30125は、インデックスiがテストケース数より小さいか否かを判定し、テストケース数より小さい場合にはステップS301255に進み、テストケース数以上の場合にはステップS30125Aに進む。
ステップS301255にて、コードクローン抽出部30125は、トークン分割テストケース30122を識別するためのインデックスjを0で初期化する。
ステップS301256にて、コードクローン抽出部30125は、インデックスjがテストケース数より小さいか否かを判定し、テストケース数より小さい場合にはステップS301258に進み、テストケース数以上の場合にはステップS301257に進む。
ステップS301257にて、コードクローン抽出部30125は、インデックスiをインクリメントしてからステップS301254に戻って上記処理を繰り返す。
ステップS301258にて、コードクローン抽出部30125は、コードクローン解析を行う。コードクローン解析処理の詳細は図16で説明する。
ステップS301259にて、コードクローン抽出部30125は、インデックスjをインクリメントしてからステップS301256に戻って上記処理を繰り返す。
ステップS30125Aにて、コードクローン抽出部30125は、コードクローンデータ3013を出力して処理を終了する。
これにより、コードクローン抽出部30125は、2つの既存テストケース30111に対してコードクローン解析を行うことで既存テストケース30111同士の類似度をコードクローンデータ3013として出力することができる。
コードクローンデータ3013は、2つの既存テストケース30111の間のコードクローンを解析し、該既存テストケース30111のトークンの総数(個数)に占めるコードクローンと判定されたトークン数の割合を表形式で保存したデータである。
この割合が高いほど該2つのテストケースは類似していると評価することができる。コードクローンデータ3013の一例を図8に示す。図示の例では、テストケース1とテストケース2はおおむね50%程度類似しており、テストケース3とテストケース5はおおむね80%程度類似していると判定することができる。
<コードクローン解析>
図16は、図15におけるコードクローン解析処理(S301258)に関するフローチャートである。
図16は、図15におけるコードクローン解析処理(S301258)に関するフローチャートである。
ステップS3012581にて、コードクローン抽出部30125は、インデックスiで識別されたトークン分割テストケース30122において処理対象とするトークンを識別するためのインデックスmを0で初期化する。
ステップS3012582にて、コードクローン抽出部30125は、インデックスmがトークン数[i]より小さいか否かを判定し、トークン数[i]より小さい場合にはステップS3012583に進み、トークン数[i]以上の場合にはステップS301258Dに進んで処理を終了する。
ステップS3012583にて、コードクローン抽出部30125は、インデックスjで識別されたトークン分割テストケース30122において処理対象とするトークンを識別するためのインデックスnを0に初期化する。
ステップS3012584にて、コードクローン抽出部30125は、インデックスnがトークン数[j]より小さいか否かを判定し、トークン数[j]より小さい場合にはステップS3012585に進み、トークン数[j]以上の場合にはステップS301256Dに進む。
ステップS3012585にて、コードクローン抽出部30125は、トークン分割テストケースiとjで連続的に検出された共通トークン数をカウントする変数clone_numを0に初期化する。
ステップS3012586にて、コードクローン抽出部30125は、インデックスmをインクリメントしてからステップS3012582へ戻って上記処理を繰り返す。
ステップS3012587にて、コードクローン抽出部30125は、トークン分割テストケース[i]のm+clone_num番目のトークンとトークン分割テストケース[j]のn+clone_num番目のトークンが等しいか否かを判定し、等しい場合にはステップS3012588に進み、異なる場合にはステップS3012589に進む。
ステップS3012588にて、コードクローン抽出部30125は、変数clone_numをインクリメントしてからステップS3012587に戻って上記処理を繰り返す。
ステップS3012589にて、コードクローン抽出部30125は、変数clone_numが最小トークン数より大きいか否かを判定し、最小トークン数より大きい場合にはステップS301258Bに進み、最小トークン数以下の場合にはステップS301258Aに進む。
これにより、連続的に検出された共通トークン数が最小トークン数以下である場合に、該連続的に検出された共通トークンがコードクローンとして検出されることを防止することができる。
最小トークン数を小さく設定すると、本来はコードクローンとして検出されるべきでない箇所(例えば、単なる変数の宣言)をコードクローンとして誤検出することとなる。一方、最小トークン数を大きく設定すると、本来はコードクローンとして検出されるべき箇所をコードクローンとして検出できないこととなる。したがって、最小トークン数は解析するデータに応じて適切に設定する必要がある。
ステップS301258Aにて、コードクローン抽出部30125は、インデックスnにn+clone_num+1を代入してからステップS3012584へ戻って上記処理を繰り返す。
ステップS301258Bにて、コードクローン抽出部30125は、コードクローンデータ[i][j]に変数clone_numをクローン数[i]で割った値(類似度)を代入する。
ステップS301258Cにて、コードクローン抽出部30125は、インデックスmにm+clone_num+1を代入してからステップS3012582へ戻って上記処理を繰り返す。
これにより、コードクローン抽出部30125は、2つの既存テストケース30111に対してトークン構成が同じである箇所をコードクローンとして検出することができる。
<クラスタリング実施部>
クラスタリング実施部3014は、テストケース候補抽出部301の構成要素の1つであって、コードクローンデータ3013に基づき、類似した既存テストケース30111同士をクラスタに分類する。
クラスタリング実施部3014は、テストケース候補抽出部301の構成要素の1つであって、コードクローンデータ3013に基づき、類似した既存テストケース30111同士をクラスタに分類する。
コードクローンデータ3013には、2つの既存テストケース30111の類似度が記録されている。2つの既存テストケース30111の類似度の逆数を、該2つの既存テストケース30111同士の疑似的な距離とみなすことにより、公知又は周知のクラスタリングアルゴリズムを適用して類似した既存テストケース30111同士をクラスタに分類することができる。
例えば、図8に示すコードクローンデータ3013の場合、テストケース1とテストケース2はおおむね50%程度類似のためテストケース1と2の間の距離は1/0.5=2、テストケース3とテストケース5はおおむね80%程度類似のため距離は1/0.8=1.25とみなすことができる。
これにより、類似している既存テストケース30111同士の距離が近いと判定できる。クラスタリングアルゴリズムにはVBGMM (Variational Bayesian Gaussian Mixture)を使用する。VBGMMは点群を距離に基づき分類するためのアルゴリズムで、点群間の距離を与えることにより、クラスタ数の決定及び各点群のクラスタ分類を自動で行うものである。
本実施例においては、既存テストケース30111間の疑似的な距離が与えられているので、VBGMMにより、類似した既存テストケース30111同士をクラスタに分類することが可能である。
<クラスタデータ>
図9はクラスタデータ3015の例を示した図である。クラスタデータ3015は、テストケースの識別子と、クラスタの識別子をひとつのエントリに含む。クラスタデータ3015は、それぞれのテストケースがどのクラスタと対応しているかを表形式で保存したデータである。
図9はクラスタデータ3015の例を示した図である。クラスタデータ3015は、テストケースの識別子と、クラスタの識別子をひとつのエントリに含む。クラスタデータ3015は、それぞれのテストケースがどのクラスタと対応しているかを表形式で保存したデータである。
<テストケース候補決定部>
テストケース候補決定部3016は、テストケース候補抽出部301の構成要素の1つであって、参照すべきテストケースの候補を決定する。
テストケース候補決定部3016は、テストケース候補抽出部301の構成要素の1つであって、参照すべきテストケースの候補を決定する。
図17は、テストケース候補決定部3016の構成を示した図である。
テストケース候補決定部3016は、分類器生成部30161と分類実施部30162からなる。
分類器生成部30161は、既存テストケース保存部3011に保存されている既存テストケース30111及び該既存テストケースに紐付けされた既存テスト要件30112及びクラスタデータ3015に基づき分類器を生成する。
分類実施部30162は、前記分類器を用いて新規テスト要件11を数値化したデータがどのクラスタに分類されるかを決定し、前記決定したクラスタに含まれるすべてのテストケースをテストケース候補として再利用性評価部302に出力する。
これにより、テストケース候補決定部3016は、テスト要件解析部2が受け取ったテスト要件に対して参照すべきテストケースの候補を決定することができる。
<分類器生成部>
図18は分類器生成部30161において実行される処理のフローチャートである。
図18は分類器生成部30161において実行される処理のフローチャートである。
ステップS301611にて、分類器生成部30161は既存テストケース保存部3011に保存された各既存テストケース30111に紐付けされた既存テスト要件30112を入力として受け取る。
ステップS301612にて、分類器生成部30161はクラスタデータ3015を入力として受け取る。
ステップS301613にて、分類器生成部30161はステップS301611にて受け取った既存テスト要件30112について自然言語解析を実施し、テスト要件数値化データS301614を生成する。前記自然言語解析はテスト要件解析部2におけるステップS22と同一の方法で行う。
ステップS301615にて、分類器生成部30161は、既存テスト要件30112の数値化データ(S301614)を入力ベクトルとし、クラスタデータ3015を参照して該既存テスト要件30112と紐付けされた既存テストケース30111が所属するクラスタの番号を特定し、該クラスタの番号をラベルとして教師あり学習を行い、分類器を生成する。
教師あり学習のアルゴリズムとしては、例えば、ディープニューラルネットワークやサポートベクタマシンなどの周知又は公知のアルゴリズムを用いる。本手法は、画像データを入力ベクトルとし、犬や猫をラベルとしてディープニューラルネットワーク解析を行い犬や猫画像分類器を生成する手法をテストに応用したものである。
<分類実施部>
分類実施部30162において実行される処理について説明する。分類実施部30162は、分類器生成部30161が生成した分類器を用いて、新規テスト要件11を数値化したデータに対するクラスタ分類を決定し、前記決定したクラスタに含まれるすべての既存テストケース30111をテストケース候補として再利用性評価部302に出力する。
分類実施部30162において実行される処理について説明する。分類実施部30162は、分類器生成部30161が生成した分類器を用いて、新規テスト要件11を数値化したデータに対するクラスタ分類を決定し、前記決定したクラスタに含まれるすべての既存テストケース30111をテストケース候補として再利用性評価部302に出力する。
まず、テスト要件解析部2が生成したテスト要件数値化データ200を分類器に入力する。このとき、分類器は前記テスト要件数値化データS301614が分類されるクラスタを決定する。
次に、分類実施部30162は、クラスタデータ3015を参照し、分類器が決定した前記クラスタに所属するすべての既存テストケース30111を特定する。最後に、分類実施部30162は、前記特定したすべての既存テストケース30111をテストケース候補3010として出力する。
分類器生成部30161は、過去に開発された既存テストケース30111と該既存テストケース30111に紐づく既存テスト要件30112の関係を解析しているので、分類実施部30162によるテストケース候補3010の出力は、新規テスト要件11に対して開発されると期待されるテストケースを過去の実績に基づき予測又は推定していることに相当する。
<テストケース候補>
図10はテストケース候補3010の例を示した図である。テストケース候補3010は既存テストケース30111の識別子を表形式で保存したデータである。
図10はテストケース候補3010の例を示した図である。テストケース候補3010は既存テストケース30111の識別子を表形式で保存したデータである。
<再利用性評価部>
再利用性評価部302は、テストケース候補3010に含まれる各既存テストケース30111に対して再利用性を評価し、再利用度データ3020を生成する。
再利用性評価部302は、テストケース候補3010に含まれる各既存テストケース30111に対して再利用性を評価し、再利用度データ3020を生成する。
図19は再利用性評価部302の構成を示した図である。再利用性評価部302は、候補間コードクローン解析部3021と、再利用グラフ生成部3023と、再利用度算出部3025からなる。
テストケース候補3010に含まれる各既存テストケース30111の再利用度は、再利用グラフを用いて算出される。
<候補間コードクローン解析部>
候補間コードクローン解析部3021は、テストケース候補3010に含まれる既存テストケース30111同士に関してコードクローン解析を行う。前記コードクローン解析は、上述のコードクローン解析部3012と同一の方法で行う。
候補間コードクローン解析部3021は、テストケース候補3010に含まれる既存テストケース30111同士に関してコードクローン解析を行う。前記コードクローン解析は、上述のコードクローン解析部3012と同一の方法で行う。
候補間コードクローン解析部3021は、解析の結果として、候補間コードクローンデータ3022を生成する。前記候補間コードクローンデータ3022は、コードクローン解析部3012が生成するコードクローンデータ3013のうち、テストケース候補3010に含まれる既存テストケース30111同士に関するものと同一である。
<再利用グラフ生成部>
図22は、再利用グラフ生成部3023において実行される処理の一例を示すフローチャートある。ステップS30231にて、再利用グラフ生成部3023は、候補間コードクローンデータ3022を入力として受け取る。
図22は、再利用グラフ生成部3023において実行される処理の一例を示すフローチャートある。ステップS30231にて、再利用グラフ生成部3023は、候補間コードクローンデータ3022を入力として受け取る。
ステップS30232にて、再利用グラフ生成部3023は、処理対象とするテストケース候補3010を識別するインデックスiを0に初期化する。ステップS30233にて、再利用グラフ生成部3023は、インデックスiがテストケース候補数より小さいか否かを判定し、テストケース候補数より小さい場合にはステップS30234に進み、テストケース候補数以上の場合にはステップS30236に進む。
ステップS30234にて、再利用グラフ生成部3023は、テストケース候補[i]を再利用度グラフ3024にノードとして追加する。ステップS30235にて、再利用グラフ生成部3023は、インデックスiをインクリメントした後に、ステップS30233に戻って上記処理を繰り返す。
ステップS30236にて、再利用グラフ生成部3023は、インデックスiを0に初期化する。ステップS30237にて、再利用グラフ生成部3023は、インデックスiがテストケース候補数より小さいか否かを判定し、テストケース候補数より小さい場合にはステップS30238に進み、テストケース候補数以上の場合にはステップS3023Fに進んで処理を終了する。
ステップS30238にて、再利用グラフ生成部3023は、インデックスiのテストケース候補に対して比較の対象となるテストケース候補を識別するインデックスjを0に初期化する。
ステップS30239にて、再利用グラフ生成部3023は、インデックスjがテストケース候補数より小さいか否かを判定し、テストケース候補数より小さい場合にはステップS3023Aに進み、テストケース候補数以上の場合にはステップS3023Bに進む。
ステップS3023Aにて、再利用グラフ生成部3023は、インデックスiをインクリメントしてからステップS30237に戻って上記処理を繰り返すする。
ステップS3023Bにて、再利用グラフ生成部3023は、テストケース候補[i]にテストケース候補[j]のクローンがどれくらい存在するかを表すコードクローン[i][j]が予め設定された閾値より大きいか否かを判定し、閾値より大きい場合にはステップS3023Cに進み、閾値以下の場合にはステップS3023Eに進む。前記閾値は、テストケース候補[i]とテストケース候補[j]を類似又は非類似のどちらに判定するかを決定するためのものである。
ステップS3023Cにて、再利用グラフ生成部3023は、テストケース候補[j]にテストケース候補[i]のクローンがどれくらい存在するかを表すコードクローン[j][i](候補間コードクローンデータ3022に格納されている値)が前記閾値より大きいか否かを判定し、閾値より大きい場合にはステップS3023Dに進み、前記閾値以下の場合にはステップS3023Eに進む。
ステップS3023Dにて、再利用グラフ生成部3023は、インデックスiで識別したテストケースの候補をグラフ上で記述したノード(ノードi)とインデックスjで識別したテストケースの候補をグラフ上で記述したノード(ノードj)の間にリンクを生成する。
ステップS3023Eにて、再利用グラフ生成部3023は、インデックスjをインクリメントしてからステップS30239に戻って上記処理を繰り返す。
以上の処理により、前記テストケース候補3010に含まれるすべての既存テストケース30111をノードとし、既存テストケース30111同士のコードクローン解析結果により算出される該既存テストケース30111間の類似度が閾値以上の場合にノード間のリンクを生成することで再利用度グラフ3024を生成することができる。
再利用度グラフ3024は、多くのリンクがつながっているノードに対応する既存テストケース30111が、テストケース候補3010に含まれる他の既存テストケース30111の多くと類似していることを表している。すなわち、前記多くのリンクがつながっているノードに対応する既存テストケース30111が参照するにふさわしいと考えられる。
<再利用グラフ>
図20は再利用度グラフ3024の例を示した図である。再利用度グラフ3024は、テストケースをノードとし、テストケース同士のコードクローンの割合に応じてリンクを生成したグラフである。
図20は再利用度グラフ3024の例を示した図である。再利用度グラフ3024は、テストケースをノードとし、テストケース同士のコードクローンの割合に応じてリンクを生成したグラフである。
図20に示す例の場合、テストケース2は、テストケース1とテストケース4に対し、閾値以上の割合で共通するコードクローンを有することを示す。同様に、テストケース1は、テストケース2とテストケース4とテストケース10に対し、閾値以上の割合で共通するコードクローンを持つことを示している。
<再利用度算出部>
図23は再利用度算出部3025において実行される処理のフローチャートである。
図23は再利用度算出部3025において実行される処理のフローチャートである。
ステップS30251にて、再利用度算出部3025は再利用度グラフ3024を入力として受け取る。
ステップS30252にて、再利用度算出部3025は処理対象とするテストケース候補3010を識別するためのインデックスiを0に初期化する。
ステップS30253にて、再利用度算出部3025はインデックスiが再利用グラフに含まれるノード数より小さいか否かを判定し、ノード数より小さい場合にはステップS30254に進み、ノード数以上の場合にはステップS3025Bに進む。
ステップS30254にて、再利用度算出部3025は、インデックスiで識別されるテストケース候補3010に対応するノード(ノードi)に接続されるリンクの数を格納する変数Countを0に初期化する。
ステップS30255にて、再利用度算出部3025はインデックスiに対して比較の対象とするテストケース候補3010及び該テストケース候補に対応するノード(ノードj)を識別するためのインデックスjを0に初期化する。
ステップS30256にて、再利用度算出部3025はインデックスjが再利用度グラフ3024に含まれるノード数より小さいか否かを判定し、ノード数より小さい場合にはステップS30257に進み、ノード数以上の場合にはステップS30259に進む。
ステップS30257にて、再利用度算出部3025はノードiとノードjの間にリンクが存在するか否かを判定し、存在する場合にはステップS30258に進み、存在しない場合にはステップS30256に戻って上記処理を繰り返す。
ステップS30258にて、再利用度算出部3025は変数Countをインクリメントした後に、ステップS30256に戻って上記処理を繰り返す。
ステップS30259にて、再利用度算出部3025は再利用度データ[i](ノードiの再利用度を格納する)に変数Countの値を代入する。ステップS3025Aにて、再利用度算出部3025はインデックスiをインクリメントしてからステップS30253に戻って上記処理を繰り返す。
ステップS3025Bにて、再利用度算出部3025は再利用度データ3020を出力して処理を終了する。
これにより、再利用度算出部3025は、前記再利用度グラフ3024に基づきテストケース候補3010に含まれる各既存テストケース30111が有するリンクの数を再利用度データ3020として出力することができる。
<再利用度データ>
図21は、再利用度データ3020の例を示した図である。再利用度データ3020は、既存テストケース30111の識別子を格納するテストケースと、再利用度をひとつのエントリに含み、各テストケースの再利用度を表形式で保存したデータである。
図21は、再利用度データ3020の例を示した図である。再利用度データ3020は、既存テストケース30111の識別子を格納するテストケースと、再利用度をひとつのエントリに含み、各テストケースの再利用度を表形式で保存したデータである。
<テストケース出力部>
図24は実施例1におけるテストケース出力部4において実行される処理のフローチャートである。
図24は実施例1におけるテストケース出力部4において実行される処理のフローチャートである。
ステップS40からテストケース出力部4の処理が開始される。ステップS41にて、テストケース出力部4は再利用性評価部302から再利用度データ3020を入力として受け取る。
ステップS42にて、テストケース出力部4は処理対象のテストケース候補3010を識別するためのインデックスiを0に初期化する。ステップS43にて、テストケース出力部4は、最大の再利用度を有するテストケース候補3010を識別するインデックスを格納する変数Max_idを0に初期化する。
ステップS44にて、テストケース出力部4は、インデックスiが再利用度データ数より小さいか否かを判定し、再利用度データ数より小さい場合にはステップS45に進み、再利用度データ数以上の場合にはステップS48に進む。
ステップS45にて、テストケース出力部4は、再利用度データ[i]が再利用度データ[Max_id]より大きいか否かを判定し、再利用度データ[Max_id]より大きい場合にはステップS46に進み、再利用度データ[Max_id]以下の場合にはステップS47に進む。
ステップS46にて、テストケース出力部4は、変数Max_idにiを代入する。ステップS47にて、テストケース出力部4は、インデックスiをインクリメントしてからステップS44に戻って上記処理を繰り返す。
ステップS48にて、テストケース出力部4は、テストケース[Max_id]を参照テストケース12として出力する。そして、ステップS49ではテストケース出力部4が処理を終了する。
これにより、テストケース候補3010のうち、再利用度データ3020が最大である既存テストケース30111を参照テストケース12として出力することができる。
本実施例によれば、外部から与えられた新規テスト要件11に対して、過去に人手で生成した既存テストケース30111の中から最も再利用度の高い既存テストケース30111を提示することができるため、テストケースを効率よく生成することが可能となる。
本発明にかかる実施例2におけるテスト支援装置及び方法について説明する。前記実施例1と異なる点は、テストケース出力部4が複数の参照テストケース12を出力する点である。なお、実施例1と同様の構成については、同一の符号を付してその説明を省略する。
<テストケース出力部>
図25は実施例2におけるテストケース出力部4において実行される処理のフローチャートを示した図である。前記実施例1の図24に対して、実施例2ではステップS4AとステップS4Bを追加した点が相違する。
図25は実施例2におけるテストケース出力部4において実行される処理のフローチャートを示した図である。前記実施例1の図24に対して、実施例2ではステップS4AとステップS4Bを追加した点が相違する。
ステップS48で参照テストケース12を決定した後、ステップS4Aでは、テストケース出力部4がテストケース作成者に対して、決定された参照テストケース12が適切であるか否か出力装置25を介して問い合わせる。
テストケース作成者からの入力が適切であれば、テストケース出力部4はステップS49に進んで、現在の参照テストケース12を出力して処理を終了する。一方、テストケース作成者からの入力が不適切であれば、テストケース出力部4はステップS4Bに進む。
ステップS4Bでは、テストケース出力部4が再利用度データ[Max_id]を抽出して、当該[Max_id]のデータを再利用度データ3020から削除してから、ステップS42へ戻って上記処理を繰り返す。
テストケース出力部4は、再利用度データ3020の中から、最も再利用度が高いテストケース候補3010を出力し、テストケース作成者が受け入れると判断をすれば該テストケース候補3010を参照テストケース12として出力する。
テストケース作成者が拒否した場合、テストケース出力部4は、2番目に再利用度が高いテストケース候補3010を出力し、テストケース作成者が受け入れると判断をすれば該テストケース候補3010を参照テストケース12として出力する。
テストケース作成者が2番目も拒否した場合、テストケース出力部4は、3番目に再利用度が高い既存テストケース30111を出力し、テストケース作成者が受け入れると判断をすれば該テストケース候補3010を参照テストケース12として出力する処理をテストケース作成者が受け入れるまで繰り返す。
本実施例によれば、テスト支援装置0から最初に出力された参照テストケース12がテストケース作成者にとって受け入れられるものでなくても、テストケース候補3010にテストケースが存在する限りにおいてテストケースを提示しつづけることができ、テストケース作成者がより再利用できると判断したテストケース候補3010を参照テストケース12として選択することが可能となる。
<結び>
以上のように、上記実施例のテスト支援装置0は、以下のような構成とすることができる。
以上のように、上記実施例のテスト支援装置0は、以下のような構成とすることができる。
(1)プロセッサ(21)とメモリ(22)を有して、新規テスト要件(12)を受け付けて、再利用可能な参照テストケース(12)を出力するテスト支援装置であって、自然言語で記述された前記新規テスト要件(12)を受け付けるテスト要件取得部(1)と、前記受け付けた新規テスト要件(12)について自然言語解析を実施してテスト要件数値化データ(200)を生成するテスト要件解析部(2)と、過去に生成された既存テストケース(30111)を前記テスト要件数値化データ(200)に基づいて解析して、再利用可能な前記既存テストケース(30111)の候補を出力テストケース候補(3010)として生成するテストケース解析部(3)と、前記出力テストケース候補(3010)の一部又は全部を参照テストケース(12)として出力するテストケース出力部(4)と、を有し、前記テストケース解析部(3)は、前記テスト要件数値化データ(200)に基づいて1つ以上の既存テストケース(30111)を出力テストケース候補(3010)として生成するテストケース候補抽出部(301)と、前記出力テストケース候補(3010)のそれぞれに対する再利用度を算出する再利用性評価部(302)と、を有し、前記テストケース出力部(4)は、前記再利用性評価部(302)が算出した前記再利用度に基づいて前記出力テストケース候補(3010)の中から参照テストケース(12)を決定することを特徴とするテスト支援装置。
上記構成により、テスト支援装置0は、新規テスト要件11に対して、過去に生成した既存テストケース30111の中から最も再利用度の高い既存テストケース30111を用いて、新規テスト要件11に適用するテストケースを効率よく生成することが可能となる。
(2)上記(1)に記載のテスト支援装置であって、前記テストケース候補抽出部(301)は、前記既存テストケース(30111)と前記出力テストケース候補(3010)に含まれて、かつ、当該既存テストケース(30111)と異なる既存テストケース(30111)の間の類似度を解析して、前記類似度のうち所定の閾値以上の値となっているテストケースの個数に基づいて、前記出力テストケース候補(3010)のそれぞれに対する再利用度を算出することを特徴とするテスト支援装置。
上記構成により、テスト支援装置0は、既存テストケース30111の間の類似度と所定の閾値を比較して出力テストケース候補の再利用度を算出することができる。
(3)上記(1)に記載のテスト支援装置であって、前記テストケース候補抽出部(301)は、既存テストケース保存部(3011)と、既存テストケース保存部(3012)と、クラスタリング実施部(3014)と、テストケース候補決定部(3016)と、を有し、前記既存テストケース保存部(3011)は、前記過去に開発したテスト要件を既存テスト要件(30112)とし、前記既存テスト要件(30112)を満たしていることを検証するために開発したテストケースを既存テストケース(30111)として、前記既存テスト要件(30112)と前記既存テストケース(30111)を紐づけて保存し、前記既存テストケース保存部(3012)は、前記既存テストケース保存部(3011)に保存された既存テストケース(30111)の中から2つの既存テストケース(30111)を抽出して前記2つの既存テストケース(30111)において記述された形式言語の間のコードクローンを解析して前記形式言語の要素数に対する前記コードクローンの要素数の占める割合を算出し、前記2つの既存テストケース(30111)の抽出及び前記抽出による前記算出を前記既存テストケース保存部(3011)に保存された既存テストケース(30111)のすべての組み合わせに対して行うことによりコードクローンデータ(3013)を生成し、前記クラスタリング実施部(3014)は、前記コードクローンデータ(3013)に保存された前記形式言語の要素数に対する前記コードクローンの要素数の占める割合を前記既存テストケース(30111)間の疑似的な距離とみなすことによりクラスタリングを実施して前記既存テストケース保存部(3011)に保存された既存テストケース(30111)をクラスタに分類して各既存テストケース(30111)がどのクラスタに分類されたかの情報をクラスタデータ(3015)として生成し、前記テストケース候補決定部(3016)は、前記テスト要件数値化データ(200)に基づいて前記クラスタの中からクラスタを1つ決定して前記決定したクラスタに含まれる少なくとも1つの既存テストケース(30111)を出力テストケース候補(3010)として決定することを特徴とするテスト支援装置。
上記構成により、コードクローン解析部3012は、既存テストケース保存部3011に保存された既存テストケース30111同士の類似度を評価して、2つの既存テストケース30111に対してトークン構成が同じである箇所をコードクローンとして検出することができる。また、クラスタリング実施部3014は、コードクローンデータ3013に基づいて、類似した既存テストケース30111同士をクラスタに分類し、テストケース候補決定部3016は、テスト要件解析部2が受け取ったテスト要件に対して参照すべき既存テストケース30111の候補を決定することができる。
(4)上記(2)に記載のテスト支援装置であって、前記既存テストケース(30111)と前記出力テストケース候補(3010)に含まれて、かつ既存テストケース(30111)と異なる既存テストケース(30111)の間の類似度は、当該既存テストケース(30111)を記述した形式言語と前記出力テストケース候補(3010)に含まれて、かつ当該既存テストケース(30111)とは異なる既存テストケース(30111)を記述した形式言語の間のコードクローンを解析して前記形式言語の要素数に対する前記コードクローンの要素数が占める割合であることを特徴とするテスト支援装置。
上記構成により、類似度は、既存テストケースと出力テストケース候補に含まれて、かつ当該既存テストケースとは異なる既存テストケースを記述した形式言語の間のコードクローンを解析して、前記形式言語の要素数に対するコードクローンの要素数が占める割合から算出することが可能となる。
(5)上記(3)に記載のテスト支援装置であって、前記テストケース候補決定部(3016)は、分類器生成部(30161)と、分類実施部(30162)と、を有し、前記分類器生成部(30161)は、前記既存テストケース(30111)に紐づいた既存テスト要件(30112)を前記自然言語解析を用いて数値化した既存テスト要件(30112)数値化データ(200)を学習データとして前記既存テスト要件(30112)に紐づいた既存テストケース(30111)がどのクラスタに分類されたかを前記クラスタデータ(3015)に基づき特定し、当該分類されたクラスタを識別する識別子を正解ラベルとして所定の分類器生成手法を用いて分類を学習することによりテスト要件数値化データ(200)がどのクラスタに分類されるかを決定する分類器を生成し、前記分類実施部(30162)は、前記分類器に前記テスト要件数値化データ(200)を入力することにより、前記テスト要件数値化データ(200)がどのクラスタに分類されるかを決定することを特徴とするテスト支援装置。
上記構成により、分類実施部30162は分類器生成部30161で生成した分類器を用いて、新規テスト要件11の自然言語解析の結果としてのテスト要件数値化データ200に対応するクラスタを特定し、当該クラスタに含まれる既存テストケース30111をテストケース候補として特定することが可能となる。
(6)上記(1)に記載のテスト支援装置であって、前記参照テストケース(12)は、計算機が解釈可能な形式言語で記述されることを特徴とするテスト支援装置。
上記構成により、決定された参照テストケース12を計算機に読み込ませれば、自動的にテストケースを実行することが可能となり、テストケースの作業に要する労力を低減することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
0 テスト支援装置
1 テスト要件取得部
2 テスト要件解析部
3 テストケース解析部
4 テストケース出力部
11 新規テスト要件
12 参照テストケース
21 プロセッサ
22 メモリ
23 ストレージ装置
24 入力装置
25 出力装置
26 ネットワーク装置
200 テスト要件数値化データ
301 テストケース候補抽出部
302 再利用性評価部
3010 テストケース候補
3011 既存テストケース保存部
3012 コードクローン解析部
3013 コードクローンデータ
3014 クラスタリング実施部
3015 クラスタデータ
3016 テストケース候補決定部
3020 再利用度データ
3021 コードクローン解析部
3022 コードクローンデータ
3023 再利用度グラフ生成部
3024 再利用グラフ
3025 再利用度算出部
30111 既存テストケース
30121 字句解析
30122 トークン分割テストケース
30123 トークンカウント部
30124 トークン数データ
30125 コードクローン抽出部
30161 分類器生成部
30162 分類実施部
1 テスト要件取得部
2 テスト要件解析部
3 テストケース解析部
4 テストケース出力部
11 新規テスト要件
12 参照テストケース
21 プロセッサ
22 メモリ
23 ストレージ装置
24 入力装置
25 出力装置
26 ネットワーク装置
200 テスト要件数値化データ
301 テストケース候補抽出部
302 再利用性評価部
3010 テストケース候補
3011 既存テストケース保存部
3012 コードクローン解析部
3013 コードクローンデータ
3014 クラスタリング実施部
3015 クラスタデータ
3016 テストケース候補決定部
3020 再利用度データ
3021 コードクローン解析部
3022 コードクローンデータ
3023 再利用度グラフ生成部
3024 再利用グラフ
3025 再利用度算出部
30111 既存テストケース
30121 字句解析
30122 トークン分割テストケース
30123 トークンカウント部
30124 トークン数データ
30125 コードクローン抽出部
30161 分類器生成部
30162 分類実施部
Claims (12)
- プロセッサとメモリを有して、新規テスト要件を受け付けて、再利用可能な参照テストケースを出力するテスト支援装置であって、
自然言語で記述された前記新規テスト要件を受け付けるテスト要件取得部と、
前記受け付けた新規テスト要件について自然言語解析を実施してテスト要件数値化データを生成するテスト要件解析部と、
過去に生成された既存テストケースを前記テスト要件数値化データに基づいて解析して、再利用可能な前記既存テストケースの候補を出力テストケース候補として生成するテストケース解析部と、
前記出力テストケース候補の一部又は全部を参照テストケースとして出力するテストケース出力部と、を有し、
前記テストケース解析部は、
前記テスト要件数値化データに基づいて1つ以上の既存テストケースを出力テストケース候補として生成するテストケース候補抽出部と、
前記出力テストケース候補のそれぞれに対する再利用度を算出する再利用性評価部と、を有し、
前記テストケース出力部は、
前記再利用性評価部が算出した前記再利用度に基づいて前記出力テストケース候補の中から参照テストケースを決定することを特徴とするテスト支援装置。 - 請求項1に記載のテスト支援装置であって、
前記テストケース候補抽出部は、
前記既存テストケースと前記出力テストケース候補に含まれて、かつ、当該既存テストケースと異なる既存テストケースの間の類似度を解析して、前記類似度のうち所定の閾値以上の値となっている既存テストケースの個数に基づいて、前記出力テストケース候補のそれぞれに対する再利用度を算出することを特徴とするテスト支援装置。 - 請求項1に記載のテスト支援装置であって、
前記テストケース候補抽出部は、
既存テストケース保存部と、コードクローン解析部と、クラスタリング実施部と、テストケース候補決定部と、を有し、
前記既存テストケース保存部は、
前記過去に開発したテスト要件を既存テスト要件とし、前記既存テスト要件を満たしていることを検証するために開発したテストケースを既存テストケースとして、前記既存テスト要件と前記既存テストケースを紐づけて保存し、
前記コードクローン解析部は、
前記既存テストケース保存部に保存された既存テストケースの中から2つの既存テストケースを抽出して前記2つの既存テストケースにおいて記述された形式言語の間のコードクローンを解析して前記形式言語の要素数に対する前記コードクローンの要素数の占める割合を算出し、前記2つの既存テストケースの抽出及び前記抽出による前記算出を前記既存テストケース保存部に保存された既存テストケースのすべての組み合わせに対して行うことによりコードクローンデータを生成し、
前記クラスタリング実施部は、
前記コードクローンデータに保存された前記形式言語の要素数に対する前記コードクローンの要素数の占める割合を前記既存テストケース間の疑似的な距離とみなすことによりクラスタリングを実施して前記既存テストケース保存部に保存された既存テストケースをクラスタに分類して各既存テストケースがどのクラスタに分類されたかの情報をクラスタデータとして生成し、
前記テストケース候補決定部は、
前記テスト要件数値化データに基づいて前記クラスタの中からクラスタを1つ決定して前記決定したクラスタに含まれる少なくとも1つの既存テストケースを出力テストケース候補として決定することを特徴とするテスト支援装置。 - 請求項2に記載のテスト支援装置であって、
前記既存テストケースと前記出力テストケース候補に含まれて、かつ既存テストケースと異なる既存テストケースの間の類似度は、
当該既存テストケースを記述した形式言語と前記出力テストケース候補に含まれて、かつ当該既存テストケースとは異なる既存テストケースを記述した形式言語の間のコードクローンを解析して前記形式言語の要素数に対する前記コードクローンの要素数が占める割合であることを特徴とするテスト支援装置。 - 請求項3に記載のテスト支援装置であって、
前記テストケース候補決定部は、
分類器生成部と、分類実施部と、を有し、
前記分類器生成部は、
前記既存テストケースに紐づいた既存テスト要件を前記自然言語解析を用いて数値化した既存テスト要件数値化データを学習データとして前記既存テスト要件に紐づいた既存テストケースがどのクラスタに分類されたかを前記クラスタデータに基づき特定し、当該分類されたクラスタを識別する識別子を正解ラベルとして所定の分類器生成手法を用いて分類を学習することによりテスト要件数値化データがどのクラスタに分類されるかを決定する分類器を生成し、
前記分類実施部は、
前記分類器に前記テスト要件数値化データを入力することにより、前記テスト要件数値化データがどのクラスタに分類されるかを決定することを特徴とするテスト支援装置。 - 請求項1に記載のテスト支援装置であって、
前記参照テストケースは、計算機が解釈可能な形式言語で記述されることを特徴とするテスト支援装置。 - プロセッサとメモリを有する計算機が、新規テスト要件を受け付けて、再利用可能な参照テストケースを出力するテスト支援方法であって、
前記計算機が、自然言語で記述された前記新規テスト要件を受け付けるテスト要件取得ステップと、
前記計算機が、前記受け付けた新規テスト要件について自然言語解析を実施してテスト要件数値化データを生成するテスト要件解析ステップと、
前記計算機が、過去に生成された既存テストケースを前記テスト要件数値化データに基づいて解析して、再利用可能な前記既存テストケースの候補を出力テストケース候補として生成するテストケース解析ステップと、
前記計算機が、前記出力テストケース候補の一部又は全部を参照テストケースとして出力するテストケース出力ステップと、を含みし、
前記テストケース解析ステップは、
前記テスト要件数値化データに基づいて1つ以上の既存テストケースを出力テストケース候補として生成するテストケース候補抽出ステップと、
前記出力テストケース候補のそれぞれに対する再利用度を算出する再利用性評価ステップと、を含みし、
前記テストケース出力ステップは、
前記再利用性評価ステップで算出された前記再利用度に基づいて前記出力テストケース候補の中から参照テストケースを決定することを特徴とするテスト支援方法。 - 請求項7に記載のテスト支援方法であって、
前記テストケース候補抽出ステップは、
前記既存テストケースと前記出力テストケース候補に含まれて、かつ、当該既存テストケースと異なる既存テストケースの間の類似度を解析して、前記類似度のうち所定の閾値以上の値となっている既存テストケースの個数に基づいて、前記出力テストケース候補のそれぞれに対する再利用度を算出することを特徴とするテスト支援方法。 - 請求項7に記載のテスト支援方法であって、
前記テストケース候補抽出ステップは、
既存テストケース保存ステップと、コードクローン解析ステップと、クラスタリング実施ステップと、テストケース候補決定ステップと、を含み、
前記既存テストケース保存ステップは、
前記過去に開発したテスト要件を既存テスト要件とし、前記既存テスト要件を満たしていることを検証するために開発したテストケースを既存テストケースとして、前記既存テスト要件と前記既存テストケースを紐づけて保存し、
前記コードクローン解析ステップは、
前記保存された既存テストケースの中から2つの既存テストケースを抽出して前記2つの既存テストケースにおいて記述された形式言語の間のコードクローンを解析して前記形式言語の要素数に対する前記コードクローンの要素数の占める割合を算出し、前記2つの既存テストケースの抽出及び前記抽出による前記算出を前記保存された既存テストケースのすべての組み合わせに対して行うことによりコードクローンデータを生成し、
前記クラスタリング実施ステップは、
前記コードクローンデータに保存された前記形式言語の要素数に対する前記コードクローンの要素数の占める割合を前記既存テストケース間の疑似的な距離とみなすことによりクラスタリングを実施して前記保存された既存テストケースをクラスタに分類して各既存テストケースがどのクラスタに分類されたかの情報をクラスタデータとして生成し、
前記テストケース候補決定ステップは、
前記テスト要件数値化データに基づいて前記クラスタの中からクラスタを1つ決定して前記決定したクラスタに含まれる少なくとも1つの既存テストケースを出力テストケース候補として決定することを特徴とするテスト支援方法。 - 請求項8に記載のテスト支援方法であって、
前記既存テストケースと前記出力テストケース候補に含まれて、かつ既存テストケースと異なる既存テストケースの間の類似度は、
当該既存テストケースを記述した形式言語と前記出力テストケース候補に含まれて、かつ当該既存テストケースとは異なる既存テストケースを記述した形式言語の間のコードクローンを解析して前記形式言語の要素数に対する前記コードクローンの要素数が占める割合であることを特徴とするテスト支援方法。 - 請求項9に記載のテスト支援方法であって、
前記テストケース候補決定ステップは、
分類器生成ステップと、分類実施ステップと、を有し、
前記分類器生成ステップは、
前記既存テストケースに紐づいた既存テスト要件を前記自然言語解析を用いて数値化した既存テスト要件数値化データを学習データとして前記既存テスト要件に紐づいた既存テストケースがどのクラスタに分類されたかを前記クラスタデータに基づき特定し、当該分類されたクラスタを識別する識別子を正解ラベルとして所定の分類器生成手法を用いて分類を学習することによりテスト要件数値化データがどのクラスタに分類されるかを決定する分類器を生成し、
前記分類実施ステップは、
前記分類器に前記テスト要件数値化データを入力することにより、前記テスト要件数値化データがどのクラスタに分類されるかを決定することを特徴とするテスト支援方法。 - 請求項7に記載のテスト支援方法であって、
前記参照テストケースは、計算機が解釈可能な形式言語で記述されることを特徴とするテスト支援方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020116748A JP2022014468A (ja) | 2020-07-07 | 2020-07-07 | テスト支援装置及びテスト支援方法 |
PCT/JP2021/015753 WO2022009499A1 (ja) | 2020-07-07 | 2021-04-16 | テスト支援装置及びテスト支援方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020116748A JP2022014468A (ja) | 2020-07-07 | 2020-07-07 | テスト支援装置及びテスト支援方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022014468A true JP2022014468A (ja) | 2022-01-20 |
Family
ID=79552883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020116748A Pending JP2022014468A (ja) | 2020-07-07 | 2020-07-07 | テスト支援装置及びテスト支援方法 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP2022014468A (ja) |
WO (1) | WO2022009499A1 (ja) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009149815A1 (fr) * | 2008-05-19 | 2009-12-17 | Johnson Controls Technology Company | Procede d'elaboration automatique de cas de test pour la verification d'au moins une partie d'un logiciel |
JP6148362B1 (ja) * | 2016-02-04 | 2017-06-14 | 株式会社ベリサーブ | 試験設計支援システム、試験設計支援方法、及び試験設計支援プログラム |
JP2020098413A (ja) * | 2018-12-17 | 2020-06-25 | 株式会社リアルグローブ | テスト支援装置、テスト支援方法及びコンピュータプログラム |
-
2020
- 2020-07-07 JP JP2020116748A patent/JP2022014468A/ja active Pending
-
2021
- 2021-04-16 WO PCT/JP2021/015753 patent/WO2022009499A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022009499A1 (ja) | 2022-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kreimer | Adaptive detection of design flaws | |
US8589884B2 (en) | Method and system for identifying regression test cases for a software | |
US8707268B2 (en) | Testing operations of software | |
Ahmed et al. | Capbug-a framework for automatic bug categorization and prioritization using nlp and machine learning algorithms | |
US9477799B2 (en) | Hierarchical determination of metrics for component-based parameterized SoCs | |
JP2018181318A (ja) | ソフトウェア欠陥報告を分類するシステム及び方法 | |
US20150033212A1 (en) | Testing program, testing method, and testing device | |
CN105283866A (zh) | 使用相似频率的优化分析 | |
CN105122212A (zh) | 自动化跟踪系统中的周期性优化 | |
Rehse et al. | Clustering business process activities for identifying reference model components | |
JP7059220B2 (ja) | 機械学習プログラム検証装置および機械学習プログラム検証方法 | |
An et al. | An empirical study of crash-inducing commits in mozilla firefox | |
JP5846006B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
CN109344017A (zh) | 一种基于机器学习预测内存故障的方法,设备及可读存储介质 | |
CN115098389B (zh) | 一种基于依赖模型的rest接口测试用例生成方法 | |
JP6658507B2 (ja) | 負荷推定システム、情報処理装置、負荷推定方法、及び、コンピュータ・プログラム | |
CN111949514A (zh) | 一种模型预测方法、装置及存储介质 | |
US11645539B2 (en) | Machine learning-based techniques for representing computing processes as vectors | |
Fraternali et al. | Automating function point analysis with model driven development | |
AU2021251463B2 (en) | Generating performance predictions with uncertainty intervals | |
Schlie et al. | Clustering variation points in matlab/simulink models using reverse signal propagation analysis | |
Frick | Understanding software changes: Extracting, classifying, and presenting fine-grained source code changes | |
US20140325490A1 (en) | Classifying Source Code Using an Expertise Model | |
WO2022009499A1 (ja) | テスト支援装置及びテスト支援方法 | |
US20210149793A1 (en) | Weighted code coverage |