Методы автоматизации тестирования Лекция 2
Архитектура теста в UniTesK Генератор тестовой последовательности Оракул Медиатор на целевом языке Целевая система Обходчик конечных автоматов Итератор тестовых воздействий Библиотечный компонент Генерируемый компонент Целевая система Компонент, создаваемый вручную Спецификации Тестовый сценарий Медиатор Генерация
Сравнивающие оракулы Целевая система Сравнение – выработка вердикта Дополнительное вычисление результатов Тестовые воздействия Вердикт Проверка предварительных требований
Оценивающие оракулы Оценка результатов – выработка вердикта Тестовые воздействия Проверка предварительных требований Целевая система Вердикт
Пример спецификации на specification package; public class LogSpecification { specification public double log (double x) reads x { pre { return x > 0; } post { return Math.exp(log) == x; }
Пример спецификации на specification package; public class LogSpecification { double field; specification public void log () updates field throws IllegalStateException { post { if(field > 0) return Math.exp(field) else return thrown != null && thrown instanceof IllegalStateException; }
Пример спецификации на specification package; public class ComplexNumberSpecification { double r; double phi; invariant I () { return 0 < r && -Math.PI < phi && phi
Ветви функциональности specification package; public class LogSpecification { double field; specification public void log () updates field throws IllegalStateException { post { if(field > 0) { branch Normal case; return Math.exp(field) } else { branch Exceptional case; return thrown != null && thrown instanceof IllegalStateException; }
Медиатор в архитектуре теста Медиатор Тестовые воздействия Оракул Целевая система
Пример медиатора на specification package; mediator public class ComplexNumberMediator extends ComplexNumberSpecification { implementation public Complex target; public static ComplexNumberSpecification multiply (ComplexNumberSpecification c1, ComplexNumberSpecification c2) { Complex implArg1 = ((ComplexNumberMediator)c1).target; Complex implArg2 = ((ComplexNumberMediator)c2).target; Complex implResult = Complex.multiply(implArg1, implArg2); return ComplexNumberMediator.create(implResult); } public void mapStateUp() { r = Math.sqrt (target.x*target.x + target.y*target.y); phi = Math.atan2(target.y, target.x); }
Вопросы к коллоквиуму 1.Последовательность шагов разработки тестовых программ. 2.Способы представления свойств целевой программы. Перечислить способы и сравнить с точки зрения удобства автоматизации. 3.Способы формального описания свойств целевой программы. 4.Модели ошибок. 5.Модели тестирования. 6.Модели построения тестов. 7.Архитектура тестовой системы в UniTesK. Перечислить основные компоненты, определить их ответственности, описать схему работы теста. 8.Оракул. Разновидности оракулов. 9.Основные конструкции языка используемые для написания спецификаций. Результат операции, пре-значение выражения, созданное исключение. 10.Ветви функциональности. Другие критерии покрытия, извлекаемые из структуры спецификаций. 11.Медиатор. Устройство медиаторов в UniTesK. 12.Основные конструкции языка используемые для написания медиаторов. 13.Тестирование с открытым и с закрытым состоянием. Различия в построении медиаторов. 14.Механизм генерации тестовой последовательности в UniTesK. 15.Тестовый сценарий. Элементы сценария и разновидности сценариев. 16.Основные конструкции языка используемые для написания тестовых сценариев.