Май, 2015

Тестирование: о ящиках, дизайне и опыте

Путеводитель по супергеройским техникам тестирования

Опубликовано: 15.05.2015 | 15503

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

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

Подробнее про тест-дизайн

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

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

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

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

Из чего состоит технология статического тестирования?

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

Код-ревью – это мощное средство, поскольку благодаря ему:

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

Для статического анализа используется специальное ПО, которое позволяет обнаружить такие баги, как:

  • Сценарии, влияющие на кроссплатформенность.
  • Переполнение буфера.
  • Ошибки в повторяющемся коде.
  • Нарушение алгоритма пользования библиотекой и т.д.

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

Из чего состоит технология динамического тестирования?

Динамическое тестирование включает в себя такие объемные техники, как структурное тестирование («белый ящик»), тестирование на основе спецификаций («черный ящик») и опытное тестирование.

Разница между «черным» и «белым» состоит в доступности исходного кода продукта для тестировщика.

техники тестирования

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

В зависимости от поставленных задач, тестирование «черного ящика» может содержать следующие техники:

  • Эквивалентное разделение.
  • Анализ граничных значений.
  • Тестирование решений.
  • Тестирование переходов состояний.
  • Тестирование пользовательских сценариев .

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

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

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

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

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

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

При проверке программы «белым ящиком» тестируется внутренняя структура продукта, для чего у тестировщика есть доступ к исходному коду. Структурное тестирование позволяет определить корректность работы продукта с точки зрения технических решений.

К стратегии «белого ящика» относятся:

  • Покрытие операторов.
  • Покрытие решений.
  • Покрытие условий и комбинаций условий.

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

Что такое опытное тестирование и зачем оно нужно?

Хотя в целом тестирование – штука строгая и систематическая,

для поиска некоторых багов нужен более творческий подход.

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

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

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

Опытное тестирование полезнее всего в условиях отсутствия или недостаточности спецификаций и строгих дедлайнов.

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