Руководство по тестированию агента
Тестирование агента выполняется с помощью решателя Тестировщик агентов, расположенному в фонде по пути "Платформа IACPaaS / Тестирование".
Для разработки и прогона тестов некоторого агента, помещённого в фонд, необходимо выполнить следующие шаги:
- Разработать ИР с тестами для агента в соответствии с онтологией тестов агента (см. ИР Платформа IACPaaS / Тестирование / Структура тестов агента), ИР с отчётом о тестировании и инфоресурсы, используемые при тестировании:
- сформировать ИР входного сообщения и, при необходимости, ИР выходных сообщений (по находящимся в фонде шаблонам этих сообщений и онтологиям их содержимого) для каждого прогона,
- при необходимости, сформировать ИР входных и ИР выходных инфоресурсов для каждого прогона,
- сформировать ИР с тестами агента, сделав в нём ссылки на разработанные:
- ИР тестируемого агента,
- ИР входных/выходных сообщений,
- ИР входных/выходных инфоресурсов.
- Создать инфоресурс для помещения отчётов о прогоне тестов для агента на основе онтологии отчёта о прогоне тестов агента (Проблемно-независимая предметная область / Тестирование / Структура отчета о тестировании).
- Сформировать (и запустить) сервис на запуск решателя Тестировщик агентов (Платформа IACPaaS / Тестирование ) с указанием в качестве входных единиц хранения ИР тестируемого агента и ИР, созданный на 2 шаге.
- Ознакомиться с содержанием отчёта о тестировании.
Процесс подготовки тестирования для отдельного агента состоит из следующих подзадач:
- Подготовка содержательных тестов для проверки функциональности агента (каждого из его блоков).
- Создание нового ИР для хранения в нем множества тестов для этого агента.
- Заполнение нового ИР тестами (оформление этих тестов в виде ИР).
Далее каждая из подзадач рассмотрена подробнее.
Поскольку каждый блок продукций агента запускается отдельно, то следует рассмотреть этот блок как отдельную функцию, для работы которой необходимы входные данные и в результате работы которой ожидаются некоторые результаты.
Для каждой функции (отдельного блока агента) рекомендуется составить набор тестов — пар <вход; ожидаемый выход>, достаточный с точки зрения некоторой выбранной стратегии тестирования (например, покрытия всех классов эквивалентности и граничных значений для входных и выходных условий тестируемой функции).
Пример 1.
Если функция тестируемого агента (назовем его "ТестовыйАгентРешатель") состоит в суммировании двух слагаемых и анализе их знаков, то в качестве одной из тестовых пар может быть:
<(8; -10);
(-2; "разные знаки")>
Пример 2.
Если функция тестируемого агента (назовем его "НайтиСредиМножества") состоит в поиске указанного поддерева среди указанного множества поддеревьев, то в качестве одной из тестовых пар может быть:
<(1. М7654 1.1. Иванов С.М. 1.2. 1977;
0. Истории 1. Ж7653 1.1. Михайлова Ю.С. 1.2. 1980 2. М7654 2.1. Иванов С.М. 2.2. 1977;
3. М7655 3.1. Чичиков А.А. 3.2. 1955);
"поддерево найдено")>.
Примечание. Рекомендуется сохранить такой набор пар в некотором файле на локальном компьютере (для дальнейшего более быстрого заполнения ИР и, если надо, замены новыми версиями таких ИР).
Поскольку ИР с набором тестов для тестирования агента будет подаваться на вход приложению "Тестировщик агентов", то структура этого ИР фиксирована — он должен порождаться по метаинформации ИР "Структура тестов агента"). Для создания такого нового ИР достаточно подать две заявки:
- заявку на ЕХ с некоторым именем и с указанием в качестве метаинформации ИР "Проблемно-независимая предметная область / Тестирование / Структура тестов агента" и
- заявку на редактирование ЕХ с выбранным именем.
После этого целесообразно открыть вновь созданный ИР и породить в нем (в соответствии со существующей "Структурой тестов агента") две вершины:
- вершину "агент" как ссылку на ИР (декларативную часть тестируемого агента) и
- вершину "набор тестов".
- Если тестовые значения — это числа, строки и другие скалярные типы, значения которых можно непосредственно указывать при порождении очередной вершины ИР, то этот шаг выполнять не надо.
- Если некоторое тестовое значение (вход или выход некоторого теста) является структурой (например, поддеревом), то, возможно, удобно создать отдельный ИР для хранения всех конкретных поддеревьев, которые будут использованы в качестве тестовых значений.
Например, для тестирования агента "НайтиСредиМножества" удобно создать отдельный ИР "множествоДеревьев" для хранения множеств поддеревьев. Метаинформация для этого ИР, например, может быть такой:
0. название дерева
1. поддерево
~set (~alt (строковое значение: строка;
числовое значение: целое;
...;
-> поддерево)
А информация "множествоДеревьев", порожденная по нему, может быть такой:
0. Истории
1. Ж7653
1.1. Михайлова Ю.С.
1.2. 1980
2. М7654
2.1. Иванов С.М.
2.2. 1977;
3. М7655
3.1. Чичиков А.А.
3.2. 1955).
Необходимо подготовить входное сообщение для тестируемого агента, которое подаст на вход блоку агента входные данные очередного теста. Для этого нужно:
- Создать новую ЕХ для хранения этого сообщения. В качестве метаинформации новой ЕХ должен быть указан ИР, описывающий один из ранее созданных шаблонов сообщений.
Например, агент «НайтиСредиМножества» отвечает на сообщения по шаблонуЗадание, поэтому в заявке на ЕХ (для входного сообщения) надо указать метаинфо "Проблемно-независимая предметная область
\Тестирование\шаблонЗадание".
- Заполнить информацией само входное сообщение, т.е. указать значения всех необходимых параметров, определенных в шаблоне.
Например, в ЕХ "входное сообщение 2-1" (порожденное по метаинфо "ШаблонЗадание") указать строку «найти» как значение параметра "задание", указать ссылку на вершину-элемент М7654 (ранее созданного ИР "множествоДеревьев") как значение параметра "поддерево", указать ссылку на корневую вершину "Истории" (ранее созданного ИР "множествоДеревьев") как значение параметра "множество".
Например, для входного сообщения тестируемого агента "ТестовыйАгентРешатель" его ЕХ "входное сообщение 1-1" (порожденное по метаинфо "ШаблонАрифметический") содержит значения двух параметров: число "8" как значение параметра "слагаемое 1" и число -10 как значение параметра "слагаемое 2".
Важно: при заполнении ИР сообщения запрещается выполнять порождение копии понятия, содержащего описание шаблона сообщения, и выполнять порождение копии понятия, содержащего внутреннее имя шаблона сообщения!
Необходимо подготовить вЫходные сообщения от тестируемого агента, которые он формирует в процессе своей работы.
- Если результаты очередного теста должны быть переданы через вЫходные сообщения, тогда для каждого из вЫходных сообщений (известных из спецификации тестируемого агента) требуется, как обычно, подать заявку на новое ЕХ для хранения этого выходного сообщения (в соответствии с нужной метаинфо — шаблоном для выходного сообщения) и заявку на ее редактирование.
- В каждом вЫходном сообщении заполняются значения параметров, являющимися выходными данными очередного теста.
Например, мы ожидаем, что агент «НайтиСредиМножества» формирует одно сообщение (по шаблону «обратная связь»), тогда в нем укажем строку «поддерево найдено» становится значением параметра «информация о готовности».
Другой пример. Мы ожидаем, что агент "ТестовыйАгентРешатель" формирует два сообщения (каждое - по шаблону "ШаблонАрифметический"), тогда в первом из них укажем число "-2" как значение параметра "сумма", а во втором - строку "разные знаки" как значение параметра "пояснение".
Важно: при заполнении ИР сообщения запрещается выполнять порождение копии понятия, содержащего описание шаблона сообщения, и выполнять порождение копии понятия, содержащего внутреннее имя шаблона сообщения!
Сформировать в ИР «тесты» очередной тест для тестируемого агента, а именно:
- породить (в соответствии со существующей "Структурой тестов агента") под вершиной "набор тестов" очередную вершину "тест" (назвав ее некоторым именем, например, "первыйТест"),
- породить под ней одну вершину "входное сообщение",
- породить под вершиной "входное сообщение" вершину как ссылку на ЕХ для хранения входного сообщения, созданного на шаге 1,
- породить вершину "ожидаемые выходные сообщения",
- затем, если на шаге 2 созданы ЕХ для выходных сообщений, то породить под вершиной "ожидаемые выходные сообщения" вершины — ссылки на каждую из этих ЕХ-выходных сообщений;
- породить вершину «изменяемые инфоресурсы»;
- породить вершину «ожидаемые конечные состояния изменяемых инфоресурсов».
Например, очередной тест для тестирования агента «НайтиСредиМножества» будет состоять из одной вершины - ссылки на входное сообщение и одной вершины - ссылки на вЫходное сообщение, а тест для агента "ТестовыйАгентРешатель" будет содержать две вершины - ссылки на вЫходное сообщение.
Если тестируемый агент должен вносить изменения в некоторый ИР (модифицировать ИР), хранимый в фонде, то
- во-первых, надо под вершиной «изменяемые инфоресурсы» породить вершину как ссылку на этот модифицируемый ИР,
(дополнительно надо убедиться, что среди параметров входного сообщения в этом тесте присутствует и ссылка на этот модифицируемый ИР);
- во-вторых, надо сформировать ожидаемое состояние модифицируемого ИР как новый ЕХ фонда,
далее под вершиной «ожидаемые конечные состояния изменяемых инфоресурсов» надо породить вершину как ссылку на этот новый ЕХ фонда.
Примечание. Шаги 1-3 далее придется повторить столько раз, сколько тестов необходимо для тестирования агента (сколько содержательных тестов было разработано для функций агента). В процессе сопровождения множества тестов для конкретного агента тоже достаточно повторять эти три шага.
- Создать новый (желательно) ИР для хранения отчета о прогоне множества тестов, например, с именем «отчет», по метаинформации "Платформа IACPaaS / Тестирование / Структура отчета о тестировании". (Дождаться одобрения заявки со стороны администратора.) Убедиться в появлении нового ИР среди ЕХ соответствующего раздела предметной области.
- Подать заявку на создание сервиса с использованием решателя "Тестировщик агентов". В процессе заказа указать в качестве входного ИР сервиса — построенный ЕХ с множеством конкретных тестов. Указать в качестве вЫходного ИР сервиса — ИР для хранения отчета о прогоне множества тестов.
- Подать заявку на создание сервиса с использованием решателя "Просмотрщик инфоресурсов", указав в качестве входного ИР сервиса — ИР для хранения отчета о прогоне множества тестов.
- Запустить сервис с решателем "Тестировщик агентов".
- Просмотреть (запустив сервис с решателем "Просмотрщик инфоресурсов") сформированный им отчет в выходном ИР.
Примечания.
- Шаги 1-3 выполняются однократно для тестируемого агента. Шаги 4 и 5 повторяются при каждом обновлении тестируемого агента либо множества его тестов.
- Текущая версия Тестировщика имеет ограничение: если тестируемый агент должен вносить изменения в хранимые ИР, то перед повторением шагов 4-5 надо позаботиться о "возвращении" в исходное состояние тех ИР, ссылки на которые порождены под вершиной «изменяемые инфоресурсы», поскольку в процессе предыдущего процесса тестирования агент внес в них изменение.