Почему обеспечение качества (QA) является неотъемлемой частью разработки ПО?

|

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

QA

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

Несколько слов о важности QA

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

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

Давайте рассмотрим основные преимущества внедрения тестирования в жизненный цикл ПО:

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

Какие виды тестирования стоит проводить на каждом этапе разработки

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

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

  1. Формирование требований к проекту
  2. Анализ и дизайн
  3. Стадия разработки
  4. Предрелизная стадия и развертывание

Теперь давайте остановимся на каждом их этих этапов более подробно.

Этап 1. Формирование требований к проекту

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

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

  • полнота
  • избыточность
  • однозначность
  • отсутствие противоречивости
  • ранжируемость
  • трассируемость
  • проверяемость

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

Этап 2. Стадия дизайна

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

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

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

  1. тестирование грубого схематического прототипа на начальной стадии проектирования
  2. тестирование прототипа средней детализации
  3. тестирование готового точного прототипа с утвержденным дизайном.

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

Этап 3. Стадия разработки

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

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

Кроссбраузерное и мультиплатформенное тестирование позволяет проверить корректность работы сайта или приложения в различных браузерах или на различных платформах. Особенности работы тех или иных браузеров приводят к тому, что веб-приложения или сайты могут работать в них по-разному. Таким образом, перед командой QA стоит задача провести тестирование веб-приложения или сайта в различных браузерах. Более того, важно проверить работоспособность приложения на тех платформах, которые были указаны заказчиком в списке требований, используя как ручное, так и автоматизированное тестирование. Для автоматизированного тестирования используется виртуальная машина с разными окружениями, в которых и проверяется работа приложения или сайта. Исключительно автоматизированного тестирования зачастую недостаточно, поскольку оно не позволяет проверить все варианты взаимодействия пользователя с приложением или сайтом. В связи с этим, также необходимо ручное тестирование, имитирующее действие пользователей.

Автоматизация тестирования вводится в тех случаях, когда  тестировщик имеет дело с проектом больших размеров, что приводит к очень большому количеству проверок. При этом возникает необходимость в частом регрессионном тестировании сложных вычислений и комплексных сценариев. Команда QA составляет кейсы для приложения и чек-лист необходимых проверок, на основе которых создаются функциональные тесты. Эти тесты запускаются ежедневно или автоматически в определенное время суток, например, ночью. При этом автоматически генерируется отчет о пройденных тестах. Команда QA поддерживает уже написанные тесты, а также создает новые по мере необходимости. В ходе такого тестирования обнаруживаются ошибки, которые намного сложнее было бы выявить вручную. Ускоряется процесс и качество проведения сложных тестов, связанных с вычислением, например, проверка сложных формул. Увеличивается точность и надежность тестов. Для заказчика автоматизация тестирования является важной, поскольку позволяет снизить время проведения регрессионного тестирования, что помогает сократить время работы над проектом. Поскольку автоматизация предоставляет возможность выполнения сценариев, которые невозможно выполнить вручную, появляется возможность проведения тестов в любом количестве без сопутствующего увеличения трудозатрат. Данный подход также помогает снизить влияние человеческого фактора.

См. также: интеграционное тестирование, системное тестирование, тестирование пользовательского интерфейса

Этап 4. Предрелизная стадия и развертывание ПО

Финальная стадия жизненного цикла разработки ПО обычно состоит из двух этапов: предварительное развертывание (beta-deployment) и конечное развертывание (final deployment). Стадия предварительного развертывания необходима для того, чтобы у команды тестировщиков была возможность отловить ошибки в продукте до того, как он будет выпущен на рынок. Результаты тестирования могут быть использованы командой разработчиков для внесения последних корректировок перед окончательным развертыванием продукта. На этом этапе команда QA проверяет корректность исправления ошибок, обнаруженных на предыдущих стадиях, а также тестирует устойчивость ПО к высоким нагрузкам и взлому.

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

Тестирование безопасности проводится в том случае, когда компания-разработчик создает приложение целиком или же если заказчик просит проверить безопасность своего приложения. В случае разработки отдельной части программного продукта, такое тестирование как правило не проводится. В зависимости от бюджета, предоставленного заказчиком, может проводиться сокращенное или полное тестирование. При проведении сокращенного тестирования, команда QA запускает программу, проверяющую основные проблемы с безопасностью. Эта программа постоянно обновляется и соответствует стандартам OWASP. Такая проверка покрывает большую часть потенциальных проблем. Более тщательная проверка  подразумевает не только автоматизированное тестирование с использованием программы, но и проведение ряда тестов вручную. Проводится проверка на соответствие приложения стандартам безопасности. Благодаря проведению этих тестов, повышается безопасность и защищенность приложения. Повышается вероятность того, что в случае попытки взлома приложения с использованием автоматизированных приложений, программа устоит дольше. Данное тестирование является важным для заказчика, поскольку снижает вероятность несанкционированного доступа к системе и последующей утечке данных. Заказчику предоставляется подробный аналитический отчета по результатам тестирования, включающий список существующих и потенциальных угроз безопасности, а также рекомендации по их устранению. Это позволяет заказчику оценить примерные затраты на устранение проблем информационной безопасности.

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

Заключение

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

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

XB Software предлагает полный цикл услуг по контролю качества и тестированию ПО.

The following two tabs change content below.
Александр Райский

Александр Райский

Руководитель отдела QA компании XB Software. Повсюду видит баги и пытается их искоренить улучшением процессов тестирования и сильной командой QA.