Готова поспорить, что каждый тестировщик и разработчик испытывал невероятный восторг перед первой работой с искусственным интеллектом. Так же было и у меня. Но романтические ожидания быстро наткнулись на непробиваемую стену реальности. Однажды моей команде пришлось тестировать самообучающийся алгоритм. С самого начала нас ожидало много неожиданностей.
В этой статье я хочу поделиться опытом и вызовами, с которыми столкнулась вместе с QA Lead Ириной Смердовой. Я расскажу, как мы настроили процесс тестирования так, чтобы все прошло как можно эффективнее и комфортнее. Материал будет полезен всем, кто интересуется внедрением искусственного интеллекта в реальный софт.
Для примера возьмем мобильное приложение для знакомств. Это гипотетический кейс, но полностью отражает все трудности, с которыми мы столкнулись на реальном проекте. В основе нашего воображаемого приложения — самообучающийся алгоритм, который сравнивает данные пользователей и на основании их уникальных характеристик выносит вердикт: подходят ли люди друг другу, а также дает оценку совпадения в процентах.
Мы ожидали, что у нас сразу будет доступ к алгоритму работы искусственного интеллекта и, исходя из этого мы разберемся, как он работает. Но наш Product Owner приобрел этот алгоритм у третьей стороны, поэтому выбор решения для искусственного интеллекта был исключительно желанием клиента. Так в условиях нашего сотрудничества появилось NDA от провайдера искусственного интеллекта.
Поскольку наш заказчик не имел права делиться с нами ни кодом, ни принципами работы алгоритма, этот ИИ для нас оказался черным ящиком.
Чтобы наш самообучающийся алгоритм работал на основе искусственного интеллекта, его для начала необходимо… правильно — научить! Делать это нам нужно было вручную с помощью множества кейсов и сетов входных данных. Мы вполне серьезно рассчитывали на выдачу адекватных результатов от программы, умеющей думать. Но на практике наш инструмент отнюдь не отслеживал адекватность установленных нами данных. С этим тоже нужно было что-то делать.
Итак, что мы имеем: приложение, которое думает и непонятно как принимает решение, и при этом претендует на то, чтобы мы его понимали.
На вход в систему подавались анкеты пользователей. Затем система анализировала эти данные и, руководствуясь своими алгоритмами на основе искусственного интеллекта (тот же черный ящик), выдавала результат совпадения: отказ (совпадение не выявлено) или наличие совпадения (результат указывался в соотношении).
Далее присоединялся пользователь: рассматривал результат, предложенный ему программой, и одобрял его или отклонял. В случае отказа система должна была реагировать на несогласие пользователя с ее решением, запомнить это и научиться больше не выносить ложных ответов.
Но как именно система выносила свой вердикт нам было неизвестно.
Чтобы облегчить тестирование системы на базе искусственного интеллекта, еще на этапе планирования процесса обратите внимание на следующие аспекты:
Вернемся к нашему примеру. В требованиях речь не шла об алгоритме, благодаря которому система принимает решение. В технической документации упоминались только общие данные по UI. Никаким образом не был описан user flow — сценарий взаимодействия пользователя с системой.
User flow наглядно иллюстрировал бы порядок действий, необходимый для корректной работы приложения.
Сценарий «Пользователь выполняет действие X, система отвечает действием Y… и все работает» совершенно не отвечал тому, с чем мы столкнулись.
Приведенные в документации формулы отражали отвлеченные принципы работы искусственного интеллекта. Документированный алгоритм интеграции тоже не принес нам пользы. На практике особенности работы интеграции пришлось выяснять через прогон тест-кейсов и составление статистики, исходя из полученных результатов.
Наш совет: когда читаете требования к разработке, будьте готовы, что они могут не иметь ничего общего с тем, как все работает на самом деле. В таком случае вам придется многое делать вручную.
Прежде чем приступить к тестированию ПО с элементами искусственного интеллекта, убедитесь, что у вас:
В нашем случае он начался с полного абсурда:
Подобные системы не подходят для рассмотрения каких-либо крайних параметров, ведь они опираются на средние значения. Поэтому активное использование тестов, основанных на предельных показателях, дают обратный результат в контексте правильного обучения программы.
Отсюда вывод: использование отрицательных тестов для самообученных алгоритмов нужно минимизировать, доведя их до одного-двух.
В ходе тестирования мы выделили несколько важных аспектов. Советуем вам учесть эти моменты в своей работе:
Прежде чем передавать продукт в продакшн, убедитесь, что вы соблюдали следующие условия:
Тестирование программного обеспечения на основе искусственного интеллекта в нашем случае принесло множество неожиданностей. Вероятно мы слишком много ожидали от продукта, совершенно забыв об одном нюансе: самообучающиеся системы всегда работают так, как ты их научишь.
Как только мы поняли принцип действия этого бумеранга, он сразу же вернулся к нам с хорошими новостями. Продукт был одобрен заказчиком, вышел на рынок и по-прежнему поддерживается.
В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…
Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…
«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…
Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…
Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…
Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…