BH     TT     Нефункциональное тестирование     Примеры студентов    

--   Ожидаемого результата часто нет, но тогда нужно обязательно что-то замерить, для того, чтобы потом сверить с конкурентами или со своей же старой версией.
--   На продакшене не тестировать! И на чужом тоже.

        //     4.   Важные виды нефункционального тестирования
        //     5.   Виды нефункционального тестирования - подробнее
        //     6.   Тестирование совместимости и окружений (Compatibility testing) (браузеры)
        //     7.   TODO: Ещё примеры


        //     4.   Важные виды нефункционального тестирования:

        --   Производительность и нагрузка         //     Важно для пользователя!
        --   Удобство использования (Usability)         //     Важно для пользователя!
        --   Защищенность
        --   Тестирование окружений


        //     5.   Виды нефункционального тестирования - подробнее

3A1.   Функциональная пригодность (Functional Suitability)
        --   Функциональная полнота (Functional Completeness)
        --   Функциональная корректность (Functional Correctness)
        --   Функциональная целесообразность (Functional Appropriateness)
3B1.   Уровень производительности (Performance Efficiency)
        --   Временные характеристики (Time Behaviour)
        --   Использование ресурсов (Resource Utilization)
        --   Потенциальные возможности (Capacity)
3B2.   Совместимость (Compatibility)
        --   Сосуществование (Co-existence)
        --   Интероперабельность (Interoperability)
3B3.   Удобство использования (Usability)
        --   Определимость пригодности (Appropriateness Recognizability)
        --   Изучаемость (Learnability)
        --   Управляемость (Operability)
        --   Защищенность от ошибки пользователя (User Error Protection)
        --   Эстетика пользовательского интерфейса (User Interface Aesthetics)
        --   Доступность (Accessibility)
3B4.   Надежность (Reliability)
        --   Завершённость (Maturity)
        --   Готовность (Availability)
        --   Отказоустойчивость (Fault Tolerance)
        --   Восстанавливаемость (Recoverability)
3B5.   Защищенность (Security)
        --   Конфиденциальность (Confidentiality)
        --   Целостность (Integrity)
        --   Неподдельность (Non-Repudiation)
        --   Отслеживаемость (Authenticity)
        --   Подлинность (Accountability)
3B6.   Сопровождаемость (Maintainability)
        --   Модульность (Modulariy)
        --   Возможность многократного использования (Reusability)
        --   Анализируемость (Analysability)
        --   Модифицируемость (Modifiability)
        --   Тестируемость (Testability)
3B7.   Переносимость (мобильность) (Portability)
        --   Адаптируемость (Adaptability)
        --   Устанавливаемость (Installability)
        --   Взаимозаменяемость (Replaceability)


        //     3B1.   Тестирование производительности (Performance testing) --> Скорость работы

--   Производительность с разными: Параметрами, Настройками, Условиями, Сравнение с конкурентами ( (Пр. разные размеры файла; Разное железо)
--   Сравнение с конкурентами (Может стать обоснованием бага)
--   Работоспособность системы под разными нагрузками
--   Измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций
--   Определение количества пользователей, одновременно работающих с приложением
--   Определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций)
--   Исследование производительности на высоких, предельных, стрессовых нагрузках

Нагрузочное тестирование vs Тестирование производительности

        //     3B1-A.   Нагрузочное тестирование (Load Testing) --> Возможность одновременной работы (Кол-во пользователей)

1)   Проверить что сервис функционирует под проектной нагрузкой
2)   Узнать до какой нагрузки сервис остается функционален
3)   Узнать под какой нагрузкой начинаются отказы
Можно пойти дальше и сделать Crash/restore
4)   Узнать под какой нагрузкой сервис перестанет функционировать
5)   Узнать восстановится ли сервис после снятия нагрузки/ после возвращения к проектной нагрузке. замерить сколько ему потребуется на это времени.

Инструменты:   Apache JMeter   //   LoadSophia   //   HP LoadRunner   //   Load Impact

Учитывать что Update сложнее чем Create/Insert. Поэтому например при тесте 100 пользователей делать 50 на создание и 50 на обновление
Больше 100 пользователей в секунду скорее всего не будет, так-что лучше увеличивать число пользователей в секунду с шагом 5 пользователей


        //     3B3.   Тестирование удобства использования (Usability)         //     -1-     -2-     -3-    

--   Скорость обучения (Как пользоваться сайтом. Как быстро юзер поймёт что и как делать)
--   Скорость использования (Фотошоп, спецсофт. Как ускорится работа после обучения)
--   Количество пользовательских ошибок
--   Субъективная удовлетворённость
--   Следование стандартам (В принципе не так уж и важно --> Свой стиль!)
--   Интуитивность
--   Одинаковость (Consistent) (Типичные вещи как у конкурентов. Например F1)
--   Гибкость (Например 2 режима калькулятора)
--   Корректность
--   Полезность
--   Тестирование GUI
        Масштабируемость (Требования к горизонтальному или вертикальному масштабированию приложения).

        //     3B4.   Тестирование надежности / стабильности (Reliability / Stability Testing)

--   Реакция системы на непредвиденные ситуации
--   Выяснить сколько времени сервис может проработать безотказно в конкретном окружении (никакого экстрима, просто конкретика) под конкретной нагрузкой (обычно рассчеткая, может быть + некоторый процент) при этом ставится некоторый лимит. по достижении которого тест считается пройденным.
--   Выявить утечки ресурсов. то есть в процессе теста тщательно мониторятся ресурсы системы (память, процессор, загрузка диска, файловые дескрипторы, сокеты)
--   Задачей тестирования стабильности (надежности) является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки. Время выполнения операций может играть в данном виде тестирования второстепенную роль. При этом на первое место выходит отсутствие утечек памяти, перезапусков серверов под нагрузкой и другие аспекты влияющие именно на стабильность работы.


        //     3B5.   Тестирование защищённости / безопасности (Security)

--   Защищенность / Безопасность пользовательских данных


        //     3B7.   Переносимость (мобильность) (Portability)

Портируемость (Переносимость приложения на различные платформы).
Тестирование установки (Installation testing) – проверка успешности установки приложения, его настройки и удаления. Снижает риски потери пользовательских данных, потери работоспособности приложения и пр.
Конфигурационное тестирование (или тестирование портируемости) – исследование работоспособности программной системы в условиях различных программных конфигураций.


        //     6.   Тестирование совместимости и окружений (Compatibility testing) (браузеры)

Разные ОС (Windows, Linux, MAC)
Разное железо
Разные браузеры
Разный сторонний софт (Конфликты двух похожих прог)
Плагины в браузере


        //     7.   TODO: Ещё примеры

Локализация (языковая)
Тестирование установки (Installation testing)
Тестирование на отказ и восстановление (Failover and Recovery Testing) – исследование программной системы на предмет восстановления после ошибок, сбоев. Оценивание реакции защитных свойств приложения.
                                Тестирование установки (Installation testing)
                                Конфигурационное тестирование (или тестирование портируемости)
                                Тестирование на отказ и восстановление (Failover and Recovery Testing)