Тестирование: о ящиках, дизайне и опыте
Путеводитель по супергеройским техникам тестирования
Хорошо это или плохо, однако не существует способа найти все возможные ошибки в продукте. Впрочем, и доказать, что их там стопроцентно нет, тоже не получится. Но это в теории. На деле же некоторые тестировщики находят больше критических ошибок в ПО, чем простые смертные, и могут обнаружить даже самые необычные баги.
Только не начинайте искать какие-нибудь джедайские приёмы
тестирования, которые передаются от одного избранного другому без
регистрации и смс! Сразу скажем, что их нет. Все, что отличает эффективных
тестеров от остальных – это умение пользоваться доступными подходами и
техниками и правильно их сочетать. Одной из таких техник является тест-дизайн.
Подробнее про тест-дизайн
Суть тест-дизайна состоит в том, чтобы составить набор тестовых сценариев (тест-кейсов) и обеспечить максимально полное тестовое покрытие программного обеспечения. Для этого используются разные техники, которые условно делятся на две группы – статические и динамические.
Важно, чтобы ваш тестировщик-супергерой мог управляться если не со всеми, то хотя бы с большинством этих техник. Тогда вы точно сможете спать спокойно и не переживать за свой продукт!
Статическое тестирование используется для раннего обнаружения багов и потенциальных проблем в программе. Анализ не требует запуска исходного кода продукта и производится как вручную, так и с помощью специального программного обеспечения.
В свою очередь динамическое тестирование применяется на финальных стадиях разработки и предусматривает запуск программного кода. Тестер смотрит на ПО с позиции будущего пользователя и проверяет соответствие продукта требованиям, его производительность в разных средах, работу с входными и выходными данными.
Из чего состоит технология статического тестирования?
Статическое тестирование включает в себя формальные и неформальные код-ревью и статический анализ, состоящий из анализа потоков данных и потока управления.
Код-ревью – это мощное средство, поскольку благодаря ему:
- Унифицируется стиль написания кода внутри команды.
- Находятся ошибки, которые невозможно обнаружить автоматическим способом.
- Повышается мотивация разработчиков писать качественный код.
Для статического анализа используется специальное ПО, которое позволяет обнаружить такие баги, как:
- Сценарии, влияющие на кроссплатформенность.
- Переполнение буфера.
- Ошибки в повторяющемся коде.
- Нарушение алгоритма пользования библиотекой и т.д.
Чем раньше выявляются недостатки кода и критические ошибки, тем меньше стоимость их исправления. Поэтому основное преимущество статического анализа для клиента состоит в возможности заметно снизить издержки на устранение проблем.
Из чего состоит технология динамического тестирования?
Динамическое тестирование включает в себя такие объемные техники, как структурное тестирование («белый ящик»), тестирование на основе спецификаций («черный ящик») и опытное тестирование.
Разница между «черным» и «белым» состоит в доступности исходного кода продукта для тестировщика.
«Черный ящик» не подразумевает наличия доступа к коду, программа проверяется либо через общедоступный интерфейс пользователя, либо с помощью эмуляторов. Этот тип тестирования производится с использованием спецификаций и прочей документации, содержащей требования к продукту.
В зависимости от поставленных задач, тестирование «черного ящика» может содержать следующие техники:
- Эквивалентное разделение.
- Анализ граничных значений.
- Тестирование решений.
- Тестирование переходов состояний.
- Тестирование пользовательских сценариев .
Техника эквивалентного разделения заключается в том, чтобы разбить входные и выходные данные на классы эквивалентности, учитывая, что продукт ведет себя равнозначно с каждым представителем отдельной категории. Это позволяет не тестировать все возможные данные, ограничиваясь только отдельно взятым представителем класса.
Анализ граничных значений тесно связан с вышеописанной техникой эквивалентного разделения, поскольку именно получившиеся классы становятся источником границ интервалов значений. В этих местах резко увеличивается вероятность обнаружения ошибок.
Тестирование таблиц решений с первого взгляда кажется сложной техникой, но она помогает получить готовые тест-кейсы, детально проанализировать продукт и систематизировать всю информацию по нему. Таблицы решений состоят из набора условий, одновременное выполнение которых должно приводить к определенным действиям. Собственно, процесс тестирования и заключается в проверке соответствия этих входных и выходных данных.
Помимо прочего, таблицы решений понятны для всей проектной команды, а это бооольшущий плюс.
Тестирование переходов состояний используется, когда система может находиться в некотором конечном количестве различных условий. Проверка продукта здесь строится на основе выполнения корректных и некорректных переходов состояний.
Сценарии – это формальные требования с контекстом и структурой, описывающие взаимодействия между пользователем и программой. Тестирование пользовательских сценариев помогает определить тест-кейсы для полного выполнения всей системы от начала до конца, учитывая каждую транзакцию.
При проверке программы «белым ящиком» тестируется внутренняя структура продукта, для чего у тестировщика есть доступ к исходному коду. Структурное тестирование позволяет определить корректность работы продукта с точки зрения технических решений.
К стратегии «белого ящика» относятся:
- Покрытие операторов.
- Покрытие решений.
- Покрытие условий и комбинаций условий.
Надо сказать, что чаще методом структурного тестирования пользуются разработчики, поскольку тут требуется знание принципов программирования и внутреннего устройства ПО.
Что такое опытное тестирование и зачем оно нужно?
Хотя в целом тестирование – штука строгая и систематическая,
для поиска некоторых багов нужен более творческий подход.
При опытном тестировании большее значение имеют знания, опыт, навыки и интуиция команды, чем четкая последовательность действий. В качестве компонентов этой стратегии используются исследовательское тестирование и предугадывание ошибки.
Ключевым аспектом исследовательского тестирования является изучение программного обеспечения, его слабых и сильных сторон. Для этого тесты создаются и выполняются одновременно. Умелый тестировщик-исследователь записывает идеи тестов и успешно применяет их к последующим циклам испытаний.
Предугадывание ошибки – метод, который мы всегда советуем использовать в качестве дополнения к более формальным техникам. Подход к этой технологии состоит в составлении списка возможных дефектов и багов для такого типа ПО, а также в разработке тестов для их проверки. Конечно, успешность применения этой технологии напрямую зависит от опытности аналитиков в команде.
Опытное тестирование полезнее всего в условиях отсутствия или недостаточности спецификаций и строгих дедлайнов.
И хотя некоторые команды стараются сэкономить, ограничиваясь исключительно статическим тестированием, только сочетание обоих подходов сможет обеспечить вам всесторонний анализ продукта и достоверно определить его готовность к релизу.