Эта статья о том, что такое тестирование ПО, его целях и методах. Она описывает виды функционального и нефункционального тестирования, приводит примеры инструментов тестирования, а также рассказывает о техниках обеспечения качества.
Содержание:
- Что такое тестирование ПО
- Основные цели тестирования ПО
- Методы тестирования ПО
- Виды тестирования ПО
- Функциональное тестирование
- Виды функционального тестирования
- Нефункциональное тестирование
- Виды нефункционального тестирования
- Ручное и автоматизированное тестирование ПО
- Инструменты тестирования ПО
- Обеспечение качества ПО
- Заключение
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Что такое тестирование ПО
Тестирование программного обеспечения — это процесс изучения и оценки компонента или системы для предоставления информации о качестве продукта. Это один из важных этапов жизненного цикла разработки ПО (SDLC), который, как правило, начинается сразу после этапа разработки. Тестирование помогает снизить риски, связанные с качеством ПО, и обеспечить уверенность в корректной работе.
Основные цели тестирования ПО
- Демонстрирует наличие дефектов, а не их отсутствие.
- Предоставляет актуальную информацию о качестве продукта.
- Способствует обнаружению и предотвращению дефектов на ранних этапах разработки ПО.
- Проверяет соответствие продукта заданным спецификациям и требованиям. Также помогает убедиться, что продукт соответствует потребностям и ожиданиям пользователей.
Методы тестирования ПО
Методы тестирования программного обеспечения предполагают применение различных стратегий и подходов для обеспечения соответствия реального результата ожидаемому. Они включают проверку ПО на разных уровнях начиная с отдельных модулей, интеграционного и системного тестирования, а также тестирования производительности, безопасности и удобства использования пользователем.
Виды тестирования ПО
В рамках жизненного цикла разработки (SDLC) основная цель различных видов тестирования ПО заключается в том, чтобы гарантировать, что ПО будет корректно работать в различных средах и на различных платформах.
На более широком уровне виды тестирования можно разделить на следующие категории:
- Функциональное тестирование
- Нефункциональное тестирование
Функциональное тестирование
Функциональное тестирование проводится с целью проверки функций тестируемого приложения, а также соответствия продукта заявленным спецификациям и требованиям.
После завершения функционального тестирования создаются отчёты о его результатах. Такие отчёты передаются команде разработчиков для устранения обнаруженных дефектов.
Виды функционального тестирования
1. Модульное тестирование
Модульное или юнит-тестирование гарантирует, что на уровне кода каждый отдельный элемент ПО функционирует должным образом. Такое тестирование проводится разработчиками, так как подразумевает полный доступ к коду. Модульное тестирование можно проводить вручную, но автоматизация этого процесса позволит ускорить процесс тестирования и увеличить тестовое покрытие. Автоматизация тестирования помогает обнаружить дефекты на ранних этапах разработки ПО, что позволяет сократить расходы на их устранение.
2. Интеграционное тестирование
Все модули программного обеспечения должны быть интегрированы друг с другом в виде команд или вызовов БД для выполнения необходимых действий. Интеграционное тестирование обеспечивает корректное взаимодействие между модулями, и работу всего приложения. Этот вид тестирования выполняется разработчиками или тестировщиками вручную или автоматизировано.
3. Дымовое тестирование
Проверка ПО на наличие явных ошибок, которое покрывает основные функциональные возможности компонента или системы, чтобы определить, работает ли компонент или система должным образом до начала более глубокого тестирования. Цель этого типа тестирования — выявить серьёзные дефекты на раннем этапе и отказаться от новой или сломанном сборки.
4. Системное тестирование
Системное тестирование направлено на проверку завершённого и полностью интегрированного приложения. Оно проверяет взаимодействие всех компонентов системы и дополнительных элементов на соответствие функциональным и нефункциональным требованиям. Системное тестирование обычно проводится отдельной группой тестировщиков.
5. Регрессионное тестирование
Регрессионное тестирование гарантирует, что последние изменения, исправления или дополнения кода не оказывают негативного влияния на уже существующие функции. Такое тестирование основано на повторном проведении ранее использованных тест-кейсов, чтобы убедиться в корректной работе приложения и отсутствии дефектов, вызванных изменениями.
6. Приёмочное тестирование
Приёмочное тестирование является заключительным этапом функционального тестирования. Цель этого тестирования — убедиться, что конечный продукт отвечает всем бизнес-требованиям, потребностям конечного пользователя и готов к релизу.
Нефункциональное тестирование
Нефункциональное тестирование направлено на проверку свойств продукта, которые не относятся к его функциональным требованиям и не покрываются функциональными тестами. Оно гарантирует качество продукта, его производительность и удобство использования.
Виды нефункционального тестирования
Тестирование производительности
Целью тестирования производительности является определение стабильности приложения в реальных условиях. При этом отслеживаются различные параметры, такие как время отклика, масштабируемость, эффективность работы приложения в разных сценариях использования и нагрузок. К тестированию производительности относятся:
- Нагрузочное тестирование — процесс увеличения количества имитируемых нагрузок на приложение и мониторинг производительности приложения в таких условиях.
- Стресс-тестирование используется для проверки поведение системы на значениях, превышающих допустимые нагрузки, а также способность системы к регенерации.
- Тестирование пиков нагрузки (spike-тестирование) используется для наблюдения за тем, как хорошо система работает при резком увеличении или уменьшении нагрузки в течение определённого периода времени.
- Тестирование выносливости используется для определения, насколько хорошо система выдерживает длительное использование.
Тестирование безопасности
Основная цель тестирования безопасности — найти уязвимости в системе, которые могут привести к несанкционированному доступу и краже конфиденциальной информации. К видам тестирования безопасности относятся:
- Тестирование безопасности приложений (application security testing).
- Тестирование на проникновение (penetration testing).
- Оценка уязвимости системы (security vulnerability).
Тестирование удобства использования
Тестирование удобства использования или юзабилити позволяет определить степень удобства, привлекательности и эффективности использования с точки зрения пользователя. Такой вид тестирования, как правило, проводится на поздних этапах жизненного цикла разработки ПО (SDLC). Цель тестирования — оценка соответствия дизайна продукта его функциональности до того, как продукт станет доступен для пользователей. Основные элементы юзабилити:
- Общедоступность (accessibility).
- Идентичность дизайна (identity).
- Качественно содержание (content).
- Удобная навигация (navigation).
- Переносимость (portability).
Ручное и автоматизированное тестирование ПО
Чтобы получить максимальный результат от ручного или автоматизированного тестирования, команды тестировщиков следуют пошаговому процессу тестирования:
- Шаг 1: Планирование тестирования.
- Шаг 2: Разработка тест-дизайна.
- Шаг 3: Создание и выполнение тест-кейсов.
- Шаг 4: Составление отчётов о результатах тестирования.
Ручное тестирование
Ручное тестирование — вид тестирования ПО, в ходе которого тест-кейсы выполняются тестировщиком вручную, без использования инструментов автоматизации. Количество затраченного времени и усилий при таком виде тестирования значительно выше. Однако существуют сценарии, в которых невозможно обойтись без ручного тестирования, например, при юзабилити тестировании, которое проводится с точки зрения конечного пользователя для оценки удобства использования приложения.
Автоматизированное тестирование
Автоматизированное тестирование включает в себя использование инструментов автоматизации тестирования, а также тесты, написанные специально для этого вида тестирования. Подобные инструменты помогают проводить тест-кейсы, фиксировать результаты тестирования и регистрировать обнаруженные дефекты. Тщательно продуманная стратегия автоматизированного тестирования позволяет увеличить производительность и эффективность, улучшить качество приложения и сократить время тестирования.
Инструменты тестирования ПО
Инструменты для автоматизации тестирования
Ниже представлен список инструментов для автоматизации тестирования:
Инструменты для нефункционального тестирования
Ниже перечислены инструменты, которые могут помочь при проведении нефункционального тестирования:
Инструменты управления тестированием и системы отслеживания дефектов
Для управления тестированием и отслеживания дефектов можно использовать следующие инструменты:
CI-инструменты
Ниже представлен список инструментов для непрерывной интеграции:
Обеспечение качества ПО
Согласно исследованиям, около 78% предприятий считают качество и скорость ключевыми факторами, влияющими на общий успех проекта. Учитывая растущую цифровую среду, а также увеличение требований к качеству продукта, привычные модели обеспечения качества оказываются недостаточными.
Компаниям приходится применять Agile-методологии, методы автоматизации контроля качества и искусственный интеллект, чтобы представить комплексное обеспечение качества без увеличения затрат на выпуск ПО.
Полный спектр техник по обеспечению качества, охватывающий итеративную и каскадную модели разработки, Agile-методологию, включает:
- Разработку через приёмочное тестирование.
- Разработку на основе поведения.
- Agile-тестирование.
- Методологию DevOps.
Разработка через приёмочное тестирование
Разработка через приёмочное тестирование (acceptance test-driven development) становится всё более популярной техникой разработки в Agile-среде. Она отличается высокой степенью взаимодействия между разработчиками, тестировщиками и пользователями. Это является ключевым фактором в создании ПО, ориентированного на конечного пользователя.
Этапы внедрения разработки через приёмочное тестирование включают:
- Создание тестов: приёмочные тесты пишутся простым и понятным языком или с использованием Gherkin на основе требований к продукту, которые определяются заказчиком или конечным пользователем.
- Запуск тестов: проводимые тесты не могут быть успешными, так как необходимая функциональность ещё не существует.
- Написание кода: разработчики приступают к написанию кода. Зная критерии, по которым должно пройти тестирование.
- Тестирование кода: написанный код проверяется тестами из шага 1 до тех пор, пока тест не будет успешно пройден.
- Рефакторинг: после тестирования разработчики могут приступить к рефакторингу кода.
Инструменты: TestNG, FitNesse, Concordian.
Разработка на основе поведения
Разработка на основе поведения (Behavior Driven Development, BDD) — техника разработки, акцент в которой делается на написание тестов, основанных на ожидаемом поведении системы.
Для успешного применения разработки на основе поведения требуется коммуникация и чёткое понимание требований пользователей, их поведения и критериев приёмки со стороны заказчика.
В этой технике тест-кейсы могут быть написаны на основе подхода Given-When-Then:
Given: пользователь имеет корректные учётные данные (имя пользователя и пароль).
When: пользователь нажимает на кнопку входа в систему.
Then: вывод сообщения об успешном входе в систему.
BDD-тестирование происходит следующим образом: определение сценариев поведения => написание тестов => выполнение тестов с негативным результатом => написание кода => тестирование кода и рефакторинг.
Cucumber является широко используемым инструментом BDD-тестирования.
Agile-тестирование
Создание продукта с использованием каскадной модели разработки подразумевает разделение команд разработки и тестирования. Сначала разработчики создают функцию и передают её на тестирование. Затем команда тестировщиков приступает к проверке готовой функции, чтобы убедиться в её корректной работе, а также что она не нарушила работу уже существующих функций.
В отличие от каскадной модели разработки Agile-тестирование объединяет команды разработчиков и тестировщиков, способствуя их тесному взаимодействию. Agile-тестирование также подразумевает разбивку работы над проектом на этапы, что позволяет быстро устранять обнаруженные дефекты и своевременно реагировать на изменения.
Тестирование DevOps
В отличие от Agile, DevOps больше сфокусирован на автоматизации тестирования и поставки, и включает в работу над проектом команду по эксплуатации. Тестирование должно происходить на каждом этапе DevOps. Процесс тестирования начинается с непрерывной интеграции, когда разработчик завершает процесс сборки, после чего осуществляется автоматизированное тестирование, а затем непрерывная доставка и развёртывание. Цель DevOps — обеспечить тесное взаимодействие команд и применение Shift Left тестирования, то есть приступить к процессу тестирования как можно раньше.
Заключение
За последние годы процесс тестирования ПО претерпел значительные изменения. Сегодня успех продукта зависит от качества процессов тестирования, которые он должен пройти, прежде чем попасть к пользователю.
Помимо применения лучших практик тестирования и использования тестовых инструментов, тестировщикам ПО необходимо:
- Знать пользовательские требования.
- Проводить тестирование на основе пользовательского опыта.
- Эффективно управлять процессом тестирования и использовать отчётность.
- Работать в тесном контакте с разработчиками и заказчиками.
Перевод статьи «What Is Software Testing? Types, Methodologies & Tools of Software Testing».
Пингбэк: Большой учебник по тестированию