четверг, 22 мая 2008 г.

Динамическое автоматизированное тестирование

В процессе непосредственно тестирования мы сталкиваемся с тем, что выполняем одну и туже операцию сотни раз в пределах одной итерации тестирования или в несколько раз больше за весь цикл тестирования. Для того, чтобы избавится от такой рутинной работы, кто-то, видимо очень умный, придумал инструменты для автоматизированного тестирования. Теперь мы "просто" пишем автоматизированные тесты, которые будет за нас нажимать кнопки, вводить данные, проверять соответствие и иногда даже писать баги в систему трекинга ошибок. Все стало намного проще, и у нас появилось больше времени на придумывание хитроумных сценариев, создание тестовых данных для увеличения покрытия автоматизированных тестов.

Я же думаю, что на самом деле не так все просто. И что, процесс требует от нас дополнительной автоматизации, которую, как я считаю каждый по отдельности реализует в пределах своего проекта, в зависимости от требований и видов проводимых тестов. Этот процесс - Автоматическая Генерация Тест Кейсов и Тестовых Данных.

В данный момент я нахожусь на стадии написания более менее универсального генератора, основанного на простейших принципах (пилотная версия уже доступна ProTesting Test Case Generator):
1. В процессе тестирования мы используем данные, создавая которые, мы пользуемся определенными требованиями.
2. Каждое требование можно условно разбить на несколько под-требований:
• требование к значению
• требование к формату
• требование к вводимым символам
3. Генерация по под-требованиям поддается простейшим правилам, которые могут быть запрограммированы.

Исходя из последнего пункта, раз требования по генерации могут быть запрограммированы, значит процесс Генерации Тестовых Данных можно автоматизировать. То есть мы можем один раз написать генератор и использовать его в дальнейшей работе, зная, что данные будут генерироваться исходя из поставленных требований. Единственное, что остается тестировщик это описать требования к тестовым данным.

Приведу пример, для более наглядной демонстрации:
Поле: Дата Рождения
Требования:
• значение - дата,
• формат день.месяц.год,
• разрешены только цифры и символ "."
Дополнительные требования: дата в интервале от 1908 до 2008 годов

Имея в требованиях интервал допустимых значений, мы с легко можем определить позитивные и негативные тест кейсы, используя правила для проверки граничных значений:

Позитивные, если границы включены: левая граница, правая граница и значение внутри интервала
Позитивные, если границы НЕ включены: значение внутри интервала
Негативные, если границы включены: меньше левой граница, больше правой границы
Негативные, если границы НЕ включены: левая граница, правая граница


Причем принцип генерации одинаков для любых типов значений (целое число, число с десятичной точкой, дата), к которым применяется требование по граничным условиям. А это значит, что позитивные и негативные значения в тест кейсы можно генерировать динамически в процессе прогона теста.

Далее накладываем дополнительные условия по формату и разрешенным символам и получаем готовые наборы данных удовлетворяющие выставленным требованиям.

Аналогичные правила к генерации значений можно применить и к строковым данным, накладывая на них требования по длине, которые является частным случаем требований на граничные условия с фиксированной постоянно включенной левой границей:
• Строка длиной 25 символов - это строка с длиной в интервале от 0 до 25 символов.

То есть при генерации строки заданной длины мы пользуемся теми же правилами, что и при генерации строки с требованиями по граничным условиям.


Таким образом мы переходим на принципиально новый уровень автоматизации тестирования - Динамическое Автоматизированное Тестирование, где тест кейсы генерируются непосредственно во время прогона автоматического теста.

6 комментариев:

Unknown комментирует...

О! Наш человек! Мы уже десять лет копаем этот рудник, три поколения инструментов прошли (UniTESK -- это третье поколение), и ещё дна не видно, ещё столько всего можно автоматизировать -- глаза разбегаются...

Помимо кейсов бывают ещё сценарии, то бишь последовательности этих кейсов, и их тоже хочется генерировать автоматически. Ешё бывают так называемые "обратные интерфейсы", сейчас про них у буржуев очень модно говорить (искать по словам mock и stub). Ещё есть страшная и пока очень трудноразрешимая проблема асинхронности кейсов (появление AJAX эту проблему вынесло на передний план, а в тестировании интеграционных платформ мы и раньше постоянно с ней сталкивались).

(Это я привёл примеры, чтобы подтвердить тезис, что "не так всё просто, как кажется на первый взгляд", оно даже ещё менее просто, чем кажется на второй взгляд :) )

А.Б. комментирует...

Это да... Думаю, это уже вопрос связанным с самим устройством человека или "законом сохранения энергий".
Сколько бы мы не пытались переложить свою работу на машину, всеравно столько же нам останется сделать. Просто с каждым новым шагом, мы будем дальше углубляться в еще неизведанные сферы деятельности.

Совершенству нет предела, но ведь хочется хоть на миллиметр стать ближе к нему... :)

Relax комментирует...

Error: Server Error
The server encountered an error and could not complete your request.
Наверно поле даты ему не понравилось...

А.Б. комментирует...

Это прототип, поэтому Баги там есть :)

Я использую это приложение в качестве тренинга молодых тестеров у нас в компании.

P.S. выбрав поле даты, надо еще выбрать правильный формат даты и границы (в соответствии с форматом).
Например:
Data Format: Date
Boundary Left: 1/1/2012
Boundary Right: 1/31/2012
Format type: Date
Format: M/dd/yyyy

Вот как-то так :)

vremenno obyknovenniy комментирует...
Этот комментарий был удален автором.
vremenno obyknovenniy комментирует...

Вроде бы так должно быть в 4-ом пункте:
Негативные, если границы НЕ включены: левая граница, правая граница и меньше левой граница, больше правой границы

Условия копирования публикаций:

Все публикации в данном блоге являются частной собственностью авторов. Любое копирование информации допускается только при условии указания имени автора и активной ссылки на источник.