Тестирование на основе моделей: теория, инструменты, применения Группа спецификации, верификации и тестирования ИСП РАН 2004 Формирование группы Совместный проект ИСП и Nortel Networks Разработка набора функциональных тестов для ядра операционной системы цифровой АТС 1994 – 1996 Результаты первого проекта Разработана технология KVEST автоматизированного построения тестов на основе формальных спецификаций Язык спецификаций – RSL, язык реализации – Protel Разработаны инструменты, поддерживащие KVEST Разработаны формальные спецификации ядра ОС ~60 тыс. строк Разработаны дополнительные компоненты тестов ~100 тыс. строк Сравнение: Код целевой системы ~250 тыс. строк Сгенерированный тестовый набор ~850 тыс. строк Найдено 230 ошибок Из них около 20 приводит к «холодной перезагрузке» ОС Проблемы тестирования Тестирование призвано измерять качество целевого ПО Как быть с качеством тестов? Проверка соответствия требованиям «Достаточная» представительность Ошибки и «возможные» ошибки Покрытие элементов кода Покрытие требований Нужна модель требований KVEST: решения Контрактные спецификации: Предусловия и постусловия операций Инварианты типов данных Критерий качества тестирования – покрытие спецификаций Построение конечного автомата по спецификации и заданному уровню покрытия Построение теста во время выполнения – обход конечного автомата Повышение уровня абстракции при разработке тестов Контрактные спецификации Предусловие описывает область определения операции sqrt(x) pre x ≥ 0 Постусловие описывает ограничения на правильные результаты операции sqrt(x) post result*result = x Инвариант типа описывает условия целостности его данных Triangle x,y,z : x+y≥z & x+z≥y & y+z≥x Тестовые оракулы Тестовые воздействия Формальные спецификации Целевая система Тестовый оракул ? Виды спецификаций Контрактные Близки к требованиям Абстрактны или конкретны по выбору Удобны для построения оракулов Плохи для построения тестовых последовательностей Исполнимые Часто далеки от требований Обычно слишком конкретны Не вполне удобны для построения оракулов Удобны для построения тестовых последовательностей Аксиоматические Далеки от требований Обычно слишком абстрактны Не вполне удобны для построения оракулов Неудобны для построения тестовых последовательностей Сценарные Близки к требованиям Абстрактны или конкретны по выбору Не вполне удобны для построения оракулов Неудобны для построения тестовых последовательностей Критерии покрытия Качество тестирования измеряется степенью покрытия тестируемой системы Покрытие спецификаций близко к покрытию требований /* Контроллер лифта */ if Inner_up Outer_up then // двигаться вверх else if Inner_down Outer_down then // двигаться вниз else // стоять на месте Построение конечного автомата параметры область определения операции 2 3 1 цели покрытия состояния Выполнение теста I Вычисление одного тестового воздействия параметры Был разработан инструмент, автоматически вычисляющий параметры в случае линейных условий 2 3 1 состояния текущее состояние Выполнение теста II Построение тестовой последовательности 1 2 3 Повышение уровня абстракции Критерий покрытия Целевая система Медиатор Спецификации – модель поведения Модель теста Факторизация автомата Неявное представление автомата KVEST: архитектура теста Скрипт-драйвер на ЯР Скрипт-драйвер на RSL Оракулы на ЯР Оракулы на RSL Медиаторы на ЯР Целевая система Шаблон скриптдрайвера Вставки в шаблон Спецификации на RSL Другие проекты до 2000 года I Тестирование разных версий ядра ОС АТС Спецификация и тестирование системы настройки телекоммуникационных сервисов базового уровня Перепроектирование подсистемы управления очередями сообщений в ОС АТС Разработка методики автоматизированной генерации документации на естественном языке из спецификаций 1996 – 2000 1997 1998 1998 Другие проекты до 2000 года II Разработка технологии KVEST2 Спецификация и тестирование системы управления очередями сообщений в контроллере смарт-карт Спецификация и тестирование системы управления шлюзом IP-телефонии Разработка технологии коверификационной разработки ПО Спецификация и тестирование системы поддержки распеределенных сервисов 1998 1999 1999 1999 – 2000 1999 – 2000 Недостатки KVEST Несколько языков Трудности построения связи между спецификациями и реализацией Недостаточная структурированность теста Трудности обучения и внедрения UniTesK Один язык Спецификации и другие компоненты тестов разрабатываются на расширении целевого языка Лучшая структуризация тестов Интеграция с привычными средами разработки UniTesK: архитектура теста Обходчик Итератор тестовых воздействий Сценарий Оракулы на ЯР Спецификации Медиаторы на ЯР Медиаторы Целевая система UniTesK: разработка тестов Проетные документы Требования Критерии качества Целевая система Выделение интерфейса Разработка спецификаций Спецификации Разработка сценариев Тестовые сценарии Разработка медиаторов Медиаторы Выполнение тестов Анализ результатов Тестовые отчеты Параллелизм: модели поведения Асинхронность и распределенность Модели – асинхронные автоматы !x !y !x ?b !y !z ?a B : X* → P (R*) ai ↦ { xi } ?e ?a ?a !x !y B : X* → P (R*) ai ↦ { yjxk…xlyn : k+…+l = i } Распределенность ?a ?{a,b} ?b ?{a,a} ?{b,b} ?{a,a,a} ?{a,a,b} Как моделировать реакции на все возможные комбинации входов? Аксиома простого параллелизма : Реакция на несколько одновременных входов совпадает с реакцией на некоторую их последовательность Генерация тестовых входов s14 s24 s33 s13 s23 s12 s22 s11 s21 s32 Целевая система s31 Вместо тестовой последовательности используется набор последовательностей Сбор реакций 11 r11 Целевая система r21 21 31 r12 r22 12 r23 22 32 23 r31 r32 r33 33 время Реакции образуют частично упорядоченное множество Проверка корректности поведения стимулы реакции Аксиома простого параллелизма ✕ Текущее состяние Стационарное тестирование Выполняем (мульти)последовательность и ждем, пока система не «успокоится» Покрытие стимулов и производные Гарантировать покрытие нестационарных состояний нельзя – требуются новые гипотезы Тестирование компиляторов Спецификации языка Набор базовых блоков модели Итератор комбинаций Привязка базовых блоков Тестовые программы if(…)…else … for(…;…;…) Проверка корректности оптимизации Тестовое воздействие Компилятор Оптимизатор ? == Компилятор Поддержка UniTesK J@T 2000 – 2002 Java / NetBeans, Eclipse (план) CTesK 2000 – 2001 C / Visual Studio 6.0, gcc J@T–C++ Link 2002 – 2003 Java / NetBeans Ch@se 2002 – 2003 C# / Visual Studio .NET 7.1 OTK 2002 – 2003 Инструмент построения тестов для компиляторов Применения UniTesK Реализации IPv6 - 2001-2003 Microsoft Research Мобильный IPv6 (в Windows CE 4.1) Октет Компиляторы Intel Инструменты поддержки UniTesK Пилотные проекты - 2001-2003 - 2001-2003 - 2003 ГосНИИАС Банковская система ведения данных о клиентах Библиотека классов для разработки приложений уровня предприятия Биллинговая система Участие в обучении МГУ МФТИ Курс «Формальные спецификации программ» Спецкурс «Методы автоматизации тестирования» Спецсеминар «Верификация и валидация ПО» Курс «Языки формальных спецификаций» Спецсеминар «Верификация и валидация ПО» Тренинги по UniTesK Ланит-Терком, Россия Университет Саарланда, Германия Systematic Software Engineering, Дания Luxoft, Россия Состав группы 30 25 20 Студенты Аспиранты 15 Сотрудники без степени Кандидаты наук 10 Доктора наук 5 0 1994 1996 1998 2001 2004 Контакты Сайт группы http://www.ispras.ru/groups/rv/rv.html Сайт проектов UniTesK http://www.unitesk.com Электронный адрес petrenko@ispras.ru Литература I. Burdonov, A. Kossatchev, A. Petrenko, H. Wong. Overview of the Kernel Verification project. BNR Reports, 1997 И. Б. Бурдонов, А. В. Демаков, А. С. Косачев, А. В. Максимов, А. К. Петренко. Формальные спецификации в технологиях обратной инженерии и верификации программ. Труды ИСП, т.1, 1999, стр. 35-47 I. Bourdonov, A. Kossatchev, A. Petrenko, D. Galter. KVEST: Automated Generation of Test Suites from Formal Specifications. Proc. FM’99, LNCS 1708, Springer-Verlag, 1999, pp. 608-621 И. Б. Бурдонов, А. С. Косачев, В. В. Кулямин. Использование конечных автоматов для тестирования программ. Программирование, т. 26, №. 2, 2000, стр. 61-73 A. K. Petrenko, I. B. Bourdonov, A. S. Kossatchev, V. V. Kuliamin. Experiences in using testing tools and technology in real-life applications. Proc. SETT’2001, Pune, India, 2001 A.Petrenko. Specification Based Testing: Towards Practice. Proc. PSI’2001, LNCS 2244, 2001 I. Bourdonov, A. Kossatchev, V. Kuliamin, A. Petrenko. UniTesK Test Suite Architecture. Proc. FME 2002, LNCS 2391, pp. 77-88, Springer-Verlag, 2002 И.Б.Бурдонов, А.С.Косачев, В.В.Кулямин. Асинхронные автоматы: классификация и тестирование. Труды ИСП РАН, т. 4, 2003, стр. 7-84 V. Kuliamin, A. Petrenko, N. Pakoulin, A. Kossatchev, I. Bourdonov. Integration of Functional and Timed Testing of Real-time and Concurrent Systems. Proc. PSI’2003. A. Kossatchev, A. Petrenko, S. Zelenov, S. Zelenova. Using Model-Based Approach for Automated Testing of Optimizing Compilers. Proc. Intl. Workshop on Program Undestanding, Gorno-Altaisk, 2003 В.В.Кулямин, А.К.Петренко, А.С.Косачев, И.Б.Бурдонов. Подход UniTesK к разработке тестов. Программирование, т. 29, № 6, 2003, стр. 25-43 Спасибо за внимание