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

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

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

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

Итак, ниже приведены классификации...

По целям тестирования

  1. Функциональное — вид тестирования, при котором проверяются функциональные требования ПО, то есть способность ПО решать возложенные на него задачи. Направлено на проверку корректности работы функциональности приложения. Например, в приложении интернет‑магазина при нажатии на кнопку "Добавить в корзину", товар добавляется в корзину пользователя.

  2. Нефункциональное — вид тестирования, который проверят нефункциональные аспекты ПО.

    • Пользовательского интерфейса (GUI) — тестирование интерфейса ПО на соответствие требованиям (размер, шрифт, цвет и т. д.).

    • Удобства использования (usability) — тестирование, направленное на установление степени удобства использования, понятности и привлекательности для пользователей разрабатываемого продукта.
      При тестировании нужно ответить на вопросы:

      • Как быстро пользователь достигнет цели?

      • Размер кнопок (удобно ли попадать)?

      • и др.

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

    • Инсталяционное — тестирование установки, обновления и удаления приложения.

      Например, нужно протестировать будет ли обновляться приложение с 1-й версии сразу на 3-ю версию, а не только со 2-й версии на 3-ю.

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

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

      Например, работая в текстовом редакторе, при потери сети, отключении электричества на стороне клиента / сервера, данные должны сохраниться.

    • Локализации — тестирование программного обеспечения на соответствие лингвистическим, культурным требованиям, а также специфике конкретной страны или региона (язык, валюта, система мер и т. д.).
      Например, в Китае в играх не должно быть изображений мертвых тел или крови.

    • Производительности — определение стабильности и потребления ресурсов в условиях различных сценариев использования и нагрузок.

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

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

      • Стабильности (надежности) — тестирование работоспособности приложения со среднем уровнем нагрузки, но при длительном временем работы.

      • Стрессовое — тестирование системы при нагрузке выше нормы, описанной в требованиях.

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

      • Объемное — тестирование, которое проводится для получения оценки производительности при увеличении объемов данных в базе данных приложения.
        Объемное тестирование предназначено для прогнозирования того, может ли система обрабатывать большой объем данных в плане проверки объема данных, обрабатываемых базой данных. Например, при записи большого объема данных нет сообщений об ошибках / крешах системы, а данные записываются в БД.

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

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

      • Конкурентное — тестирование поведения системы в момент, когда одновременно происходят два или более событий, или выполняется одновременный вход нескольких пользователей в систему с выполнением одного и того же действия.

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

По степени автоматизации

  1. Ручное — тип тестирования, в котором проверки выполняются тестировщиком вручную, без использования инструментов автоматизации.

  2. Автоматизированое — тип тестирования, при котором проверки выполняются с использованием программных средств для выполнения тестовых сценариев.
    Например, тестировщик пишет код на JavaScript для автоматизации процесса авторизации на сайте.

По сценариям

  1. Позитивное — тестирование, при котором ПО или его элементы реагируют корректно (согласно требованиям) на совершенные действия при использовании корректных тестовых данных.
    Например, в окне регистрации на сайте в поле "имя" можно ввести от 2-х до 20-ти букв. Позитивной проверкой будет ввод имени из 4-х букв — Иван и система даст пройти дальше для заполнения следующих полей.

  2. Негативное — вид тестирования ПО, направленный на проверку того, что система или приложение ведут себя должным образом (согласно требованиям) в негативных ситуациях, то есть, когда они получают недопустимые или неожиданные входные данные.
    Например, при заказе товара в интернет‑магазине в поле "номер телефона" можно ввести только цифры. При вводе других символов система должна выдавать ошибку и не дать оформить заказ.

По знанию системы

  1. Белого ящика — метод тестирования ПО, который предполагает полный доступ тестировщика к коду системы.
    Тестировщик изучает реализацию кода поля ввода на веб‑странице, определяет все предусмотренные (как правильные, так и неправильные) и не предусмотренные пользовательские вводы, и сравнивает фактический результат выполнения программы с ожидаемым. При этом ожидаемый результат определяется именно тем, как должен работать код программы.

  2. Серого ящика — метод тестирования ПО, который предполагает частичный доступ к коду проекта, комбинация методов белого и черного ящиков.
    Например, тестирование API с помощью Postman или работа с базой данных.

  3. Черного ящика — метод тестирования ПО, основанный на спецификации, который не предполагает доступа (полного или частичного) к системе, т. е. основывается на работе исключительно с внешним интерфейсом тестируемой системы.
    Например, тестирование приложения по макетам или по описанию функциональности в требованиях.

По разработке тестовых сценариев

  1. Сценарное — тестирование по заранее подготовленной тестовой документации.
    Такое тестирование проводится если:

    • требования к продукту подробно зафиксированы;

    • у тестировщика достаточно времени, чтобы подготовить тестовую документацию заранее.

  2. Исследовательское — вид тестирования, при котором тестовую документацию составляют по ходу проверки сервиса или приложения, а не заранее.
    Исследовательское тестирование применяют, если:

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

    • недостаточно времени, чтобы составить тестовую документацию заранее.

По исполнению кода

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

  2. Динамическое — тип тестирования, который подразумевает запуск кода для проведения функциональных и нефункциональных проверок ПО.

По уровню тестирования

  1. Модульное (компонентное / unit) — вид тестирования, при котором проверяется отдельная часть приложения.

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

  2. Интеграционное — вид тестирования, направленный на проверку корректного взаимодействия нескольких компонентов системы между собой.

    Например, в приложении такси нужно протестировать, подтягивается ли адрес в поле "Место назначения" по клику в любую точку на карте.

  3. Сквозное (end‑to‑end) — вид тестирования, при котором проверяется система целиком.

    Например, пользователь хочет купить билет в театр в онлайн‑кассе. Если нужно провести сквозное тестирование, нужно проверить, что он может сделать всё: от выбора места до отправки чека о покупке на электронную почту.

  4. Операционное — процесс проверки системы на удовлетворение всех потребностей пользователя и соответствия бизнес‑требованиям.

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

По исполнителям тестирования

  1. Альфа‑тестирование — тестирование ПО, проводимое на ранней стадии разработки, внутри организации‑разработчика, которое имитирует реальное использование продукта.

  2. Бета‑тестирование — тестирование практически готового ПО, выпускаемое для ограниченного количества пользователей, разрабатывается в первую очередь для тестирования конечными пользователями и получения отзывов клиентов о продукте для внесения соответствующих изменений.

    • Открытое — попадают все желающие.

    • Закрытое — для ограниченного количества пользователей, попадают по приглашениям или иным способам.

По хронологии выполнения

  1. Ре‑тест (повторное) — проведение повторной проверки, при которой ранее был выявлен дефект и отправлен на исправления с целью проверить, что дефект исправлен.

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

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

    Например, в сервис для построения маршрутов для разных видов транспорта добавили новый вид транспорта — вертолёт. В процессе регресса обнаружилось, что:

    • поехала вёрстка у старых видов транспорта;

    • сломалась возможность их переключать;

    • сбросились расчёты для старых видов транспорта.


    Регрессионное тестирование помогает обнаружить ошибки вовремя.

  3. Санитарное (sanity) — узконаправленное тестирование отдельных функциональных элементов системы.

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

    Например, при регистрации на сайте добавили новое поле "Семейное положение", санитарное тестирование предполагает тестирование этого добавленного поля.

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

  5. Приемочное — вид тестирования, проводимый на этапе сдачи готового продукта (или готовой части продукта) заказчику.

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

По степени важности тестируемых функций (по убыванию)

  1. Дымовое (smoke) — тестирование только критически важного функционала, неработоспособность которого делает бессмысленной саму идею использования приложения.

    Например, в приложении интернет‑магазина можно зарегистрироваться, авторизоваться под уже зарегистрированным аккаунтом, добавить товар в корзину, сделать заказ товара и т. д.

  2. Критического пути — тестирование, направленное на исследование функциональности, используемой типичными пользователями в типичной повседневной деятельности.

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

    Например, в приложении интернет‑магазина можно выбрать разные способы оплаты, варианты доставки, проверка сортировки товаров, поиск по ключевым словам и т. д.

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

Снимок экрана 2023-10-28 в 19.33.23.png
Схема для лучшего понимания

Иные

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

  2. Кроссплатформенное — тестирование ПО при котором проверяется, что тестируемое ПО одинаково корректно работает на разных платформах, под разными операционными системами.


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

Приглашаю вас поделиться вашими мыслями, вопросами и обратной связью по данной статье в комментариях!

Комментарии (23)


  1. funca
    29.10.2023 20:53

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

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


    1. stachevm Автор
      29.10.2023 20:53

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


  1. Etetenkin
    29.10.2023 20:53
    +3

    Весьма комплексный подход к классификации различных типов тестирования. Полезен как для новичков, так и для опытных специалистов. А примеры из реальной жизни прекрасно дополняют и позволяют примерить тему к своим задачам!

    Спасибо!


    1. stachevm Автор
      29.10.2023 20:53

      Рад, что статья оказалась полезной! Спасибо!


  1. astenix
    29.10.2023 20:53
    +6

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

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

    Или врубился бы, что нет никакого «санитарного тестирования» — спроси об этом у любого санитара.

    И уж точно не стал бы закатывать smoke строго как подвид регрешна.

    И понял бы, почему ad hoc тестирование так называется (к слову, где оно в твоей схеме?).

    И, возможно, познакомился бы с термином «метафора».

    И спросил бы, почему альфа называется альфой, а не буквой любого другого алфавита. И если есть альфа и бета, то где гамма тестирование? Сперва ты снисходительно похихикал бы над этим вопросом, а потом узнал бы, что их было даже больше… (здесь была ссылка, которую я удалил, бо ты сам до неё должен дойти)

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


    1. stachevm Автор
      29.10.2023 20:53
      +3

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

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

      С опытом, возможно, я взгляну иначе на эту статю или ее фрагменты, в любом случае спасибо за мнение, есть повод задуматься!


      1. astenix
        29.10.2023 20:53

        Да, разумеется, это было понятно.

        А, к слову, почему «ad hoc тестирование» называется таким странным названием?


        1. stachevm Автор
          29.10.2023 20:53

          Кто-то переводит ad hoc как "ситуативный, случайный". Также прочитал, что данный термин применяют только к каким-то конкретным, спонтанным задачам, для которых нет универсальных решений и к которым не готовятся заранее.

          Поделитесь, если есть другие значения


          1. astenix
            29.10.2023 20:53

            Это юридический термин, пришедший из древнеримского подхода к организации заседаний, судов и всего такого прочего — https://ru.wikipedia.org/wiki/Ad_hoc

            Любое заседание должно идти по регламенту — списку вопросов, которые надо обсудить (набор тест-кейсов для выполнения), и без отклонений, иначе никакое заседание никогда не завершится. Могут возникнуть темы, которые следует обсудить СРОЧНО, поверх уже согласованного списка или вопреки ему — галлы наступают без предупреждения, Карфаген прислал оскорбительный емайл, в ларёк рядом со зданием суда завезли свежий лимонад (сунуть нос куда-то помимо уже существующих тест-кейсов).

            ВНЕЗАПНАЯ тема для обсуждения вносится в регламент с пометкой ‘ad hoc‘ (в зависимости от срочности — в моменте или вносится в конец списка), отрабатывается, затем все возвращаются к теме обсуждения из регламента.

            Без этого контекста логично подумать, что тестирование ad hoc — полная противоположность регламентированному тестированию, и делается всегда без оглядки на требования, в свободном, бессистемном, поэтическом режиме. Это заблуждение, потому что без требований нет ожидаемого результата, а без ожидаемого результата нет тестирования, есть исследование, изучение, выяснение, не более. Ad hoc testing всегда дополняет регламентированное тестирование, а не заменяет его (и не противопостоит ему), и, конечно же, нуждается в понимании общего контекста и в учёте требований.

            Название очевидно метафоричное, переносящее смысл. В тестировании вообще много терминов являют собой метафоры, которые устоялись до потери смысла. Почему регрессионное тестирование называется регрессионным? «Да не всё ли равно, у нас на проекте это знать не требуется!» ©)

            Ещё есть менее известное латинское же (когда-то меметичное) выражение Ab hoc et ab hoc — так и сяк, без толку. И ещё множество других ad ***, которые были известны людям с классическим образованием на базе древних текстов на латыни и греческом — те самые древние инженеры, которые придумывали компьютеры.

            Так что ещё раз вопрос — где в предлагаемой классификации ad hoc testing? В какой раздел он должен быть насильно втиснут?


            1. stachevm Автор
              29.10.2023 20:53

              Предполагаю, что "По разработке тестовых сценариев"


    1. xonra
      29.10.2023 20:53
      +1

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


  1. domix32
    29.10.2023 20:53

    Почему UX и l18n не относятся к функциональным?


    1. alexanderniki
      29.10.2023 20:53
      +1

      Интернационализация может быть.

      А вот тестирование UX - это совсем другая область и тестировщики, которые обычно работают в отделах тестирования, не имеют к ней никакого отношения.

      Как минимум, потому что для тестирования UX нужно очень хорошо разбираться в том, как устроены пользовательские интерфейсы и почему они устроены именно так. Разбираться в usability, проектировании информационной архитектуры и в interaction design-е. А еще иметь информацию о целях пользователей, их проблемах, модели монетизации продукта, приоритетах в развитии продукта, планах по использованию dark patterns. Ну и еще о куче всего такого, что не входит в компетенции QA-инженера.

      Без этого всё, что вы сможете протестировать - это нравится лично вам или не нравится. А ваше мнение (вы не пользователь и не ЦА) не может быть основанием считать ту или иную ситуацию дефектом UX.

      А тестирование UX обычно называется исследованием. И занимаются этим совершенно другие специалисты - UX исследователи.


  1. ErshoffPeter
    29.10.2023 20:53
    +1

    С одной стороны - да, супер-крутая классификация!

    А с другой стороны - практический смысл такой классификации не понятен: кому и зачем она нужна?

    А с третий стороны споры по повлжу почему классификация тпкая, а не иная могут стать как главным холиваром еслине месяца, то недели точно! :-)


    1. stachevm Автор
      29.10.2023 20:53

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


      1. ErshoffPeter
        29.10.2023 20:53

        Цель ваша понятная, но, боюсь, большинству читателей ваша детальная классификация не зайдёт ибо у них свои есть классификации.


      1. Batalmv
        29.10.2023 20:53

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

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


        1. stachevm Автор
          29.10.2023 20:53

          В любом случае на собеседовании про большинство спросят


          1. Batalmv
            29.10.2023 20:53

            Ну, разве что для этого :)

            Хотя что условный QA сможет рассказать, не имея опыта и знаний? Как по мне, на собеседование надо приходить с тем, что реально знаешь. Или есть большой риск сесть в лужу :)


  1. lokiOdUa
    29.10.2023 20:53

    Стрессовое от нагрузочного отличается целью. Стрессовое - это когда мы хотим поломать тестируемый продукт.


    1. stachevm Автор
      29.10.2023 20:53

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


  1. rexbydew
    29.10.2023 20:53

    Нормально, я похожий список себе в заметках сам писал) в целом приемлемо, кратко и с примерами, как для собеса отличная инфа)

    (П.С. Пример с маршрутами и вертолетом выдаёт в тебе падавана практикума :-D)


    1. stachevm Автор
      29.10.2023 20:53
      +1

      Ну не зря же курсы проходил ????