Статьи

Нефункциональное тестирование программного обеспечения

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

Тестирование производительности

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

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

Требования к тестированию производительности

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

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

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

Юзабилити-тестирование

Юзабилити-тестирование — это метод проверки того, насколько программа проста в использовании и выполняет ли действия пользователя интуитивно понятным образом. Относительно новая практика, используемая разработчиками программного обеспечения, заключается в том, чтобы пользователи сами выполняли эти тесты. Результаты запрашиваются с помощью опросов, которые содержат такие вопросы, как «Считаете ли вы программу простой в использовании?» И «Есть ли у вас какие-либо предложения по улучшению?». Эта форма тестирования чрезвычайно полезна для разработчика, поскольку часто получает прямой корень любых существующих проблем с юзабилити.

Термин «удобный» приходит на ум под эгидой юзабилити-тестирования. «Удобный для пользователя» часто означает, что пользователь может проходить через программу без необходимости принимать какие-либо абстрактные или неожиданные решения, которые могут привести к непреднамеренному прерыванию работы программы. Это может принимать форму вопросов «да / нет», нажатия радиокнопок или выбора пользователя из выпадающего списка. Чем удобнее программа, тем менее вероятно, что она не пройдёт тест юзабилити. Конечно, написание удобного кода для такой программы предъявляет гораздо большие требования к программисту.

Тестирование безопасности

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

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

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

Завершение

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

Есть ли у вас опыт тестирования нефункциональных программ? Есть ли у вас какие-либо истории о нарушениях безопасности или, казалось бы, несомненных ошибках в программном обеспечении?