🧪Методы тестирования

Позитивные и негативные тесты

Позитивные тесты

  • Тесты, предназначенные для проверки, что программа выполняет свое основное предназначение;

  • Тесты на основании «правильных» входных данных;

  • Тестирование с целью проверки соответствий требованиям;

Негативные тесты

  • Тесты для проверки устойчивости программы к негативным входным данным;

  • Тесты на проверки устойчивости программы к ошибкам пользователя;

  • Тесты на то, что у программы нет неожиданных побочных эффектов;

  • Тестирование с целью «сломаем это!»;

Методы тестирования

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

Тестирование чёрного ящика

При тестировании методом «черного ящика» программа рассматривается как объект, внутренняя структура которого неизвестна. Тестер не обращает внимания на архитектуру системы и не имеет доступа к исходному коду.

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

Тестирование черного ящика нацелено на проверку требований. Тесты для него и критерий полноты тестирования строятся на основе требований и ограничений, четко зафиксированных в спецификациях, стандартах, внутренних нормативных документах, которые описывают системные требования. Часто такое тестирование называется тестированием на соответствие (conformance testing). Частным случаем его является функциональное тестирование — тесты для него, а также используемые критерии полноты проведенного тестирования определяют на основе требований к функциональности.

Разработка тестов методом эквивалентного разбиения осуществляется в два этапа:

  • выделение классов эквивалентности

  • построение тестов.

При построении тестов, основанных на выборе входных данных, проводится символическое выполнение программы.

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

Преимущества
Недостатки

Хорошо подходит и эффективен для больших сегментов кода

Невозможность сконцентрироваться на особо сложных частях кода

Кодовый доступ не требуется

Нет возможности протестировать часть кода

Можно создавать тесты параллельно с кодом

Необходимость наличия четких и полных спецификаций

Не требует каких-либо специальных знаний о реализации, языке программирования или операционных системах

Ограниченное покрытие, поскольку выполняется только выбранное количество тестовых сценариев

Тестирование с точки зрения пользователя

Эффективность зависит от выбора конкретных тестовых значений

Тестировщик может быть отделен от разработчиков

Тестовые примеры трудно разработать

Шаги для черного ящика

  1. Изучение спецификаций и требований

  2. Выбор входных значений

  3. Определение ожидаемых выходных значений

Входные значения
Ожидаемые входные значения

Вход 1

Выход 1

Вход 2

Выход 2

...

...

Вход N

Выход N

  1. Исполнение тестов

  2. Сравнение полученных результатов с ожидаемыми

Тестирование белого ящика

Этот тест также известен как White-box, Open-Box или Glass box тестирование, оно же структурное тестирование.

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

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

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

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

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

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

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

  2. Полный охват кода. Программист всегда может определить, какие именно фрагменты кода работают в каждом тесте.

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

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

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

Преимущества
Недостатки

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

В связи с тем, что для тестирования белых ящиков требуется квалифицированный тестер, затраты увеличиваются

Благодаря знаниям тестера о коде, максимальный охват достигается при написании сценария

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

Позволяет найти "Скрытые" в коде дефекты

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

Шаги чёрного ящика

Тестирование серого ящика

Тестирование методом серого ящика или Gray box тестирование - это комбинация двух предыдущих подходов (тестирования белого и черного ящиков). Эту технику тестирования также называют методом полупрозрачного ящика: что-то мы видим, а что-то – нет.

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

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

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

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

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

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

Подходы к тестированию:

  • Тестирование шаблонов

  • Тестирование матрицы

  • Регрессионное тестирование

  • Тестирование с использованием ортогонального массива

Преимущества
Недостатки

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

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

Тестировщики серого ящика не полагаются на исходный код; вместо этого они полагаются на определение интерфейса и функциональные спецификации.

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

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

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

Тест выполняется с точки зрения пользователя, а не дизайнера.

Сравнение методов тестирования

Черный ящик
Серый ящик
Белый ящик

Не нужно знать внутреннюю работу приложения.

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

Тестер имеет полное представление о внутренней работе приложения.

Также известен как тестирование с закрытым ящиком, тестирование с использованием данных или функциональное тестирование.

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

Также известен как прозрачное тестирование, структурное тестирование или тестирование на основе кода.

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

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

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

Тестирование основано на внешних ожиданиях. Внутреннее поведение приложения неизвестно.

Тестирование выполняется на основе диаграмм базы данных высокого уровня и диаграмм потоков данных.

Внутренние работы полностью известны, и тестер может соответствующим образом создавать тестовые данные.

Он является исчерпывающим и наименее трудоемким.

Частично трудоемкий и исчерпывающий.

Самый исчерпывающий и трудоемкий тип тестирования.

Не подходит для тестирования алгоритмов.

Не подходит для тестирования алгоритмов.

Подходит для тестирования алгоритмов.

Это можно сделать только методом проб и ошибок.

Домены данных и внутренние границы могут быть проверены, если они известны.

Домены данных и внутренние границы могут быть лучше проверены.

Last updated