Содержание:
Когда пользователю очень удобно пользоваться тем или иным ПО, когда в его работе не возникает не только досадных технических ошибок, но и не встречается недочётов интерфейса, все работает четко и плавно — это заслуга не только разработчиков, но и тестировщиков, которые провели полноценное нефункциональное тестирование продукта. В этой статье мы подробно рассмотрим для чего нужно такое тестирование, что оно проверяет и в чем главные отличия функционального тестирования от нефункционального.
Отличие функционального тестирования от нефункционального простыми словами
Начинающий тестировщик может подумать, что в сфере QA все подчиняется жестко описанному техническому заданию, и все, что он будет проверять, должно быть зафиксировано в этом документе. Отчасти это правда, но такие тесты будут называться функциональными. А что делать с теми аспектами, которые напрямую не относятся к функциональности ПО, но которые являются важными для его корректной и надежной работы? Их мы и будем проверять в рамках нефункционального тестирования (non functional testing). Это может быть производительность ПО, его, быстродействие, удобство использования и логичность интерфейса, масштабируемость, доступность, надежность и многие другие характеристики. Одним словом, данные тесты помогут дать оценку качеству работы системы с разных аспектов. Важный нюанс: как правило, заниматься нефункциональным тестированием нужно только после того, как вы удостоверились в правильной работе всех функций ПО. Предположим, что вы разрабатываете веб-приложение для заметок. Когда вы проверяете его способность создавать, сохранять и редактировать заметки — это функциональное тестирование. А вот проверки, насколько стабильно будет работать редактирование или сохранение заметок при плохом или пропадающем интернет-соединении, или не «съедает» ли заряд батареи при работе с заметками — они будут выполнены в рамках нефункционального тестирования.
Главная задача нефункционального тестирования
Цели нефункционального тестирования вполне логичны — это повышение охвата направлений тестирования, и, как следствие, рост качества продукта, эффективности его работы. Для заказчика подключение такого тестирования, наравне с функциональным, означает последующее снижение производственных рисков и трат на исправление нетривиальных ошибок, которые можно пропустить в рамках функционального тестирования.
Виды нефункционального тестирования
Одними из самых важных нефункциональных видов тестирования являются следующие шесть:
- Тестирование производительности
- Тестирование надежности
- Тестирование безопасности
- Тестирование удобства использования
- Тестирование совместимости
- Тестирование локализации.
Про каждый из этих видов можно много говорить отдельно, но давайте в обзорно, разберем каждый из них с примерами использования в деле.
Тестирование производительности
Тестирование производительности (Performance Testing) — это процесс проверки скорости работы ПО и его способности обрабатывать большие объемы данных или большое количество пользователей. Возвращаясь к нашему примеру с веб приложением для создания заметок, то оно явно не должно запускаться с той же скоростью, как грузится Word на старом ПК под управлением Windows XP. Запуск и загрузка приложения должны быть быстрыми, а реакции на действия пользователя, без задержек, либо с минимальными задержками, которые будут приемлемы для комфортной работы. Касается это как работы интерфейса приложения, так и его «внутреннего функционала». К примеру, процесс редактирования большой заметки должен быть оптимизирован таким образом, чтобы при любых изменениях и действиях пользователя, это не приводило к зависаниям или временной недоступности приложения.
Тестирование надежности
Тестирование надежности (Reliability Testing) — проверит стабильность работы программного обеспечения при различных условиях, таких, как, к примеру, длительное использование без перерыва, переключение между вкладками в браузере или сворачивание и разворачивание приложения в мобильной версии. Такого рода операции не должны приводить к ошибкам и сбоям. Частый пример, который важен в жизни – перед запуском в работу интернет-магазин тщательно тестируется, а потом запускается в общее пользование. И вот сколько времени он сможет самостоятельно и автономно работать без сбоев и каких-либо инцидентов, при изменяющихся условиях? Если что-то пойдет не так и сервис вдруг будет недоступен — магазин просто потеряет клиента.
Тестирование безопасности
Тестирование безопасности(Security Testing) касается проверки защиты данных, и это особенно важная тема в нынешнее время. Ни у кого стороннего не должно быть лазеек для несанкционированного доступа к личной информации пользователей, их переписке, либо иной конфиденциальной информации, с которой работает приложение. К примеру, у продавцов на маркетплейсах не должно быть доступа к списку заказов их покупателей, либо к их персональным данным, которые они не сообщали продавцу. А покупатели, в свою очередь не должны смочь купить товар бесплатно, просто отправив SQL инъекцию в поле ввода промокода и при оформлении заказа.
Тестирование удобства использования
Тестирование удобства использования (User Experience Testing)поможет понять, насколько легко и интуитивно новому пользователю получить доступ ко всем необходимым функциям ПО, понятно ли размещена нужная информация, можно ли через меню добраться до желаемого функционала и хватает ли размера кнопки, чтобы пользователь смог с первого раза попасть по ней пальцем на мобильном устройстве. Пример такого тестирования — оценка текущей реализации внешнего вида сайта или приложения и проверка что даже новый покупатель легко найдет все что ему нужно, потому что на видном месте будет расположена форма быстрого поиска, а все сопутствующие элементы интерфейса корректно отображаться.
Тестирование локализации
Тестирование локализации(Localization Testing) определит правильность перевода программного обеспечения на различные языки, адаптацию его для разных культур. К примеру, если сайт по продаже велосипедов, работавший вне России захочет продавать свои товары тут, то им придется мало того, что перевести весь сайт с иностранного языка, на русский, но и преобразовать все единицы изменения и стоимости на те, которые используются у нас, например не футы, а метры, не доллары, а рубли. Причем адаптация ПО может быть не только на основе языка, но и культуры. Так, фейерверк в дизайне сайта пользователям из России будет напоминать про Новый год, а пользователям из США – про день независимости. Такие отличия крайне важно учитывать и проверять в тех случаях, когда приложение предполагается для нескольких стран.
Тестирование совместимости
Тестирование совместимости (Compatibility Testing) — проверка работы программного обеспечения на различных устройствах и операционных системах, а также проверка совместимости с другими приложениями. Любое приложение не работает в изолированной среде, поэтому тестирование совместимости обязательно для уверенности, что в большинстве типичных случаев ПО будет работать корректно. Так один и тот же сайт может работать корректно в одних браузерах, но вовсе не работать в других. Либо, приложение на телефоне может зависать при попытке обращения к памяти, потому что стороннее приложение – антивирус, будет считать, что это несанкционированный доступ.
Нефункциональное тестирование, в большинстве случаев, за основу берет специально сформулированную документацию, которая содержит дополнительные характеристики приложения. Они называются «нефункциональными требованиями», эти документы описывают качество работы системы, ресурсный потенциал ПО, включают параметры производительности, надежности, безопасности, удобства использования, совместимости.
Этапы проведения нефункциональных тестов
Этапов проведения нефункционального тестирования несколько, и четкое понимание важности каждого из них — ключ к максимально подробной проверке.
Для начала необходим анализ того, какой именно функционал ПО нуждается в проверке, как проект должен работать в целом, какие будут сценарии использования, по каким логическим маршрутам внутри программы пойдет пользователь.
Следующий шаг — написание тест-кейсов, где пошагово расписана последовательность проверки каждого определенного функционала. Либо же, в некоторых случаях, можно ограничиться чек-листами.
После этого необходимо подготовить тестовые данные, максимально приближенные к тем, что юзеры будут использовать при работе с ПО.
Предпоследний шаг — непосредственное проведение самого тестирования и оценка результата.
Финал — написание отчета по результатам всего тестирования. В нем должно быть подробно описано всё, что вы делали — и ход тестов, и список багов, и рекомендации по дальнейшему улучшению ПО, которое вы тестировали.
Нефункциональное тестирование — подход довольно гибкий, и часто идет рука об руку с функциональным тестированием. Иногда, опытные инженеры по обеспечению качества могут делать эти два вида тестирования параллельно — функциональное и нефункциональное, однако в большинстве случаев, для наиболее полной и тщательной проверки системы, лучше проводить их по отдельности друг от друга, так как у них есть своя специфика.
Важные аспекты
Напоследок акцентируем ваше внимание на важных аспектах нефункционального тестирования, которые нужно постоянно держать в голове, и которые помогут чётче провести сам процесс тестирования, от первых встреч с заказчиком до финальной сдачи отчетов. Это:
Измеримость. Она является важным аспектом нефункционального тестирования, так как она позволяет количественно и численно оценить качество продукта, определить, насколько хорошо система выполняет свои функции и соответствует требованиям. Как правило, для этого используются различные заранее согласованные метрики.
Приоритезация требований. Вам, как профессионалу, всегда нужно держать в голове главную дилемму — протестировать 100% сценариев и сочетаний обстоятельств не получится. С другой стороны – мы не можем проверить просто что-то наобум и сослаться на то, что остальное просто погрешность. Всегда нужно выбирать наиболее важные и принципиальные аспекты для проверок и начинать с них, далее двигаясь уже к менее важным, в рамках данного контекста. Поэтому важна приоритезация требований, она позволяет определить, какие нефункциональные требования являются наиболее важными и требуют наибольшего внимания, выделить наиболее критические аспекты качества и сосредоточиться на их тестировании. Это позволяет оптимизировать процесс тестирования и обеспечить максимальное качество продукта.
Правильное определение атрибутов качества. Этот процесс позволяет сосредоточиться на наиболее важных аспектах и обеспечить их полноценное тестирование, что поможет позволяет избежать ошибок и пропусков в процессе тестирования. Другими словами – важно понимать для конкретного проекта и для конкретного заказчика какие из нефункциональных требований являются критически важными.
Используемые инструменты в нефункциональном тестировании
Нефункциональное тестирование, как и функциональное, может быть автоматизировано, хоть и в меньшем объеме. Для каждого из видов нефункционального тестирования применяются свои специальные инструменты. Их большое множество и все они применяются для решения различных задач, поэтому приведем лишь несколько из них:
- Для тестирования производительности часто используется Apache jMeter. Это свободно распространяемый инструмент для подготовки и проведения тестирования производительности. Своей популярностью он обязан тому, что он бесплатный, достаточно простой в использовании, но при этом очень функциональный. За примерно 20 лет существования продукта у него скопилась обширная база знаний, которая поможет разобраться с типовыми решениями, либо частными проблемами.
- Для тестирования удобства использования очень интересным инструментом является Firebase. Чаще всего он используется в мобильных приложениях и позволяет просматривать путь пользователей в приложении, на какие ссылки они нажимали и по каким экранам переходили. И если поиск нужного пункта меню у пользователей занимает больше времени чем ожидалось – это можно будет обнаружить.
В своей работе, мы в QA Service Lab всегда комплексно подходим к вопросу тестирования, и мы уделяем нефункциональным тестам большое внимание, там, где это необходимо. Иногда бывают случаи, когда нефункциональные качества приложения критически важны, а зачастую даже больше, чем полностью работающий функционал приложения.
Пример тестового случая
В нашей практики был один интересный кейс. К нам обратился разработчик мобильного приложения, предназначенного для широкой аудитории пользователей. При этом, функционал приложения был достаточно специфичен и сложен для новичков. Первые 3 месяца жизни приложения показали, что лишь 15% пользователей, которые установили приложение – им пользовались. Остальные 85% после одного – трех запусков либо удаляли приложение, либо переставали им пользоваться. Когда мы проводили аудит качества приложения, выяснилось, что для рядового пользователя, который скачивал приложение, но не разбирался глубоко в теме, самостоятельно разобраться как именно пользоваться даже основным функционалом в приложении оказывалось практически невозможно. Благодаря совместным усилиям мы предложили улучшения для дизайна и интерфейса, чтобы улучшить UX и приложение стало интуитивно понятным, также добавили большой раздел по обучению и введению в матчасть. Как итог — приложение стало гораздо более понятным и удобным и как следствие — уже 70% пользователей приложения, после установки продолжали активно им пользоваться.
Заключение
Нефункциональное тестирование — это то, про что часто забывают, либо же не придают столько значения, как функциональному. Многие заказчики считают так: если приложение работает — это уже хорошо, и больше ничего не требуется, но это неверно. Важно всегда соблюдать баланс и планировать, и проводить именно тот объем тестирования, который требуется для данного приложения в конкретный момент времени.
Илья Рубцов
Старший инженер по контролю качества и ручному тестированию QA Service Lab