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

14 августа 2023
Дата публикации
Основные виды тестирования ПО
  • Тестирование ПО
  • Автоматизация тестирования

Виды тестирования программного обеспечения

Тестирование программного обеспечения — неотъемлемая часть жизненного цикла разработки. Что такое тестирование программного обеспечения и каким оно бывает? 

Что касается определения, в книге Мещерякова М.С. «Тестирование программного обеспечения» дано два определения этого термина:
  1. Тестирование — это процесс обнаружения ошибок в программном обеспечении.
  2. Тестирование — это проведение технического исследования для получения информации о качестве тестируемого ИТ-продукта.
К дефектам, которые ищут инженеры по тестированию, относятся ошибки в коде, отсутствие требований и т.д. Тестирование позволяет определить, отличается ли результат взаимодействия с сервисом от ожидаемого или, наоборот, что все функции соответствуют изначально планируемым.

Ключевые преимущества обеспечения качества (QA):
  1. понимание текущего качества разрабатываемого ПО и возможность влиять на него;
  2. предсказуемость поведения системы благодаря контролю качества и поиску дефектов — все элементы интерфейса и фрагменты кода будут под контролем;
  3. предоставление клиентам валидного и корректно работающего продукта, а удовлетворённость клиентов — залог успеха и получения желаемой выручки;
  4. оптимизация бюджета на исправление дефектов после релиза.
Более детально о сущности тестирования ПО мы рассказали в этой статье. Ниже представлена более подробная информация о классификации и видах тестирования веб-сайтов, систем, приложений и другого программного обеспечения.

Типы тестирования программного обеспечения

В соответствии с особенностями ИТ-решения 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 и другие. Но об этом мы расскажем в следующих статьях.

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