Тестирование программного обеспечения — это процесс проверки программы на соответствие требованиям и поиск ошибок. Существует множество видов тестирования, которые можно классифицировать по разным признакам.
Давайте начнём по порядку.
✅Классификация системы по запуску кода на исполнение
Тестирование программного обеспечения может начинаться ещё до того, как продукт будет запущен и начнёт работать. И даже до того, как будет написан код приложения. Важно понимать, что именно подвергается проверке: функционирующее приложение (исполняемый код), требования к нему, документация или строки кода, написанные в среде разработки. В зависимости от объекта тестирования выделяют различные виды проверок.
🟢Статическое тестирование — это проверка программного обеспечения без запуска кода на исполнение. Этот вид тестирования включает в себя анализ исходного кода, документации и других материалов, связанных с разработкой программного обеспечения. Статическое тестирование позволяет выявить ошибки на ранних этапах разработки, когда их исправление обходится дешевле.
Статическое тестирование включает в себя следующие методы:
- Обзоры (Review) — это процесс проверки исходного кода, документации и других материалов на предмет соответствия требованиям и стандартам. Обзоры могут проводиться как неформально, так и формально, с использованием определённых методик.
- Статический анализ — это процесс анализа исходного кода с использованием инструментов статического анализа. Инструменты статического анализа проверяют код на наличие ошибок, несоответствий стандартам и других проблем.
Этот тип тестирования включает в себя проверку:
- документации (требований, схем баз данных, тест-кейсов);
- программного кода (его анализ специалистом, который не участвовал в написании или модификации кода, известный как аудит кода или code review);
- настроек среды приложения;
- подготовленных тестовых данных (например, параметров запросов для проверки ответов сервера);
- макетов пользовательского интерфейса.
🟢Динамическое тестирование — это проверка программного обеспечения с запуском кода на исполнение. Этот вид тестирования позволяет проверить работу программы в реальном времени и выявить ошибки, которые невозможно обнаружить при статическом тестировании.
Динамическое тестирование включает в себя следующие методы:
- Модульное тестирование — это проверка отдельных модулей программы. Модульное тестирование проводится на ранних этапах разработки, когда модули ещё не интегрированы в систему.
- Интеграционное тестирование — это проверка взаимодействия между модулями. Интеграционное тестирование проводится после модульного тестирования, когда модули уже интегрированы в систему.
- Системное тестирование — это проверка всей системы в целом. Системное тестирование проводится после интеграционного тестирования, когда система уже готова к выпуску.
✅Классификация по доступу к коду и архитектуре приложения.
🟢Тестирование белого ящика (White Box Testing) — это метод тестирования, основанный на анализе внутренней структуры компонента или системы и на знании исходного кода. Тестировщик, проводящий тестирование белого ящика, имеет полный доступ к исходному коду приложения.
Для проведения такого тестирования необходимо хорошо знать язык программирования, на котором написано приложение. Поэтому чаще всего этот вид тестирования применяют разработчики либо высококвалифицированные тестировщики. Они могут проводить проверку кода коллег (code review) либо использовать специальные инструменты создания тестов для автоматизации тестирования кода.
Примеры тестирования белого ящика включают:
- Анализ потока управления: Проверка всех возможных путей выполнения кода, включая циклы и условия, для выявления потенциальных ошибок.
- Анализ потока данных: Исследование передачи данных между переменными и функциями для обнаружения ошибок в использовании и изменении значений переменных.
- Покрытие кода: Определение процента кода, который был выполнен во время тестирования, для оценки полноты тестирования.
- Тестирование ветвей: Проверка всех возможных условий и вариантов выполнения кода, включая условия if, else и switch.
- Тестирование циклов: Проверка корректности работы циклов, включая граничные условия и условия выхода из цикла.
- Тестирование обработки исключений: Проверка того, как программа обрабатывает исключительные ситуации, такие как деление на ноль или нехватка памяти.
- Тестирование безопасности: Проверка наличия уязвимостей в коде, которые могут быть использованы злоумышленниками для несанкционированного доступа к системе.
🟢Тестирование чёрного ящика (black box testing) — это метод тестирования программного обеспечения, при котором тестировщик не имеет доступа к исходному коду приложения. Тестирование проводится на основе требований и спецификаций, без знания внутренней структуры программы.
Цель тестирования чёрного ящика — проверить, соответствует ли поведение программы заявленным требованиям. Тестировщик подаёт на вход различные наборы данных и проверяет, соответствуют ли полученные результаты ожидаемым.
Примерами тестирования чёрного ящика являются:
- функциональное тестирование — проверка соответствия функций программы требованиям;
- тестирование безопасности — проверка устойчивости программы к атакам;
- тестирование удобства использования — оценка удобства интерфейса программы для пользователя.
🟢Тестирование серого ящика (gray box testing) — это метод тестирования программного обеспечения, который сочетает в себе элементы тестирования чёрного и белого ящиков. Тестировщик имеет частичный доступ к исходному коду приложения, что позволяет ему создавать тесты, основанные на понимании внутренней структуры программы, но при этом тестирование проводится без полного доступа к исходному коду, как при тестировании белого ящика.
Тестирование серого ящика позволяет тестировать программу, используя знания о её внутренней структуре, но при этом сохраняя объективность, характерную для тестирования чёрного ящика. Этот метод особенно полезен при тестировании сложных программных систем, где важно одновременно учитывать как функциональность, так и внутреннюю структуру.
Примеры тестирования серого ящика включают:
- Тестирование API: проверка правильности работы интерфейсов прикладного программирования (API), используемых приложением.
- Тестирование интеграции: проверка корректности взаимодействия между различными модулями или системами.
- Тестирование производительности: оценка скорости работы приложения и потребления ресурсов.
- Тестирование безопасности: проверка устойчивости приложения к различным видам атак.
Термин «тестирование серого ящика» иногда ошибочно трактуют как сочетание подходов белого и чёрного ящиков (когда у тестировщика есть доступ к определённой части кода и архитектуры, а к другой — нет). Однако если специалист владеет языком программирования и способен анализировать код, то не имеет значения, смотрит ли он весь код или только его часть — в любом случае это будет тестирование белым ящиком.
Суть подхода серого ящика заключается в том, что тестировщик работает не с самим кодом приложения, а с его внутренней структурой. Например, он может проверять, как происходит запись данных в базу, как они записываются в лог-файлы, а также корректность кодов ответа от сервера.
Пример тестирования серым ящиком — использование инструментов разработчика при тестировании веб-приложений, таких как DevTools в Google Chrome (запуск через сочетание клавиш Ctrl+Shift+I).
✅Классификация по уровню детализации приложения.
По данной теме есть отдельная статья:
Классификация видов тестирования по уровню детализации приложения включает следующие основные типы:
- Модульное (компонентное) тестирование (Unit Testing) – проверка отдельных компонентов или модулей приложения, чтобы убедиться, что каждый из них работает корректно. Это самый низкий уровень детализации, направленный на тестирование отдельных функций, классов или библиотек.
- Интеграционное тестирование (Integration Testing) – проверка взаимодействия между различными модулями или компонентами приложения. Цель – убедиться, что модули работают вместе корректно, без конфликтов и ошибок.
- Системное тестирование (System Testing) – проверка всего приложения как единого целого. Включает в себя тестирование функциональности, производительности, безопасности и удобства использования приложения. Это самый высокий уровень детализации, охватывающий все аспекты работы системы.
- Приёмочное тестирование (Acceptance Testing) — это финальный этап тестирования, на котором проверяется соответствие готового продукта требованиям заказчика. Оно проводится непосредственно перед выпуском продукта на рынок или передачей его заказчику.
✅Классификация по степени автоматизации
Классификация видов тестирования по степени автоматизации включает два основных типа:
- Ручное тестирование (Manual Testing) – процесс тестирования, выполняемый человеком без использования каких-либо автоматических инструментов. Тестировщик вручную выполняет тестовые сценарии, проверяя функциональность, производительность, безопасность и другие аспекты приложения. Этот вид тестирования требует значительных временных затрат, но позволяет глубоко погрузиться в процесс тестирования и выявить сложные дефекты.
- Автоматизированное тестирование (Automated Testing) – использование специализированных инструментов и скриптов для выполнения тестовых сценариев. Автоматизация позволяет ускорить процесс тестирования, снизить вероятность человеческих ошибок и обеспечить повторяемость тестов. Автоматизированные тесты могут быть написаны на различных языках программирования, таких как Java, Python, C#, и интегрированы с системами управления версиями и баг-трекерами.
Несмотря на то, что автоматизированное тестирование может значительно ускорить процесс проверки качества продукта, участие человека в нём по-прежнему остаётся важным.
Для создания автоматизированных тестов необходимо разработать тестовые сценарии, подготовить тестовые данные и написать код на подходящем языке программирования. Затем с помощью специальных инструментов запускаются тесты, а результаты их выполнения анализируются и оформляются в виде отчётов об ошибках.
Решение о внедрении автоматизированного тестирования на проекте принимается с учётом специфики разработки, её продолжительности и технической сложности, а также уровня компетентности специалистов по тестированию.
Основные преимущества автоматизированного тестирования включают высокую скорость выполнения тестов, исключение человеческого фактора (например, усталости или невнимательности) и возможность выполнения действий, недоступных человеку из-за их сложности, скорости или других ограничений (например, одновременная отправка множества запросов с разными параметрами).
Однако у автоматизированного тестирования есть и недостатки:
- сложность разработки и поддержки автоматизированных тестовых сценариев;
- необходимость высокой квалификации специалистов по тестированию и глубокого понимания работы тестируемой системы;
- необходимость переработки или повторного создания значительной части автоматизированных тестов при внесении значительных изменений в процесс разработки или требования к системе.
Отдельно стоит упомянуть полуавтоматизированное тестирование (semi-automated testing), которое представляет собой ручное тестирование с использованием средств автоматизации. Например, это могут быть скрипты для автоматического заполнения базы данных записями справочников, документами, задачами, пользователями или для создания документов определённого размера.
В следующей статье мы продолжим изучать виды тестирования!
Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!