【文献】
BLOEM, R et al.,Automating Test-Suite Augmentation,2014 14th International Conference on Quality Software [online],IEEE,2014年,[retrieved on 2021.07.29], Retrieved from the Internet: <URL: https://ieeexplore.ieee.org/document/6958388>,<DOI: 10.1109/QSIC.2014.40>
(58)【調査した分野】(Int.Cl.,DB名)
ソースコードのテストスイートを生成する方法であって、テストケースが、コンピューター手段がアクセス可能なメモリに予備的に記憶され、該方法は、前記コンピューター手段によって実施され、
a)前記ソースコードの構造的解析を実施して、完成したソースコードを得ることであって、
前記ソースコードをパースすることと、
テスト目的を定義する注釈を前記ソースコードに加えることと、
前記ソースコードに対応するスタブを生成することと、
を含むことと、
b)テスト目的の各セットを以下の複数のカテゴリ、すなわち、
i/前記メモリに記憶されたテストパラメーターを含むテストケースを入力として用いることによって満たされるテスト目的のセットと、
ii/いずれのテストケースを用いても満たすことが不可能であるテスト目的のセットと、
iii/少なくとも一時的に満たされていないテスト目的のセットと、
のうちの単一のカテゴリにカテゴリ化することを含む、前記完成したソースコードに対して少なくとも1つの意味解析アルゴリズムを実施することと、
c)カテゴリi/の前記テスト目的を満たすテストケースを、テストケースのセットの第1のリストにフィードすることと、
d)満たすことが不可能であり、かつカテゴリii/に関するテスト目的を、テスト目的の第2のリストにフィードすることと、
e)前記カテゴリiii/が空でない場合、
前記テスト目的の少なくとも一部を満たすテストケースを識別することと、
前記テスト目的を満たすテストケースを、テストケースのセットの前記第1のリストにフィードすることと、
カテゴリi/に前記テスト目的をカテゴリ化することと、
を含む、カテゴリiii/のテスト目的に対応する前記完成したソースコードの部分に対して少なくとも1つの数理最適化アルゴリズムを実施することと、
f)ステップcにおいて得られ、ステップeにおいて完成した前記第1のリスト及び前記ソースコードに対応するステップdにおいて得られた前記第2のリストを含むテストスイートを提供することと、
を含む、方法。
前記方法は、少なくとも1つの意味解析アルゴリズムを実施するステップbの前に、前記完成したソースコードの一部に対して少なくとも1つの数理最適化アルゴリズムを実施することを含む以下の補足的予備ステップ、すなわち、
前記テスト目的の少なくとも一部を満たすテストケースを識別することと、
前記テスト目的を満たすテストケースを、テストケースのセットの前記第1のリストにフィードすることと、
カテゴリi/に前記テスト目的をカテゴリ化することと、
を含む、ステップを更に含む、請求項1に記載の方法。
前記ステップeは、第1の数理最適化アルゴリズムを用いて1回目が実施され、その後、前記ステップeは、前記第1の数理最適化アルゴリズムとは異なる、第2の数理最適化アルゴリズムを用いて少なくとも2回目が実施される、請求項1又は2に記載の方法。
前記ステップeは、少なくとも1つの数理最適化アルゴリズムを用いて少なくとも一度実施され、その後、ステップfの前に、連続する以下のステップb’、c’及びd’、すなわち、
b’)前記テスト目的の少なくとも一部をカテゴリi/又はii/にカテゴリ化するように、カテゴリiii/のテスト目的に対応する前記完成したソースコードの部分に対して、少なくとも1つの補足的意味解析アルゴリズムを実施することと、
c’)カテゴリi/の前記テスト目的を満たすテストケースを、前記テストケースのセットの第1のリストにフィードすることと、
d’)満たすことが不可能であり、かつカテゴリii/に関するテスト目的を、前記テスト目的の第2のリストにフィードすることと、
が少なくとも一度実施される、請求項1〜3のいずれか1項に記載の方法。
ステップdは、満たすことが不可能であり、かつカテゴリii/に関する各テスト目的に、満たすことが不可能である理由についての情報を関連付けることを更に含み、前記情報は自然言語によるものである、請求項1〜4のいずれか1項に記載の方法。
ソフトウェアがプロセッサによって実行されると、請求項1〜7のいずれか1項に記載の方法を実施するように前記ソフトウェアが登録される、コンピューター可読非一時的記録媒体。
【発明の概要】
【0006】
ソースコードのテストスイートを生成する方法であって、テストケースが、コンピューター手段がアクセス可能なメモリに予備的に記憶され、方法は、上記コンピューター手段によって実施される、方法が提供される。方法は、
a)上記ソースコードの構造的解析を実施して、完成したソースコードを得ることであって、
ソースコードをパースすることと、
テスト目的を定義する注釈をソースコードに加えることと、
ソースコードに対応するスタブを生成することと、
を含むことと、
b)テスト目的の各セットを以下の複数のカテゴリ、すなわち、
i/メモリに記憶されたテストパラメーターを含むテストケースを入力として用いることによって満たされるテスト目的のセットと、
ii/いずれのテストケースを用いても満たすことが不可能であるテスト目的のセットと、
iii/少なくとも一時的に満たされていないテスト目的のセットと、
のうちの単一のカテゴリにカテゴリ化することを含む、上記完成したソースコードに対して少なくとも1つの意味解析アルゴリズムを実施することと、
c)カテゴリi/のテスト目的を満たすテストケースを、テストケースのセットの第1のリストにフィードすることと、
d)満たすことが不可能であり、かつカテゴリii/に関するテスト目的を、テスト目的の第2のリストにフィードすることと、
e)カテゴリiii/が空でない場合、
上記テスト目的の少なくとも一部を満たすテストケースを識別することと、
上記テスト目的を満たすテストケースを、テストケースのセットの上記第1のリストにフィードすることと、
カテゴリi/に上記テスト目的をカテゴリ化することと、
を含む、カテゴリiii/のテスト目的に対応する上記完成したソースコードの部分に対して少なくとも1つの数理最適化アルゴリズムを実施することと、
f)ステップcにおいて得られ、ステップeにおいて完成した上記第1のリスト及び上記ソースコードに対応するステップdにおいて得られた上記第2のリストを含むテストスイートを提供することと、
を含む。
【0007】
そのような方法によって、ソースコードの構造的テストスイートを自動的に生成することが可能になる。結果として、ソースコードの最初の部分を自動的に検査し、認証することができる。(もし存在する場合)ソースコードの残りの部分は、テストできない状態にある理由を説明する(人間が理解可能な)メッセージに関連付けられる。結果として、ソースコードのテストできない部分及びテスト可能な部分を区別するために人間の作業は必要ではなくなる。意味解析及び数理最適化アルゴリズムの特定の連続する組合せによって、或るテストを確立できないことが(数学的に)証明されるソースコードの部分を速く識別することが可能になる。結果として、時間及び計算リソースの一部が保存される(不可能な解を探すのに消費されない)。方法の全般的な効率は、既知の方法に対して高められるとともに、全体的に自動化される。テストの完全性の割合が既知である。いくつかの場合、自動化した結果は、既知の方法によって得られる結果と同等だが、結果を得るのに消費される時間及び計算リソースは、低減される。
【0008】
別の態様において、本出願人は、プロセッサによって実行されると、本明細書において規定される方法を実施する命令を含むコンピューターソフトウェアを提案する。別の態様において、本出願人は、ソフトウェアがプロセッサによって実行されると、本明細書において規定される方法を実施するようにソフトウェアが登録される、コンピューター可読非一時的記録媒体を提案する。
【0009】
方法は、別々に、又は互いに組み合わせて以下の特徴を任意で含むことができる。
【0010】
方法は、少なくとも1つの意味解析アルゴリズムを実施するステップbの前に、上記完成したソースコードの一部に対して少なくとも1つの数理最適化アルゴリズムを実施することを含む以下の補足的予備ステップ、すなわち、
上記テスト目的の少なくとも一部を満たすテストケースを識別することと、
上記テスト目的を満たすテストケースを、テストケースのセットの上記第1のリストにフィードすることと、
カテゴリi/に上記テスト目的をカテゴリ化することと、
を含む、ステップを更に含む。これによって、数理最適化を実施する前であっても、少なくともいくつかのソースコードのいくつかのテストケースを初期的に識別することが可能になる。
【0011】
ステップeは、第1の数理最適化アルゴリズムを用いて1回目が実施され、その後、ステップeは、第1の数理最適化アルゴリズムとは異なる、第2の数理最適化アルゴリズムを用いて少なくとも2回目が実施される。これによって、方法にいくつかの数理最適化アルゴリズム(又は最適解探索)を加えることによって、同じソースコードの異なるタイプのテストケースを識別する完全性を高め、テストスイートの完全性のレベルを選択することが可能になる。
【0012】
ステップeは、少なくとも1つの数理最適化アルゴリズムを用いて少なくとも一度実施され、その後、ステップfの前に、連続する以下のステップb’、c’及びd’、すなわち、
b’)上記テスト目的の少なくとも一部をカテゴリi/又はii/にカテゴリ化するように、カテゴリiii/のテスト目的に対応する上記完成したソースコードの部分に対して、少なくとも1つの補足的意味解析アルゴリズムを実施することと、
c’)カテゴリi/のテスト目的を満たすテストケースを、テストケースのセットの上記第1のリストにフィードすることと、
d’)満たすことが不可能であり、かつカテゴリii/に関するテスト目的を、テスト目的の上記第2のリストにフィードすることと、
が少なくとも一度実施される。これによって、例えば、ソースコードのバージョンが最終又はほぼ最終である場合にのみ、任意でテストスイートの完全性を高めることが可能になる。
【0013】
ステップdは、満たすことが不可能であり、かつカテゴリii/に関する各テスト目的に、満たすことが不可能である理由についての情報を関連付けることを更に含み、上記情報は自然言語によるものである。これによって、オペレーターが任意の異常事態を速く識別し、可能であれば訂正することが可能になる。
【0014】
少なくとも1つの意味解析アルゴリズムは、以下、すなわち、
「Frama−C」の「値解析」モジュールと、
「CBMC」と、
「Frama−C」の「パスクローラー」モジュールと、
のうちの1つである。これらの意味解析アルゴリズムは、本出願人によってテストされたソースコードの例に対して、明確に良い結果を示している。
【0015】
方法は、以下のステップ、すなわち、
b)上記完成したソースコードに対して「Frama−C」の「値解析」モジュールを実施することと、
e)カテゴリiii/が空でない場合、カテゴリiii/のテスト目的に対応する上記完成したソースコードの部分に対して遺伝的アルゴリズムを実施することと、
b’)CBMC解析アルゴリズムを実施することと、
b’’)「Frama−C」のパスクローラー解析アルゴリズムを実施することと、
をこの順序で含む。アルゴリズムのこの特定の組合せは、本出願人によってテストされたソースコードの例に対して、明確に良い結果を示している。
【0016】
他の特徴、詳細及び利点について、以下の詳細な説明においてかつ図に示す。
【発明を実施するための形態】
【0018】
図及び以下の詳細な説明は、本質的に、いくつかの厳密な要素を含む。それらは、本発明の理解を促進するために、また、必要な場合は本発明を定義するために使用することができる。
【0019】
以下において、厳密な表現が用いられる。したがって、いくつかの定義が以下に与えられる。すなわち、
−「f」がテストすべきソースコードの(或る言語における)テスト対象の関数である場合、「テスト目的」は、関数fの特定の命令文sとブール式Fとの組合せである;
−fに関する「テストパラメーターのセット」は、fの全ての入力パラメーターに割り当てられるとともに、全てのグローバル変数fがアクセスすることができる値のセットである;
−fを実行する際、テストパラメーターのセットを用いて、命令文sが達成され、式Fが命令文sのエントリポイントにおいて(すなわち、sの実行の直前で)真である場合、かつその場合に限り、「テストパラメーターのセットは、テスト目的(s、F)を満たす」とみなされる;
−そのテスト目的を満たすテストパラメーターのセットが存在しない場合、かつその場合に限り、「テスト目的は(満たすことが)不可能である」とみなされる;
−fに関する「テストスイート(test suite)」は、fのパラメーターのセットの組である;
−各テスト目的が不可能であるか、又はテストスイートに属するテストパラメーターのセットによって満たされる場合、「テストスイートは、テスト目的のセットを満たす」;
−「(構造的)カバレッジ基準」は、或る関数のテスト目的のセットを構文的に定義する。テストスイートが、或る関数に関する(それぞれ、或るプログラムに関する)カバレッジ基準によって定義される全てのテスト目的を満たす場合、その関数に関する(それぞれ、そのプログラムに関する)カバレッジ基準を満たすとみなされる;
−関数の「スタブ」「g」は、同じタイプのシグネチャを有する関数である;
−「テストケース」は、テストパラメーターのセット、及びそのテストパラメーターを用いてテスト対象の関数を実行するのに必要な全ての要素にある。構造的ユニットテストにおいて、fのテストケースは、テストパラメーター、及びfにおいて呼び出される全ての関数のスタブからなる。
【0020】
本発明による方法を実施するように計画されるコンピューターシステムは、
図1に示される。そのようなシステムは、少なくとも1つのプロセッサ等のコンピューター手段3と、コンピューター手段3がアクセス可能なメモリ5とを備える。メモリ5において、テストすべきソースコード1が登録される。いくつかの実施形態において、いくつかのテストパラメーターは、メモリ5に前もって登録することができる。ソースコードに1回目のテストが行われ、次に、修正された後に2回目にテストされる状況において、1回目において確立されたテストケースを、メモリ5において更に登録することができる。換言すると、或るテストケースは、初期的に記憶することができ、他のテストケースは、徐々に登録することができる。本発明による方法の実行の後、完成したソースコード1’が、テストケーススイート11、21と関連付けられて提供される。完成したソースコード1’は、方法の開始時に提供された元のソースコード1に関して自動的に加えられた注釈を含む。
【0021】
本発明による方法100が、
図2に示される。メモリ5は、テストケースの第1のリスト11を含む。方法100の開始時、第1のリスト11は空である。第1のリスト11は、方法100の実施中、テストケースを徐々にフィードされる。メモリ5は、満たすことが不可能であるソースコード1に関するテスト目的の第2のリスト21を含む。方法の開始時、第2のリスト21は空である。第2のリスト21は、方法100の実施中、徐々にフィードされる。方法100は、第1のリスト11及び第2のリスト21に徐々に登録されるとともに、ソースコード1に関連付けられるデータの形式の構造的テストスイートを生成する。テストすべきソースコード1は、方法100の入力である。完成したソースコード1’並びに第1のリスト11及び第2のリスト21は、方法100の出力である。
【0022】
方法は、ステップ(「a」で参照される)を含む。ステップaは、ソースコード1の構造解析の実施101を含む。構造解析は、以下、すなわち、
−ソースコード1をパースすること、
−テスト目的を定義する注釈をソースコード1に加えること、
−ソースコード1へのスタブを生成すること、
を含む。
【0023】
一例として、
図4及び
図5の比較によって、注釈(
図5において「//」で始まる行)の形式でいかにテスト目的をソースコード1に加えることができるのかをソフトウェア開発の当業者が理解することが可能になる。換言すると、
図4は、テストすべき元のソースコード1の一部の一例であり、一方で、
図5は、ステップaが実施された後、注釈を含む完成したソースコード1’の対応する部分である。
図4において、51で参照される行は、テストすべき関数「f(a,b)」を含む。53で参照される行は、テストすべき関数「f(a,b)」において呼び出された関数「g(a)」を含む。
図5において、注釈の行は、所与のカバレッジ基準によるテスト目的を含む。容易に理解することができるように、55で参照される行は、不可能なテスト目的を含む。そのようなテスト目的の処理は、以下に記載する。
【0024】
図示の例において、カバレッジ基準は、単純な制限を含む。すなわち、パラメーター「a」の場合、以下の値、すなわちk−1、k、k+1、「a」の最小値及び最大値がテストされ、kは、テストされる関数の制限条件と等しい(
図4及び
図5の例における10及び12と等しい)定数である。種々の実施形態において、より洗練された基準を含む他の基準を実施することができる。例えば、MC/DCカバレッジ(「MC/DC」は「改良条件/判定カバレッジ(Modified Condition/Decision Coverage)」を表す)を用いることができ、それは通常、航空電子工学ソフトウェア等の高性能技術分野において用いられる。
【0025】
そのような注釈をソースコード1に加えることは、自動である(人間の介入なしでコンピューター手段3によって行われる)。
【0026】
図6は、スタブの生成を示している。すなわち、呼び出された関数g(a)の結果は、関数「f(a,b)」のテスト中、値「1」によって置き換えられる。換言すると、ユニットテストを実行するのに必要な呼び出される関数は、ダミー関数によって置き換えることができる。各スタブの関数タイプシグネチャを生成するだけでなく、関数のボディも生成する。したがって、人間の介入なしでスタブをコンパイルすることができる。例えば以下の2種類のスタブを生成することができる。
−製造中のソフトウェアをテストするためのスタブ。スタブは、スタブと組み合わされたテスト対象の関数が全ての参照されるシンボルを定義するように生成される;
−テスト目的を満たすテストパラメーターを見つけるのに用いられる、数理最適化又は意味解析アルゴリズムの各タイプに特有のスタブ。
【0027】
いくつかの実施形態において、ソースコード1の意味論的形式解析によって、例えば、疑似定数を見つける、及び/又は、方法100の以下の段階の入力を準備することが更に可能になる。「疑似定数」という用語は、ここでは、ソースコードの任意の可能な実行について求めることができる異なる値の小さいセットを有することができる変数を意味する。
【0028】
通常、既知のプロセスにおいて、スタブ生成の動作は、手作業である(人間によってなされる)。スタブ生成の動作は、テストプロセスの重要な部分となる。統合テストの場合(ユニットテストとは反対に)、スタブは、テスト対象の関数の呼び出しツリーの任意の深さで生成することができる。スタブ生成は、ユニットテスト及び統合テストの双方に適用される。
【0029】
ソースコード1に注釈を加えること及びスタブを生成することは、上記ソースコード1をパースすることを含む、ソースコード1の構造的分解によって確実になる。ステップaの最後において、ソースコード1は、注釈及びスタブを含む、完成したソースコード1’になる。完全なマニュアル、パースを手伝うソフトウェアソースを用いるマニュアル及びランダム又はヒューリスティックベースの入力手法のソフトウェアを用いるマニュアルと比較して、記載されているステップaは、カバレッジ基準を満たすことについての保証を与える。例えば、そのような手法は、以下のドキュメント、すなわちVectorCASTユーザーマニュアル、Parasoft C/C++testユーザーマニュアルにおいて定義されている。
【0030】
次に、方法は、「b」で参照されるステップ、すなわち、完成したソースコード1’に対して意味解析アルゴリズム102を実施することを含む。意味解析アルゴリズム102によって、各テスト目的をカテゴリ化することが可能になる。(既知の)意味解析の例は、以下、すなわち、
−「Frama−C」のモジュール「値解析」;
−「Cに関する有界モデル検査(CBMC)」;
−「Frama−C」のモジュール「パスクローラー」、
である。
【0031】
意味解析を実施することによって、テスト目的の各セットを以下の複数のカテゴリのうちの単一のカテゴリにカテゴリ化することが可能になる。
i/メモリ5に記憶されるテストパラメーターを含む、テストケースを入力として用いることによって満たされるテスト目的のセット;
ii/いずれのテストケースを用いても満たすことが不可能であるテスト目的のセット;
iii/少なくとも一時的に満たされていないテスト目的のセット。
【0032】
換言すると、テスト目的のカテゴリ(又はクラス)は、以下のとおりである。
1.「満たされた」、すなわち、テスト目的を満たすテストパラメーターのセットが識別された。
2.「不可能」、すなわち、テスト目的を満たすことができないと証明された。
3.「未分類」、すなわち、テスト目的が(まだ)処理されていない。
【0033】
意味解析によって、テストケースを見つけることが可能になる。いくつかの実施形態において、テスト目的のセットを満たすテストパラメーターの数は、更に最小化する。したがって、例えば、生成されたテストスイートにおけるテストの期待される出力を埋めるために、生成されたテストスイートに対する人間による任意のレビューが促進される。
【0034】
種々の実施形態において、意味解析の前に遺伝的アルゴリズムを実施することによってカバレッジ基準の一部を満たす自明のテストケースのパラメーターを非常に速く見つけることが可能になり得る。そのように事前に遺伝的アルゴリズムを実施することは、任意選択である。
【0035】
方法は、「c」で参照されるステップ、すなわち、カテゴリi/のテスト目的を満たすテストケースを、テストケースのセットの第1のリスト11にフィードすることを含む。
【0036】
方法は、「d」で参照されるステップ、すなわち、満たすことが不可能であり、かつカテゴリii/に関するテスト目的を、テスト目的の第2のリスト21にフィードすることを含む。カテゴリii/の各テスト目的は、満たすことが不可能である理由についての情報に関連付けられる。この情報は、自然言語で、人間が理解可能であることが好ましい。自然言語によって、上記情報は、ソースコード1の対応する部分を人間が検査するために、読まれたり、用いられたりするように計画されることが理解されなければならない。機械語又はコードの使用は避けることが好ましい。
【0037】
方法100の以下の記載において、目的は、第3のカテゴリiii/「未分類」のテスト目的の数を低減する、可能であればゼロにすることである。
【0038】
方法100は、「e」で参照されるステップ、すなわち、カテゴリiii/が空でない場合、カテゴリiii/のテスト目的に対して、少なくとも1つの数理最適化アルゴリズム103(「最適解探索アルゴリズム」とも呼ばれ得る)を実施することを含む。ステップeは、以下、すなわち、
−上記テスト目的の少なくとも一部を満たすテストケース113を識別すること、
−上記テスト目的を満たすテストケースを、テストケース113のセットの第1のリスト11にフィードすること、
−カテゴリi/に上記テスト目的をカテゴリ化すること、
を含む。
【0039】
(既知の)数理最適化アルゴリズムの一例は、遺伝的アルゴリズムであり、それは数理最適化の人工知能カテゴリに関する一例である。遺伝的アルゴリズムは、比較的明らかではないテストケースのパラメーターを見つける。種々の実施形態において、数理最適化の他の例、すなわち、深層学習(人工知能)、シンプレックスアルゴリズム(最適化アルゴリズム)、焼きなまし法(ヒューリスティックカテゴリ)、貪欲アルゴリズム(ヒューリスティックカテゴリ)を用いることができる。
【0040】
意味解析アルゴリズムによって、テスト目的を満たすことが不可能である(カテゴリii)と(数学的に)証明するか、及び/又は、テスト目的を満たす(カテゴリi)新しいテストパラメーターを見つけることによって、処理されていないテスト目的(カテゴリiii)の数を速く、効率的に低減することができる。
【0041】
方法100において、ステップb(少なくとも1つの意味解析)は、例えば「Frama−C」のモジュール「値解析」を用いることによって、ステップe(少なくとも1つの数理最適化)の前に実施される。したがって、数理最適化が、満たすことが不可能なテスト目的(カテゴリii)に対する数理最適化を避けることによって実施される場合、リソース(コンピューター手段3及び時間)は保存される。
【0042】
方法100は、「f」で参照されるステップ、すなわち、
−ステップcにおいて得られた第1のリスト11のテストケース、及び、
−満たすことが不可能であり、ステップdにおいて得られた第2のリスト21の不可能である理由についての情報に関連付けられるテスト目的、
を含むテストスイートを提供することを含む。いくつかの実施形態において、ステップfは、完成したソースコード1’を提供することを更に含む。
【0043】
テストスイートは、CSVファイル(カンマ区切り値)の形式を有することができる。Cソースは、例えば、商用テストソフトウェア「カバレッジマスターwinAMS」を用いて単体テストを実行するスタブとともにコンパイルすることができる。
【0044】
いくつかの実施形態において、ソースコード1の単一の意味解析が実施される(ステップb)。種々の実施形態において、少なくとも1つの補足的(完全)意味解析は、数理最適化アルゴリズムの実施の後(ステップeの後)、実施することができる(ステップb’)。そのような補足的ステップは、より多くのリソース(時間)を消費するが、残りのテストケースのパラメーター又は解の欠如を示すことができる。換言すると、そのような任意選択及び補足的意味解析は、カテゴリiii/において依然として分類することができる任意の客観テストを処理するために、好ましくはステップeの後に実施することができる。
【0045】
いくつかの実施形態において、第1の意味解析アルゴリズム102は、第1のリスト11(ステップc)及び第2のリスト21(ステップd)にフィードするために実施され(ステップb)、次に、少なくとも1つの数理最適化アルゴリズム103(ステップe)を実施した後、第1の意味解析アルゴリズムとは異なる第2の意味解析アルゴリズムが実施される(ステップb’)。これによって、それぞれステップc’及びd’において、第1のリスト11にいくつかのテストケース119を、及び、第2のリスト21にいくつかの不可能なテスト目的を再びフィードすることが可能になる。
【0046】
いくつかの実施形態において、補足的数理最適化アルゴリズム105、107が実施される。例えば、遺伝的アルゴリズムの実施は、入力をミックスするように、解を改善し、テストサンプルのより小さいセットを得る一方で、同じテスト目的を網羅することができる。換言すると、ステップeは、第1の数理最適化アルゴリズム103を用いて1回目を実施することができ、その後、ステップeは、第1の数理最適化アルゴリズムとは異なる、第2の数理最適化アルゴリズム105(及び、任意選択で第3の数理最適化アルゴリズム107)を用いて少なくとも2回目が実施される。
【0047】
ステップfの後、方法100は、ソースコード1が変更される場合、繰り返すことができる。1回目に生成されたテストスイートは、再利用することができる。「フィンガープリント」機構を用いて、同じソースコード1の2つのバージョンの間で修正されていない部分を識別することができる。これによって、ソースコード1全体に対して、方法が完全に再生されることを避けることが可能になる。
【0048】
図3は、C言語(Cコードの60000行)におけるソースコード1に対する単体テストの生成に関する実施態様の一例を示している。その実施態様は、
−シンボリック計算に基づく数理最適化アルゴリズム及び「erltools」と呼ばれるソフトウェア上に構築される遺伝的アルゴリズムに関する1つのブロック103;
−意味解析、すなわち、Frama−Cのモジュール「値解析」、CBMC、及び(Frama−Cの)モジュール「パスクローラー」に関する3つのブロック102、119、121、
を含む。
【0049】
図3は、所与の入力プログラムのセットで得られる結果の一例としても与えられる。Cソースの処理は、以下の順序で以下の4つの動作において行われる。
1.Frama−Cのモジュール「値解析」によって、いくつかのテスト目的を不可能なものとして分類すること;
2.遺伝的アルゴリズムによってテスト目的のテストパラメーターを見つけること。これらの動作1及び2の後、テストスイートの95%は、10分以内に構築される。
3.CBMCを用いて、テスト目的のより多くのテストパラメーターを見つけ、これによって、合計で35分後、テストスイートの97%を構築することが可能になる。
4.テスト目的のより多くのテストパラメーターを見つける、Frama−Cのモジュール「パスクローラー」を用いて、いくつかのテスト目的を「満たすことが不可能なもの」として分類すること。それによって結果として、テストスイートの98%が1時間35分以内に見つけられる。
【0050】
図3の特定の実施形態は、特に良好な結果を示している。上述した例示的な値は、用いられるソースコード1及びコンピューター手段に依存する。方法100によって、テストスイートの大部分を速く得られる一方で、かなりの時間を費やして完全性を確実にすることが可能であることを本質的に示すように与えられる。換言すると、最終ユーザーは、速い(しかしながら不完全な)テストスイートと保証される完成したテストスイートとの間で容易に選択を行うことができる。
【0051】
既知の方法のいくつかは、特定のコンピューター言語に限定される。例えば、C言語において、ポインタ関数引数がスカラー又は配列を指すかどうかを構文的に判定することは不可能であり、したがって、追加の手作業の情報が、通常、(既知の情報が用いられる場合)必要となる。方法100の種々の実施形態において、手作業の補足的注釈は、テスト目的(ステップa)の自動識別を高めるように、メモリ5に登録されたテストケースに事前に加えることができる。カバレッジ基準のテストケースを生成するのに必要な時間及び労働力が低減される。加えて、方法100は、高い完全性を与え、すなわち、不可能なテスト目的ごとに、不可能なテスト目的が存在する場合、不可能であることの説明が提供される。人間は、ソースコード1のそのような部分を具体的に検査することができる。これは、ソースコード1の任意の後続の認証プロセスを促進する。例えば、Cコードにおける「Path predicates」に対応するアサーションを提示し、その後、Frama−Cの「WP」モジュールを用いて、それらを検証することができる。
【0052】
方法100は、プロセッサ等のコンピューター手段3及びメモリ5を備える、コンピューターシステムによって実施されるように記述されている。別の態様では、方法100は、ソフトウェアが任意のプロセッサによって実行されると、方法100を実施する命令を含む、コンピューターソフトウェアの形態を有することができる。コンピューターソフトウェアは、コンピューター可読非一時的記録媒体上に記録することができる。
【0053】
本発明は、本明細書において記載した方法、システム、コンピューターソフトウェア及びコンピューター可読非一時的記録媒体に限定されず、それらは単なる例である。本発明は、当業者が本明細書を読む際に想到するあらゆる代替形態を包含する。