16/05/2022

Виды тестирования по доступу к коду и архитектуре приложения

Виды тестирования по доступу к коду и архитектуре приложения

Метод белого ящика (White box testing, open box testing, clear box testing, glass box testing)

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

Выделяют даже сопутствующую тестированию по методу белого ящика глобальную технику — тестирование на основе дизайна (design-based testing). Для более глубокого изучения сути метода белого ящика рекомендуется ознакомиться с техниками исследования потока управления или потока данных, использования диаграмм состояний.

Некоторые авторы склонны жёстко связывать этот метод со статическим тестированием, но ничто не мешает тестировщику запустить код на выполнение и при этом периодически обращаться к самому коду (а модульное тестирование и вовсе предполагает запуск кода на исполнение и при этом работу именно с кодом, а не с «приложением целиком»).

Преимущества

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

Недостатки

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

Метод чёрного ящика (black box testing, closed box testing, specification-based testing)

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

В рамках тестирования по методу чёрного ящика основной информацией для создания тест-кейсов выступает документация (особенно — требования (requirements-based testing)) и общий здравый смысл (для случаев, когда поведение приложения в некоторой ситуации не регламентировано явно; иногда это называют «тестированием на основе неявных требований», но канонического определения у этого подхода нет).

Преимущества

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

Недостатки

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

Метод серого ящика (gray box testing)

Комбинация методов белого ящика и чёрного ящика, состоящая в том, что к части кода и архитектуры у тестировщика доступ есть, а к части — нет. Обычно говорят о методах белого или чёрного ящика в применении к тем или иным частям приложения, при этом понимая, что «приложение целиком» тестируется по методу серого ящика.

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

Сочетает преимущества и недостатки методов белого и чёрного ящика.

Вид тестирования (русскоязычное название)Вид тестирования (англоязычное название)Белый ящикЧёрный ящик
Статическое тестированиеStatic testingДаНет
Динамическое тестированиеDynamic testingИзредкаДа
Ручное тестированиеManual testingМалоДа
Автоматизированное тестированиеAutomated testingДаДа
Модульное (компонентное) тестированиеUnit testing, Module testing, Component testingДаНет
Интеграционное тестированиеIntegration testingДаДа
Системное тестированиеSystem testingМалоДа
Дымовое тестированиеSmoke test, Intake test, Build verification testМалоДа
Тестирование критического путиCritical path testМалоДа
Расширенное тестированиеExtended testМалоДа
Позитивное тестированиеPositive testingДаДа
Негативное тестированиеNegative testing, Invalid testingДаДа
Тестирование веб-приложенийWeb-applications testingДаДа
Тестирование мобильных приложенийMobile applications testingДаДа
Тестирование настольных приложенийDesktop applications testingДаДа
Тестирование уровня представленияPresentation tier testingМалоДа
Тестирование уровня бизнес-логикиBusiness logic tier testingДаДа
Тестирование уровня данныхData tier testingДаМало
Альфа-тестированиеAlpha testingМалоДа
Бета-тестированиеBeta testingПочти никогдаДа
Гамма-тестированиеGamma testingПочти никогдаДа
Тестирование на основе тест-кейсовScripted testing, Test case based testingДаДа
Исследовательское тестированиеExploratory testingНетДа
Свободное (интуитивное) тестированиеAd hoc testingНетДа
Функциональное тестированиеFunctional testingДаДа
Нефункциональное тестированиеNon-functional testingДаДа
Инсталляционное тестированиеInstallation testingИзредкаДа
Регрессионное тестированиеRegression testingДаДа
Повторное тестированиеRe-testing, Confirmation testingДаДа
Приёмочное тестированиеAcceptance testingКрайне редкоДа
Операционное тестированиеOperational testingКрайне редкоДа
Тестирование удобства использованияUsability testingКрайне редкоДа
Тестирование доступностиAccessibility testingКрайне редкоДа
Тестирование интерфейсаInterface testingДаДа
Тестирование безопасностиSecurity testingДаДа
Тестирование интернационализацииInternationalization testingМалоДа
Тестирование локализацииLocalization testingМалоДа
Тестирование совместимостиCompatibility testingМалоДа
Конфигурационное тестированиеConfiguration testingМалоДа
Кросс-браузерное тестированиеCross-browser testingМалоДа
Тестирование данных и баз данныхData quality testing and Database integrity testingДаМало
Тестирование использования ресурсовResource utilization testingКрайне редкоДа
Сравнительное тестированиеComparison testingНетДа
Демонстрационное тестированиеQualification testingНетДа
Избыточное тестированиеExhaustive testingКрайне редкоНет
Тестирование надёжностиReliability testingКрайне редкоДа
Тестирование восстанавливаемостиRecoverability testingКрайне редкоДа
Тестирование отказоустойчивостиFailover testingКрайне редкоДа
Тестирование производительностиPerformance testingКрайне редкоДа
Нагрузочное тестированиеLoad testing, Capacity testingКрайне редкоДа
Тестирование масштабируемостиScalability testingКрайне редкоДа
Объёмное тестированиеVolume testingКрайне редкоДа
Стрессовое тестированиеStress testingКрайне редкоДа
Конкурентное тестированиеConcurrency testingКрайне редкоДа
Инвазивное тестированиеIntrusive testingДаДа
Неинвазивное тестированиеNonintrusive testingДаДа
Тестирование под управлением даннымиData-driven testingДаДа
Тестирование под управлением ключевыми словамиKeyword-driven testingДаДа
Тестирование предугадыванием ошибокError guessingКрайне редкоДа
Эвристическая оценкаHeuristic evaluationНетДа
Мутационное тестированиеMutation testingДаДа
Тестирование добавлением ошибокError seedingДаДа
Доменное тестированиеDomain testing, Domain analysisДаДа
Попарное тестированиеPairwise testingДаДа
Тестирование в процессе разработкиDevelopment testingДаДа
Тестирование на основе классов эквивалентностиEquivalence partitioningДаДа
Тестирование на основе граничных условийBoundary value analysisДаДа
Тестирование на основе ортогональных массивовOrthogonal array testingДаДа
Тестирование по потоку управленияControl flow testingДаНет
Тестирование по потоку данныхData flow testingДаНет
Тестирование по диаграмме или таблице состоянийState transition testingДаНет
Инспекция (аудит) кодаCode review, code inspectionДаНет
Тестирование на основе выраженийStatement testingДаНет
Тестирование на основе ветвейBranch testingДаНет
Тестирование на основе условийCondition testingДаНет
Тестирование на основе комбинаций условийMultiple condition testingДаНет
Тестирование на основе отдельных условий, порождающих ветвление («решающих условий»)Modified condition decision coverage testingДаНет
Тестирование на основе решенийDecision testingДаНет
Тестирование на основе путейPath testingДаНет
Тестирование по таблице принятия решенийDecision table testingДаДа
Тестирование по моделям поведения приложенияModel-based testingДаДа
Тестирование на основе вариантов использованияUse case testingДаДа
Параллельное тестированиеParallel testingДаДа
Тестирование на основе случайных данныхRandom testingДаДа
A/B-тестированиеA/B testing, Split testingНетДа
Восходящее тестированиеBottom-up testingДаДа
Нисходящее тестированиеTop-down testingДаДа
Гибридное тестированиеHybrid testingДаДа
Тестирование на основе дерева классификацийClassification tree methodДаДа
Тестирование на основе синтаксисаSyntax testingДаДа
Комбинаторные техники (комбинаторное тестирование)Combinatorial testingДаДа
Тестирование всех комбинацийAll combinations testingДаНет
Тестирование с выбором значений-представителейEach choice testingДаНет
Тестирование с выбором базового набора значенийBase choice testingДаНет
Тестирование по графу причинно-следственных связейCause-effect graphingМалоДа
Проверка использования всех объявленийAll-definitions testingДаНет
Проверка всех вычислений на основе всех объявленийAll-c-uses testingДаНет
Проверка всех ветвлений на основе всех объявленийAll-p-uses testingДаНет
Проверка всех вычислений и ветвлений на основе всех объявленийAll-uses testingДаНет
Проверка использования всех объявлений и всех путей без переобъявлений (без циклов или с однократными повторениями циклов)All-du-paths testingДаНет