Нефункциональное тестирование описывает тесты, необходимые для определения характеристик программного обеспечения, которые могут быть измерены различными величинами. Это тестирование того, "Как" система работает.
Иногда мы сталкиваемся с непонятными, нелогичными приложениями, многие функции и способы использования которых часто не очевидны. После такой работы редко возникает желание использовать приложение снова, и мы ищем более удобные аналоги. Для того чтобы приложение было популярным, ему мало быть функциональным – оно должно быть еще и удобным. Если задуматься, интуитивно понятные приложения экономят нервы пользователям и затраты работодателя на обучение. А значит они более конкурентоспособные! Поэтому тестирование удобства использования, о котором пойдет речь далее является неотъемлемой частью тестирования любых массовых продуктов.
Тестирование удобства пользования - это метод тестирования, направленный на установление степени удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий. [ISO 9126]
Тестирование удобства пользования дает оценку уровня удобства использования приложения по следующим пунктам:
1.производительность, эффективность (efficiency) - сколько времени и шагов понадобится пользователю для завершения основных задач приложения, например, размещение новости, регистрации, покупка и т.д.? (меньше - лучше)
2.правильность (accuracy) - сколько ошибок сделал пользователь во время работы с приложением? (меньше - лучше)
3.активизация в памяти (recall) – как много пользователь помнит о работе приложения после приостановки работы с ним на длительный период времени? (повторное выполнение операций после перерыва должно 4.проходить быстрее чем у нового пользователя)
5.эмоциональная реакция (emotional response) – как пользователь себя чувствует после завершения задачи - растерян, испытал стресс? Порекомендует ли пользователь систему своим друзьям? (положительная реакция - лучше)
Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет тестируемый продукт с точки зрения способности противостоять и успешно восстанавливаться после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети). Целью данного вида тестирования является проверка систем восстановления (или дублирующих основной функционал систем), которые, в случае возникновения сбоев, обеспечат сохранность и целостность данных тестируемого продукта.
Тестирование на отказ и восстановление очень важно для систем, работающих по принципу “24x7”. Если Вы создаете продукт, который будет работать, например в интернете, то без проведения данного вида тестирования Вам просто не обойтись. Т.к. каждая минута простоя или потеря данных в случае отказа оборудования, может стоить вам денег, потери клиентов и репутации на рынке.
Методика подобного тестирования заключается в симулировании различных условий сбоя и последующем изучении и оценке реакции защитных систем. В процессе подобных проверок выясняется, была ли достигнута требуемая степень восстановления системы после возникновения сбоя.
Для наглядности рассмотрим некоторые варианты подобного тестирования и общие методы их проведения. Объектом тестирования в большинстве случаев являются весьма вероятные эксплуатационные проблемы, такие как:
1.Отказ электричества на компьютере-сервере
2.Отказ электричества на компьютере-клиенте
3.Незавершенные циклы обработки данных (прерывание работы фильтров данных, прерывание синхронизации).
4.Объявление или внесение в массивы данных невозможных или ошибочных элементов.
5.Отказ носителей данных.
Данные ситуации могут быть воспроизведены, как только достигнута некоторая точка в разработке, когда все системы восстановления или дублирования готовы выполнять свои функции. Технически реализовать тесты можно следующими путями:
1.Симулировать внезапный отказ электричества на компьютере (обесточить компьютер).
2.Симулировать потерю связи с сетью (выключить сетевой кабель, обесточить сетевое устройство)
3.Симулировать отказ носителей (обесточить внешний носитель данных)
4.Симулировать ситуацию наличия в системе неверных данных (специальный тестовый набор или база данных).
При достижении соответствующих условий сбоя и по результатам работы систем восстановления, можно оценить продукт с точки зрения тестирования на отказ. Во всех вышеперечисленных случаях, по завершении процедур восстановления, должно быть достигнуто определенное требуемое состояние данных продукта:
1.Потеря или порча данных в допустимых пределах.
2.Отчет или система отчетов с указанием процессов или транзакций, которые не были завершены в результате сбоя.
Стоит заметить, что тестирование на отказ и восстановление – это весьма продукт-специфичное тестирование. Разработка тестовых сценариев должна производиться с учетом всех особенностей тестируемой системы. Принимая во внимание довольно жесткие методы воздействия, стоит также оценить целесообразность проведения данного вида тестирования для конкретного программного продукта.
Тестирование совместимости, часть нефункциональных тестов программного обеспечения, - это тестирование приложения для оценки совместимости приложения с вычислительной средой.
Вычислительная среда может содержать разные типы ОС (IOS 6, IOS 7), разные типы браузеров (Chrome, Firefox, IE).
Задачей тестирования производительности является определение масштабируемости приложения под нагрузкой, при этом происходит:
1.измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций
2.определение количества пользователей, одновременно работающих с приложением
3.определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций)
4.исследование производительности на высоких, предельных, стрессовых нагрузках
Показатели тестирования производительности
Основные параметры, отслеживаемые во время тестирования производительности, включают:
1.Использование процессора - время, затрачиваемое процессором на выполнение неактивных потоков.
2.Использование памяти - объем физической памяти, доступной процессам на компьютере.
3.Время диска - время, в течение которого диск занят выполнением запроса на чтение или запись.
4.Пропускная способность - показывает количество бит в секунду, используемое сетевым интерфейсом.
5.Частные байты - количество байтов, выделенных процессом, которые не могут использоваться другими процессами. Они используются для измерения утечек и использования памяти.
6.Выделенная память - объем используемой виртуальной памяти.
7.Страниц памяти в секунду - количество страниц, записываемых на диск или считываемых с диска для устранения аппаратных ошибок страниц. Сбои аппаратной страницы - это когда код не из текущего рабочего набора вызывается из другого места и извлекается с диска.
8.Ошибок страниц в секунду - общая скорость, с которой страницы ошибок обрабатываются процессором. Это снова происходит, когда процессу требуется код извне его рабочего набора.
9.Число прерываний процессора в секунду - это средн. количество аппаратных прерываний, которые процессор принимает и обрабатывает каждую секунду.
10.Длина дисковой очереди - средн. нет. запросов на чтение и запись, поставленных в очередь для выбранного диска в течение интервала выборки.
11.Длина сетевой выходной очереди - длина очереди выходных пакетов в пакетах. Значение больше двух означает, что необходимо прекратить задержку и возникновение узких мест.
12.Всего сетевых байтов в секунду - скорость, с которой байты отправляются и принимаются интерфейсом, включая символы кадрирования.
13.Время ответа - время с момента ввода пользователем запроса до получения первого символа ответа.
14.Пропускная способность - скорость получения компьютером или сетью запросов в секунду.
15.Количество пулов соединений - количество запросов пользователей, которые удовлетворяются объединенными соединениями. Чем больше запросов будет выполнено подключениями в пуле, тем выше будет производительность.
16.Максимальное количество активных сессий - максимальное количество сессий, которые могут быть активны одновременно.
17.Коэффициенты совпадений - это связано с количеством операторов SQL, которые обрабатываются кэшированными данными вместо дорогостоящих операций ввода-вывода. Это хорошее начало для решения проблем, связанных с узкими местами.
18.Хитов в секунду - нет. посещений веб-сервера в течение каждой секунды нагрузочного теста.
19.Сегмент отката - объем данных, который можно откатить в любой момент времени.
20.Блокировки баз данных - блокировку таблиц и баз данных необходимо отслеживать и тщательно настраивать.
21.Верхние ожидания - отслеживаются, чтобы определить, какое время ожидания можно сократить при работе с тем, насколько быстро данные извлекаются из памяти.
22.Количество потоков. Состояние приложения можно измерить по количеству потоков. потоков, которые работают и в настоящее время активны.
23.Сборка мусора - это связано с возвратом неиспользуемой памяти обратно в систему. Необходимо отслеживать эффективность сборки мусора.
Нагрузочное тестирование (load testing) – данный тип тестирования позволяет оценить поведение системы при возрастающей нагрузке, целью нагрузочного тестирования является также определение максимальной нагрузки, которую может выдержать система.
Это наиболее распространенный и известный тип тестирования, и поэтому в русскоязычной среде он на слуху. Часто в рунете, особенно те, кто не в теме QA, под нагрузочным тестированием понимают все виды испытаний. Но, в англоязычной литературе, это всего лишь подвид тестирования производительности.
Рассмотрим его подробнее: В роли нагрузки может выступать количество пользователей, а также количество операций на сервере.
Производительность при этом определяется следующими факторами:
1.скоростью работы программного обеспечения;
2.скоростью работы аппаратного обеспечения;
3.скоростью работы сети.
Во время тестирования могут осуществляться следующие операции, позволяющие более точно измерить производительность и определить “узкое место” системы:
1.измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций;
2.определение количества пользователей, одновременно работающих с приложением;
3.определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций).
Стрессовое тестирование позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса. Стрессом в данном контексте может быть повышение интенсивности выполнения операций до очень высоких значений или аварийное изменение конфигурации сервера. Также одной из задач при стрессовом тестировании может быть оценка деградации производительности, таким образом цели стрессового тестирования могут пересекаться с целями тестирования производительности.
Тестирование безопасности - это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
Принципы безопасности программного обеспечения
Общая стратегия безопасности основывается на трех основных принципах:
1.конфиденциальность
2.целостность
3.доступность
1.Интернационализация и локализация - это средства адаптации компьютерных приложений к различным языкам, региональным различиям и техническим требованиям целевого рынка.
2.Интернационализация - это процесс разработки программного приложения, позволяющего адаптировать его к различным языкам и регионам без инженерных изменений.
3.Локализация - это процесс адаптации интернационализированного программного обеспечения для определенного региона или языка путем добавления компонентов, зависящих от локали, и перевода текста.
Полезные ссылки:
Non-functionl testing article/eng
Functional testing vs Non-functional testing article/eng
Non-functional testing article/rus
Functional testing vs Non-functional testing video tutorial/eng
Functional testing vs Non-functional testing video tutorial/rus