Рекомендация: Данные теста
Эта рекомендация посвящена знакомству с проектированием наборов данных для тестирования.
Взаимосвязи
Связанные элементы
Основное описание

Объяснение

При рассмотрении задачи проектирования теста были описаны два важных артефакта: тестовые сценарии и тестовые наборы. В отсутствие данных для тестов эти два артефакта реализовать невозможно. Они являются описаниями условий, сценариев и путей, но не предусматривают конкретных значений для реализации. Тестовые данные сами по себе не являются артефактом, но заметно влияют на успех или неудачу теста. Тестирование не может быть выполнено без данных для тестов. Они требуются для следующего:

  • входные данные для создания условия
  • выходные данные для оценки требования
  • вспомогательные данные (как предварительное условие для теста)

Поэтому определение значений - это важная часть работы при создании тестовых наборов, см. Рабочий продукт: тестовый набор и Рекомендация: тестовый набор.

При определении фактических данных для тестов следует учитывать четыре параметра:

Эти параметры подробно описываются в следующих разделах:

Объем

Объем - это количество данных для тестирования. Объем данных - это важный параметр; если данных слишком мало, они могут не отразить все возможные ситуации, если же слишком много - то с ними будет трудно работать. Лучше всего, если тестирование начинается с небольшого объема данных, пригодного для критически важных (и, как правило, позитивных) тестовых наборов. По мере того как достоверность тестирования будет увеличиваться, объем данных должен расширяться, пока не охватит все существенные случаи развертывания в среде (в разумных пределах).

Полнота

Полнота данных означает степень изменения данных для тестирования. Ее можно увеличивать, создавая больше записей. Часто этого достаточно, но фактически нам требуется видеть изменения данных, с которыми можно встретиться в реальной ситуации. Без этого в тестировании можно упустить из виду какие-либо ошибки, да и не все ограничиваются получением строго $50.00 из банкомата. Поэтому в тесте нужно учесть вариацию данных в реальной среде, например, получение $10.00 или $120.00. Кроме того, данные должны учитывать возможные вариации фактических данных, например:

  • Имена могут включать звания, числа, пунктуацию и суффиксы:
    • Проф. Иванов, г-жа А. Сизова, Ж. Рони-старший
    • James Johnson III, Steven Wilshire 3rd, Charles James Ellsworth, Esq.
    • Бонч-Бруевич, Владимир Дмитриевич
  • Адреса могут быть написаны в несколько строк:
    • 6500 Broadway Street
      Suite 175
    • 1550 Broadway
      Floor 17
      Mailstop 75A
  • Коды стран и телефонные номера:
    • Lexington, MA, USA + 01 781 676 2400
    • Kista, Sweden +46 8 56 62 82 00
    • Paris, France +33 1 30 12 09 50

Значения тестовых данных могут содержать выбору физических или статистических данных на основе реальных данных. Оба метода имеют свою ценность и рекомендуются к использованию.

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

Пример:

  Номер счета (диапазон) PIN-код
(целое число)
Остаток на счете
(десятичное число)
Тип счета
(строка)
(S) 0812 0000 0000 по
0812 9999 9999

© 0829 0000 0000 по
0829 9999 9999

(X) 0799 0000 0000 по
0799 9999 9999

0000 - 9999 -999,999.99 - 999,999.99 S, C, X
запись 1 0812 0837 0293 8493 -3,123.84
запись 2 0812 6493 8355 3558 8,438.53
запись 3 0829 7483 0462 0352 673.00 C
запись 4 0799 4896 1893 4896 493,498.49 X

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

Преимущество физического представления состоит в том, что данные тестов ограничены по объему, ими легко управлять, и они содержат допустимые значения. Недостаток заключается в том, что не отражены статистические тенденции реальных данных. Реальные данные обычно статистически неоднородны, и их тенденции могут влиять на производительность. Это фактор не будет учитываться при работе с физическим представлением.

Статистический подход к созданию данных для тестирования отражает особенности данных, с которыми работает реальная система. Например, можно проанализировать базу данных рабочей системы и выявить следующее:

  • Общее число записей: 294031
  • Общее число счетов типа S: 141135 (48%)
  • Общее число счетов типа C: 144075 (49%)
  • Общее число счетов типа X: 8821 (3%)
  • Номера счетов и PIN-коды распределены равномерно

с учетом этой статистики тестовые данные могли бы включать 294 записи (а не 4, как раньше):

  Данные для тестирования (0,1% от общего числа)
Число записей Процент
Общее число записей 294 100
Номер счета
(S) 0812 0000 0000 по
0812 9999 9999
141 48
Номер счета
© 0829 0000 0000 по
0829 9999 9999
144 49
Номер счета
(X) 0799 0000 0000 по
0799 9999 9999
9 3

Эта таблица отражает только типы счетов. При статистическом подходе к созданию данных для тестирования следует включить значимые элементы данных. В этом примере это могло бы означать учет фактических остатков на счете.

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

Обычно применяется сочетание обоих методов, и тестовые данные включают значения, отражающие как аспект производительности, так и аспект полноты.

Понятие полноты тестовых данных относится и к тестовым данным, которые применяются как входные данные для теста, и тем, которые применяются как вспомогательные к уже имеющимся данным.

Охват

Охват - это применимость тестовых данных для цели теста. Она связана с объемом и полнотой данных. Большое число данных не означает, что среди них обязательно есть нужные данные. Как и в том, что касается полноты тестовых данных, мы должны убедиться, что данные отвечают цели теста, то есть приведет ли выполнение теста к ответу на поставленные вопросы.

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

Номер счета (диапазон) PIN-код
(целое число)
Остаток на счете
(десятичное число)
Тип счета
(строка)
(S) 0812 0000 0000 по
0812 9999 9999

© 0829 0000 0000 по
0829 9999 9999

(X) 0799 0000 0000 по
0799 9999 9999

0000 - 9999 -999,999.99 - 999,999.99 S, C, X
запись 1 0812 0837 0293 8493 -3,123.84
запись 2 0812 6493 8355 3558 8,438.53
запись 3 0829 7483 0462 0352 673.00 C
запись 4 0799 4896 1893 4896 493,498.49 X
новая запись 1 0829 3491 4927 0352 -995,498.34 C
новая запись 2 0799 6578 9436 4896 -64,913.87 X

Понятие охвата тестовых данных относится и к тестовым данным, которые применяются как входные данные для теста, и тем, которые применяются как вспомогательные к уже имеющимся данным.

Архитектура

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

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

Точность, достоверность и эффективность тестирования достигаются тогда, когда тестовые данные не зависят от внешних факторов, и их состояние известно до, во время и после выполнения теста. Для достижения этой цели необходимо решить две проблемы:

Все эти вопросы влияют на работу с базой данных для тестирования, проектирование модели тестирования и взаимодействие с другими объектами.

Неустойчивость / изоляция

Неустойчивость тестовых данных может возникнуть по следующим причинам:

  • внешние воздействия. не относящиеся к тесту, изменяют данные
  • участники тестирования не знают о том, какие данные применяются другими участниками

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

  • отдельная среда тестирования - участники тестирования работают в полностью изолированной среде, физически отделенной от остальных. Они имеют свой собственный объект тестирования и данные. Это достигается, например, тем, что каждый участник тестирования работает на своем компьютере.
  • отдельные базовые экземпляры тестовых данных. Участники тестирования работают со своим экземпляром данных, изолированным от прочих влияний. Физическая среда, и, возможно, сам целевой объект тестирования могут быть общими, но каждый участник работает со своим экземпляром данных, который в таком случае оказывается не подверженным постороннему воздействию.
  • Разделение тестовых данных в базе данных. Все участники работают с общей базой данных и знают о том, какие данные используют другие участники (и не используют их). Например, один участник работает с записями 0 - 99, другой - с записями 100 - 199, или один работает с клиентами, фамилии которых начинаются с букв А-М, а другой - с Н-Я.

Начальное состояние

Важным вопросом в архитектуре тестовых данных является состояние данных в начале теста. Это особенно важно при автоматизации тестирования. И сам объект тестирования, и тестовые данные должны быть в нужном, контролируемом состоянии. При этом возникает возможность достичь повторяемости результатов тестирования и уверенности в достоверности тестов.

Для решения этого вопроса обычно применяются четыре стратегии:

  • обновление данных
  • повторная инициализация данных
  • сброс данных
  • опора на текущие данные

Подробнее все они описаны далее.

Фактический метод будет зависеть от разных факторов, включая физические особенности базы данных, техническую компетентность участников тестирования, доступность внешних ролей (не относящихся к тесту), и сам целевой объект тестирования.

Обновление данных

Предпочтительный способ возвращения данных в исходное состояние - это обновление данных. При этом создается копия базовых данных в их исходном состоянии. По завершении выполнения теста (или перед его началом) копия тестовых данных помещается в среду тестирования. Таким образом обеспечивается тождественность тестовых данных перед началом теста.

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

Повторная инициализация данных

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

При этом нужно особенно внимательно следить за тем, чтобы в данные, их отношения и ключевые значения не вкрались никакие ошибки.

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

Сброс данных

Простым методом восстановления исходного состояния данных может быть "обращение изменений", вносимых в данные в ходе тестирования. Этот метод опирается на возможность целевого объекта отменять изменения, то есть добавлять удаленные данные и восстанавливать значения измененных данных.

Этот метод содержит и соответствующие риски, а именно:

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

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

Опора на текущие данные

Этот способ наименее приемлем для восстановления начального состояния тестовых данных. Фактически он не решает этот вопрос. Вместо этого состояние данных по завершении выполнения какого-либо теста становится начальным состоянием тестовых данных для другого теста. Обычно при этом требуется внести изменения в входные данные для теста и/или в варианты использования и тестовые данные, применяемые для анализа результатов.

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

С этим методом связаны следующие риски:

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