Тестирование не всегда предполагает взаимодействие с работающим приложением. Отсюда и классификация тестирования по запуску кода на исполнителя.
По критерию запуска программы (исполняется ли программный код) выделяют 2 вида тестирования: статическое и динамическое.
Статическое тестирование
Статическое тестирование (static testing) — тестирование без запуска кода на исполнение.
Оно представляет собой процесс или технику, которые выполняются для поиска потенциальных дефектов в программном обеспечении. Это также процесс обнаружения и устранения ошибок и дефектов в различных сопроводительных документах (например, спецификации требований к программному обеспечению).
Статическое тестирование начинается на ранних этапах жизненного цикла ПО и является, соответственно, частью процесса верификации.
Можно поделить статическое тестирование на 2 типа:
1. Обзоры (Review)
2. Статический анализ (Static Analysis)
Обзоры
Обзоры (Review) – проверка обычно используется для поиска и устранения ошибок или неясностей в документах. Это могут быть требования, дизайн, тестовые случаи и так далее.
В свою очередь обзоры делятся на:
- Неформальные. При неофициальном рассмотрении создатель документов показывает содержание документов аудитории. Каждый присутствующий высказывает свое мнение, что позволяет выявить недостатки на ранней стадии.
- Сквозные просмотры (Walkthroughs). Выполняются опытным человеком или экспертом для проверки отсутствия дефектов, с целью предупреждения возникновения проблем на этапе разработки или тестирования.
- Экспертная оценка. Означает проверку документов для выявления и исправления дефектов. В основном это делается в команде.
- Инспектирование ПО. Это, в большинстве, проверка документа вышестоящим органом, например, проверка требований к программному обеспечению.
Статический анализ
Статический анализ (Static Analysis) – код, написанный разработчиками, анализируется на наличие структурных дефектов, которые могут привести к ошибкам.
Статический анализ включает оценку качества кода, написанного разработчиками. Для анализа кода и сравнения его со стандартом используются разные инструменты. Статический анализ хорошо помогает найти такие ошибки, как:
— неиспользуемые переменные,
— мертвый код,
— бесконечные циклы,
— переменные с неопределенными значениями,
— неправильный синтаксис.
Статический анализ состоит из 3-х частей:
- Поток данных.
- Контроль потока (как выполняются операторы или инструкции).
- Цикломатическая сложность (измерение сложности программы, которое в основном связано с количеством независимых путей в графе потоков управления программы).
Анализ может производится как вручную, так и с помощью специальных инструментов. Например, можно использовать автоматические средства проверки синтаксиса программного кода.
Целью анализа является наиболее раннее выявление ошибок и потенциальных проблем в программном продукте. Как правило, код ревью выполняется самим разработчиком.
Примерами ошибок, которые потенциально можно выявить с помощью автоматического статического тестирования, могут быть:
— утечки ресурсов (утечки памяти, неосвобождаемые файловые дескрипторы и т.д.),
— возможность переполнения буфера (buffer overflows),
— ситуации частичной (неполной) обработки ошибок.
Как правило, результатом автоматического анализа кода является список рекомендаций для ручного review некоторых участков кода, потенциально содержащих ошибки.
В рамках этого подхода тестированию могут подвергаться:
- Документы (требования, тест-кейсы, описания архитектуры приложения, схемы баз данных и т.д.).
- Графические прототипы (например, эскизы пользовательского интерфейса).
- Код приложения (что часто выполняется самими программистами в рамках аудита кода (code review), являющегося специфической вариацией взаимного просмотра в применении к исходному коду). Код приложения также можно проверять с использованием техник тестирования на основе структур кода.
- Параметры (настройки) среды исполнения приложения.
- Подготовленные тестовые данные.
Плюсы и минусы
Преимущества статического тестирования
- Снижает стоимость фикса найденных багов, поскольку выявляет баги на ранних этапах цикла разработки программного обеспечения.
- Отзывы, полученные в ходе этого тестирования, помогают улучшить функционирование процесса, что также помогает команде избежать подобных дефектов и багов.
- Повышает информированность о различных проблемах качества программного обеспечения.
- Улучшает обмен критической и важной информацией между членами команды.
- Существенно сокращаются усилия по исправлению ошибок, что еще больше способствует продуктивности разработки.
Недостатки статического тестирования
- Процесс статического тестирования может занимать много времени, так как в основном он выполняется вручную.
- Препятствует обнаружению уязвимостей, представленных в среде выполнения.
Динамическое тестирование
Динамическое тестирование (dynamic testing) — тестирование с запуском кода на исполнение. Запускаться на исполнение может как код всего приложения целиком (системное тестирование), так и код нескольких взаимосвязанных частей (интеграционное тестирование), отдельных частей (модульное или компонентное тестирование) и даже отдельные участки кода.
Основная идея этого вида тестирования состоит в том, что проверяется реальное поведение (части) приложения.
Проще говоря, динамическое тестирование выполняется путем фактического использования приложения и определения того, работает ли функциональность так, как ожидается.
Динамическое тестирование включает в себя тестирование ПО в режиме реального времени путем предоставления входных данных и изучения результата поведения программы. Проверка осуществляется с помощью ручного или автоматического выполнения заранее подготовленного набора тестов. Оно является частью процесса валидации программного обеспечения.
То есть любое тестирование, в котором мы начинаем взаимодействовать с приложением, является динамическим. Например, проверка авторизации на сайте, запуск приложения, посадка деревьев, смена оружия и многое другое. Наша задача — посмотреть, как продукт реагирует на наши действия. Для этого мы вводим все необходимые условия и смотрим результат.
Если рассмотреть функции, предлагаемые динамическим тестированием, можно легко понять причины его выполнения в течение жизненного цикла тестирования программного обеспечения. С помощью этого тестирования можно проверить различные критические аспекты программного обеспечения. Если оставить их без какой-либо оценки, они могут повлиять на производительность, функционирование, а также надежность программного продукта.
Плюсы и минусы
Преимущества динамического тестирования
- Это тщательное исследование, которое рассматривает всю функциональность приложения, поэтому качество соответствует самым высоким стандартам.
- Процесс динамического тестирования хорошо налажен, приложение тестируется с точки зрения пользователя, что повышает качество ПО.
- Обнаружение сложных ошибок, которые могли ускользнуть на этапе анализа кода.
- Динамическое тестирование может быть автоматизировано с помощью специальных инструментов.
Недостатки динамического тестирования
- Поскольку динамическое тестирование представляет собой сложный процесс, оно занимает много времени.
- Высокая стоимость проведения тестирования.
- Динамическое тестирование обычно выполняется после завершения кодирования, и найденные баги обнаруживаются позже в жизненном цикле разработки.
Сравнение
Статическое тестирование требует много времени на бурные дискуссии и встречи. Однако оно помогает предотвращать появления дефектов на последних этапах разработки продукта. Поэтому статическое тестирование по праву считается важным шагом на пути к разработке ПО без ошибок.
Но и динамическое тестирование не менее важно. Благодаря непосредственному выполнению тестов программного обеспечения (проверки функционального поведения, производительности, надежности и других важных аспектов) команда может проверить и подтвердить качество и эффективность ПО.