Fastest は、 Z 表記で記述された仕様を扱うモデルベースのテストツールです。このツールは、Phil Stocks と David Carrington によって提案された Test Template Framework (TTF) [ 1 ]を実装しています。 [ 2 ]
Fastest はコマンドラインのユーザーインターフェイスを提供します。ユーザーはまず、ISO標準に準拠したLaTeX形式で記述された Z 仕様を読み込む必要があります。[ 3 ]次に、テストする操作のリストと、それぞれの操作に適用するテスト戦術を入力する必要があります。3 番目のステップで、Fastest は各操作のテスト ツリーを生成します。テスト ツリーが生成されると、ユーザーはそれらとテスト クラスを参照でき、さらに重要なことに、任意のテスト クラスを自動または手動で剪定できます。テスト ツリーが剪定されたら、ユーザーは Fastest に各テスト ツリーの各リーフに対して 1 つの抽象テスト ケースを見つけるように指示できます。[ 4 ]
現在、Fastestは以下のテスト手法をサポートしています。
Fastest はテストツリーを剪定する 2 つの方法を提供します: [ 6 ]
このツールは、テストツリーの各リーフに対して有限モデルを計算することで、抽象的なテストケースを見つけます。 [ 7 ]有限モデルは、各VIS変数の型を有限セットに制限し、これらのセット間のデカルト積を計算することによって計算されます。各リーフ述語は、述語を満たすもの(つまり、抽象的なテストケースが見つかったもの)が見つかるか、またはすべてが尽きるまで(つまり、テストクラスが充足不可能であるか、有限モデルが不適切であるかのいずれかであるまで)、このデカルト積の各要素に対して評価されます。後者の場合、ユーザーはツールが適切な有限モデルを見つけるのを支援したり、充足不可能なテストクラスを剪定したりすることができます。
Fastest はCommunity Z Tools (CZT)プロジェクトに基づいたJavaアプリケーションです。このツールは、次の 2 つのモードのいずれかで使用できます。[ 8 ]
TTFのプレゼンテーションからもわかるように、テスト戦術はこの手法において不可欠です。これらは、エンジニアが可能な限り多くの発見をもたらすテストケースを作成するために使用しなければならないツールです。したがって、エンジニアが利用できるテスト戦術が多ければ多いほど良いのです。
Fastestでは、ツールが提供するTacticインターフェースを実装することで、ユーザーは独自のテスト戦術を追加できます。このインターフェースには、テスト戦術を設定および適用するためのメソッドがあります。インターフェースの定義は以下のとおりです。
パッケージclient.blogic.testing.ttree.tactics ;import java.util.* ; import net.sourceforge.czt.z.ast.Spec ; import common.z.TClass ; import common.z.OpScheme ;/** * テストツリーを生成するために必要なテスト戦術を抽象化し、* テストクラスに適用して新しいテストクラスを生成できるようにするインターフェース。*/ public interface Tactic { /** * 指定されたテストクラスにこの戦術を適用し、 生成されたテストクラス のリストを返します。 * @param tClass * @return */ public List < TClass > applyTactic ( TClass tClass ); /** * テスト対象システムの仕様を設定します。 * @param opScheme */ public void setSpec ( Spec spec ); /** * テスト対象の操作の Z スキーマ ボックスを取得します。 * @return */ public Spec getSpec (); /** * テスト対象の操作の Z スキーマ ボックスを設定します。 * @param opScheme */ public void setOriginalOp ( OpScheme opScheme ); /** * テスト対象の操作の Z スキーマ ボックスを取得します。 * @return */ public OpScheme getOriginalOp (); /** * この戦術のパラメータを解析します。 * @param str * @return */ public boolean parseArgs ( String str ); /** * このオブジェクトに関連付けられた TacticInfo のインスタンスを設定します。 * @param tacticInfo */ public void setTacticInfo ( TacticInfo tacticInfo ); /** * このオブジェクトに関連付けられた TacticInfo のインスタンスを取得します。 * @return */ public TacticInfo getTacticInfo (); /** * この戦術の説明を取得します。 * @return この戦術の説明を含む文字列。 */ public String getDescription (); /** * この戦術の説明を設定します。 * @param description */ public void setDescription ( String description ); }