Виды тестирования программного обеспечения
Тестирование программного обеспечения — неотъемлемая часть жизненного цикла разработки. Что такое тестирование программного обеспечения и каким оно бывает?
Что касается определения, в книге Мещерякова М.С. «Тестирование программного обеспечения» дано два определения этого термина:
- Тестирование — это процесс обнаружения ошибок в программном обеспечении.
- Тестирование — это проведение технического исследования для получения информации о качестве тестируемого ИТ-продукта.
К дефектам, которые ищут инженеры по тестированию, относятся ошибки в коде, отсутствие требований и т.д. Тестирование позволяет определить, отличается ли результат взаимодействия с сервисом от ожидаемого или, наоборот, что все функции соответствуют изначально планируемым.
Ключевые преимущества обеспечения качества (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 и другие. Но об этом мы расскажем в следующих статьях.
Вся необходимая информация о
тестировании функциональных возможностей ваших продуктов представлена в разделе «
услуги».