JP6559376B2 - テストケース選択装置およびテストケース選択プログラム - Google Patents

テストケース選択装置およびテストケース選択プログラム Download PDF

Info

Publication number
JP6559376B2
JP6559376B2 JP2019500103A JP2019500103A JP6559376B2 JP 6559376 B2 JP6559376 B2 JP 6559376B2 JP 2019500103 A JP2019500103 A JP 2019500103A JP 2019500103 A JP2019500103 A JP 2019500103A JP 6559376 B2 JP6559376 B2 JP 6559376B2
Authority
JP
Japan
Prior art keywords
change
function
test case
target
program
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
JP2019500103A
Other languages
English (en)
Other versions
JPWO2018150507A1 (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of JPWO2018150507A1 publication Critical patent/JPWO2018150507A1/ja
Application granted granted Critical
Publication of JP6559376B2 publication Critical patent/JP6559376B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/368Test management for test version control, e.g. updating test cases to a new software version
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

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)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、変更前プログラムに対して実施された複数のテストケースから変更後プログラムに対して実施すべきテストケースを選択するための技術に関するものである。
プログラムに変更が加えられた際には、その変更がプログラムに意図しない影響を与えていないか、つまり、プログラムに新たな不具合が生じていないかを確認するために、テストを行う必要がある。
プログラムに新たな不具合が生じていないかを確認する方法として、変更前のプログラムに対して実施された全てのテストケースを変更後のプログラムに対して実施する方法がある。
しかし、ソフトウェアの開発規模が大きければテストケースの数が多いため全てのテストケースを実施するための工数が膨大になってしまう。また、変更された仕様に基づいて各テストケースにおける出力期待値は変更された仕様に基づいて人手で再設定する必要があるため、各テストケースにおける出力期待値を再設定するための工数も膨大になってしまう。
そのため、プログラムの変更に伴う不具合が発見される可能性があるテストケース、すなわち、プログラムの変更前後で実行結果が変わる可能性があるテストケースを選択し、選択されたテストケースだけを実施する方法が用いられることがある。
特許文献1には、変更前後のプログラムの差分から出力変数の値に影響を及ぼす命令を抽出し、抽出された命令が実行されるテストケースを選択する技術が開示されている。
特許文献2には、変更前後のプログラムの各々に対してシンボリック実行を行って出力値域の変化を抽出し、値域が変化する出力変数が使用されるテストケースを選択する技術が開示されている。
特開2016−164727号公報 特開2015−090616号公報
特許文献1に開示された技術では、変更前後のプログラムの差分として変更前後のソースコードの差分がステートメント単位で検出される。そのため、機能的な変更を伴わないリファクタリングに伴う差分も検出され、リファクタリングに伴う差分から出力変数の値に影響を及ぼす命令が抽出されてしまう。そして、プログラムの変更前後で出力が変化しないテストケース、すなわち、実施不要なテストケースも選択されてしまう。その結果、テスト工数が増加してしまう。
特許文献2に開示された技術では、変更前後でプログラムの動作は変化したが出力変数の値域は変わらない場合、プログラムの変更に伴う影響を検出することができない。したがって、プログラムの変更前後で出力が変化する可能性があるテストケース、すなわち、再実行が必要なテストケースを見落とす可能性がある。
本発明は、変更前プログラムに対して実施された複数のテストケースから変更後プログラムに対して実施すべきテストケースである重要テストケースを選択できるようにすることを目的とする。
本発明のテストケース選択装置は、
変更前プログラムに含まれる変更前対象関数と変更後プログラムに含まれる関数であり前記変更前対象関数に対応する関数であり前記変更前対象関数と一致しない関数である変更後対象関数との組である対象組を1つ以上示す対象組リストから、前記変更前対象関数と前記変更後対象関数との両方に同じ入力が与えられた場合に前記変更後対象関数の出力が前記変更前対象関数の出力と一致するという条件を満たさない対象組である不等価組を抽出する不等価組抽出部と、
前記複数のテストケースから、前記不等価組に含まれる変更前対象関数が呼び出されるテストケースを前記重要テストケースとして選択するテストケース選択部とを備える。
本発明によれば、変更前プログラムに対して実施された複数のテストケースから変更後プログラムに対して実施すべきテストケースである重要テストケースを選択することができる。
実施の形態1におけるテストケース選択装置100の構成図。 実施の形態1におけるテストケース選択方法のフローチャート。 実施の形態1における変更前プログラム200および変更後プログラム210を示す図。 実施の形態1における対象組リスト生成処理(S110)のフローチャート。 実施の形態1における変更後関数リスト220を示す図。 実施の形態1における関数対応表230を示す図。 実施の形態1における対象組リスト240を示す図。 実施の形態1における不等価組抽出処理(S120)のフローチャート。 実施の形態1における関数fを示す図。 実施の形態1における関数gを示す図。 実施の形態1における等価性リスト250を示す図。 実施の形態1における呼び出しリスト生成処理(S130)のフローチャート。 実施の形態1における変更前プログラム260を示す図。 実施の形態1における変更前プログラム261を示す図。 実施の形態1における呼び出しリスト270を示す図。 実施の形態1におけるテストケース選択処理(S140)のフローチャート。 実施の形態1における判定処理(S142)のフローチャート。 実施の形態1における重要テストケースリスト280を示す図。 実施の形態におけるテストケース選択装置100のハードウェア構成図。
実施の形態および図面において、同じ要素および対応する要素には同じ符号を付している。同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
実施の形態1.
変更前プログラムに対して実施された複数のテストケースから変更後プログラムに対して実施すべきテストケースを選択する形態について、図1から図18に基づいて説明する。
***構成の説明***
図1に基づいて、テストケース選択装置100の構成を説明する。
テストケース選択装置100は、プロセッサ901とメモリ902と補助記憶装置903といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
プロセッサ901は、演算処理を行うIC(Integrated Circuit)であり、他のハードウェアを制御する。例えば、プロセッサ901は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、またはGPU(Graphics Processing Unit)である。
メモリ902は揮発性の記憶装置である。メモリ902は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ902はRAM(Random Access Memory)である。メモリ902に記憶されたデータは必要に応じて補助記憶装置903に保存される。
補助記憶装置903は不揮発性の記憶装置である。例えば、補助記憶装置903は、ROM(Read Only Memory)、HDD(Hard Disk Drive)、またはフラッシュメモリである。補助記憶装置903に記憶されたデータは必要に応じてメモリ902にロードされる。
テストケース選択装置100は、対象組リスト生成部110と不等価組抽出部120と呼び出しリスト生成部130とテストケース選択部140といったソフトウェア要素を備える。ソフトウェア要素はソフトウェアで実現される要素である。
補助記憶装置903には、コンピュータを対象組リスト生成部110と不等価組抽出部120と呼び出しリスト生成部130とテストケース選択部140として機能させるためのテストケース選択プログラムが記憶されている。テストケース選択プログラムは、メモリ902にロードされて、プロセッサ901によって実行される。
さらに、補助記憶装置903にはOS(Operating System)が記憶されている。OSの少なくとも一部は、メモリ902にロードされて、プロセッサ901によって実行される。
つまり、プロセッサ901は、OSを実行しながら、テストケース選択プログラムを実行する。
テストケース選択プログラムを実行して得られるデータは、メモリ902、補助記憶装置903、プロセッサ901内のレジスタまたはプロセッサ901内のキャッシュメモリといった記憶装置に記憶される。
メモリ902はデータを記憶する記憶部191として機能する。但し、他の記憶装置が、メモリ902の代わりに、又は、メモリ902と共に、記憶部191として機能してもよい。
テストケース選択装置100は、プロセッサ901を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ901の役割を分担する。
テストケース選択プログラムは、磁気ディスク、光ディスクまたはフラッシュメモリ等の不揮発性の記憶媒体にコンピュータ読み取り可能に記憶することができる。不揮発性の記憶媒体は、一時的でない有形の媒体である。
***動作の説明***
テストケース選択装置100は、変更前プログラムに対して実施された複数のテストケースから、変更後プログラムに対して実施すべきテストケースを選択する。
変更前プログラムは、1つ以上の関数を含んだプログラムである。
変更前プログラムに含まれる1つ以上の関数のそれぞれを変更前関数という。
変更後プログラムは、変更が加えられたプログラムである。
変更後プログラムに含まれる1つ以上の関数のそれぞれを変更後関数という。
テストケースは、プログラムに対するテストの手順を示すデータである。
変更後プログラムに対して実施すべきテストケースを重要テストケースという。
具体的には、重要テストケースは、プログラムの変更前後で実行結果が変化する可能性があるテストケースである。つまり、重要テストケースは、変更後プログラムに対して実施されたときに得られる結果が変更前プログラムに対して実施されたときに得られる結果と異なる可能性があるテストケースである。
テストケース選択装置100の動作はテストケース選択方法に相当する。また、テストケース選択方法の手順はテストケース選択プログラムの手順に相当する。
図2に基づいて、テストケース選択方法を説明する。
ステップS110において、対象組リスト生成部110は対象組リストを生成する。
対象組リストは、対象組を1つ以上示すリストである。
対象組は、変更前対象関数と変更後対象関数との組である。
変更前対象関数は、変更後対象関数に対応し、且つ、変更後対象関数と一致しない変更前関数である。
変更後対象関数は、変更前対象関数に対応し、且つ、変更前対象関数と一致しない変更後関数である。
対象組リスト生成処理(S110)の詳細については後述する。
ステップS120において、不等価組抽出部120は、対象組リストから不等価組を抽出する。
不等価組は、変更前対象関数と変更後対象関数との両方に同じ入力が与えられた場合に変更後対象関数の出力が変更前対象関数の出力と一致するという条件を満たさない対象組である。
不等価組抽出処理(S120)の詳細については後述する。
ステップS130において、呼び出しリスト生成部130は、呼び出しリストを生成する。
呼び出しリストは、変更前プログラムが実行された場合に呼び出される変更前関数をテストケース毎に示すリストである。
呼び出しリスト生成処理(S130)の詳細については後述する。
ステップS140において、テストケース選択部140は、呼び出しリストを用いて、重要テストケースを選択する。
具体的には、テストケース選択部140は、複数のテストケースから、不等価組に含まれる変更前対象関数が呼び出されるテストケースを重要テストケースとして選択する。
テストケース選択処理(S140)の詳細については後述する。
図3に、変更前プログラム200と変更後プログラム210とのそれぞれの構成例を示す。
変更前プログラム200は、4つの変更前関数(f、f、f、f)を含んでいる。f、fおよびfはfから呼び出される関数である。
変更後プログラム210は、4つの変更後関数(f’、f’、f’、f’)を含んでいる。f’およびf’はf’から呼び出される関数であり、f’はf’から呼び出される関数である。
以下、変更前プログラム200および変更後プログラム210を例にして説明を行う。
図4に基づいて、対象組リスト生成処理(S110)を説明する。
ステップS111において、対象組リスト生成部110は、変更後プログラムに含まれる1つ以上の変更後関数の中から、未選択の変更後関数を1つ選択する。
具体的には、対象組リスト生成部110は、変更後関数リストから、未選択の変更後関数を1つ選択する。
変更後関数リストは、変更後プログラムに含まれる1つ以上の変更後関数を示すリストであり、記憶部191に記憶されている。
図5に、変更後関数リスト220を示す。
変更後関数リスト220は、変更後プログラム210に含まれる4つの変更後関数(f’、f’、f’、f’)のそれぞれの関数名を含んでいる。
例えば、対象組リスト生成部110は、変更後関数リスト220に含まれる関数名の順番、つまり、f’、f’、f’、f’の順番で変更後関数を選択する。
図4に戻り、ステップS112を説明する。ステップS112からステップS114までの説明において、選択された変更後関数は、ステップS111で選択された変更後関数を意味する。
ステップS112において、対象組リスト生成部110は、選択された変更後関数に対応する変更前関数が有るか判定する。
具体的には、対象組リスト生成部110は、選択された変更後関数が関数対応表において変更前関数に対応付けられているか判定する。選択された変更後関数が関数対応表において変更前関数に対応付けられている場合、選択された変更後関数に対応する変更前関数が有る。
関数対応表は、変更後関数と変更後関数に対応する変更前関数との組を示す表であり、記憶部191に記憶されている。
選択された変更後関数に対応する変更前関数が有る場合、処理はステップS113に進む。
選択された変更後関数に対応する変更前関数が無い場合、処理はステップS115に進む。
図6に、関数対応表230を示す。
関数対応表230において、ハイフンは対応する関数が無いことを意味する。
選択された変更後関数がf’である場合について説明する。関数対応表230において、選択された変更後関数f’は変更前関数fに対応付けられている。したがって、対象組リスト生成部110は、選択された変更後関数f’に対応する変更前関数fが有ると判定する。
選択された変更後関数がf’である場合について説明する。関数対応表230において、選択された変更後関数f’は変更前関数に対応付けられていない。したがって、対象組リスト生成部110は、選択された変更後関数f’に対応する変更前関数が無いと判定する。
図4に戻り、ステップS113を説明する。ステップS113およびステップS114の説明において、対応する変更前関数は、選択された変更後関数に対応する変更前関数を意味する。
ステップS113において、対象組リスト生成部110は、選択された変更後関数のソースコードを対応する変更前関数のソースコードと比較することによって、選択された変更後関数のソースコードが対応する変更前関数のソースコードと一致するか判定する。つまり、対象組リスト生成部110は、選択された変更後関数が対応する変更前関数とテキストレベルで完全に同一であるか判定する。
それぞれの変更前関数のソースコードおよびそれぞれの変更後関数のソースコードは、記憶部191に記憶されている。
選択された変更後関数のソースコードが対応する変更前関数のソースコードと一致する場合、処理はステップS115に進む。
選択された変更後関数のソースコードが対応する変更前関数のソースコードと一致しない場合、処理はステップS114に進む。
ステップS114において、対象組リスト生成部110は、対応する変更前関数を変更前対象関数として含み、且つ、選択された変更後関数を変更後対象関数として含む対象組を対象組リストに登録する。
ステップS115において、対象組リスト生成部110は、未選択の変更後関数が有るか判定する。
未選択の変更後関数が有る場合、処理はステップS111に進む。
未選択の変更後関数が無い場合、対象組リスト生成処理(S110)は終了する。
対象組リスト生成処理(S110)によって、図7の対象組リスト240が生成される。
対象組リスト240は、(f,f’)と(f,f’)と(f,f’)との3つの対象組を示している。
対象組(f,f’)において、変更前関数fが変更前対象関数であり、変更後関数f’が変更後対象関数である。
対象組(f,f’)において、変更前関数fが変更前対象関数であり、変更後関数f’が変更後対象関数である。
対象組(f,f’)において、変更前関数fが変更前対象関数であり、変更後関数f’が変更後対象関数である。
図8に基づいて、不等価組抽出処理(S120)を説明する。
ステップS121において、不等価組抽出部120は、対象組リストから、未選択の対象組を1つ選択する。
例えば、不等価組抽出部120は、図7の対象組リスト240に示される対象組の順番、つまり、(f,f’)、(f,f’)、(f,f’)の順番で対象組を選択する。
ステップS122からステップS127までの説明において、選択された対象組は、ステップS121で選択された対象組を意味する。
ステップS122において、不等価組抽出部120は、選択された対象組に示される変更前対象関数の論理式を生成する。変更前対象関数の論理式を変更前論理式という。
変更前論理式は、変更前対象関数において成り立つ論理式である。言い換えると、変更前論理式は、変更前対象関数の実行後に成り立つ条件を表す論理式である。
具体的には、不等価組抽出部120は、変更前論理式を以下のように生成する。
まず、不等価組抽出部120は、変更前対象関数のソースコードに含まれるステートメント(命令)毎に変換ルールに従ってステートメントをステートメント論理式に変換する。これにより、複数のステートメント論理式が得られる。変換ルールは、ステートメントをステートメント論理式に変換するためのルールである。例えば、変換ルールは、ステートメントのパターン毎にステートメント論理式のパターンを示す。ステートメント論理式は、ステートメントにおいて成り立つ論理式である。
そして、不等価組抽出部120は、複数のステートメント論理式を連結ルールに従って連結する。これにより、変更前論理式が得られる。連結ルールは、複数のステートメント論理式を連結するためのルールである。例えば、連結ルールは、ステートメント論理式のパターンの組み合わせ毎に論理式のパターンを示す。
例えば、関数の実行後に成り立つ条件とは以下のような条件である。
(A)関数の実行によって変数xに値cが代入される。この関数の実行後に成り立つ条件は、x=cである。
(B)関数の実行によってステートメントSとステートメントSとが順に実行される。この関数の実行後に成り立つ条件は、ステートメントSの実行後に成り立つ条件の下で、ステートメントSを実行した場合に成り立つ条件である。
(C)関数の実行によって条件Bが成り立つ場合にステートメントSが実行され、条件Bが成り立たない場合にステートメントSが実行される。この関数の実行後に成り立つ条件は、第1論理積と第2論理積との論理和である。第1論理積は、ステートメントSの実行後に成り立つ条件と条件Bとの論理積である。第2論理積は、ステートメントSの実行後に成り立つ条件と条件Bの否定との論理積である。
例えば、図9に示す関数fの論理式は式(1)で表される。図9は、C言語で記述された関数fのソースコードを示している。
Figure 0006559376
対象の関数の中で別の関数が呼び出される場合、対象の関数の論理式は以下のように生成される。以下の説明において、対象の関数を呼び出し元関数といい、呼び出される関数を呼び出し先関数という。
(a)呼び出し先関数は、プログラムの変更に伴って削除または追加された関数である。つまり、呼び出し先関数は変更前プログラムに含まれるが、呼び出し先関数に対応する関数は変更後プログラムに含まれない。または、呼び出し先関数に対応する関数は変更前プログラムに含まれないが、呼び出し先関数は変更後プログラムに含まれる。これらの場合、呼び出し先関数を呼び出し元関数の中に展開して得られる関数の論理式が生成される。
例えば、図3において、関数fの中で呼び出される関数fは変更前プログラム200に含まれるが、関数fに対応する関数は変更後プログラム210に含まれない。そのため、関数fにおいて関数fを呼び出すステートメントが関数fの中のステートメントに置き換えられた後、関数fの論理式が生成される。
図10に示す関数gでは、図9に示す関数fが呼び出される。関数fは、プログラムの変更に伴って削除または追加された関数である。この場合、関数gの論理式は式(2)で表される。図10は、C言語で記述された関数gのソースコードを示している。
Figure 0006559376
(b)呼び出し先関数は、プログラムの変更に伴って削除または追加された関数ではない。つまり、呼び出し先関数が変更前プログラムに含まれ、呼び出し先関数に対応する関数が変更後プログラムに含まれる。この場合、呼び出し先関数は呼び出し元関数の中に展開されずに、呼び出し元関数の論理式が生成される。そして、「呼び出し先関数が呼び出し先関数に対応する関数と等価であるならば、呼び出し元関数は呼び出し元関数に対応する関数と等価である」という条件が成り立つ。
例えば、図3において、関数fの中で呼び出される関数fおよび関数fは変更前プログラム200に含まれる。そして、関数fに対応する関数f’および関数fに対応する関数f’が変更後プログラム210に含まれる。そのため、関数fにおいて関数fを呼び出すステートメントおよび関数fを呼び出すステートメントが関数fの中のステートメントおよび関数fの中のステートメントに置き換えられずに、関数fの論理式が生成される。そして、「関数fが関数f’と等価であり、関数fが関数f’と等価であるならば、関数fは関数f’と等価である」という条件が成り立つ。
図10に示す関数gでは、図9に示す関数fが呼び出される。関数fは、プログラムの変更に伴って削除または追加された関数ではない。この場合、関数gの論理式は式(3)で表される。
Figure 0006559376
図8に戻り、ステップS123から説明を続ける。
ステップS123において、不等価組抽出部120は、選択された対象組に示される変更後対象関数の論理式を生成する。変更後対象関数の論理式を変更後論理式という。
変更後論理式は、変更後対象関数において成り立つ論理式である。言い換えると、変更後論理式は、変更後対象関数の実行後に成り立つ条件を表す論理式である。
変更後論理式を生成する方法は、変更前論理式を生成する方法と同様である(ステップS121参照)。
ステップS124およびステップS125において、不等価組抽出部120は、変更前論理式と変更後論理式とを用いて、選択された対象組が不等価組であるか判定する。
具体的には、不等価組抽出部120は以下のように判定を行う。
ステップS124において、不等価組抽出部120は、変更前論理式と変更後論理式とを用いて、変更前対象関数と変更後対象関数とに対応する等価性論理式を生成する。
等価性論理式は、変更前対象関数と変更後対象関数との等価性を表す論理式である。
関数Fと関数Gとに対応する等価性論理式は式(4)で表される。
但し、関数Fの論理式をPとし、関数Fの入力変数をiとし、関数Fの出力変数をoとする。また、関数Gの論理式をPとし、関数Gの入力変数をiとし、関数Gの出力変数をoとする。
Figure 0006559376
式(4)の等価性論理式は、関数Fと関数Gとの両方に同じ入力が与えられた場合には関数Fの出力が関数Gの出力と一致することを意味する。
したがって、式(4)の等価性論理式が恒真であるならば、関数Fは関数Gと等価である。また、式(4)の等価性論理式が恒真でないならば、関数Fは関数Gと不等価である。
ステップS125において、不等価組抽出部120は、ステップS124で生成された等価性論理式が恒真であるか判定する。
等価性論理式が恒真であるか否かは、命題論理式の充足可能性判定問題に帰着され、SATソルバと呼ばれるツールを用いることによって判定することができる。SATはSatisfiability Problemの略称である。
ステップS124で生成された等価性論理式が恒真である場合、処理はステップS126に進む。
ステップS124で生成された等価性論理式が恒真でない場合、処理はステップS127に進む。
ステップS126において、不等価組抽出部120は、選択された対象組を等価性組として等価性組ファイルに登録する。
等価性ファイルは、それぞれの対象組が等価性組であるかを示す。
ステップS127において、不等価組抽出部120は、選択された対象組を不等価組として等価性ファイルに登録する。
ステップS128において、不等価組抽出部120は、未選択の対象組が有るか判定する。
未選択の対象組が有る場合、処理はステップS121に進む。
未選択の対象組が無い場合、不等価組抽出処理(S120)は終了する。
不等価組抽出処理(S120)によって、例えば、図11の等価性リスト250が生成される。
等価性リスト250において、対象組(f,f’)および対象組(f,f’)は等価組であり、対象組(f,f’)は不等価組である。
図12に基づいて、呼び出しリスト生成処理(S130)を説明する。
ステップS131において、呼び出しリスト生成部130は、それぞれの変更前関数用の呼び出しフラグを変更前プログラムに追加する。
呼び出しフラグは、変更前関数が呼び出されたときに更新されるフラグである。
具体的には、呼び出しリスト生成部130は、エントリ関数を除いて変更前関数毎に変更前関数用の大域変数の宣言文を変更前プログラムのソースコードに追加する。大域変数が呼び出しフラグとして機能する。
ステップS132において、呼び出しリスト生成部130は、それぞれの変更前関数にフラグ更新命令を追加する。
フラグ更新命令は、呼び出しフラグを更新する命令である。
具体的には、呼び出しリスト生成部130は、エントリ関数を除いて変更前関数毎に変更前関数の先頭に変更前関数用の大域変数に1を足すステートメントを追加する。
ステップS131およびステップS132によって図13の変更前プログラム260が加工されると、図14の変更前プログラム261が得られる。
変更前プログラム260は、エントリ関数mainを除いて3つの変更前関数(sub1、sub2、sub3)を含んでいる。
変更前プログラム261において、「int g1,g2,g3;」はg1、g2およびg3を大域変数として宣言する宣言文である。g1はsub1用の呼び出しフラグであり、g2はsub2用の呼び出しフラグであり、g3はsub3用の呼び出しフラグである。それぞれの呼び出しフラグの初期値は0である。g1++、g2++およびg3++は、フラグ更新命令である。sub1が呼び出される度にフラグ更新命令(g1++)によってg1に1が足される。sub2が呼び出される度にフラグ更新命令(g2++)によってg2に1が足される。sub3が呼び出される度にフラグ更新命令(g3++)によってg3に1が足される。
例えば、変更前プログラム261が実行された結果、関数sub1が1回も呼び出されなかった場合、呼び出しフラグg1の値は更新されず0のままである。つまり、呼び出しフラグg1の値が0であれば、呼び出しフラグg1に対応する変更前関数sub1は呼び出されていないことになる。
例えば、変更前プログラム261が実行された結果、関数sub1がN回呼び出された場合、呼び出しフラグg1の値はNに更新される。つまり、呼び出しフラグg1の値がNであれば、呼び出しフラグg1に対応する変更前関数sub1はN回呼び出されたことになる。
ステップS133において、呼び出しリスト生成部130は、未選択のテストケースを1つ選択する。
ステップS134からステップS136までの説明において、テストケースはステップS133で選択されたテストケースを意味し、変更前プログラムはステップS132の後の変更前プログラムを意味する。
ステップS134において、呼び出しリスト生成部130は、テストケースに従って変更前プログラムを実行する。
ステップS135において、呼び出しリスト生成部130は、それぞれの変更前関数用の呼び出しフラグを参照し、更新された呼び出しフラグを特定する。
そして、呼び出しリスト生成部130は、更新された呼び出しフラグに対応する変更前関数を特定する。
ステップS136において、呼び出しリスト生成部130は、特定された変更前関数を呼び出しリストに登録する。
具体的には、呼び出しリスト生成部130は、特定された変更前関数の関数名をテストケースの識別子に対応付けて呼び出しリストに登録する。
ステップS137において、呼び出しリスト生成部130は、未選択のテストケースが有るか判定する。
未選択のテストケースが有る場合、処理はステップS133に進む。
未選択のテストケースが無い場合、呼び出しリスト生成処理(S130)は終了する。
呼び出しリスト生成処理(S130)によって、例えば、図15に示す呼び出しリスト270が生成される。
呼び出しリスト270は、変更前プログラムが実行された場合に呼び出される変数前関数をテストケース毎に以下にように示している。
テストケース(1)が実施された場合、2つの変更前関数(f、f)が呼び出される。
テストケース(2)が実施された場合、2つの変更前関数(f、f)が呼び出される。
テストケース(3)が実施された場合、2つの変更前関数(f、f、f)が呼び出される。
テストケース(4)が実施された場合、2つの変更前関数(f、f、f)が呼び出される。
図16に基づいて、テストケース選択処理(S140)を説明する。
テストケース選択処理(S140)において、テストケース選択部140は、呼び出しリストに示される変更前関数のうち対象のテストケースに対応する変更前関数が不等価組に含まれる変更前対象関数である場合、対象のテストケースが重要テストケースであると判定する。
ステップS141において、テストケース選択部140は、呼び出しリストから、未選択のテストケースを1つ選択する。
ステップS142およびステップS143において、選択されたテストケースは、ステップS141で選択されたテストケースを意味する。
ステップS142において、テストケース選択部140は、選択されたテストケースが重要テストケースであるか判定する。
図17に基づいて、判定処理(S142)を説明する。
判定処理(S142)において、テストケース選択部140は、選択されたテストケースに対応付けられた変更前関数のいずれかがいずれかの不等価組に含まれる変更前対象関数である場合に、選択されたテストケースが重要テストケースであると判定する。
ステップS1421において、テストケース選択部140は、選択されたテストケースに対応付けられた変更前関数のうち未選択の変更前関数を呼び出しリストから1つ選択する。
S1422、ステップS1423およびステップS1425は、ステップS1421で選択された変更前関数を対象にして実行される。
ステップS1422において、テストケース選択部140は、等価性リストから、未選択の不等価組を1組選択する。
ステップS1423において、変更前関数はステップS1421で選択された変更前関数を意味し、不等価組はステップS1422で選択された不等価組を意味する。
ステップS1423において、テストケース選択部140は、変更前関数が不等価組に含まれる変更前対象関数であるか判定する。
変更前関数が不等価組に含まれる変更前対象関数である場合、処理はステップS1424に進む。
変更前関数が不等価組に含まれる変更前対象関数でない場合、処理はステップS1425に進む。
ステップS1424において、テストケース選択部140は、選択されたテストケースが重要テストケースであると判定する。
ステップS1424の後、判定処理(S142)は終了する。
ステップS1425において、テストケース選択部140は、未選択の不等価組が有るか判定する。
未選択の不等価組が有る場合、処理はステップS1422に進む。
未選択の不等価組が無い場合、処理はステップS1426に進む。
ステップS1426において、テストケース選択部140は、未選択の変更前関数が有るか判定する。
未選択の変更前関数が有る場合、処理はステップS1421に進む。
未選択の変更前関数が無い場合、処理はステップS1427に進む。
ステップS1427において、テストケース選択部140は、選択されたテストケースは重要テストケースでないと判定する。
ステップS1427の後、判定処理(S142)は終了する。
図16に戻り、ステップS143から説明を続ける。
ステップS143において、テストケース選択部140は、選択されたテストケースを重要テストケースリストに登録する。
重要テストケースリストは、重要テストケースを示すリストである。
ステップS144において、テストケース選択部140は、未選択のテストケースが有るか判定する。
未選択のテストケースが有る場合、処理はステップS141に進む。
未選択のテストケースが無い場合、テストケース選択処理(S140)は終了する。
テストケース選択処理(S140)によって、例えば、図18に示す重要テストケースリスト280が生成される。
図11の等価性リスト250において、不等価組に含まれる変更前対象関数は関数f4である。
図15の呼び出しリスト270において、関数f4に対応付けられたテストケースはテストケース2およびテストケース4である。
したがって、図18の重要テストケースリスト280は、テストケース2とテストケース4とを重要テストケースとして示している。
***実施の形態1の効果***
変更前プログラムに対して実施された複数のテストケースを以下の2種類に分けることができる。
テストケース(1)は、プログラムの変更前後で機能的に変化していない等価な関数しか呼び出されないテストケース、すなわち、プログラムの変更前後で実行結果が変わらないテストケースである。
テストケース(2)は、プログラムの変更に伴って機能的に不等価となった関数が呼び出されるテストケース、すなわち、プログラムの変更前後で実行結果が変わる可能性があるテストケースである。実施の形態1における重要テストケースはテストケース(2)である。
実施済みの複数のテストケースを上記の2種類に分けることで、以下のような効果が得られる。
プログラムの変更に伴って予期せぬ不具合が混入していないことを確かめるため、変更前プログラムに対して実施されたテストケースを変更後プログラムに対して実施する場合を考える。
この場合、プログラムの変更前後で出力が変化する可能性のあるテストケース、すなわち、不具合を発見する可能性のあるテストケースのみを選択することができる。選択されたテストケースのみを変更後プログラムに対して実施すれば、変更後プログラムに対して実施されるテストケースの数が削減される。
実施の形態1では、プログラムの変更前後における関数の等価性が検査される。そのため、従来手法では出力が変化すると判定される関数であっても、その関数は、プログラムの変更前後で機能的に同等であれば、出力が変化しない関数であると判定される。その結果、プログラムの変更前後で出力が変化しないテストケースを従来手法よりも多く発見し、変更後プログラムに対して実施すべきテストケースの数を従来手法よりも削減することができる。これによって、変更後プログラムに対するテストにかかるコストを削減できる。さらに、テストケース毎の出力期待値を変更後プログラムの仕様に基づいて変更する作業を削減し、変更後プログラムの開発におけるテスト工程をより効率化することが可能となる。
実施の形態1では、プログラムの変更前後で出力が変化する可能性があるテストケースが選択される。
残りのテストケース、すなわち、プログラムの変更前後で出力が変化しないテストケースを用いることによって、以下のような効果が得られる。
変更後プログラムに対して残りのテストケースを実施することにより、プログラムの変更前後で機能が変化していない部分をテストすることができる。そして、テストケース毎の出力期待値を変更することなく、プログラムの変更前後で出力が変化していないことを確かめることが可能となる。
プログラムの変更前後における関数の等価性の検査結果を用いることによって、以下のような効果が得られる。
不等価関数において、変更前プログラムに対して実施されたテストケースでは網羅できないパスに含まれる命令を実行するためのテストケースを新たに生成することが可能となる。つまり、プログラムの変更部分を網羅的に検証するテストを実施することが可能となる。
***他の構成***
不等価組抽出処理(S120)で説明したアルゴリズムは、関数の等価性を検査するためのアルゴリズムの一例である。つまり、2つの関数が論理的に等価であるか否かを判定することが可能であれば、等価性検査の手段は問わない。
***実施の形態の補足***
実施の形態において、テストケース選択装置100の機能はハードウェアで実現してもよい。
図19に、テストケース選択装置100の機能がハードウェアで実現される場合の構成を示す。
テストケース選択装置100は処理回路990を備える。処理回路990はプロセッシングサーキットリともいう。
処理回路990は、対象組リスト生成部110と不等価組抽出部120と呼び出しリスト生成部130とテストケース選択部140と記憶部191とを実現する専用の電子回路である。
例えば、処理回路990は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA、ASIC、FPGAまたはこれらの組み合わせである。GAはGate Arrayの略称であり、ASICはApplication Specific Integrated Circuitの略称であり、FPGAはField Programmable Gate Arrayの略称である。
テストケース選択装置100は、処理回路990を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路990の役割を分担する。
テストケース選択装置100の機能は、ソフトウェアとハードウェアとの組み合わせで実現してもよい。つまり、一部の機能がソフトウェアで実現され、残りの機能がハードウェアで実現されてもよい。
実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
100 テストケース選択装置、110 対象組リスト生成部、120 不等価組抽出部、130 呼び出しリスト生成部、140 テストケース選択部、191 記憶部、200 変更前プログラム、210 変更後プログラム、220 変更後関数リスト、230 関数対応表、240 対象組リスト、250 等価性リスト、260 変更前プログラム、261 変更前プログラム、270 呼び出しリスト、280 重要テストケースリスト、901 プロセッサ、902 メモリ、903 補助記憶装置、990 処理回路。

Claims (7)

  1. 変更前プログラムに対して実施された複数のテストケースから、変更後プログラムに対して実施すべきテストケースである重要テストケースを選択するテストケース選択装置であって、
    前記変更前プログラムに含まれる変更前対象関数と前記変更後プログラムに含まれる関数であり前記変更前対象関数に対応する関数であり前記変更前対象関数と一致しない関数である変更後対象関数との組である対象組を1つ以上示す対象組リストから、前記変更前対象関数と前記変更後対象関数との両方に同じ入力が与えられた場合に前記変更後対象関数の出力が前記変更前対象関数の出力と一致するという条件を満たさない対象組である不等価組を抽出する不等価組抽出部と、
    前記複数のテストケースから、前記不等価組に含まれる変更前対象関数が呼び出されるテストケースを前記重要テストケースとして選択するテストケース選択部と
    を備えるテストケース選択装置。
  2. 前記テストケース選択装置は、前記対象組リストを生成する対象組リスト生成部を備え、
    前記対象組リスト生成部は、
    前記変更前プログラムに含まれる1つ以上の変更前関数の中に前記変更後プログラムに含まれる変更後関数に対応する変更前関数が有るか判定し、
    前記1つ以上の変更前関数の中に前記変更後関数に対応する変更前関数が有る場合、前記変更後関数のソースコードを前記変更後関数に対応する変更前関数のソースコードと比較し、
    前記変更後関数のソースコードが前記変更後関数に対応する変更前関数のソースコードと一致しない場合、前記変更後関数に対応する変更前関数を前記変更前対象関数として含み前記変更後関数を前記変更後対象関数として含む対象組を前記対象組リストに登録する
    請求項1に記載のテストケース選択装置。
  3. 前記不等価組抽出部は、前記変更前対象関数において成り立つ変更前論理式を生成し、前記変更後対象関数において成り立つ変更後論理式を生成し、前記変更前論理式と前記変更後論理式とを用いて前記対象組が前記不等価組であるか判定する
    請求項1に記載のテストケース選択装置。
  4. 前記テストケース選択部は、前記変更前プログラムが実行された場合に呼び出される変更前関数をテストケース毎に示す呼び出しリストを用いて、前記重要テストケースを選択する
    請求項1に記載のテストケース選択装置。
  5. 前記テストケース選択部は、前記呼び出しリストに示される変更前関数のうち対象のテストケースに対応する変更前関数が前記不等価組に含まれる前記変更前対象関数である場合、前記対象のテストケースが前記重要テストケースであると判定する
    請求項4に記載のテストケース選択装置。
  6. 前記テストケース選択装置は、前記呼び出しリストを生成する呼び出しリスト生成部を備え、
    前記呼び出しリスト生成部は、
    それぞれの変更前関数に呼び出しフラグを更新するフラグ更新命令を追加し、
    それぞれの変更前関数に前記フラグ更新命令が追加された後の変更前プログラムをテストケース毎に実行し、
    更新された呼び出しフラグに対応する変更前関数をテストケース毎に前記呼び出しリストに登録する
    請求項4に記載のテストケース選択装置。
  7. 変更前プログラムに対して実施された複数のテストケースから、変更後プログラムに対して実施すべきテストケースである重要テストケースを選択するテストケース選択プログラムであって、
    前記変更前プログラムに含まれる変更前対象関数と前記変更後プログラムに含まれる関数であり前記変更前対象関数に対応する関数であり前記変更前対象関数と一致しない関数である変更後対象関数との組である対象組を1つ以上示す対象組リストから、前記変更前対象関数と前記変更後対象関数との両方に同じ入力が与えられた場合に前記変更後対象関数の出力が前記変更前対象関数の出力と一致するという条件を満たさない対象組である不等価組を抽出する不等価組抽出処理と、
    前記複数のテストケースから、前記不等価組に含まれる変更前対象関数が呼び出されるテストケースを前記重要テストケースとして選択するテストケース選択処理と
    をコンピュータに実行させるためのテストケース選択プログラム。
JP2019500103A 2017-02-16 2017-02-16 テストケース選択装置およびテストケース選択プログラム Active JP6559376B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2017/005674 WO2018150507A1 (ja) 2017-02-16 2017-02-16 テストケース選択装置およびテストケース選択プログラム

Publications (2)

Publication Number Publication Date
JPWO2018150507A1 JPWO2018150507A1 (ja) 2019-06-27
JP6559376B2 true JP6559376B2 (ja) 2019-08-14

Family

ID=63169209

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019500103A Active JP6559376B2 (ja) 2017-02-16 2017-02-16 テストケース選択装置およびテストケース選択プログラム

Country Status (4)

Country Link
US (1) US20190377667A1 (ja)
EP (1) EP3570172B1 (ja)
JP (1) JP6559376B2 (ja)
WO (1) WO2018150507A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114595137B (zh) * 2020-12-03 2024-05-10 中国联合网络通信集团有限公司 一种测试用例获取方法和装置
CN113254354A (zh) * 2021-07-02 2021-08-13 南昌航空大学 测试用例推荐方法、装置、可读存储介质及电子设备
CN113641592B (zh) * 2021-10-15 2022-02-22 卡斯柯信号(北京)有限公司 测试序列的生成方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8561036B1 (en) * 2006-02-23 2013-10-15 Google Inc. Software test case management
JP2008003985A (ja) * 2006-06-26 2008-01-10 Dainippon Screen Mfg Co Ltd 開発支援システム、開発支援方法および開発支援プログラム
JP4134218B2 (ja) * 2006-11-16 2008-08-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 回帰テストにおいて実施すべきテストケースの優先度を決定するための情報処理装置、方法、及びプログラム
WO2012066635A1 (ja) * 2010-11-16 2012-05-24 株式会社日立製作所 テスト方法、テスト装置及びテスト実行用プログラム
US9779009B2 (en) * 2013-08-28 2017-10-03 Hitachi, Ltd. Source code equivalence verification device and source code equivalence verification method
JP6135466B2 (ja) 2013-11-06 2017-05-31 富士通株式会社 テストケース抽出プログラム、方法及び装置
JP2016164727A (ja) 2015-03-06 2016-09-08 株式会社 日立産業制御ソリューションズ テストケース選択装置

Also Published As

Publication number Publication date
US20190377667A1 (en) 2019-12-12
JPWO2018150507A1 (ja) 2019-06-27
WO2018150507A1 (ja) 2018-08-23
EP3570172B1 (en) 2021-04-07
EP3570172A4 (en) 2020-02-19
EP3570172A1 (en) 2019-11-20

Similar Documents

Publication Publication Date Title
JP6627658B2 (ja) ソフトウェアプログラムを修復する方法、記憶媒体及びシステム
JP6559376B2 (ja) テストケース選択装置およびテストケース選択プログラム
JP2008191963A (ja) ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム
JP2019029015A (ja) インタラクティブなソフトウェアプログラムの修復
JP6556410B2 (ja) 等価性検証装置
JP6567212B2 (ja) 等価性検証装置および等価性検証プログラム
JP6789844B2 (ja) 類似関数抽出装置および類似関数抽出プログラム
JP6824053B2 (ja) 関係分析装置および関係分析プログラム
JP2017204201A (ja) 情報処理装置、コンパイル方法、およびコンパイルプログラム
JP7384054B2 (ja) 自動化されたソフトウェアプログラム修復
JP2007041804A (ja) プログラム生成装置、プログラム検証装置および検証プログラム
JP2011253253A (ja) コンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラム
US10761962B1 (en) Automated software program repair
JP2009134360A (ja) モデル検査システム、モデル検査方法およびモデル検査用プログラム
JP7059827B2 (ja) ソースコード生成装置
JP6419357B2 (ja) ソースコード比較装置およびソースコード比較プログラム
JPWO2019142266A1 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
JP2023108555A (ja) プログラム修正支援システム、プログラム修正支援方法
JP2012059202A (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
JP2015069400A (ja) ソフトウェアテストシステム
JPH11282722A (ja) プログラム検証方法
JP2023042058A (ja) 情報処理装置及び情報処理方法
JP2010079525A (ja) プログラム検証支援装置、プログラム検証支援方法、及び、プログラム検証支援プログラム
JP2018088100A (ja) 状態遷移編集装置および状態遷移編集プログラム
JP2012128752A (ja) ソース変換方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190319

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20190319

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20190403

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190716

R150 Certificate of patent or registration of utility model

Ref document number: 6559376

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250