Привет, Хабр!

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

Так какие особенности сопутствуют тестированию десктопных приложений?

  1. Операционная Система

    Необходимо помнить о различиях в системных вызовах, библиотеках и API, которые используются для взаимодействия с операционной системой. Например, для Windows приложения могут использовать WinAPI, для Linux - GTK или Qt, на macOS - Cocoa и Objective-C. Эти различия требуют адаптации кода под каждую конкретную операционную систему, а также новые версии ОС. 

  1. Оперативная память

    Работоспособность приложения может зависеть от объема оперативной памяти устройства. Обычно, чем больше оперативной памяти, тем лучше приложение может обрабатывать данные и выполнять операции. Для десктопных приложений рекомендуется иметь не менее 4 ГБ оперативной памяти для стабильной работы. Когда приложение использует больше памяти, чем операционная система может предоставить, приложение начинает тормозить. В результате начинается использование виртуальной памяти, что замедляет производительность из-за более медленного доступа к данным.

  1. Утечки памяти

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

Инструменты мониторинга памяти:

  • Task Manager в Windows

  • Activity Monitor в MacOS

  • Mtrace в Linux

  1. Размеры экранов

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

    Понять, какие размеры экранов наиболее распространены в вашем регионе, можно благодаря статистике.
    Например, для РФ наиболее популярны разрешения экрана 1920x1080 (38.58%), 1366x768 (11.84%), 1536x864 (10.91%).

5. Гайдлайны

Hidden text

Гайдлайны – это набор правил и рекомендаций, определяющих, каким образом приложения должны выглядеть и вести себя на определенной платформе.

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

Аспект

Windows

Linux

MacOS

Графический интерфейс

Windows UX Design Principles.
Основные элементы имеют тени, округлые углы, более насыщенные цвета. Основное меню часто в верхней части окна.

GNOME Human Interface Guidelines
Может значительно различаться в зависимости от дистрибутива и окружения. 

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

Оформление окон

Fluent Design System

GNOME Adwaita Theme

Human Interface Guidelines

Системные кнопки

Кнопки в правом верхнем углу окна - "закрыть", "свернуть", "развернуть".

Расположение и стиль кнопок могут зависеть от окружения рабочего стола.

Кнопки обычно в верхнем левом углу окна - "закрыть", "свернуть", "развернуть".

Работа с клавишами

Часто использует комбинации клавиш с клавишей "Ctrl".

Различные дистрибутивы могут использовать разные комбинации, но часто используется клавиша "Ctrl".

Часто использует комбинации клавиш с клавишей "Command" (⌘).

Типографика и шрифты

Segoe UI, Calibri, Arial

Cantarell, Ubuntu, DejaVu, Noto, Liberation

San Francisco, Lucida Grande

Системные уведомления

Toast Notifications

Desktop Notifications

Notification Center

Знание гайдлайнов помогает создавать приложения, которые соответствуют ожиданиям пользователей и интегрируются с окружением операционной системы.

6. Тестирование взаимодействия с устройствами

Неотъемлемой частью проверки десктопных приложений является интеграция с другими устройствами.
Если приложение предполагает работу с игровыми устройствами, необходимо проверить поддержку джойстиков, геймпадов, а также корректность распознавания их сигналов.
Удостоверься, что приложение правильно реагирует на действия с мышью и клавиатурой, включая различные типы мышей (сенсорные, обычные).

! Также важно проверить поддержку виртуальной клавиатуры, особенно если ваше приложение предназначено для устройств с сенсорными экранами.

7. Работа с Интернетом

При тестировании нужно учитывать зависимость приложения от интернета. Обрати внимание на работу:

  • Без подключения к интернету.

  • Во время прерывания интернета.

  • При различных условиях сети, например, использование 3G, 4G, 5G.

Не забывай учитывать как приложение:

  • Восстанавливает работу после прерывания.

  • Обрабатывает большие объемы данных при быстром и медленном интернете.

  • Как происходит синхронизация с облаком при изменении условий интернет-соединения.

Несколько инструментов в помощь:

  • Network Link Conditioner (для macOS/iOS)

  • Charles Proxy, Fiddler

  • Network Emulation в Android Emulator

8. Уведомления

При тестировании уведомлений следует учесть несколько аспектов:

  • Отображение: Убедись, что уведомления корректно отображаются на различных разрешениях экрана и в различных режимах окна приложения (развернутое, свернутое, полноэкранное).

  • Звук: Проверь, что звук уведомлений воспроизводится правильно и в соответствии с настройками звука пользователя. Убедись в наличии возможности включения и выключения звука для уведомлений.

  • Переход по уведомлениям: Проверь, что клик по уведомлению открывает соответствующее окно или выполняет предусмотренное действие. Удостоверься, что уведомления исчезают после их просмотра или выполнения действия. Также важно проверить отображение уведомлений в различных  режимах энергосбережения, спящем режиме и тд.

! Учти, что стили и поведение системных уведомлений могут различаться в зависимости от операционной системы. 

9. Работу в различных режимах компьютера

Проверка работы приложения в различных режимах компьютера включает в себя тестирование в режимах энергосбережения. Режимы, такие как High Performance, Balanced и Power Saver, могут влиять на производительность компьютера. Кроме того, стоит учесть режимы спящего режима, гибернации и быстрого запуска, если они доступны в операционной системе. Проверь, как приложение ведет себя в каждом из этих режимов.

10. Работа в foreground и background

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

11. Установка, обновление и удаление

Тестирование установки включает проверку:

  • установки для всех пользователей компьютера, 

  • установки с правами админа и без, 

  • проверка наличия указания издателя приложения, 

  • предложенного пути для сохранения по умолчанию и возможности его изменения,

  • наличия ярлыка на рабочем столе и в меню пуск, 

  • локализации и поведения при установке с разными языковыми настройками операционной системы. 

Тестирование обновления включает проверку:

  • получения уведомлений о наличии новых версий приложения,

  • есть ли выбор у пользователя обновить или оставить старую версию приложения, 

  • требования согласия пользователя на обновление,

  • сохранения данных и файлов пользователя после обновления.

Тестирование удаления включает проверку отсутствия удаленных файлов в директории установки, меню пуск, отсутствие ярлыка и логов приложения.

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

А что еще можно учесть при тестировании?

Комментарии (13)


  1. korolevayuliya
    27.12.2023 06:08
    +2

    Хотелось бы подробнее узнать о тестирование утечек памяти. Не хватило этой инфы


    1. MedicusAmicus
      27.12.2023 06:08

      После завершения ресурсоемких задач приложение (и его дочерние процессы) должно освободить ОЗУ. До фонового режима, или полностью, если оно закрыто.
      Если в процессе работы было занято 2Гб оперативки, то после завершения эти 2Гб должны освободиться.
      Ну и в режиме "простоя" потребление памяти не должно расти.


      1. Karopka
        27.12.2023 06:08

        Если выделяемая память передается во владение объекта-контроллера, который находится в области видимости диспетчера памяти приложения, то она скорее всего будет освобождена при завершении приложения, т.е., с Вашей точки зрения, утечки нет. В то же время, выделенная память может быть уже и не нужна в то же время, когда приложение "задыхается" от её нехватки. Как вы контролируете такую ситуацию?


        1. MedicusAmicus
          27.12.2023 06:08
          +2

          "в то же время, когда приложение "задыхается" от её нехватки"
          Не понял, что вы имеете в виду.
          Если приложение до начала обработки изображения занимало 100Мб, то, в идеальных условиях, после окончания обработки оно должно занимать те же 100Мб.

          Если процесс отъел всю доступную ОЗУ и не осовобождает ресурсы после выполнения операции - снимаю дамп и отправляю разработчику. Он уже под отладчиком разберется, что, куда и почему.


          1. Karopka
            27.12.2023 06:08

            ОК, спасибо.


  1. kovserg
    27.12.2023 06:08
    -1

    1536x864 (10.91%)

    Это ноутбуки с 1920*1080 при scale 125% ?


    1. MargoLog Автор
      27.12.2023 06:08

      нет, это именно статистика разрешений экрана рабочего стола,включая отдельные мониторы


  1. Sergey_VR
    27.12.2023 06:08
    +1

    1. Тстирование установки я бы рекомендовал именно на голую ОС. То есть на ту, где тестируемое приложение вообще не устанавливалось. Потому что совсем не факт, что при удалении приложения всё подчищается корректно (папки, ключи в реестре, библиотеки и т.д.). Виртуалки идеально для этого подходят;

    2. Если есть работа с дробными числами, то в языковых настройках рекомендую проверить работу с обоими вариантами разделителя целой и дробной частей (точка и запятая). Встречал проблемы при вводе дробей в приложениях и при запуске командных файлов с дробями;

    3. Вызов сторонних приложений надо тщательно проверять (если он есть, конечно). Офис, графика, pdf и т.д;

    4. Комбинации клавиш надо также проверять. Особенно если есть компоненты, у которых есть быстрый вызов. Интересные явления возникают если у 2-х резидентов одинаковые комбинации клавиш задействованы :)


    1. MargoLog Автор
      27.12.2023 06:08

      спасибо, очень хорошие дополнения


  1. 3vi1_0n3
    27.12.2023 06:08
    +1

    В результате начинается использование виртуальной памяти, что замедляет производительность из-за более медленного доступа к данным.

    Тут требуется уточнить, мне кажется.

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


  1. Nebulae
    27.12.2023 06:08

    Интересно было бы узнать про подход к автоматизации если такой имеется.


  1. Sergey_VR
    27.12.2023 06:08
    +1

    Ещё вспомнилось:

    1. Если предусмотрена одновременная работа нескольких экземпляров, то надо проверить работу каждого экземпляра. А если такой режим непредусмотрен, то тем более надо проверять как будет выглядеть для пользователя запуск 2-го экземпляра. И как после неудачной попытки повторного запуска будет работать первый экземпляр;

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


    1. MargoLog Автор
      27.12.2023 06:08

      1. согласна.особенно, что касается приложений с отображением графиков(биржы)