Тестирование
November 17, 2023

1.8 Типы и классификация тестирования

1. Тестирование по степени автоматизации

  1. Ручное тестирование - вручную выполняются тесты, не используя средства автоматизации.
  2. Автоматизированное тестирование - предполагает использование специального ПО. Помогает автоматизировать и ускорить часто повторяющиеся, но необходимые для автоматизации тестового покрытия задачи.
    Основными объектами для автоматизации являются регрессионное тестирование и smoke-тестирование.

2. Тестирование по знанию кода

  1. Тестирование черного ящика (Black box testing) - техника, основанная на работе исключительно с внешними интерфейсами тестируемой системы.
    Пример: тестирование веб-сайта, не зная особенностей его реализации. Тестирование только GUI.
  2. Тестирование белого ящика (White box testing) - техника, предполагающая, что внутренняя структура, ее устройство, реализация известна тестировщику.
  3. Тестирование серого ящика (Gray box testing) - техника, при которой известны лишь некоторые особенности реализации системы. Предполагает комбинацию двух предыдущих. Т.е. способ реализации нам известен лишь частично. Внутреннее устройство программы нам известно лишь частично, допустим известна структура и алгоритмы работы системы для того, чтобы написать максимально эффективные тест-кейсы. Но само тестирование проходит по технике черного ящика.

Функциональное и нефункциональное тестирование

3. Функциональное тестирование

Функциональное тестирование (functional testing) - один из видов тестирования, направленного на проверку соответствия функциональных требований ПО к его реальным характеристикам.

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

4. Нефункциональное тестирование

Нефункциональное тестирование (non-functional testing) - один из видов тестирования, целью которого является проверка соответствия свойств приложения с его нефункциональными требованиями.

Выполняется для оценки таких характеристик системы и программного обеспечения, как удобство использования, производительность или безопасность. За классификацией характеристик качества программного обеспечения следует обратиться к стандарту ИСО (ISO/IEC 25010). Данный вид тестирования можно проводить на всех уровнях.

К нефункциональному тестированию будут применимы такие подвиды тестирования:

  1. Тестирование на отказ и восстановление - исследование ПО на предмет восстановления после ошибок и сбоев.
  2. Тестирование производительности - комплекс типов тестирования, целью которого является определение работоспособности, стабильности, потребления ресурсов и других атрибутов качества продукта в условиях различных сценариев использования и нагрузок.
    Тестирование производительности включает в себя:
    • Нагрузочное тестирование - проверка производительности при нормальных условиях. Допустим, если в заявленных требованиях, что сайт выдерживает 1000 человек, создаются такие условия, как будто на сайте чуть меньше 1000 человек.
    • Стресс тестирование - проверка производительности при экстремальных нагрузках. Допустим, на сайте 1000 пользователей или больше.
    • Тестирование стабильности - проверка ПО при длительной работе.
    • Объемное тестирование - проверка при увеличенных объемах обрабатываемых данных. То есть, допустим, те же 1000 пользователей отправляют одновременно N мегабайт информации.
  3. Тестирование удобства использования (usability testing) — тестирование, направленное на исследование того, насколько конечному пользователю понятно, как работать с продуктом (understandability, learnability, operability), а также на то, насколько ему нравится использовать продукт (attractiveness).
    Что нужно тестировать:
    1. Общая доступность
    2. Скорость, производительность
    3. Удобство навигации и интерфейс
    4. Плавность
  4. Тестирование безопасности (security testing) — тестирование, направленное на проверку способности приложения противостоять злонамеренным попыткам получения доступа к данным или функциям, права на доступ к которым у злоумышленника нет.
    Тестирование на проверку защищенности пользовательских данных.
    От чего нужно защищать ПО:
    1. SQL-инъекции
    2. XSS-инъекции
    3. Перехват трафика
    4. Брутфорсинг (полный перебор данных для получения доступа)
  5. Инсталляционное тестирование (тестирование установки) (installation testing, installability testing) - проверка успешности установки приложения, его настройки, обновления и удаления.
    Включает в себя следующие процессы:
    1. Установка ПО
    2. Удаление ПО
    3. Обновление ПО
    4. Откат на предыдущую версию
    5. Повторный запуск установки после возникновения ошибки или исправления уже возникших проблем
    6. Автоматическая установка
    7. Установка отдельного компонента из общего пакета программ
  6. Конфигурационное тестирование - проверка работоспособности программы в условиях различных программных конфигураций.
    • Кроссплатформенное тестирование - тестирование на различных платформах и версиях ОС
    • Кроссбраузерное тестирование - тестирование приложения на различных браузерах.
  7. Тестирование локализации (l10n) - тестирование на адаптацию продукта к языку и культуре клиента.
  8. Тестирование интернационализации (i18n) - тестирование включает в себя то, насколько продукт может в дальнейшем адаптироваться для той или иной локали.
  9. Тестирование GUI - тестирование интерфейса, проверка соответствия приложения требования к графическому интерфейсу.
  10. Тестирование доступности (accessibility testing, A11Y) - проверяем ПО на соответствие стандартам доступности. Оно должно быть доступным для использования людьми с ограниченными способностями.
    Что можно тестировать:
    1. Использование вспомогательных технологий в ПО (распознавание речи, экранная клавиатура и лупа, скринридеры)
    2. Возможность использовать приложение одной рукой
    3. Настройки специальной цветопередачи
    4. Наличие понятных инструкций и руководства пользователя
    Доступность сайта можно тестировать специальными инструментами, например, WAVE, TAV, Accessibility Valet, Accessibility Developer Tools.

Функциональное тестирование отвечает на вопрос "Что делает система?".

Нефункциональное тестирование отвечает на вопрос "Как система это делает?".

5. Тестирование по исполнению сценария

  1. Ad-hoc тестирование (Свободное (интуитивное) тестирование) - тестирование без использования каких-либо спецификаций, планов и разработанных тест-кейсов. Этот вид тестирования - это импровизация тестера. Полностью неформализованный подход, в котором не предполагается использования ни тест-кейсов, ни чек-листов, ни сценариев — тестировщик полностью опирается на свой профессионализм и интуицию (experience-based testing) для спонтанного выполнения с приложением действий, которые, как он считает, могут обнаружить ошибку.
  2. Исследовательское тестирование (exploratory testing) - более формальная версия тестирования, не требует написания тест-кейсов, но в то же время подразумевает, что каждый последующий тест выбирается на основании результата предыдущего теста.
  3. Сценарное тестирование (Тестирование на основе тест-кейсов (scripted testing, test case based testing)) - формализованный подход, в котором тестирование производится на основе заранее подготовленных тест-кейсов, наборов тест-кейсов и иной документации.

6. Тестирование по запуску кода

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