Что такое модульное тестирование?
- Изолируют каждую часть программы и проверяют её корректность.
- Помогают рано обнаруживать проблемы.
- Заставляют разработчиков мыслить в рамках входных, выходных и ошибочных условий.
- Придают коду удобный для тестирования вид, облегчают будущий рефакторинг.
- Упрощают интегрирование рабочих (!) модулей.
- Частично заменяют техническую документацию.
- Заставляют отделять интерфейс от реализации.
- Доказывают, что код модуля работает так, как ожидалось (хотя бы математически).
- Могут использоваться как низкоуровневые наборы регрессионных тестов.
- Демонстрируют прогресс в незавершённой системной интеграции.
- Снижают стоимость исправления багов (с TDD — ещё больше).
- Позволяют улучшать архитектуру приложения с помощью определения ответственности модулей.
- Если вы можете это протестировать, то можете присоединить к своей системе.
- Модульное тестирование — это ВЕСЕЛО!
- Модульное тестирование не вылавливает ошибки интегрирования.
- Каждое булево выражение требует как минимум двух тестов, и количество быстро растёт.
- Модульные тесты столь же глючные, как и тестируемый ими код.
- Привязка тестов к паре конкретных фреймворков или библиотек может ограничить рабочий процесс.
- Большинство тестов пишется после завершения разработки. Печально. Используйте TDD!
- Возможно, после маленького рефакторинга система будет работать как прежде, но тесты будут сбоить.
- Вырастает стоимость разработки.
- Человеческая ошибка: комментирование сломанных тестов.
- Человеческая ошибка: добавление в код обходных путей специально для прохождения модульных тестов.
- Быстрый.
- Автоматизированный.
- Полностью управляет всеми своими зависимостями.
- Надёжен: может запускаться в любом порядке, вне зависимости от других тестов.
- Может запускаться только в памяти (никаких взаимодействий с БД, чтений/записей в файловой системе).
- Всегда возвращает один результат.
- Удобен для чтения и сопровождения.
- Не тестирует SUT-конфигурацию (system under test).
- Имеет чётко определённую ЕДИНСТВЕННУЮ ЗАДАЧУ.
- Хорошо именован (и достаточно понятно, чтобы избежать отладки только ради выяснения, что же сбоит).
OCCT
Средство для всесторонней проверки стабильности функционирования основных вычислительных компонентов компьютера.
Работает по нескольким направлениям, но нас интересует только GPU:3D – проверка наличия отклонений от нормального режима функционирования графического ускорителя при высоких нагрузках.
Рис. 7 – Возможности OCCT по тестированию GPU
Во время любого теста на экран выводятся сведения о текущих показателях напряжения, температуры, рабочих частот и прочих переменных.
Результат в виде графика отображается для каждого параметра.
С целью поиска отклонений в приложении реализована система регистрации ошибок, а запуск алгоритма в 64-битном режиме совмещает видеокарту с соответствующей версией операционной системы.
Среди доступных параметров числятся:
- длительность операции;
- используемая версия API DirectX: 11 или 9;
- сложность шейдеров;
- ограничение по максимальному количеству кадров в секунду;
- разрешение для теста;
- регистрация ошибок;
- запуск тестирования в цикле.
Из особенностей стоит отметить поддержку режимов SLI и CrossFire, что позволит узнать производительности системы, в которой установлена связка из двух и более графических ускорителей.
Рис. 8 – Тестирование
Плюсы
- возможность выбора времени теста и разрешения;
- русский интерфейс;
- построение графиков в реальном времени;
- в наличии стресс-тесты для оценки стабильности всей системы;
- отдельные алгоритмы для API DirectX 9-й и 11-й версий.
Как начать использовать тестовые модели
Определить наиболее удобный для восприятия (собой, командой или бизнес-оунерами) вид схемы (таблица, диаграмма, граф… )
Важно, чтобы те, для кого делается модель, легко «читали» ее — это наша основная задача;
Декомпозировать систему, которую собираемся описать, на модули (руководствуясь приоритетами, функциональностью, логикой или другими критериями). Скорее всего, ваша система многокомпонентна
Не стоит пытаться описать все и сразу: начните с малого.
Определить для отдельно взятого модуля возможные состояния системы, действия пользователя, переходы между состояниями, а также начальные и конечные точки взаимодействия (т.н. точку входа и точку выхода).
Схематично нарисовать «золотой путь», то есть идеальный вариант взаимодействия пользователя и системы.
Расширить этот путь для модуля так, чтобы помимо идеальных случаев модель включала и иные варианты: подумайте, что может пойти не так на каждом шаге.
Не забудьте о влиянии каждого состояния и перехода на другие части системы. Это особенно актуально, если вы создаете не первую модель для тестируемого продукта.
Решить, будете ли вы объединять модули в одну схему или хранить их по отдельности.
Поделиться полученной моделью с командой. Можно презентовать, отдать на ревью или пригласить коллег на ограниченную по времени сессию мозгового штурма, чтобы дополнить то, что вы могли забыть или упустить.
Поддерживать! Не забывать актуализировать и обновлять модель, — особенно когда добавляете новые компоненты, связи или даже новые модели.
Тестовые потоки
Давайте разделим и обозначим три вида потоков тестирования, которые составляют наш план тестирования:
-
Изолированное тестирование запросов — выполнение одного запроса API и соответствующая проверка ответа. Такие базовые тесты — это минимальные строительные блоки, с которых мы должны начинать. И нет смысла продолжать тестирование, если эти тесты упадут.
-
Многоступенчатый рабочий поток с несколькими запросами — тестирование серии запросов, которые являются обычными действиями пользователя, поскольку одни запросы могут зависеть от других. Например, мы выполняем запрос POST, который создает ресурс и возвращает автоматически сгенерированный идентификатор в своем ответе. Затем мы используем этот идентификатор, чтобы проверить, присутствует ли этот ресурс в списке элементов, полученных запросом GET. Затем мы используем PATCH для обновления новых данных и снова вызываем запрос GET для проверки этого обновления. И в завершении, мы УДАЛЯЕМ этот ресурс и снова используем GET, чтобы убедиться, что записи больше нет.
-
Комбинированные тесты API и тесты веб-интерфейса — это в основном относится к ручному тестированию, при котором мы хотим обеспечить целостность данных и согласованность между пользовательским интерфейсом и API.
Мы выполняем запросы через API и проверяем действия через пользовательский интерфейс веб-приложения и наоборот. Цель этих потоков проверки целостности состоит в том, чтобы гарантировать, что, хотя на ресурсы влияют различные механизмы, система по-прежнему поддерживает ожидаемую целостность и согласованный поток данных.
Пример API и тестовая матрица
Теперь мы можем отобразить все в виде матрицы и использовать ее для написания подробного плана тестирования (для автоматизации тестирования или ручных тестов).
Предположим, что подмножеством нашего API является конечная точка /users, которая включает следующие вызовы API:
Вызов API |
Действие |
GET /users |
Просмотреть всех пользователей |
GET /users?name={username} |
Получить пользователя по имени пользователя |
GET /users/{id} |
Получить пользователя по ID |
GET /users/{id}/configurations |
Получите все конфигурации для пользователя |
POST /users/{id}/configurations |
Создать новую конфигурацию для пользователя |
DELETE /users/{id}/configurations/{id} |
Удалить конфигурацию для пользователя |
PATCH /users/{id}/configuration/{id} |
Обновить конфигурацию для пользователя |
Где {id} — это UUID, а все конечные точки GET позволяют фильтровать, сортировать, исключать и ограничивать дополнительные параметры запроса для фильтрации, сортировки и разбивки на страницы тела ответа.
Основные позитивные тесты (позитивный путь по умолчанию)Позитивные тесты + необязательные параметры проверокНегативное тестирование – валидный ввод данныхНегативное тестирование — неверные входные данныеДеструктивное тестирование
Тест-кейсы, полученные из приведенной выше таблицы, должны охватывать различные потоки тестирования в соответствии с нашими потребностями, ресурсами и приоритетами (перевод таблицы в формате xls).
Выходим за рамки функционального тестирования
Следуя приведенной выше тестовой матрице, вы должны сгенерировать достаточно тест-кейсов, чтобы было что тестировать некоторое время и обеспечить хорошее функциональное покрытие API. Прохождение всех функциональных тестов подразумевает хороший уровень зрелости API (про зрелость тут. прим. переводчика), но этого недостаточно для обеспечения высокого качества и надежности API.
Уровни зрелости API
В следующем разделе этой статьи мы рассмотрим следующие нефункциональные подходы к тестированию, которые необходимы для проверки качества API.
Безопасность и авторизация
-
Убедитесь, что API разработан в соответствии с правильными принципами безопасности: отказ по умолчанию, безопасное падение сервиса, принцип наименьших привилегий, отклонение всех невалидных данных в запросе и т. д.
-
Позитивные тесты: убедитесь, что API отвечает на правильную авторизацию всеми согласованными методами аутентификации — ответный токен auth 2.0, файлы cookie, дайджест и т. д. — как определено в вашей спецификации.
-
Негативные тесты: убедитесь, что API отклоняет все несанкционированные вызовы.
-
Ролевые доступы: убедитесь, что определенные конечные точки доступны пользователю в зависимости от роли. API должен отклонять вызовы конечных точек, которые не разрешены для роли пользователя.
Проверка протокола: проверьте HTTP / HTTPS в соответствии со спецификацией
Утечки данных: убедитесь, что представления внутренних данных, которые должны оставаться внутри компании, не просачиваются за пределы общедоступного API в данных ответа.
Политики ограничения скорости, троттлинга и политики контроля доступа
Нагрузочные тесты (позитивные), стресс-тесты (негативные)
Найдите точки ограничения производительности и убедитесь, что система работает должным образом под нагрузкой и корректно выходит из строя под нагрузкой.
3DMark
Самая популярная утилита для тестирования видеокарт, задающая тенденции в области проверки производительности и стабильности работы графических подсистем компьютеров. Существует в трех версиях: для тестирования старых видеокарт, совместимых только с DirectX 9, для карт, поддерживающих DirectX 10, и для видеоускорителей с DirectX 12.
После загрузки и инсталляции программу необходимо запустить, установить необходимые тесты и кликнуть «Запустить». На мониторе будут отображаться различные тяжелые для видеокарты сцены природных ландшафтов. По истечении 10-15 минут в окне появится результат, если в процессе не возникли проблемы или ошибки.
- Скачайте приложение из Steam через клиент из-под учетной записи и запустите его.Скачать
Для русификации перейдите в настройки «Options», кликните «Language» и выберите «Russian». Язык интерфейса переключится.
Запуск теста Time Spy
Щелкните «Запустить» тест Time Spy или Night Raid.
Это эффектная игровая сцена, где человек, вооруженный зеркалом прошлого, ходит по музею и выискивает оружие из прошлого. Применяется только для видеокарт с поддержкой DirectX 12, где сочетается трассировка лучей для оптимизации отражения, формирования тени и классические приемы рендеринга сцен.
Сцена в музее
Далее стартует еще два теста для оценки производительности процессора и графического ускорителя.
После завершения тестирования его результаты откроются в браузере на странице сравнения с результатами тестов других пользователей.
В 3DMark есть и другие алгоритмы тестирования для видеокарт различных поколений:
- Night Raid – тест DirectX 12 для устройств с маломощной встроенной графикой;
- FireStrike – для графических ускорителей с поддержкой DirectX 11;
- Sky Driver – аналог FireStrike для бюджетных устройств;
- Cloud Gate – тест графики DX 10 и DX 11 для непроизводительных компьютеров;
- Ice Storm Extreme – тестирование портативных ПК.
Разнообразие тестов
«Тест устойчивости» используются для проверки новых, купленных с рук или разогнанных устройств под нагрузкой. Для запуска необходимо приобрести полную версию программы, перейти в раздел «Тест устойчивости» и запустить его.
Загрузить 3DMark с официального сайта нельзя, программу необходимо покупать, однако демонстрационная версия программы бесплатно распространяется через Steam.
AIDA 64
AIDA — Самая популярная утилита для тестирования, диагностики и отображения подробных сведений об аппаратных компонентах компьютера.
Ранее называлась Everest.
Рис. 3 – Запуск теста стабильности системы в AIDA 64
В меню «Сервис» расположен «Тест стабильности системы», где можно выбирать тестируемые устройства, в том числе только одну видеокарту — «Stress GPU».
В расширенных настройках можно задать огромное количество параметров, таких как предельная температура, нагрузка, напряжение, выбрать цвет для отображения различных показателей на графиках.
Спустя около 10 минут получим результат, в том числе узнаем о наличии артефактов, если они были.
Рис. 4 – Настройки приложения
На графиках отображается динамика изменения абсолютно всех показателей GPU.
Тестирование производительности с помощью Unigine Superposition (Бесплатно)
Unigine Superposition — прекрасный интрумент, если вы хотите «серьезно» нагрузить вашу видеокарту и получить объективные результаты, которые потом можно сравнить с результатами других людей и сделать выводы о том, насколько оптимально работает ваш компьютер и видеокарта. В отличие от программы FurMark, которая тестирует вашу видеокарту одной единственной рендер-сценой (бублик), Unigine Superposition — запускает полноценный тест со множеством разных сцен, что в конечном итоге приводит к тому, что вы получаете более объективные показатели производительности, которые можно сравнивать, но и тест занимает гораздо больше времени, а сама программа весит на порядок больше.
Загрузка и установка Unigine Superposition
И выбираем там нужную версию (есть возможность скачать с помощью торрента):
После окончания скачивания, устанавливаем программу и можно переходить к тестированию.
Тестирование видеокарты с помощью Unigine Superposition
При запуске Unigine Superposition вы увидите такое вот окно с настройками:
Т.к. мы хотим узнать насколько наша видеокарта производительная и сравнить с результатами других людей, то необходимо выбирать из списка только заранее прописанные конфигурации, поэтому в меню «PERFORMANCE» надо выбрать один из шаблонов настроек в поле Preset:
- 720p Low — режим с разрешением 1280×720 и низкими настройками качества, предназначен для видеокарт начального уровня или устаревших моделей, а также интегрированных в процессор видеокарт;
- 1080p Medium — режим с разрешением 1920×1080 и средними настройками качества, предназначен для игровых систем начального уровня;
- 1080p High — режим с разрешением 1920×1080 и высокими настройками качества, предназначен для настольных ПК с видеокартами среднего уровня;
- 1080p Extreme — режим с разрешением 1920×1080 и максимальными настройками качества, предназначен для самых новых и производительных видеокарт;
- 4K Optimized — режим с разрешением 3840×2160 пикселей и оптимизированными настройками качества, предназначен для самых новых и производительных видеокарт;
- 8K Optimized — режим с разрешением 7680×4320 пикселей и оптимизированными настройками качества, предназначен для будущих производительных видеокарт;
В нашем примере был выбран режим «1080p Extreme», т.к. в тестовом ПК установлена видеокарта GeForce RTX 2080 Ti, которая на момент написания статьи — одна из самых производительных видеокарт. После этого, нажимаем кнопку «RUN», после чего последует загрузка текстур и начнется тестирование, а после окончания, мы увидим итоговую таблицу с результатами:
В этой таблице отображаются настройки, которые были выбраны, конфигурация системы, значения FPS в процессе тестирования, а также итоговый результат (9297 очков).
Сравниваем результаты с другими видеокартами (Unigine Superposition)
Чтобы сравнить эти показатели с результатами других пользователей, необходимо кликнуть на надпись «Compare results online», после чего откроется сайт с результатами тестов от всех других пользователей. Выглядит это вот так:
Проверяем, что в фильтре «PRESET» — выбран наш профиль, который мы указали при запуске теста (1080P EXTREME). В фильтре «NUMBER OF GPUs» выбран «1X GPU» — т.е. одна видеокарта. В строке поиска «SEARCH» вводим название установленной видеокарты, в нашем примере это «NVIDIA GeForce RTX 2080 Ti» и в колонке «SCORE» видим результаты аналогичных тестов с такими же видеокартами у других пользователей. На каждый результат можно кликнуть и посмотреть подробности (был ли разгон, какая конфигурация у ПК и т.д.). Чем больше очков — тем лучше (но надо учитывать, что эти результаты могут быть в результате сильного разгона видеокарты и процессора, которые в домашних условиях получить невозможно). В нашем примере видно, что большинство результатов примерно совпадают с полученными у нас, а значит видеокарта функционирует как нужно.