UniTesK технология тестирования ПО Е. Бритвина, Н. Казакова, В. Кулямин, А. Петренко
Что такое тестирование? Тестирование – это поиск ошибок Как искать ошибки? Как их распознавать? Когда прекращать их искать?
Как искать ошибки? Выполняя тестируемую программу в разных ситуациях Целевая система Тестовые воздействия ? Когда прекращать? Когда разные ситуации кончатся
Как распознавать ошибки? Ошибка – различие между тем, что программа делает, и тем, что она должна делать То, что должно делаться, оформляем в виде спецификаций или модели По модели автоматически строим тестовый оракул – программу, которая без участия человека определит, была ошибка или нет
Тестирование с оракулом Целевая система Тестовый оракул Модель Тестовые воздействия ?
Контрактные спецификации specification double sqrt(double x) { pre { return x >= 0; } post { return sqrt*sqrt == x; } } invariant Triangle() { return x + y >= z && x + z >= y && y + z >= x; }
Что такое «разные ситуации»? Можно считать все ситуации разными исчерпывающее тестирование случайное тестирование Можно считать разными ситуации, при которых в программе выполняются разные строки кода структурное тестирование Мы считаем разными ситуации, отвечающие разным видам поведения, описанным в модели
Выделение ситуаций specification double sqrt(double x) { pre { return x >= 0; } post { if(x == 0) { return sqrt == 0; } else { return sqrt > 0 && abs((sqrt*sqrt – x)/x) < epsilon; }
Построение тестов На основе выделенных ситуаций определяем тестовый сценарий Структура состояния системы Набор воздействий, которые можно оказывать в состоянии общего вида
Построение сценария состояния параметры область определения операции цели покрытия
Пример сценария scenario class TestScenario { Model model = new Model(new Impl()); object State() { return new IntState(model.a.number()); } scenario method1() { model.method1(); } scenario method2() { iterate(int i = 0; i < MAX; i++) model.method2(i); } static void main() { … } }
Решения Модели – контрактные спецификации на расширениях языков программирования (C, C#, Java) Различие между ситуациями определяется ветвями или дизъюнктами постусловия По требуемому покрытию строим сценарий (неявно описывает конечный автомат) В ходе теста на основе сценария генерируется последовательность тестовых воздействий
Демонстрация инструмента
Картина в целом Тестируемая система Модель поведенияСценарий Модель покрытия Генерация воздействийПроверка воздействия
Возможности Тестирование параллелизма и асинхронно работающих потоков/процессов Тестирование компиляторов и любых программ, работающих со сложно структурированными данными Адаптеры для привязки спецификаций к меняющимся интерфейсам – переиспользование тестов Возможности переиспользования спецификаций и сценариев
Применения UniTesK Ядро операционной системы коммутатора (KVEST – прообраз UniTesK) Реализации IPv Microsoft Research Мобильный IPv6 (в Windows CE 4.1) Октет Компиляторы Intel Стардарт AVS-IPMP IPSec … Пилотные проекты ГосНИИАС Банковская система ведения данных о клиентах (Luxoft) Библиотека классов для разработки приложений уровня предприятия Биллинговая система Tiny OS
Контакты Сайт группы Сайт проектов UniTesK Электронный адрес
Литература I. Burdonov, A. Kossatchev, A. Petrenko, H. Wong. Overview of the Kernel Verification project. BNR Reports, 1997 И. Б. Бурдонов, А. В. Демаков, А. С. Косачев, А. В. Максимов, А. К. Петренко. Формальные спецификации в технологиях обратной инженерии и верификации программ. Труды ИСП, т.1, 1999, стр I. Bourdonov, A. Kossatchev, A. Petrenko, D. Galter. KVEST: Automated Generation of Test Suites from Formal Specifications. Proc. FM99, LNCS 1708, Springer-Verlag, 1999, pp И. Б. Бурдонов, А. С. Косачев, В. В. Кулямин. Использование конечных автоматов для тестирования программ. Программирование, т. 26,. 2, 2000, стр A. K. Petrenko, I. B. Bourdonov, A. S. Kossatchev, V. V. Kuliamin. Experiences in using testing tools and technology in real-life applications. Proc. SETT2001, Pune, India, 2001 A. Petrenko. Specification Based Testing: Towards Practice. Proc. PSI2001, LNCS 2244, 2001 I. Bourdonov, A. Kossatchev, V. Kuliamin, A. Petrenko. UniTesK Test Suite Architecture. Proc. FME 2002, LNCS 2391, pp , Springer-Verlag, 2002 И. Б. Бурдонов, А. С. Косачев, В. В. Кулямин. Асинхронные автоматы: классификация и тестирование. Труды ИСП РАН, т. 4, 2003, стр V. Kuliamin, A. Petrenko, N. Pakoulin, A. Kossatchev, I. Bourdonov. Integration of Functional and Timed Testing of Real-time and Concurrent Systems. Proc. PSI2003. 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, стр
Спасибо за внимание