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