Виды тестирования программного обеспечения
Тестирование программного обеспечения — неотъемлемая часть жизненного цикла разработки. Что такое тестирование программного обеспечения и каким оно бывает?
Что касается определения, в книге Мещерякова М.С. «Тестирование программного обеспечения» дано два определения этого термина:
- Тестирование — это процесс обнаружения ошибок в программном обеспечении.
- Тестирование — это проведение технического исследования для получения информации о качестве тестируемого ИТ-продукта.
К дефектам, которые ищут инженеры по тестированию, относятся ошибки в коде, отсутствие требований и т.д. Тестирование позволяет определить, отличается ли результат взаимодействия с сервисом от ожидаемого или, наоборот, что все функции соответствуют изначально планируемым.
Ключевые преимущества обеспечения качества (QA):
- понимание текущего качества разрабатываемого ПО и возможность влиять на него;
- предсказуемость поведения системы благодаря контролю качества и поиску дефектов — все элементы интерфейса и фрагменты кода будут под контролем;
- предоставление клиентам валидного и корректно работающего продукта, а удовлетворённость клиентов — залог успеха и получения желаемой выручки;
- оптимизация бюджета на исправление дефектов после релиза.
Более детально о сущности тестирования ПО мы рассказали в
этой статье. Ниже представлена более подробная информация о классификации и видах тестирования веб-сайтов, систем, приложений и другого программного обеспечения.
Типы тестирования программного обеспечения
В соответствии с особенностями ИТ-решения QA-эксперты используют различные
виды и типы тестирования.
1. По глубине покрытия
- Дымовое тестирование (Smoke Testing)
Тестирование smoke проводится по принципу выборки из общего числа запланированных тестовых сценариев, покрывающей основную функциональность компонента или системы. Оно проводится, чтобы удостовериться, что базовые функции программы в целом работают корректно, без углубления в детали. Ежедневная сборка и тест «на дым» являются передовыми практическими методами.
- Позитивное тестирование (Minimal acceptance test)
Вид теста, направленный на подтверждение того, что функции и модули приложения правильно работают с корректными данными. Для крупных и сложных программ используется ограниченный набор сценариев и функций.
- Полное тестирование / позитивное и негативное тестирование (Acceptance test)
Вид теста, направленный на подтверждение того, что приложение может использоваться по назначению при любых условиях. Бизнес-логика, функциональность, проверка пользовательского интерфейса и производительности, тестирование удобства пользования, тестирование локализации — то есть полная проверка ИТ-решения перед релизом. Эти тесты представляют полный набор услуг и могут проводиться в зависимости от целей конечных пользователей продукта.
2. По ширине покрытия
- Регрессионное тестирование (Regression testing)
Это тестирование уже проверенного решения, проводящееся после модификации для уверенности в том, что процесс модификации не внёс или не активизировал проблемы в областях, не подвергавшихся изменениям. Проводится после изменений в коде программного продукта или его окружении.
- Валидация дефектов (Defect validation)
Вид теста, направленный на проверку правильности принятого разработчиком решения о дефекте.
- Тестирование новых функций (New features testing)
Один из видов тестов, направленный на проверку полного и корректного поведения новых функций без негативных последствий для продукта. Это комплексное тестирование функциональности, на которую могло повлиять нововведение.
3. По знанию кода
- Белый ящик (White-box testing)
Тестирование, основанное на анализе внутренней структуры компонента или системы. Тестировщику полностью доступен исходный код.
- Чёрный ящик (Black-box testing)
Тестирование — функциональное или нефункциональное — без знания внутренней структуры компонента или системы.
- Серый ящик
У специалистов есть доступ к базам данных или фрагментам кода.
4. По месту и времени проведения
- Альфа-тестирование (Alpha testing)
Моделируемое или действительное эксплуатационное тестирование, проводимое потенциальными пользователями или независимой командой обеспечения качества на стороне компании-разработчика, но вне команды разработки.
- Бета-тестирование (Beta testing)
Тестирование, проводимое клиентами на внешней стороне, никак не связанной с компанией-разработчиком. Позволяет определить, действительно ли ИТ-решение удовлетворяет требованиям заказчика и вписывается в бизнес-процессы. Бета-тестирование проводится в качестве внешнего приёмочного тестирования готового ПО.
- Приёмочное тестирование (User acceptance testing)
Формальное тестирование потребностей, требований и бизнес-процессов. Проводится, чтобы определить, соответствует ли ПО критериям приёмки, и для того чтобы дать возможность пользователям, заказчикам или заинтересованным сторонам определить, выпускать решение или нет.
5. По подготовленности ПО
- Интуитивное тестирование (Ad hoc testing)
Тестирование, выполняемое неформально, без формальной подготовки тестов, формальных методов проектирования тестов, определения ожидаемых результатов и руководства по выполнению тестирования.
- Исследовательское тестирование (Exploratory testing)
Неформальный метод создания тестов, при котором QA-инженер контролирует проектирование тестов в то время, как эти тесты выполняются, и использует полученную во время тестирования информацию для проектирования новых и улучшенных тестов.
- Проверка технической документации и функциональных требований (Documentation testing)
Тестирование качества документации, например, руководства пользователя или руководства по установке ПО.
6. По изолированности компонентов
- Модульное тестирование / унитарное тестирование (Module testing)
Тестирование отдельных компонентов ПО. Тесты позволяют проверить на корректность отдельные модули исходного кода программы. Тесты позволяют быстро оценить, не привело ли очередное изменение кода к ошибкам. Цель модульного тестирования — изолировать отдельные части программы и показать, что по отдельности эти части работоспособны.
- Интеграционное тестирование (Integration testing)
Проводится для выявления дефектов в интерфейсах и во взаимодействии между интегрированными элементами, различными модулями, уровнями, базами данных или системами.
- Системное тестирование / сквозное тестирование (System testing)
Процесс тестирования ИТ-решения в целом для проверки того, что оно соответствует бизнес-требованиям. Сквозные тесты выполняются на полной, интегрированной системе, с целью проверки соответствия системы исходным требованиям.
Тест позволяет убедиться, что функциональность работает корректно. Сквозные тесты воспроизводят поведение пользователя при работе с ИТ-решением и проверяют, что различные пользовательские сценарии работают так, как ожидается.
7. Виды тестирования по степени автоматизации
- Автоматизированное тестирование (Test automation)
Для ускорения тестирования на проекте, особенно если говорить о регулярном запуске повторяющихся тестов, процесс можно частично автоматизировать с помощью автотестов. Тестирование автоматизации подразумевает, что выбранные функции и шаги теста, такие как запуск, инициализация, выполнение, анализ и выдача результата, реализуются без участия человека с помощью инструментов для автоматизированного тестирования.
- Ручное тестирование (Manual testing)
Тип тестирования ИТ-продуктов, при котором тесты выполняются инженерами вручную, без привлечения каких-либо инструментов автоматизации.
8. По объекту тестирования
- Функциональное тестирование (Functional testing)
Глубокое тестирование, основанное на анализе спецификации функциональности компонента или системы. Оценка программных приложений через функциональные тесты производится на основе сопоставления ожидаемых и полученных результатов (указанных в функциональной документации). Важным условием является ввод корректных и некорректных тестовых данных.
- Нефункциональное тестирование (Non-Functional Testing)
Тестирование совместимости (Compatibility testing)
Для определения возможности взаимодействия программного продукта с другим ПО.
Кроссбраузерное тестирование (Cross browser testing)
Для определения работоспособности ПО на различных браузерах или версиях браузеров.
Кроссплатформенное тестирование (Cross platform testing)
Тестирование на совместимость ПО с различными операционными системами или версиями операционных систем.
Тестирование требований (Requirements testing)
Проверка требований на соответствиеным характеристикам качества. Тестирование требований позволяет выявить несоответствие в ожиданиях и интерпретациях разрабатываемого продукта на ранних этапах разработки.
Критерии качества требований:
- корректность, недвусмысленность, полнота и непротиворечивость;
- упорядоченность по важности и стабильности;
- возможность проверки (тестируемость);
- возможность модификации (изменяемость);
- трассируемость (отслеживаемость).
Тестирование прототипа (Prototype testing)
Способ определения структурных, логических ошибок и проблем проектирования на ранней стадии развития продукта до начала фактической разработки.
Тестирование интерфейса (UI testing)
Тестирование, выполняемое путём взаимодействия с системой через графический интерфейс пользователей. Эти тесты предполагают проверку соответствия ПО требованиям к графическому интерфейсу.
Тестирование юзабилити (Usability testing)
Тестирование для определения степени понятности, лёгкости в изучении и использовании ПО для пользователя. Тестирование удобства пользования определяет, насколько комфортна работа пользователей с приложением или сайтом в контексте понимания процесса работы, простоты навигации и структуры.
Тестирование доступности (Accessibility testing)
Определяет степень лёгкости, с которой пользователи с ограниченными способностями могут использовать систему или её компоненты.
Тестирование безопасности (Security testing)
Тестирование оценки степени защиты данных пользователей ПО. Тестирование проверяет фактическую реакцию защитных механизмов, встроенных в систему, на проникновение.
Тестирование установки (Installability testing)
В ходе тестирования установки проверяется правильность процесса установки ПО и эффект, оказываемый установкой на операционную систему пользователя. Тестирование механизма лицензирования помогает определить эффективность системы защиты программы.
Тестирование локализации (Localization testing)
Проводится, чтобы проверить качество перевода продукта с одного языка на другой. Также проверяется совместимость приложения со стандартами различных регионов и правильность оформления документации и вспомогательных файлов.
Тестирование интернационализации (Globalization testing)
Цель — найти потенциальные проблемы в решении, которые могут повлиять на процесс интернационализации и убедиться, что существующий код может обеспечить поддержку других элементов без ущерба функциональности или графического интерфейса.
Тестирование производительности (Performance testing)
Необходимо. чтобы определить надёжность, стабильность, производительность приложений, сайтов и другого ПО. Делится на:
- нагрузочное тестирование, проводимое для оценки поведения компонента ПО при возрастающей нагрузке, например, количества параллельных пользователей или операций, а также определения, какую нагрузку может выдержать система.
- стресс-тестирование, оценивающее ПО на граничных значениях рабочих нагрузок или за их пределами, или же в состоянии ограниченных ресурсов.
- объёмное тестирование, при котором система испытывается на больших объёмах данных.
- тестирование стабильности для проверки стабильности работы системы под нагрузкой в течение длительного времени.
Конфигурационное тестирование
Позволяет определить, соответствует ли ПО требованиям конфигурируемости. Это процесс тестирования системы в каждой конфигурации поддерживаемого ПО. Под различными конфигурациями понимаются версии операционных систем, браузеров, драйверов, объёмов памяти, типов жёстких дисков, процессоров и т.д.
Динамическое тестирование
Такие тесты проводят для анализа динамического поведения кода. Задача динамического тестирования — проверка поведения ПО с динамическими переменными или переменными, которые не являются постоянными, и поиск западающих мест решения. Для проверки динамического поведения код должен быть уже.написан, скомпилирован и запущен.
Завершающие мысли
В идеале тестирование должно проводиться на всех этапах
разработки, начиная с тестирования документации и заканчивая приёмочными тестами. Стратегию,
типы и
основные виды тестирования QA-специалисты подбирают под каждый проект индивидуально.
Несмотря на то, что в ходе тестирования важно убедиться, что конечные пользователи могут использовать ПО (войти в личный кабинет, сохранить данные, отправить форму и т.д.), не менее важно удостовериться, что приложение или сайт не сломается при получении неверных данных или при выполнении непредсказуемых действий.
Используя разные
виды тестирования, QA-инженеры помогут предугадать, что произойдёт, если пользователь параллельно будет использовать VPN, попытается скачать неполную форму, попытается исправить ошибку в своих данных или воспользуется неподходящим API. Эксперты также проверят, есть ли у кого-то
возможность внести изменения в пользовательскую информацию или получить доступ к системе, на который он не имеет права. Хороший тестировщик должен пытаться «сломать» ваше ПО и достичь предела стабильности.
Зачастую в работе тестировщики используют как автоматизированное, так и
ручное тестирование для обеспечения наилучшего качества конечного ИТ-решения. Все необходимые детали о тестировании и об этапах
интеграции QA в процессы компании вы можете узнать у наших специалистов на
бесплатной консультации.
Помимо типов и уровней выделяют также различные модели тестирования, такие как SDLC (жизненный цикл ПО), Agile (гибкая методология), спиральная модель,
непрерывная интеграция и
непрерывная поставка CI/CD и другие. Но об этом мы расскажем в следующих статьях.
Вся необходимая информация о
тестировании функциональных возможностей ваших продуктов представлена в разделе «
услуги».