Я думаю, что Автоматическое увеличение числа тестовых наборов — это больше того, о чем вы спрашиваете. Чтобы быть более конкретным, я попытаюсь представить основы, и если вам интересно, изучите Эволюционное тестирование
Обычно существует стандартный набор ограничений, с которыми мы сталкиваемся, например, изменение функциональности тестируемой системы (SUT), ограниченные временные рамки, отсутствие соответствующих инструментов тестирования, и этот список можно продолжить… Тем не менее, существует еще один тип проблем, которые возникают по мере дальнейшего развития технологических решений. – увеличение сложности системы.
В то время как типичные ограничения можно решить с помощью различных технических и управленческих подходов, в случае сложности системы мы сталкиваемся с пределом наших возможностей определения прямого аналитического метода для оценки и проверки поведения системы. Сложная система состоит из множества, часто разнородных компонентов, которые при совместной работе усиливают статистические и поведенческие отклонения друг друга, в результате чего система действует не так, как было предусмотрено ее первоначальным замыслом. Что еще хуже, сложные системы также повышают чувствительность к окружающей среде с помощью того же механизма.
Варианты тестирования сложных систем
Как мы можем протестировать систему, которая ведет себя по-разному каждый раз, когда мы запускаем тестовый сценарий? Как мы можем воспроизвести проблему, на устранение которой уходят дни и миллионы, но которая возникает только время от времени в условиях, которые известны лишь приблизительно?
Одно из возможных решений, на котором я хочу сосредоточиться, — это принять наш недостаток знаний и работать с тем, что у нас есть, используя эволюционное тестирование. В этом контексте эволюционное тестирование можно рассматривать как вариант тестирования методом черного ящика, потому что мы работаем с подачей входных данных и оценкой выходных данных из ТРИ, не сосредотачиваясь на ее внутренней структуре. Тонкая грань здесь заключается в том, что мы организуем этот процесс автоматической генерации и выполнения тестовых случаев в массовом масштабе как итеративный процесс оптимизации, который имитирует естественную эволюцию.
Эволюционное тестирование
Элементы:
• Population — набор выполнений тестовых наборов, участвующих в процессе оптимизации.
• Поколение – часть населения, вовлеченная в данную итерацию.
• Индивидуальный — выполнение одного тестового примера и его результаты, элемент из совокупности.
• Геном — единое определение всех тестовых случаев, модель, описывающая популяцию.
• Генотип — отдельный экземпляр тестового примера, модель, описывающая индивидуума, экземпляр генома.
• Рекомбинация — преобразование одного или нескольких генотипов в новый генотип.
• Мутация — случайное изменение генотипа.
• Функция пригодности – формализованный критерий, выражающий соответствие индивидуума цели оптимизации.
Как мы создаем эти элементы?
• Определение цели эксперимента (критерии выбора) – задает направление процесса оптимизации и связано с поведением ТРИ. Включает определенные характеристики состояния ТРИ или среды во время выполненных экспериментов с тестовыми примерами. Примеры: o «ТУС должно завершить выполнение тестового примера с кодом ошибки» o «Тестовый пример должен провести ТУС через наибольшее количество ответвлений в логической структуре ТУС» o «Температура окружающей среды в помещении, где находится ТУС, не должна превышать 40 ºC во время выполнения тестового примера» o «Загрузка ЦП в системе, в которой работает SUT, должна превышать 80% во время выполнения тестового примера» Любые измеримые параметры SUT и его среды могут быть использованы в постановке цели. Знание связи между тестовым входом и самой целью не обязательно. Это дает возможность охватить цели, которые вытекают непосредственно из требований, а не основаны на какой-либо производной от более поздних требований, такой как бизнес, архитектурная или техническая модель. • Определение соответствующих входов и выходов тестируемой системы – идентификация входов и выходов ТРИ, а также параметров окружающей среды, имеющих отношение к цели эксперимента. • Формальное определение генома эксперимента – кодирование обобщенного набора тестовых случаев в параметризованную модель (обычно структуру данных), выражающую соответствующие входные данные ТРИ, параметры среды и последовательности действий. Это определение также должно соответствовать двум основным операциям, применяемым к экземплярам генома, — рекомбинации и мутации. Механизм для этих двух операций может быть предопределен для типа данных или действия, присутствующих в геноме, или иметь пользовательские определения • Формальное определение критериев выбора (функция пригодности) — механизм оценки, который использует выходные данные ТРИ или параметры среды, полученные в результате теста. выполнение дела (Индивидуальное) и вычисляет число (Фитнес), показывающее, насколько этот конкретный Индивидуум близок к цели эксперимента.
Как работает процесс?
- Мы используем геном для создания поколения случайных генотипов (экземпляров тестов).
- Мы выполняем тестовые случаи (генотипы), генерирующие результаты (индивидуальные)
- Мы оцениваем каждый результат выполнения (индивидуально) в сравнении с нашей целью, используя функцию пригодности.
- Мы выбираем только тех Индивидуумов из данного Поколения, которые имеют Фитнес выше заданного порога (лучшие 10%, выше среднего и т.д.)
- Мы используем отобранных людей для создания нового полного набора поколений, применяя рекомбинацию и мутацию.
- Мы повторяем процесс, возвращаясь к шагу 2. Процесс итерации обычно останавливается установкой условия в отношении оцениваемой пригодности поколения. Например: • Если верхняя пригодность не изменилась более чем на 0,1% с момента последней итерации • Если разница между верхней и нижней пригодностью в поколении составляет менее 0,3%, возможно, пора остановиться.
Преимущества и недостатки
Преимущества:
• Мы можем работать с ограниченными знаниями для определений тестов SUT и целевых тестов.
• Мы используем модель тестовых случаев (геном), которая позволяет нам массово производить большое количество тестовых случаев (генотипов) без особых усилий.
• Мы можем «посеять» тестовые случаи (генотипы) в первой итерации вместо того, чтобы генерировать их случайным образом, чтобы ускорить процесс оптимизации.
• Мы могли бы запускать тестовые случаи параллельно, чтобы ускорить процесс
• Мы смогли найти несколько решений, соответствующих нашей цели тестирования.
• Если процесс оптимизации конвергентный, у нас есть гарантия, что каждое последующее поколение будет лучшим приближенным решением нашей тестовой цели. Это означает, что даже если нам нужно остановиться до того, как мы достигнем оптимальной пригодности, у нас все равно будут лучшие тестовые примеры, чем те, с которых мы начали.
• Мы можем добиться воспроизведения очень сложных, трудно воспроизводимых тестовых сценариев, которые имитируют реальную жизнь и которые находятся далеко за пределами досягаемости любого другого автоматизированного или ручного метода тестирования.
Недостатки:
• Процесс определения необходимых элементов для реализации эволюционного теста нетривиален и требует специальных знаний.
• Внедрение такого подхода к автоматизации требует много времени и ресурсов и должно использоваться только тогда, когда это оправдано.
• Сходимость процесса оптимизации зависит от гладкости Фитнес-функции. Если его определение приводит к зонам разрыва или малому/отсутствующему градиенту, мы можем ожидать медленной конвергенции или ее отсутствия.
Обновление:
Я также рекомендую вам ознакомиться с генетическими алгоритмами и этой статьей о Генерация тестовых данных может дать вам подходы и рекомендации.
person
ekostadinov
schedule
15.08.2014