Урок 1 из 0
В процессе

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

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

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

Итак, в соответствии с глоссарием ISTQB:

Функциональное тестирование (functional testing) – тестирование, основанное на анализе спецификации функциональности компонента или системы.

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

Функциональное тестирование рассматривает заранее указанное поведение и основывается на анализе спецификаций функциональности компонента или системы в целом.

Функциональные тесты основываются на функциях, выполняемых системой, и могут проводиться на всех уровнях тестирования (компонентном, интеграционном, системном, приемочном). Как правило, эти функции описываются в требованиях, функциональных спецификациях или в виде случаев использования системы (use cases).

Тестирование функциональности может проводиться в двух аспектах:

  • Требования
  • бизнес-процессы

Тестирование в перспективе «требования» использует спецификацию функциональных требований к системе как основу для дизайна тестовых случаев (Test Cases). В этом случае необходимо сделать список того, что будет тестироваться, а что нет, приоритезировать требования на основе рисков (если это не сделано в документе с требованиями), а на основе этого приоритезировать тестовые сценарии (test cases). Это позволит сфокусироваться и не упустить при тестировании наиболее важный функционал.

Преимущества функционального тестирования:

  • имитирует фактическое использование системы;

          Недостатки функционального тестирования:

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

          Нефункциональное тестирование (non-functional testing) – тестирование атрибутов компонента или системы, не относящихся к функциональности, то есть надежность, эффективность, практичность, сопровождаемость и переносимость. ISTQB

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

 

Типы тестирования

В ISTQB существует большое количество категорий тестирования, мы с вами разберем часть из них.

          Классификация по доступу к коду:

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

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

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

Недостатки:

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

 

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

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

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

Недостатки:

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

 

Также существует средний этими двумя способами подход – метод серого ящика.

          Метод серого ящика (gray box), по одному из вариантов, это комбинация методов белого ящика и чёрного ящика, состоящая в том, что к части кода и архитектуры у тестировщика доступ есть, а к части — нет.

          Классификация по уровню детализации приложения:

Следующая классификация – это классификация по уровню детализации.

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

  • «По уровню детализации приложения» = «по уровню тестирования».
  • «По (убыванию) степени важности тестируемых функций» = «по уровню функционального тестирования».

ISTQB приведённые типы тестирования относятся к уровням тестирования.

  • Компонентное тестирование (component testing) – тестирование отдельных компонентов программного обеспечения. ISTQB

Модульное (компонентное) тестирование (unit testing, module testing, component testing) направлено на проверку отдельных небольших частей приложения, которые (как правило) можно исследовать изолированно от других подобных частей.

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

  • Интеграционное тестирование (Integration testing): Тестирование, выполняемое для обнаружения дефектов в интерфейсах и во взаимодействии между интегрированными компонентами или системами.

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

  • Системное тестирование (System testing/EndtoEnd testing): Процесс тестирования системы в целом с целью проверки того, что она соответствует установленным требованиям.

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

          Классификация по степени важности тестируемых функций

Давайте теперь рассмотрим классификацию видов тестирования по степени важности тестируемых функций.

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

Итак, тестирование по степени важности. Рассмотрим их в порядке возрастания убывания важности

  • Дымовое тестирование (smoke test): выборка из общего числа запланированных тестовых сценариев, покрывающая основную функциональность компонента или системы.

Название такого типа тестирования пришло из схемотехники. Если при подаче напряжения на плату шел дым, значит схема в принципе не работоспособна и не выполняет своих основных функций. Говорили, что такая плата не прошла тест на “дым”.

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

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

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

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

Недостатки:

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

 

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

 

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

 

  • Расширенное тестирование (extended test) направлено на исследование всей заявленной в требованиях функциональности — даже той, которая низко проранжирована по степени важности.

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

          Классификация по позитивности сценариев:

Здесь существует два типа тестирования: позитивное и негативное.

  • Позитивное тестирование (positive testing) направлено на исследование приложения в ситуации, когда все действия выполняются строго по инструкции без каких бы то ни было ошибок, отклонений, ввода неверных данных и т.д.

Если позитивные тест-кейсы завершаются ошибками, это тревожный признак — приложение работает неверно даже в идеальных условиях (и можно предположить, что в неидеальных условиях оно работает ещё хуже).

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

  • Негативное тестирование (negative testing, invalid testing) — направлено на исследование работы приложения в ситуациях, когда с ним выполняются (некорректные) операции и/или используются данные, потенциально приводящие к ошибкам (классика жанра — деление на ноль).

Поскольку в реальной жизни таких ситуаций значительно больше (пользователи допускают ошибки, злоумышленники осознанно «ломают» приложение, в среде работы приложения возникают проблемы и т.д.), негативных тест-кейсов оказывается значительно больше, чем позитивных (иногда — в разы или даже на порядки).

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

Контрольные вопросы

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