Testing of a Robot-Programming Environment
Dmitry Mordvinov, Yury Litvinov, Saint Petersburg State University, Saint Petersburg
12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg
2. О TRIK Studio
● Обучение школьников
программированию и
робототехнике
● Программа в виде
визуальной модели
● Исполнение на реальном
роботе (ТРИК, NXT, EV3)
● Двумерная модель
● Генерация кода (C,
JavaScript, F#)
● Реализация на C++, Qt
3. Модульное тестирование
● Qt Test
● CPPUnit
● Boost.Test
● CppUnitLite
● Unit++,
● CxxTest
● Google C++ Testing Framework
○ Google C++ Mocking Framework
● Наиболее полно покрыты
следующие компоненты:
○ Ядро
○ Синтаксический анализатор и
интерпретатор текстового языка
● Хуже всего тестовое покрытие у
кода, относящегося к
пользовательскому интерфейсу
4. Тестирование пользовательского интерфейса
● Требования
○ Кроссплатформенность
○ Бесплатность
○ Простота
● Qt Test
● Qt Script
● Фасад доступа к элементам
пользовательского интерфейса
○ Доступ к элементам управления
○ Высокоуровневые команды
○ Обход системных диалогов
○ Показ действий пользователю
■ Позволяет использовать эту же
систему для демонстраций
5. Функциональное тестирование
● Тестирование интерпретатора посредством
исполнения тестовых программ на двумерной
модели робота
● Реализация
○ XML-язык для ограничений
○ Рефлексия для доступа к полям устройств робота
○ Проверка ограничений на каждом “тике” модельного
времени
6. Язык ограничений на решения
● Множество событий { 1
, 2
, ..., }
● Событие – это тройка ( , , ), может быть взведено и опущено
● – условие срабатывания события, формула логики первого порядка
● – список триггеров [ 1
, 2
, ..., ]. Выполняются в момент истинности ci
● Синтаксический сахар: ограничения – ( , ! , [ ( )])
○ Лимит времени (модельного)
● Предикаты
○ >, <, <=, >=, =, ! =
○ Пространственные предикаты
○ Состояния событий, ( ) и ( )
○ Таймер
● Символы: константы, variableValue( ), арифметические и
геометрические операции, objectState(path)
8. Использование
● Реализовано 20 тестовых задач,
от простого движения вперёд до
ПД-регуляторов
● Трудозатраты ~2 человеко-
недель
● Прогон полного набора тестов
занимает порядка нескольких
минут
● Задачи покрывают годовой
школьный курс по робототехнике
● Использование для проверки
задач в системе онлайн-обучения
9. Результаты
● Модульное тестирование: Google C++ Testing/Mocking Framework
● Тестирование GUI: скрипты на Qt Script для Qt Test
○ В процессе внедрения выявлено 12 важных дефектов
● Функциональное тестирование: исполнение программ на симуляторе
○ В процессе внедрения выявлено порядка 10 важных дефектов
● Переиспользование технологий для реализации другой
функциональности
○ Режим обучения пользователя с демонстрациями на Qt Script
○ Проверка домашних заданий в онлайн-курсе с использованием системы
функционального тестирования
● Реализация: https://github.com/qreal/qreal