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

Общий осмотр

Итак, понятно, что основная задача команды тестирования – помочь разработчикам создать качественный «софтовый» продукт. Термин «качество» - далеко не абстрактный, и имеет ввиду конкретные характеристики: функциональность, эффективность, практичность, надёжность, мобильность, сопровождаемость. Тщательной проверкой всех составляющих и занимаются тестировщики. В зависимости от того, какую из характеристик тестирует команда, выделяют разные виды тестирования. Предлагаем чуть подробнее рассмотреть каждый из них.

Самый распространённый вид тестирования – функциональный. Как и осмотр у терапевта, тестирование функциональности проводят, чтобы выяснить основные уязвимости, и если «терапевт-тестировщик» сам не знает, как «лечить» больного, он отправляет его к тестировщикам-специалистам. Функциональное тестирование проверяет, выполняет ли разработанная программа задуманную разработчиками функцию. Найденные в ходе тестирования ошибки позволяют определить уязвимые места программного продукта, которые подлежат лечению.

Часто во время функционального тестирования могут быть обнаружены глобальные дефекты: на сайте интернет-магазина пользователь может заполучить права администратора или что-то в том же духе. Это можно сравнить с покупкой калькулятора, на котором нет клавиши «+» - технически сложная вещь оказывается не до конца продуманной.

Мост под нагрузкой

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

При тестировании производительности приложений и сайтов также проверяется скорость работы и быстрота реакции приложения в зависимости от нагрузки. Нагрузка, в данном случае, определяется количеством запросов к системе в единицу времени. Частые запросы к серверу понижают его производительность, что выражается в медленной работе сайта. Свидетельство низкой производительности – «длинное» время отклика, при нажатии кнопок в интерфейсе сайта.

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

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

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

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

Чтобы не «заблудиться» на сайте

Для эффективной работы с приложением пользователь должен интуитивно понимать, как оно работает. Кроме того, приложение должно быть ещё и удобным. Глазами обывателя на приложение смотрят тестировщики, оценивающие удобства пользования, или «юзабилити». Они знают, что интуитивно понятные приложения более популярны и конкурентоспособны. Поэтому приложению не достаточно лишь правильно выполнять свои функции, иметь высокую производительность и стабильность. Если зайдя на главную страницу, пользователь не разберётся, как именно работает приложение или сайт, остальные характеристики будут совершенно не важны. Поэтому при разработке ПО необходимо сделать так, чтобы пользователю было легко выполнить необходимую задачу. Например, оформление заказа в онлайн-магазине должно занимать три клика, а не пять сложных форм, каждая из которых состоит из множества обязательных полей. Простота и практичность работы с приложением делает его лёгким для запоминания и оставляет приятные эмоции.

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

Трудности перевода

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

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

К испытаниям будь готов!

Тестирование совместимости или кросcбраузерное тестирование подразумевает, что сайт должен выглядеть и работать одинаково быстро и безошибочно во всех популярных браузерах. Если же в каком-либо из популярных браузеров сайт будет «сбоить», значительная часть аудитории может быть потеряна.

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

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

Конечно, не все из перечисленных видов тестирования проводятся на каждом проекте. На выбор необходимых видов тестирования влияет не только набор поставленных требований, специфики проекта (веб-приложение или приложение для Windows и т.д.), этапа разработки, но и такие банальные факторы, как размер бюджета проекта и наличие времени для проведения тестов.

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