Самый быстрый
Fastest — это инструмент тестирования на основе моделей , который работает со спецификациями, записанными в Z. нотации Инструмент реализует [1] Структура шаблонов тестов (TTF), предложенная Филом Стоксом и Дэвидом Кэррингтоном. [2]
Использование
[ редактировать ]Fastest представляет пользовательский интерфейс командной строки. Сначала пользователю необходимо загрузить спецификацию Z, написанную в формате LaTeX , подтверждающую стандарт ISO . [3] Затем пользователь должен ввести список операций для тестирования, а также тактику тестирования , которую следует применить к каждой из них. На третьем этапе Fastest генерирует дерево тестирования каждой операции. После создания деревьев тестирования пользователи могут просматривать их и их тестовые классы и, что более важно, они могут сокращать любой тестовый класс как автоматически, так и вручную . После обрезки деревьев тестирования пользователи могут поручить Fastest найти один абстрактный тестовый пример для каждого листа в каждом дереве тестирования. [4]
Тактика тестирования, поддерживаемая Fastest
[ редактировать ]В настоящее время, [ когда? ] Fastest поддерживает следующие тактики тестирования:
- Дизъюнктивная нормальная форма (ДНФ). Это единственная тактика тестирования, применяемая по умолчанию (независимо от того, добавил ли пользователь другую тактику тестирования или нет), и она применяется первой.
- Стандартные разделы (СП). Пользователь может добавлять, изменять и удалять стандартные разделы для любого предопределенного математического оператора Z, просто редактируя текстовый файл. [5]
- Бесплатные типы (FT)
- Встроенное расширение (ISE)
- Правильное подмножество расширения набора (PSSE)
- Подмножество расширения набора (SSE)
Обрезка тестовых деревьев в Fastest
[ редактировать ]Fastest предоставляет два способа обрезки деревьев тестирования: [6]
- Автоматическая обрезка.
- Чтобы сократить дерево тестирования, Fastest анализирует предикат каждого листа, чтобы определить, является ли предикат противоречием или нет. Поскольку эта проблема неразрешима , инструмент реализует алгоритм с максимальными усилиями, который может быть улучшен пользователями. Важнейшим аспектом алгоритма является библиотека так называемых теорем исключения, каждая из которых представляет собой семейство противоречий. Пользователи могут расширять эту библиотеку, просто редактируя текстовый файл. Теоремы исключения представляют собой соединения параметрических Z атомарных предикатов.
- Ручная обрезка.
- Самые быстрые пользователи могут обрезать поддеревья или отдельные листья тестовых деревьев, введя две команды. Эти команды удалят все тестовые классы в поддереве независимо от того, пусты они или нет. Основная цель этих команд — позволить инженерам сократить количество или исключить неважные тестовые случаи.
Как Fastest находит абстрактные тестовые примеры
[ редактировать ]Инструмент находит абстрактные тестовые случаи , вычисляя конечную модель для каждого листа дерева тестирования. [7] Конечные модели рассчитываются путем ограничения типа каждой переменной VIS конечным набором, а затем путем вычисления декартова произведения между этими наборами. Каждый листовой предикат оценивается для каждого элемента этого декартова произведения до тех пор, пока он не будет удовлетворять предикату (что означает, что был найден абстрактный тестовый пример) или пока он не будет исчерпан (что означает, что либо тестовый класс невыполним , либо конечная модель неадекватна). В последнем случае у пользователя есть возможность помочь инструменту найти правильную конечную модель или сократить тестовый класс, поскольку он неудовлетворителен.
Архитектура и технологии
[ редактировать ]Fastest — это Java- приложение, основанное на проекте Community Z Tools (CZT) . Инструмент может использоваться в одном из двух режимов: [8]
- В распределенном режиме Fastest работает как клиент-серверное приложение. Приложение можно установить на несколько компьютеров, каждый из которых действует как клиент, сервер или и то, и другое. Пользователи получают доступ к приложению через клиентов, которые отправляют тестовые классы на серверы (называемые серверами тестирования ), которые пытаются найти абстрактный тестовый пример из них . Таким образом, самая тяжелая задача распределяется между максимально возможным количеством компьютеров. Поскольку расчет абстрактного тестового примера из тестового класса полностью независим друг от друга, такая архитектура ускоряет весь процесс пропорционально количеству серверов тестирования.
- В режиме приложения каждый экземпляр Fastest полностью независим друг от друга. Все задачи выполняются на локальном компьютере.
Добавление новой тактики тестирования
[ редактировать ]Как видно из презентации TTF , тактика тестирования имеет важное значение для этого метода. Это инструменты, которые инженеры должны использовать для создания наиболее интересных тестовых примеров. Чем больше разумных тактик тестирования будет доступно инженерам, тем лучше.
В Fastest пользователи могут добавлять собственные тактики тестирования, реализуя интерфейс Tactic , предоставляемый инструментом. В этом интерфейсе есть методы для настройки и применения тактик тестирования. Определение интерфейса следующее:
package client.blogic.testing.ttree.tactics;
import java.util.*;
import net.sourceforge.czt.z.ast.Spec;
import common.z.TClass;
import common.z.OpScheme;
/**
* Interface that abstracts a testing tactic (needed to generate test trees) and
* makes possible its application to a test class in order to generate new ones.
*/
public interface Tactic {
/**
* Applies this tactic to the specified test class and returns the list with
* the generated test classes.
* @param tClass
* @return
*/
public List<TClass> applyTactic(TClass tClass);
/**
* Sets the specification of the system under test.
* @param opScheme
*/
public void setSpec(Spec spec);
/**
* Gets the Z schema box of the operation under test.
* @return
*/
public Spec getSpec();
/**
* Sets the Z schema box of the operation under test.
* @param opScheme
*/
public void setOriginalOp(OpScheme opScheme);
/**
* Gets the Z schema box of the operation under test.
* @return
*/
public OpScheme getOriginalOp();
/**
* Parses the parameters of this tactic.
* @param str
* @return
*/
public boolean parseArgs(String str);
/**
* Sets the instance of TacticInfo associated to this object.
* @param tacticInfo
*/
public void setTacticInfo(TacticInfo tacticInfo);
/**
* Gets the instance of TacticInfo associated to this object.
* @return
*/
public TacticInfo getTacticInfo();
/**
* Gets the description of this tactic.
* @return the string with the description of this tactic.
*/
public String getDescription();
/**
* Sets the description of this tactic.
* @param description
*/
public void setDescription(String description);
}
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ ( Кристия и Родригес Монетти, 2009 )
- ^ ( Акции и Кэррингтон 1996 )
- ^ ( Z Стандарт 2002 )
- ^ ( Кристия, Родригес Монетти и Альбертенго, 2010 )
- ^ ( Кристия, Родригес Монетти и Альбертенго, 2010 )
- ^ ( Кристия, Родригес Монетти и Альбертенго, 2010 )
- ^ ( Кристия и Родригес Монетти, 2009 )
- ^ ( Кристия и Родригес Монетти, 2009 )
Ссылки
[ редактировать ]- Кристиа, Максимилиано; Родригес Монетти, Пабло (2009). «Внедрение и применение структуры Стокса-Кэррингтона для модельного тестирования». Формальные методы и программная инженерия, 11-я Международная конференция по формальным методам инженерии, ICFEM 2009 . Рио-де-Жанейро, Бразилия: Springer-Verlag .
- Стокс, Фил; Кэррингтон, Дэвид (1996), «Среда тестирования на основе спецификаций», IEEE Transactions on Software Engineering , 22 (11): 777–793, doi : 10.1109/32.553698 .
- Информационные технологии — Нотация формальной спецификации Z — Синтаксис, система типов и семантика (PDF, 1 МБ) , 2002 г., стр. 196 страниц . ИСО/МЭК 13568:2002
- Кристиа, Максимилиано; Альбертенго, Пабло; Родригес Монетти, Пабло (2010). «Обрезка деревьев тестирования в структуре шаблонов тестов путем обнаружения математических противоречий». 8-я Международная конференция IEEE по программной инженерии и формальным методам (SEFM), 2010 г. Пиза, Италия: IEEE .