Как мне захотелось систематизировать виды тестирования
- понедельник, 6 ноября 2023 г. в 00:00:22
Привет, Habr! Я, как и все люди, которые начали изучать тестирование, столкнулся с темой "Виды тестирования". Погружаясь в эту тему, я обнаружил множество различных классификаций и схем, которые иногда сильно отличались друг от друга. Это вдохновило меня на идею систематизации видов тестирования и создания общей схемы.
В процессе подготовки, я дал определение для каждого вида, а также добавил краткое описание и примеры, чтобы облегчить понимание сути каждого вида и выделить их отличия друг от друга.
В этой статье я собрал различные фрагменты информации по теме видов тестирования из разных источников в интернете, иногда переформулировал определения и теперь готов поделиться этим всем с вами.
Итак, ниже приведены классификации...
Функциональное — вид тестирования, при котором проверяются функциональные требования ПО, то есть способность ПО решать возложенные на него задачи. Направлено на проверку корректности работы функциональности приложения. Например, в приложении интернет‑магазина при нажатии на кнопку "Добавить в корзину", товар добавляется в корзину пользователя.
Нефункциональное — вид тестирования, который проверят нефункциональные аспекты ПО.
Пользовательского интерфейса (GUI) — тестирование интерфейса ПО на соответствие требованиям (размер, шрифт, цвет и т. д.).
Удобства использования (usability) — тестирование, направленное на установление степени удобства использования, понятности и привлекательности для пользователей разрабатываемого продукта.
При тестировании нужно ответить на вопросы:
Как быстро пользователь достигнет цели?
Размер кнопок (удобно ли попадать)?
и др.
Безопасности — тестирование защищенности системы, анализ рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
Например, тестировщик пытается взломать приложение, чтобы проверить, получится ли обойти защиту и получить данные пользователей.
Инсталяционное — тестирование установки, обновления и удаления приложения.
Например, нужно протестировать будет ли обновляться приложение с 1-й версии сразу на 3-ю версию, а не только со 2-й версии на 3-ю.
Конфигурационное — тестирование, направленное на проверку работы ПО при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т. д.).
Надежности и восстановления после сбоев (на отказ и восстановление) — тестирование способности противостоять и успешно восстанавливаться, т. е. обеспечивать сохранность и целостность данных, после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи.
Например, работая в текстовом редакторе, при потери сети, отключении электричества на стороне клиента / сервера, данные должны сохраниться.
Локализации — тестирование программного обеспечения на соответствие лингвистическим, культурным требованиям, а также специфике конкретной страны или региона (язык, валюта, система мер и т. д.).
Например, в Китае в играх не должно быть изображений мертвых тел или крови.
Производительности — определение стабильности и потребления ресурсов в условиях различных сценариев использования и нагрузок.
Нагрузочное — тестирование работы системы под разными уровнями нагрузки до предельного значения, которое она должна выдерживать и которые содержатся в требованиях.
При таком тестировании замеряется время отклика системы и скорость обработки запросов от пользователей (например, как быстро открываются и прогружаются страницы сайта, как быстро система выполняет расчеты, выдает результаты поиска и т. д.), а также сколько ресурсов "съедает" система — сетевых, процессорных, памяти.
Стабильности (надежности) — тестирование работоспособности приложения со среднем уровнем нагрузки, но при длительном временем работы.
Стрессовое — тестирование системы при нагрузке выше нормы, описанной в требованиях.
Например, сайт рассчитан на одновременную работу 5 тысяч пользователей, стрессовое тестирование предполагает, что на сайте будет работать более 5 тысяч пользователей одновременно.
Объемное — тестирование, которое проводится для получения оценки производительности при увеличении объемов данных в базе данных приложения.
Объемное тестирование предназначено для прогнозирования того, может ли система обрабатывать большой объем данных в плане проверки объема данных, обрабатываемых базой данных. Например, при записи большого объема данных нет сообщений об ошибках / крешах системы, а данные записываются в БД.
Масштабируемости — тестирование производительности системы с точки зрения способности масштабироваться (приспосабливаться), реагируя на увеличение количества пользователей, запросов, и других динамических параметров системы.
Цель такого тестирования — оценить, насколько хорошо масштабируется система в ответ на различные уровни нагрузки. Например, компания ожидает шестикратного увеличения нагрузки на серверы в течение следующих двух месяцев. Им может потребоваться увеличить производительность сервера и сократить время обработки запроса, чтобы лучше обслуживать посетителей. Если приложение масштабируемое, вы можете сократить это время, обновив оборудование сервера, например, вы можете увеличить частоту процессора и добавить больше оперативной памяти.
Конкурентное — тестирование поведения системы в момент, когда одновременно происходят два или более событий, или выполняется одновременный вход нескольких пользователей в систему с выполнением одного и того же действия.
Например, при одновременной авторизации нескольких пользователей в систему, все они должны авторизоваться, а система не выдать ошибок.
Ручное — тип тестирования, в котором проверки выполняются тестировщиком вручную, без использования инструментов автоматизации.
Автоматизированое — тип тестирования, при котором проверки выполняются с использованием программных средств для выполнения тестовых сценариев.
Например, тестировщик пишет код на JavaScript для автоматизации процесса авторизации на сайте.
Позитивное — тестирование, при котором ПО или его элементы реагируют корректно (согласно требованиям) на совершенные действия при использовании корректных тестовых данных.
Например, в окне регистрации на сайте в поле "имя" можно ввести от 2-х до 20-ти букв. Позитивной проверкой будет ввод имени из 4-х букв — Иван и система даст пройти дальше для заполнения следующих полей.
Негативное — вид тестирования ПО, направленный на проверку того, что система или приложение ведут себя должным образом (согласно требованиям) в негативных ситуациях, то есть, когда они получают недопустимые или неожиданные входные данные.
Например, при заказе товара в интернет‑магазине в поле "номер телефона" можно ввести только цифры. При вводе других символов система должна выдавать ошибку и не дать оформить заказ.
Белого ящика — метод тестирования ПО, который предполагает полный доступ тестировщика к коду системы.
Тестировщик изучает реализацию кода поля ввода на веб‑странице, определяет все предусмотренные (как правильные, так и неправильные) и не предусмотренные пользовательские вводы, и сравнивает фактический результат выполнения программы с ожидаемым. При этом ожидаемый результат определяется именно тем, как должен работать код программы.
Серого ящика — метод тестирования ПО, который предполагает частичный доступ к коду проекта, комбинация методов белого и черного ящиков.
Например, тестирование API с помощью Postman или работа с базой данных.
Черного ящика — метод тестирования ПО, основанный на спецификации, который не предполагает доступа (полного или частичного) к системе, т. е. основывается на работе исключительно с внешним интерфейсом тестируемой системы.
Например, тестирование приложения по макетам или по описанию функциональности в требованиях.
Сценарное — тестирование по заранее подготовленной тестовой документации.
Такое тестирование проводится если:
требования к продукту подробно зафиксированы;
у тестировщика достаточно времени, чтобы подготовить тестовую документацию заранее.
Исследовательское — вид тестирования, при котором тестовую документацию составляют по ходу проверки сервиса или приложения, а не заранее.
Исследовательское тестирование применяют, если:
требования к продукту не прописаны или много серых зон;
недостаточно времени, чтобы составить тестовую документацию заранее.
Статическое — тип тестирования, который предполагает, что программный код во время тестирования не будет выполняться.
Например, вычитка документации приложения, проверка синтаксиса кода.
Динамическое — тип тестирования, который подразумевает запуск кода для проведения функциональных и нефункциональных проверок ПО.
Модульное (компонентное / unit) — вид тестирования, при котором проверяется отдельная часть приложения.
Например, в приложении такси нужно проверить функциональность "Поделиться поездкой" — это модульное тестирование.
Интеграционное — вид тестирования, направленный на проверку корректного взаимодействия нескольких компонентов системы между собой.
Например, в приложении такси нужно протестировать, подтягивается ли адрес в поле "Место назначения" по клику в любую точку на карте.
Сквозное (end‑to‑end) — вид тестирования, при котором проверяется система целиком.
Например, пользователь хочет купить билет в театр в онлайн‑кассе. Если нужно провести сквозное тестирование, нужно проверить, что он может сделать всё: от выбора места до отправки чека о покупке на электронную почту.
Операционное — процесс проверки системы на удовлетворение всех потребностей пользователя и соответствия бизнес‑требованиям.
Суть заключается в том, чтобы проверить функционал в его естественной среде, где он должен быть. Например, если какое‑то приложение предназначалось для бухгалтера, то на этом уровне тестирования — приложение будет тестироваться непосредственно бухгалтерами. То есть это самый заключительный этап проверки функционала непосредственно теми людьми, кто будет его использовать.
Альфа‑тестирование — тестирование ПО, проводимое на ранней стадии разработки, внутри организации‑разработчика, которое имитирует реальное использование продукта.
Бета‑тестирование — тестирование практически готового ПО, выпускаемое для ограниченного количества пользователей, разрабатывается в первую очередь для тестирования конечными пользователями и получения отзывов клиентов о продукте для внесения соответствующих изменений.
Открытое — попадают все желающие.
Закрытое — для ограниченного количества пользователей, попадают по приглашениям или иным способам.
Ре‑тест (повторное) — проведение повторной проверки, при которой ранее был выявлен дефект и отправлен на исправления с целью проверить, что дефект исправлен.
Например, на новостном сайте добавили новый раздел, но кнопка для перехода в него не работает, и пользователь не может попасть в этот раздел. Тестировщик заводит баг‑репорт, затем разработчик исправляет проблему, и после этого тестировщик проверяет, что ошибка действительно устранена.
Регрессионное — тестирование после внесения изменений в код приложения, для подтверждения факта, что эти изменения не внесли ошибки в областях, которые не подверглись изменения, то есть проверка, что ничего из старой функциональности не сломалось.
Например, в сервис для построения маршрутов для разных видов транспорта добавили новый вид транспорта — вертолёт. В процессе регресса обнаружилось, что:
поехала вёрстка у старых видов транспорта;
сломалась возможность их переключать;
сбросились расчёты для старых видов транспорта.
Регрессионное тестирование помогает обнаружить ошибки вовремя.
Санитарное (sanity) — узконаправленное тестирование отдельных функциональных элементов системы.
Является подвидом регрессионного тестирования. При санитарном тестировании проверяется небольшой объем кода, отвечающий за одну функцию и тщательно исследуется. Smoke‑тесты, в отличии от санитарных, проверяют только критически‑важный функционал.
Например, при регистрации на сайте добавили новое поле "Семейное положение", санитарное тестирование предполагает тестирование этого добавленного поля.
Тестирование сборки — вид тестирования направленный на определение соответствия, выпущенной версии ПО, критериям качества перед релизом.
Например, команда разработчиков внесла ряд изменений в код приложения, чтобы добавить новые функции и исправить ошибки. После того, как все изменения были внесены, была создана сборка приложения. Теперь перед выпуском релиза необходимо провести тестирование сборки.
Приемочное — вид тестирования, проводимый на этапе сдачи готового продукта (или готовой части продукта) заказчику.
Оценивается соответствие продукта бизнес‑требованиям и требованиям пользователей. Это финальный этап тестирования продукта перед его релизом. При этом, он не является сверх тщательным, всеохватывающим и полным — тестируется, в основном, только основной функционал.
Приемочное тестирование проводиться либо самим заказчиком, либо группой тестировщиков, представляющих интересы заказчика, либо тестировщиками компании‑разработчика. Зависит от предпочтений компании‑заказчика.
Дымовое (smoke) — тестирование только критически важного функционала, неработоспособность которого делает бессмысленной саму идею использования приложения.
Например, в приложении интернет‑магазина можно зарегистрироваться, авторизоваться под уже зарегистрированным аккаунтом, добавить товар в корзину, сделать заказ товара и т. д.
Критического пути — тестирование, направленное на исследование функциональности, используемой типичными пользователями в типичной повседневной деятельности.
Если дымовое тестирование прошло успешно, то на уровне критического пути должны быть проверены все функции, необходимые пользователю для успешной работы с приложением и достижения поставленных целей. Обычно занимает много времени.
Например, в приложении интернет‑магазина можно выбрать разные способы оплаты, варианты доставки, проверка сортировки товаров, поиск по ключевым словам и т. д.
Расширенное — тестирование, всей заявленной в требованиях функциональности, в том числе той, у которой низкий приоритет и незначительная важность.
Например, открытие ссылок в подвале сайта с разных страниц.
Кроссбраузерное — вид тестирования, направленный на поддержку и корректное отображение программного продукта в разных браузерах.
Кроссплатформенное — тестирование ПО при котором проверяется, что тестируемое ПО одинаково корректно работает на разных платформах, под разными операционными системами.
Подводя итог статьи, хочу подчеркнуть, что её создание было вдохновлено желанием собрать и систематизировать информацию о различных видах тестирования из разных источников. Надеюсь, что данная статья окажется полезной для всех, кто занимается изучением и практикой тестирования.
Приглашаю вас поделиться вашими мыслями, вопросами и обратной связью по данной статье в комментариях!