Краткий справочник тестировщика - Самойлов Дмитрий


Краткий справочник тестировщика


Дмитрий Самойлов

© Дмитрий Самойлов, 2023


ISBN 978-5-0059-8529-3

Создано в интеллектуальной издательской системе Ridero

Введение

Тестирование является важной частью процесса разработки программного обеспечения, которая позволяет выявлять ошибки и дефекты в работе ПО. Каждый тестировщик должен иметь хорошие знания и навыки в области тестирования, чтобы обеспечить высокое качество продукта.

Данная книга является кратким справочником для тестировщиков, который поможет ознакомиться с основами тестирования, методами и инструментами тестирования, а также с процессом тест-планирования и тест-дизайна. Кроме того, в книге описаны особенности тестирования в Agile, приведен краткий обзор автоматизации тестирования и инструментов, обзор тестирования безопасности, производительности и особенностей тестирования мобильных и web приложений.

Книга написана на понятном языке, и ее структура позволяет быстро находить необходимую информацию. Надеюсь, что данный путеводитель будет полезен тем, кто начинает свой путь в тестировании программного обеспечения.

Основные термины и определения

 Тестирование (Testing): процесс проверки соответствия продукта его требованиям и ожиданиям пользователей.

 Тестировщик (Tester): специалист, занимающийся тестированием продукта, отвечающий за обнаружение дефектов и обеспечение качества продукта.

 Качество (Quality): свойство продукта, которое определяет его способность удовлетворять потребности и ожидания пользователей в соответствии с заданными требованиями и стандартами. Качество в тестировании связано с тем, насколько хорошо продукт соответствует его целям и требованиям, а также насколько эффективно он выполняет свои функции и задачи.

 Тест-план (Test Plan): документ, описывающий общий подход к тестированию продукта, содержащий информацию о целях, методах, ресурсах и расписании тестирования.

 Тестовый набор (Test Suite): группа связанных тест-кейсов, которые выполняются последовательно, чтобы проверить определенную функциональность продукта.

 Тестовый сценарий (Test Scenario): последовательность шагов, необходимых для проверки определенной функциональности продукта.

 Тест-кейс (Test Case): набор инструкций для проведения конкретного тестирования и проверки корректной работы определенного функционала продукта.

 Покрытие тестами (Test Coverage): процентное соотношение между количеством выполненных тестовых сценариев или тест-кейсов и общим количеством функциональности продукта, проверяемой в этих тестах.

 Дефект (Defect): отклонение от требований или ожиданий пользователей, обнаруженное в процессе тестирования.

 Баг (Bug): термин, используемый для обозначения дефекта или ошибки в работе программного обеспечения.

 Тестовое окружение (Test Environment): среда, в которой проводится тестирование продукта, включающая в себя программное и аппаратное обеспечение, настройки и конфигурации.

 Регрессионное тестирование (Regression Testing): процесс повторного тестирования уже протестированных функций или участков кода после внесения изменений, чтобы проверить, что изменения не привели к появлению новых дефектов.

 Автоматизированное тестирование (Automated Testing): процесс проведения тестирования с использованием специальных программных инструментов для автоматизации выполнения тестовых сценариев и тест-кейсов.

 Интеграционное тестирование (Integration Testing): процесс проверки работоспособности компонентов системы в совокупности, в том числе взаимодействия между ними.

 Юнит-тестирование (Unit Testing): процесс тестирования отдельных компонентов программного обеспечения (например, функций, классов), чтобы проверить их корректность и работоспособность.

 Тестирование производительности (Performance Testing): процесс тестирования, направленный на оценку работоспособности и производительности продукта, включая проверку его способности обрабатывать большое количество запросов и обеспечивать быстрый отклик.

 Тестирование безопасности (Security Testing): процесс тестирования, направленный на оценку уровня защищенности продукта от внешних угроз, таких как хакерские атаки, вирусы и т. д.

 Тестирование совместимости (Compatibility Testing): процесс тестирования, направленный на проверку работоспособности продукта в различных окружениях и на разных платформах.

 Тестирование пользовательского интерфейса (User Interface Testing): процесс тестирования, направленный на проверку корректности работы пользовательского интерфейса продукта, включая взаимодействие с пользователем и удобство использования.

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

Жизненный цикл разработки ПО

Жизненный цикл разработки ПО (Software Development Life Cycle, SDLC)  это процесс разработки ПО, который включает в себя различные фазы, начиная от анализа требований и заканчивая сопровождением и поддержкой ПО после его внедрения. Жизненный цикл разработки ПО обычно включает следующие основные фазы:

 Анализ требований: определение требований к ПО на основе потребностей заказчика и пользователей, описание функциональных и нефункциональных требований, создание спецификаций требований.

 Проектирование: разработка архитектуры ПО, создание диаграмм и схем, определение функциональности и интерфейсов.

 Разработка: создание кода ПО на основе заданных требований и дизайна, тестирование кода на соответствие требованиям.

 Тестирование: проверка работоспособности ПО на соответствие требованиям, выявление дефектов и ошибок в работе ПО, исправление и повторное тестирование.

 Внедрение: установка ПО на рабочие станции пользователей, настройка и интеграция с другими системами.

 Сопровождение и поддержка: обеспечение работоспособности ПО, исправление ошибок и дефектов, обновление ПО для улучшения его функциональности и совместимости с другими системами.

Важно отметить, что жизненный цикл разработки ПО может варьироваться в зависимости от методологии разработки (например, водопадной, Agile и т.д.) и конкретного проекта. Тестирование является важной частью жизненного цикла разработки ПО, и тестировщики должны уметь эффективно взаимодействовать с разработчиками и другими членами команды в каждой фазе процесса.

Основные постулаты тестирования

Постулаты тестирования  это основные принципы и подходы, которые лежат в основе тестирования программного обеспечения. Вот некоторые из главных постулатов тестирования:

 Полное тестирование невозможно: невозможно провести тестирование, которое охватит все возможные сценарии использования продукта. Поэтому тестировщики должны использовать свой опыт и знания, чтобы выбрать тестовые сценарии, которые наиболее вероятно приведут к проблемам.

 Дефекты накапливаются: в ходе тестирования всегда будут находиться новые дефекты, и количество дефектов может накапливаться со временем. Поэтому тестировщики должны непрерывно тестировать продукт и исправлять найденные проблемы.

 Тестирование не может доказать отсутствие ошибок: тестирование может показать наличие ошибок, но не может гарантировать, что их нет. Тестирование может улучшить качество продукта и уменьшить риск ошибок, но не может исключить их полностью.

 Тестирование зависит от контекста: каждый проект уникален, и контекст тестирования может сильно варьироваться. Тестирование должно учитывать требования и цели проекта, а также особенности окружения, в котором будет использоваться продукт.

 Безусловная вера в тестирование опасна: тестирование не является абсолютным инструментом для обнаружения всех дефектов. Поэтому необходимо использовать и другие методы контроля качества, например, код-ревью и анализ требований.

 Тестирование должно начинаться как можно раньше: тестирование должно начинаться с самого начала разработки продукта и должно включать тестирование на каждом этапе разработки. Это поможет обнаружить проблемы и ошибки раньше, когда они легче исправляются.

 Тестирование должно быть систематическим и документированным: тестирование должно проводиться систематически и документироваться, чтобы обеспечить повторяемость и воспроизводимость результатов тестирования. Это также помогает обеспечить качество продукта и улучшить процесс разработки.

Эти постулаты помогают тестировщикам ориентироваться в работе и сделать процесс тестирования более эффективным.

Классификация видов тестирования

Когда разработчики создают программное обеспечение (ПО), необходимо проводить тестирование, чтобы убедиться в правильной работе приложения и соответствии его функциональным и нефункциональным требованиям. Соответственно, существует два основных вида тестирования ПО: функциональное и нефункциональное.

Функциональное тестирование  это тестирование, которое направлено на то, чтобы убедиться в том, что ПО способно выполнять свои функции и соответствовать функциональным требованиям, установленным для него.

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

 Тестирование пользовательского интерфейса (UI Testing)  это процесс проверки интерфейса на соответствие заданным требованиям, таким как размер, шрифт, цвет и последовательность действий.

 Тестирование удобства использования (Usability Testing)  это метод проверки, который оценивает удобство использования, обучаемость, понятность и привлекательность продукта для пользователей в соответствии с контекстом использования. Он состоит из UX (User Experience), который описывает взаимодействие пользователя с продуктом, и UI (User Interface), который представляет собой инструмент для взаимодействия между пользователем и веб-ресурсом.

 Тестирование безопасности (Security Testing)  это стратегия, которая используется для проверки безопасности системы и анализа рисков, связанных с защитой приложения от атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным и другими видами угроз.

 Инсталляционное тестирование (Installation Testing)  это проверка успешной установки и настройки, обновления или удаления приложения на различных платформах.

 Конфигурационное тестирование (Configuration Testing)  это специальный вид тестирования, который проверяет работу программного обеспечения в разных конфигурациях системы, включая заявленные платформы, поддерживаемые драйверы и различные конфигурации компьютеров.

 Тестирование на отказ и восстановление (Failover and Recovery Testing)  это проверка, которая оценивает способность продукта успешно восстанавливаться после возникновения сбоев, связанных с ошибками программного обеспечения, отказами оборудования или проблемами связи.

 Тестирование локализации (Localization Testing)  это проверка адаптации программного обеспечения для определенной аудитории в соответствии с ее культурными особенностями, включая язык, формат даты и времени, валюту и т. д.

Однако виды тестирования можно классифицировать по различным параметрам. Например:

Классификация тестирования по позитивности сценария:

 Позитивное тестирование  использует только корректные данные для проверки правильности функций приложения.

 Негативное тестирование  использует как корректные, так и некорректные данные для проверки исключительных ситуаций и часто включает некорректные операции.

Классификация тестирования по знанию системы:

 Тестирование белого ящика (White Box)  тестирование ПО с полным доступом к коду проекта, при котором тестировщик знает внутреннюю структуру, устройство и реализацию системы.

 Тестирование серого ящика  метод тестирования ПО, который предполагает частичный доступ к коду проекта, объединяя в себе White Box и Black Box методы.

 Тестирование чёрного ящика (Black Box)  метод тестирования ПО, при котором тестировщик не имеет доступа к внутренней структуре и реализации системы, а основывается на работе с внешним интерфейсом тестируемой системы.

Классификация тестирования по исполнителям тестирования:

 Альфа-тестирование  ранняя версия программного продукта, которая тестируется внутри организации-разработчика, а также может привлекать конечных пользователей для частичного тестирования.

 Бета-тестирование  готовое или практически готовое ПО, которое выпускается для ограниченного числа пользователей для получения отзывов и реакции клиентов на продукт и внесения соответствующих изменений в ПО.

Классификация тестирования по уровню тестирования:

 Модульное (компонентное) тестирование  проводится разработчиками, чтобы проверить отдельные компоненты системы, такие как объекты, классы, функции и т. д. и выявить дефекты в коде.

 Интеграционное тестирование  направлено на проверку корректности взаимодействия между несколькими модулями системы, объединенными в единое целое.

 Системное тестирование  это проверка функциональных и не функциональных требований всей системы в целом, с целью выявления дефектов и оценки качества системы.

 Операционное тестирование  финальный шаг валидации, который проводится в среде эксплуатации для проверки соответствия системы потребностям пользователей и выявления нефункциональных проблем.

Классификация тестирования по исполнению кода:

 Статическое тестирование  это процесс проверки артефактов разработки (кода, документации) путем анализа без его фактического выполнения. Цель этого тестирования  выявить проблемы и ошибки на ранних стадиях разработки, чтобы избежать их в будущем.

 Динамическое тестирование  это проверка работы системы во время ее выполнения, т.е. с запуском программного кода и проверкой его результатов. Этот вид тестирования направлен на проверку функциональности и нахождение проблем, которые могут возникнуть в процессе выполнения.

Классификация тестирования по хронологии выполнения:

 Повторное/подтверждающее тестирование (re-testing/confirmation testing)  это тестирование, при котором запускаются тестовые сценарии, которые выявили ошибки в предыдущем тестовом цикле, с целью подтверждения того, что ошибки были успешно исправлены.

 Регрессионное тестирование (regression testing)  это тестирование, которое проводится после внесения изменений в код приложения, чтобы убедиться, что изменения не вызвали ошибок в неизмененных областях кода. Также проверяется, что исправление ошибок и любые изменения в коде приложения не повлияли на работу других модулей ПО и не вызвали новых ошибок.

 Приемочное тестирование  это проверка соответствия системы требованиям пользователя, бизнес-процессам и потребностям.

Дальше