Рубріки: Тестирование

«Его легко можно научить плохому»: как мы тестировали приложение с искусственным интеллектом

Галина Іщенко

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

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


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

Мы ожидали, что у нас сразу будет доступ к алгоритму работы искусственного интеллекта и, исходя из этого мы разберемся, как он работает. Но наш Product Owner приобрел этот алгоритм у третьей стороны, поэтому выбор решения для искусственного интеллекта был исключительно желанием клиента. Так в условиях нашего сотрудничества появилось NDA от провайдера искусственного интеллекта.

Поскольку наш заказчик не имел права делиться с нами ни кодом, ни принципами работы алгоритма, этот ИИ для нас оказался черным ящиком.

Чтобы наш самообучающийся алгоритм работал на основе искусственного интеллекта, его для начала необходимо… правильно — научить! Делать это нам нужно было вручную с помощью множества кейсов и сетов входных данных. Мы вполне серьезно рассчитывали на выдачу адекватных результатов от программы, умеющей думать. Но на практике наш инструмент отнюдь не отслеживал адекватность установленных нами данных. С этим тоже нужно было что-то делать.

Итак, что мы имеем: приложение, которое думает и непонятно как принимает решение, и при этом претендует на то, чтобы мы его понимали.

На вход в систему подавались анкеты пользователей. Затем система анализировала эти данные и, руководствуясь своими алгоритмами на основе искусственного интеллекта (тот же черный ящик), выдавала результат совпадения: отказ (совпадение не выявлено) или наличие совпадения (результат указывался в соотношении).

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

Но как именно система выносила свой вердикт нам было неизвестно.

Планирование тестирования

Чтобы облегчить тестирование системы на базе искусственного интеллекта, еще на этапе планирования процесса обратите внимание на следующие аспекты:

  • Попросите у заказчика как можно больше тестовых данных. Чем больше у вас будет валидных входящих данных, тем проще составить адекватный data setup и начать обучение системе.
  • Соберите слаженную команду. Может быть, это звучит банально, но в нашем случае этот аспект сыграл решающую роль. Учитывая, что системы на основе искусственного интеллекта самообучающиеся, при принятии командой неверных решений в работе с ней, легко можно научить ваш искусственный интеллект плохому. В результате программа будет мыслить неправильно и некорректно работать.
  • Спросите у Product Owner данные о проценте допустимой погрешности. Так вы сэкономите себе много времени и нервов.
  • Учитесь думать нестандартно. Не пытайтесь предусматривать действия искусственного интеллекта. Попытайтесь понять его нестандартную логику и тогда легко сможете взаимодействовать с ней.

Технические требования и (не)соответствие им — как действовать?

Вернемся к нашему примеру. В требованиях речь не шла об алгоритме, благодаря которому система принимает решение. В технической документации упоминались только общие данные по UI. Никаким образом не был описан user flow — сценарий взаимодействия пользователя с системой.

User flow наглядно иллюстрировал бы порядок действий, необходимый для корректной работы приложения.

Сценарий «Пользователь выполняет действие X, система отвечает действием Y… и все работает» совершенно не отвечал тому, с чем мы столкнулись.

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

Наш совет: когда читаете требования к разработке, будьте готовы, что они могут не иметь ничего общего с тем, как все работает на самом деле. В таком случае вам придется многое делать вручную.

Подготовка к тестированию

Прежде чем приступить к тестированию ПО с элементами искусственного интеллекта, убедитесь, что у вас:

  • Налажен надежный контакт с заказчиком ПО. Только этот человек хорошо представляет, что именно он хочет получить от разрабатываемой системы.
  • В команде есть специалист, ответственный за интеграцию. Он сможет как-то влиять на работу программного алгоритма.
  • По возможности установите контакт с разработчиком ПО. Общение с ним поможет существенно облегчить понимание того, что написано в коде.
  • Учите user flow. Если вы не будете досконально понимать, где, как и зачем ваш заказчик внедряет искусственный интеллект, вы не сможете понять, как именно его тестировать.

Тестирование продукта

В нашем случае он начался с полного абсурда:

  1. Сначала мы увидели отсутствие какой-либо адекватной интеграции — со старта она вообще не работала.
  2. Второй причиной абсурдного поведения стал достаточно высокий процент погрешности системы (в нашем случае она колебалась до 50%), что никак не соответствовало указанной погрешности в технической документации.
  3. И третье — негативные проверки и тестирование с предельными значениями принесли противоположные от ожидаемых результаты.

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

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

В ходе тестирования мы выделили несколько важных аспектов. Советуем вам учесть эти моменты в своей работе:

  • Помните: системы на основе искусственного интеллекта подходят для имитирования реального процесса принятия решений. Поэтому при их тестировании отталкивайтесь от ситуаций, которые могут произойти с пользователем, когда он взаимодействует с продуктом.
  • Обеспечьте подключение постороннего инструмента ИИ с вашим приложением. Выясните, как функционирует серверная часть и как происходит индексация данных. Это поможет избежать дефектов.
  • Постоянно тренируйте вашу систему. Она же создана для того, чтобы учиться. Правильно подбирайте валидные тестовые данные исходя из данных production-сервера. Анализируйте результат не по сухим инструкциям по техдокументации, а по собственной логике. Имейте в виду, что отрицательные тесты следует использовать осторожно. Иначе можно научить систему «думать» неправильно.

Прежде чем передавать продукт в продакшн, убедитесь, что вы соблюдали следующие условия:

  • Клиент знает, что продукты на основе искусственного интеллекта не могут работать «из коробки» идеально. Сначала их нужно научить, тренируя систему на валидных входных данных.
  • Если у Product Owner нет таких данных, настаивайте на проведении бета-тестирования и UAT — пользовательского тестирования. Все же участие реальных людей в тестировании продукта не заменят никакие первоклассные тест-кейсы.
  • Сразу тестируйте hot-fixes. Таким образом вы убедитесь, что разработчики правильно проанализировали найденные вами дефекты и внесли нужные корректировки в код. Но будьте готовы к тому, что тестирование может происходить в овертайме.

Вместо вывода

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

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

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Останні статті

Токсичные коллеги. Как не стать одним из них и прекратить ныть

В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…

07.12.2023

Делать что-то впервые всегда очень трудно. Две истории о начале карьеры PM

Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…

04.12.2023

«Тыжпрограммист». Как люди не из ІТ-отрасли обесценивают профессию

«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…

15.11.2023

Почему чат GitHub Copilot лучше для разработчиков, чем ChatGPT

Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…

13.11.2023

Как мы используем ИИ и Low-Code технологии для разработки IT-продукта

Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…

07.11.2023

Университет или курсы. Что лучше для получения IT-образования

Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…

19.10.2023