Рассказываем, для чего вообще тестируют программы, как происходит этот процесс, сколько всего видов тестирования и в чем особенность каждого из них.
В написании статьи принял участие Ирек Насибуллин, Ростелеком ИТ Automation QA
Когда программисты создают новое приложение или вносят изменения в существующее, они могут допускать ошибки. Тестирование помогает выявить эти проблемы и убедиться, что приложение работает так, как задумано.
Тестирование — это проверка программного обеспечения, которая показывает, соответствует ли оно ожиданиям разработчиков и правильно ли работает.
Тестирование проводят тестировщики — они отвечают за обеспечение качества, контролируют его и проверяют, что продукт соответствует всем заданным требованиям.
Процесс работы над продуктом включает в себя множество этапов: от проработки идеи и расчета эффективности до самой разработки и выпуска. И в этом процессе участвует множество людей: аналитики, руководители проекта, разработчики, дизайнеры.
Представьте, что все эти люди объединяются, чтобы создать какой-то продукт. Они разрабатывают его, выкатывают на прод. А позже пользователи вдруг выясняют, что где-то в продукте есть баги. В результате команде придется заново его прорабатывать, что стоит немалых денег и времени, да и репутация продукта на рынке будет испорчена.
Устранить ошибки можно заранее, доверив эту работу тестировщикам. Они должны участвовать во всем цикле создания программного обеспечения: от появления требований к проекту до момента сопровождения самого ПО.
Как правило, в большинстве проектов этапы тестирования схожи. Давайте по очереди их разберем.
На этом этапе тестировщики внимательно изучают требования продукта — это могут быть документы, спецификации, описание того, как пользователь взаимодействует с продуктом (по-другому это называют пользовательскими сценариями). Четкое понимание требований помогает определить области, которые нужно протестировать.
Анализ требований позволяет выяснить, какие возможные риски или сложности могут возникнуть при тестировании. Также на этом этапе можно выявить возможные несоответствия или недостаточно ясные требования, которые требуют уточнения у разработчиков или заказчика.
Когда все требования к продукту понятны, остается разработать план тестирования. В него входит:
Читайте также: Гид по профессии тестировщик: чем занимается специалист в сфере QA, сколько зарабатывает и что надо знать
На этом этапе на основе требований и анализа тестировщики создают тестовые случаи, тест-планы, отчетность и другую документацию, которая будет использоваться во время тестирования. Тестовая документация определяет, какие тесты будут проведены, как будут собраны результаты и как будет оценено качество ПО.
После того как команда утверждает стратегию тестирования и тестовую документацию, проводится тестирование. Тестирование программного обеспечения — это длительный и обширный процесс. По ходу составляются отчеты о выявленных недостатках, проводится набор тестовых сценариев, создается тестовая среда и выполняется тестирование согласно заранее задокументированным видам тестов, описанным в тестовой документации.
Важно понимать, что найти все ошибки в продукте невозможно. Главная цель заключается не в создании идеального продукта без ошибок, а в обнаружении максимального числа дефектов, которые могут потенциально повлиять на работу системы.
После того как разработчики устраняют дефекты и выпускают продукт, тестировщик переходит к тестированию продукта в рабочей среде. Важно отметить, что на этом этапе не только происходит релиз продукта, но и начинается пост-релизовая поддержка.
Невозможно предусмотреть все особенности использования и окружение, в котором будет работать продукт. Поэтому на данном этапе акцент делается на обратной связи пользователей. Теперь они становятся главными тестировщиками, а продукт становится частью их повседневной жизни. Устранение дефектов и поиск ошибок проводится быстро, но тщательно.
Читайте также: Какие навыки нужны тестировщику и как им стать
В своей работе тестировщики используют различные виды и методы тестирования, а также прорабатывают сценарии, в которых продукт может оказаться. Есть много способов тестирования, по разным оценкам в среднем их больше 30.
Выбор способов зависит от программного продукта, требований заказчиков и самой команды, которая разрабатывает продукт. Происходит это на этапе разработки стратегии и планов тестирования: заказчик или его представитель — владелец продукта или проджект-менеджер — включает в план тот или иной вид тестирования.
Далее к проекту привлекают тестировщиков, которые специализируются на выбранном методе тестирования. Существуют фулстек-тестировщики, которые умеют применять в проекте все виды тестирования. Но чаще всего компании выбирают более узкоспециализированных специалистов — как правило, их знания глубже в каком-то одном из способов. И также компании выбирают тестировщиков под сами требования проекта.
Каждый из видов тестирования направлен на проверку различных аспектов программного обеспечения. Условно их можно разделить на шесть групп — давайте их рассмотрим. А чтобы разобраться в видах тестирования было проще, объясним их принцип на примере обычной шариковой ручки.
Сценарий в тестировании — это описание того, как пользователь будет взаимодействовать с готовым продуктом. В эту группу входят два вида тестирования: позитивных сценариев и негативных.
Тестирование позитивных сценариев проверяет, как должна работать программа в нормальных условиях. Например, если это веб-приложение, тестирование позитивных сценариев проверит, что пользователь может успешно зарегистрироваться, войти в систему и без проблем использовать основные функции.
Тестирование негативных сценариев проверяет, как программа ведет себя в необычных или некорректных ситуациях. Такие сценарии показывают, что программа корректно обрабатывает ошибки и не позволяет пользователю выполнить действия, которые не предполагаются в нормальной работе приложения. Возвращаясь к веб-приложению: тестирование негативных сценариев может включать проверку того, что система правильно обрабатывает неправильный ввод данных или отказывается выполнять определенные действия в некорректных условиях.
Критерии запуска программы или кода означают условия, которые необходимо выполнить для запуска тестов. То есть для тестирования необходимо, либо чтобы программа была запущена, либо, наоборот, не запущена. Под эту группу подходит статическое тестирование и динамическое тестирование.
Статическое тестирование — это вид проверки программного обеспечения, который выполняется без запуска программы. Вместо этого тестировщики анализируют исходный код программы или другие составляющие, например, документацию. Динамическое тестирование — это вид проверки программного обеспечения, который выполняется во время работы программы.
Ручное тестирование — это проверка программного обеспечения вручную, без использования автоматизированных инструментов. Тестировщик взаимодействует с программой как обычный пользователь.
В ходе ручного тестирования тестировщик выполняет различные сценарии использования и тестовые сценарии, вводит данные, наблюдает за результатами и проверяет, нет ли ошибок или неожиданного поведения. Если обнаруживаются проблемы, тестировщик документирует их, чтобы разработчики могли исправить ошибки.
Ручное тестирование позволяет проверить различные аспекты программы: удобство использования, внешний интерфейс, а также воспроизводить нестандартные ситуации, которые может быть сложно автоматизировать.
Читайте также: Чем занимается ручной тестировщик
Автоматизированное тестирование — это проверка программного обеспечения с использованием специальных программных инструментов, которые выполняют тесты автоматически, без участия человека. Тестировщик создает скрипты или сценарии тестирования, которые содержат инструкции для выполнения определенных действий и проверки результатов.
Эти сценарии запускаются на специальных инструментах для автоматизации тестирования, которые эмулируют действия пользователя и анализируют результаты выполнения.
Автоматизированные тесты могут проверить функциональность, производительность, совместимость и другие аспекты программного обеспечения. Основные преимущества автоматизированного тестирования включают повышение скорости выполнения тестов, повторяемость, возможность тестирования большого объема данных и экономию времени и ресурсов на проверку повторяющихся сценариев.
Эта группа объединяет в себе виды, которые предполагают определение того, какие части программы или системы подвергаются тестированию.
Функциональное тестирование проверяет соответствие программы или системы заранее определенным функциональным требованиям и ожиданиям. Основная цель функционального тестирования — убедиться, что программа выполняет свои функции и операции согласно спецификациям, а также работает правильно и без сбоев.
Во время функционального тестирования тестируются различные сценарии использования, входные данные и выходные результаты, чтобы удостовериться в правильности работы приложения.
Функциональное тестирование делится на подвиды:
Нефункциональное тестирование проверяет нефункциональные аспекты программы — производительность, безопасность, надежность, масштабируемость и совместимость. Основная цель нефункционального тестирования — убедиться, что программа не только выполняет свои функции, но также соответствует требованиям к качеству, производительности и безопасности.
Нефункциональное тестирование часто охватывает атрибуты программы, которые не всегда видны конечному пользователю, но критически важны для обеспечения стабильной и надежной работы приложения.
Читайте также: Я знал, что быть тестировщиком — мое призвание: история Кирилла Куртова
Нефункциональное тестирование делится на подвиды:
Эта группа объединяет в себе виды, которые используются в зависимости от этого, насколько тестировщик знаком с тестируемым продуктом.
Тестирование «черного ящика» — это способ проверки программного обеспечения, когда тестировщик не знает внутренней структуры или деталей работы самой программы. Он смотрит на нее как на «черный ящик», и проверяет, как система взаимодействует с внешним миром и выполняет свои функции.
Такой подход позволяет сосредоточиться на тестировании того, как программа взаимодействует с пользователем и окружающей средой, не вдаваясь в детали ее внутренней реализации.
Тестирование «белого ящика», наоборот, предполагает, что тестировщик имеет доступ к внутренней структуре и коду программы. Он изучает, как работает программа «изнутри», чтобы убедиться, что все компоненты и функции написаны правильно и соответствуют требованиям.
Такой подход позволяет проверить детали реализации программы и выявить возможные ошибки, которые могли бы остаться незамеченными при тестировании «черного ящика».
Существует еще и тестирование «серого ящика» — это комбинация тестирования «черного ящика» и «белого ящика». Тестировщик знает некоторые детали внутренней структуры программы, но не обладает полной информацией о них. Он проверяет как внешнее поведение программы, так и использует некоторые знания о коде для определения эффективности и корректности работы программы.
Этот подход позволяет объединить преимущества обоих типов тестирования и обеспечить более полное и всестороннее тестирование программного обеспечения.
Под группу «по степени знания системы» также подходит еще несколько видов тестирования:
В эту группу попадают виды тестирования, которое проводят в разные моменты разработки продукта: например, до выкатки на прод и после. Расположим эти виды в том порядке, в каком их проводят до официального выпуска продукта.
Тестировщики играют важную роль в разработке программного обеспечения, проверяя его на ошибки и убеждаясь, что оно работает правильно. Они создают и выполняют разнообразные тестовые сценарии, проверяя функциональность и надежность продукта.
Чтобы протестировать продукт, сначала нужно изучить его требования, проанализировать их. Позже заказчик (как правило) разрабатывает стратегию и план будущего тестирования, выбирает методы тестирования, которые будут применяться. И в зависимости от выбранного способа решает, тестировщик с какой специализацией необходим проекту. Далее создается тестовая документация и проводится само тестирование.
В зависимости от того, какой продукт нужно проверить и какие ресурсы есть, тестировщики используют разные подходы. Мы разделили виды тестирования на шесть групп:
Выбор своей специализации в тестировании зависит от интересов, навыков и опыта. Изучайте разные типы тестирования, определите, какой метод подходит вам больше всего, а затем обучитесь и получите реальный опыт. А еще помните про девиз любого тестировщика: важно проводить такие тесты, которые позволят проверить функциональность и найти все проблемы, чтобы продукт был полезен и удобен для пользователей.