logo
Ещё

Этапы и виды тестирования

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

Определение

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

Важно сразу отметить отличие тестировщика от QA-инженера (аббревиатура QA расшифровывается как Quality Assurance, что означает «обеспечение качества»). Их часто путают по вполне понятным причинам. Оба специалиста очень востребованы, их работа в некоторой степени пересекается, к тому же они решают схожую задачу – добиться отсутствия в программе ошибок.

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

QA-специалист (или инженер – оба названия используются одинаково часто) присутствует в команде разработчиков с самого начала. Его основная функция – постараться не допустить появления ошибок. За счет разработки и применения стандартов программирования, использования более эффективных инструментом создания кода и т.д.

Именно поэтому тестировщиков чаще называют QC-инженерами. Аббревиатура означает Quality Control, что переводится как «контроль качества». Что намного ближе к проверке и заметно точнее отражает характер работы данного IT-специалиста.

Зачем и кому оно необходимо

Тестирование выступает одним из важных и обязательных этапов разработки ПО. Без которого рассчитывать на получение качественного конечного программного продукта попросту не приходится.

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

Важность тестирования программ и сервисов

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

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

Одновременно заметно возрастает риск ошибок или, как их принято называть применительно к программированию, багов. Устранение возможных проблем до запуска программы на рынок – ключевая задача тестирования и привлеченных для его осуществления тестировщиков.

Для большей наглядности имеет смысл привести несколько типичных примеров программных багов. С которыми, наверное, сталкивался всякий более-менее опытный пользователь. В их числе:

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

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

Принципы тестирования

На практике применяется несколько подходов к тестированию и QA-контролю. Самый популярный и широко распространенный строится на 7 принципах тестирования, в число которых входят такие:

  1. Тестирование выявляет проблемы, но не гарантирует их полного отсутствия. То есть обнаружить все баги, скорее всего, не получится.
  2. 100%-ного результата тестирование не дает. Логическое продолжение предыдущего принципа. Заключается в том, что всегда существует вероятность таких действий пользователя, которые приведут к сбою.
  3. Чем раньше начать тестирование, тем лучшего результата удастся добиться. Именно поэтому эффективнее всего привлекать QA-инженера к разработке ПО с самого начала. Он определит, когда имеет смысл включить в команду тестировщика.
  4. Проблемы программного обеспечения подвержены правилу кластеризации. То есть большая часть сбоев (80%) обычно содержится в небольшом участке кода (20%) – цифры приведены в соответствии с хорошо известным законом Парето.
  5. Эффективность тестирования постепенно снижается, что становится следствием парадокса пестицида. Он гласит, что регулярное повторение одинаковых сценариев дает на выходе все меньший КПД. Поэтому целесообразно периодически менять и обновлять используемые тесты и другие инструменты проверки.
  6. Контекст всегда актуален. Что означает важность учета специфики и предназначения программы при выборе оптимальных инструментов и методов тестирования.
  7. Частое заблуждение тестировщика – отсутствие багов в программе. Оно способно привести к очень негативным последствиям в виде выхода на рынок «сырого» программного продукта.

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

Виды тестирования

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

По объекту тестирования

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

Функциональное

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

Существует несколько подвидов функционального тестирования, в числе которых:

  1. Модельное или Unit-тестирование. Осуществляется еще на этапе разработки программного кода. Предусматривает проверку отдельных компонентов программы.
  2. Интеграционное. Тестируются взаимосвязи частей программного кода между собой.
  3. Системное или End-to-End-тестирование. На этой стадии проверяется вся программа в целом.
  4. Приемочное. Итоговая проверка практически готового программного продукта перед выходом на рынок или передачей заказчику.

Нефункциональное

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

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

Можно выделить несколько подвидов нефункционального тестирования:

  1. Нагрузочное. Программа проверяется на производительность под большой нагрузкой. Как с точки зрения количества пользователей, так и объема выполняемых операций.
  2. На проникновение. В этом случае проверка касается безопасности ПО в плане способности противостоять кибератакам или попыткам получения несанкционированного доступа.
  3. На совместимость. Качественная программа должна одинаково эффективно работать на всех платформах, устройствах и браузерах, для которых предназначена.
  4. Стрессовое. Дополняет нагрузочное тестирование посредством дополнительной проверки работы программы в различных ситуациях, включая нештатные.
  5. На отказоустойчивость. Целью тестировщика становится определение возможности ПО противостоять сбоям в работе внешних устройств и программ, например, сервера или персонального компьютера. Оптимальной реакцией программного продукта выступает сохранение максимального объема данных и отсутствие повреждений.
  6. Интерфейса. Объектом проверки становится интерфейс и правильность его работы.
  7. На восстановление. Дополняет тестирование на отказоустойчивость. Проверяет, как быстро восстанавливается работа программы после внешнего сбоя.

По характеру сценариев

Под сценарием в тестировании понимается способ взаимодействия пользователя с программным продуктом. Принято выделять два возможных варианта – позитивный и негативный. Рассмотрим более внимательно каждый из них как самостоятельный вид тестирования.

Позитивное

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

Негативное

В этом случае проверяется работа программы в нештатной ситуации. Она может быть вызвана некорректными действиями пользователя, внутренним или внешним сбоем, другими причинами. Главной задачей ПО в этом случае становится корректная обработка ошибки в виде возврата нормальное работе приложения/сайта или выдаче пользователю рекомендаций по устранению и проблемы.

По запуску ПО

Современные методы и инструменты тестирования допускают два возможных варианта проверки. Один предусматривает выполнение программного кода, другой – обходится без этого. Оба заслуживают внимания, так как органично дополняют друг друга.

Статическое

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

Динамическое

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

По уровню автоматизации

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

Ручное

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

Автоматизированное

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

По уровню знания ПО

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

«Черный ящик»

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

«Белый ящик»

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

Мероприятие является намного более трудоемким, так как включает как проверку по схеме «черного ящика», так и множество дополнительных действий, связанных с изучением и тестированием «внутренностей» ПО.

«Серый ящик»

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

По документации (формальное)

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

Интуитивное

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

По времени проведения проверки

Как было отмечено выше, в большинстве случаев тестирование проводится в отношении более-менее готового программного продукта. Но даже при таком подходе речь идет о разных временных этапах разработка ПО. Поэтому критерий времени проведения позволяет выделить несколько видов тестирования.

Альфа-тестирование

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

Дымовое

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

Регрессионное

Проводится в отношении измененной в результате обновления или доработки программы, но проверка распространяется на «старые» участка кода. Целью ее становится обнаружение проблем, которые могут быть вызваны сделанными изменениями и нарушить то, что исправно работало ранее.

Приемочное

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

Бета-тестирование

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

Этапы тестирования

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

  1. Анализ исходных данных. Предусматривает изучение технического задания и требований, которые предъявляются к конечному программному продукту. Оптимальным считается привлечение тестировщика или QA-инженера на этапе разработки и согласования ТЗ.
  2. Разработка плана тестирования. Включает составление стратегии, на основании которой осуществляется планирование. Перечень необходимых мероприятий и глубина их проработки зависят от масштабности разрабатываемого программного обеспечения.
  3. Разработка и/или отбор тестов. Допускается как использование готовых шаблонов, так и создание новых сценариев тестирования. Важной частью работы становится формирование наборов тестовых данных.
  4. Непосредственное проведение тестов. Проверка выполняется в соответствии с разработанным и утвержденным ранее планом. Лучшим и самым правильным подходом решению задачи становится комплексная работа по календарному графику. Что становится особенно актуальным для крупных проектов, где согласованная деятельность всей команды всегда выходит на первый план.
  5. Составление отчетов. Результаты тестирования представляют собой перечень обнаруженных ошибок и иной информации, полученное при проведении проверки (например, в виде показателей производительности и других подобных параметров). Крайне желательно включать в отчет рекомендации тестировщиков, что особенно ценится, если речь идет о грамотных и опытных IT-специалистах.
  6. Анализ результатов. Нередко тестировщиков привлекают к исправлению выявленных багов. В этом случае специалисты работают вместе с программистами (нередко – еще и с представителями заказчика). Такой подход к оптимизации программного продукта считается самым эффективным.
  7. Повторное проведение тестов. На этом этапе проверки особое внимание уделяется тем местам кода и сторонам приложения, где ранее были диагностированы проблемы. В обязательном порядке проводится регрессионное тестирование (проверяет те участки кода, которые работали исправно, на предмет возможных дефектов от внесенных изменений).
  8. Завершение тестирование. Представляет собой формальный этап, на которой проводится архивирование данных, составляется необходимая сопроводительная документация, при необходимости – осуществляется оплата выполненных работ.

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

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

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

Инструменты тестирования

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

  1. Документация. База для успешного проведения проверки. Включает план тестирования, чек-листы (перечень критериев или вопросов), тест-кейсы (подробная инструкция для тестировщика о проведении теста), баг-репорты (описание дефектов), отчеты (обобщенная информация о полученных результатах).
  2. Сервисы генерации данных. Тестирование предусматривает ввод в программу различной информации. Самостоятельно продумать ее непросто и требует много времени. Намного проще воспользоваться специальными сервисами, например, random1 (генерация данных для регистрации в личном кабинете) или 10minutemail.ru (формирование вымышленного email).
  3. Программы для визуализации данных. Часто используется другое название – дашборды. Инструмент необходим, если ведется проверка масштабных проектов. Самыми популярными выступают два: встроенная в Allure опция и Grafana.
  4. Сервисы для создания скриншотов. Последние практически всегда прикладываются к отчетам о результатах тестирования. Они необходимы для подтверждения выявленного бага и лучшей демонстрации его особенностей. Количество программ для создания скриншотов очень много. Выбор оптимального зависит от личных запросов конкретного тестировщика.
  5. Валидаторы HTML/CSS. Предназначены для проверки исходного кода веб-приложений и страниц сайтов. Позволяют автоматизировать процесс обнаружения синтаксических ошибок в написании программ. Экономят время тестировщика при одновременном повышении качества работы.
  6. Эмуляторы. Специальные сервисы, имитирующие работу программы в определенных условиях. Которые зависят от типа устройства (планшет, ПК, смартфон и т.д.), операционной системы (Android, iOS, Microsoft и другие) и других подобных параметров.

Приведенный перечень далеко не полон. Что объясняется разнообразием как видов тестирование, так и объектов для проверки. Тем более – с учетом постоянного появления новых инструментов для работы специалиста.

FAQ

Что понимается под тестированием ПО?

Это комплексная проверка программного продукта на предмет соответствия заданным требованиям и отсутствия багов.

В чем заключается актуальность этого вида деятельности в IT-сфере?

Без тестирования сложно рассчитать на получение качественной программы. Что становится особенно актуальным, если речь идет о масштабных и сложных проектах.

Каковы основные виды тестирования?

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

Вывод

  1. Тестирование – важный этап разработки и вывода на рынок любого программного продукта.
  2. Он представляет собой проверку ПО сразу по нескольким направлениям. Включая три главных: функционирование в соответствии с заданными требованиями, надежная работа под нагрузкой, обнаружение и устранение багов.
  3. Эффективное тестирование возможно только при комплексном подходе к решению задачи. В том числе – посредством четкого планирования и поэтапного выполнения запланированных работ, а также задействования всех необходимых видов проверки.
  4. Включая следующие ключевые виды тестирования: позитивное и негативное, статическое и динамическое, ручное и автоматизированное, а также множество других.