Нейросети и искусственный интеллект (далее ИИ) развиваются стремительными темпами, и у многих SDET-специалистов появляются опасения о потере работы. И действительно, список задач, которые уже сегодня может выполнить чат-бот, впечатляет.
Подготовка тестовых данных занимает много времени? ИИ сгенерирует для ваших тестов данные любой сложности и в любых форматах.
Не успеваете писать нужное количество тестовой документации? Нейросеть составит чек-листы и тест-кейсы на основе любых входных данных: по текстовому запросу, по скриншоту страницы вашего веб-приложения и даже по блок-схеме бизнес-процесса.
Возникли трудности при коммуникации с коллегами? ИИ переведет текстом или озвучит вашу речь на любой язык и при необходимости даже переформулирует сообщения, сделав их более конструктивными!
Учитывая перечисленное, может ли ИИ заменить человека в профессии или снизить востребованность SDET-специалистов на рынке?
Привет! Меня зовут Дария, я SDET-специалист в компании SimbirSoft и недавно задалась этим вопросом. Как известно, лучший способ познакомиться с новыми технологиями и инструментами — «потрогать их руками», чем я и занялась.
В этой статье хочу поделиться результатом своего исследования.
Работы в тестировании не останется: мы всё автоматизируем
Какие главные цели преследует автоматизация тестирования? Прежде всего это ускорение процесса тестирования. Но также автотесты помогают освободить ресурсы специалистов для решения более сложных, порой даже исследовательских задач, которые требуют глубокого погружения, анализа и нестандартного мышления, а рутинные операции и повторяющиеся действия максимально автоматизировать.
Однако прежде чем писать автотесты по нашим сценариям, сначала нужно составить по ним подходящие для автоматизации тест-кейсы, т.е. максимально простые, конкретные и недвусмысленные. Как показывает практика, задача лишь на первый взгляд кажется простой, а в реальности требует значительных затрат ресурсов специалистов.
Что если можно было бы автоматизировать составление тест-кейсов для автоматизации? Согласитесь, в эпоху ИИ подобная идея не кажется нереализуемой.
Но, помимо задач, связанных с уже упомянутым исследовательским тестированием, чем же тогда всё-таки заниматься специалисту?
Искусственный интеллект: сотрудничество, а не конкуренция
На самом деле взаимодействие с ИИ может стать отдельной сферой деятельности, в которой специалист найдет массу возможностей реализовать свой потенциал.
Мы можем наблюдать, как многие привычные повседневные задачи переходят в область компетенции ИИ. Но не стоит забывать ключевой момент: нейросети — это хоть и очень мощный, но все-таки инструмент, а значит, для работы с ними нужны определенные навыки и мастерство.
Именно эта идея определяет направление развития SDET-специалистов в новых реалиях. На первый план выходит умение грамотно использовать ИИ в работе, и чем тоньше будет уровень владения этим инструментом, тем более продуктивным будет сотрудничество.
Prompt-engineering: программирование на нативном языке
Что отличает первоклассного разработчика от рядового кодера (а теперь уже и от нейросети)? Увы, это не знание алгоритмов, языковых конструкций и даже архитектурных паттернов, (хотя для развития нашего интеллекта они по-прежнему играют важнейшую роль!) — всем этим владеет ИИ. Определяющий навык — нестандартное мышление.
С одной стороны, понятие программирования становится гораздо более широким и доступным практически любому, ведь суть этого скила сводится к умению на нативном языке так изложить свою идею, цель, задачу, чтобы ИИ смог максимально приближенно к идеальному ее реализовать. С другой стороны, само владение в совершенстве навыком общения с ИИ позволит оставаться по-настоящему востребованным в любой области — будь то разработка, аналитика или тестирование.
Недаром уже сейчас prompt-engineering набирает популярность, а за специалистами, владеющими этим навыком, охотятся HR.
Как работает prompt-engineering
Токены и токенизация
Важнейшую роль в понимании и генерации текста языковыми моделями играют токены. Токен — это минимальная смысловая единица текста: слово или часть слова, знак пунктуации, цифра, буква.
Когда мы отправляем запрос, модель преобразует его в список токенов. Именно токенизация (процесс разделения текста на токены) позволяет модели понять смысл и контекст переданных нами инструкций.
При генерации ответа модель использует свое понимание полученных токенов, чтобы предсказать следующий токен последовательности, основываясь на контексте предыдущего. Простейший пример — задача завершения предложения.
Запрос:
Результат:
Полученный результат основан на контексте «Погода летом…»
Подготовка: настраиваем LLM под определенную задачу
Существует несколько параметров семплирования, позволяющих оптимизировать поведение модели для получения более релевантных ответов.
Разберем основные из них:
Температура. При генерации ответа каждому токену назначается определенный вес, который влияет на вероятность его появления в тексте. При низкой температуре выбирается токен с наибольшим весом, т.е. наиболее высокой оценкой вероятности. Такой подход отлично работает при решении задач, требующих высокой точности ответа, поскольку позволяет получать более качественные результаты.
Если же задача более творческого плана, стоит повысить значение температуры. Это позволит добиться большего разнообразия ответов, т.к. другие возможные токены также будут иметь более высокий вес, и случайность их выбора увеличится.
Еще высокие значения температуры могут быть полезны, если необходимо получить несколько вариантов ответа на один и тот же вопрос, а затем выбрать наиболее подходящий.
Top-p или семплирование ядра. При использовании данного параметра вместо выборки из всего распределения модель выбирает из «ядра» токенов: в него попадают только те, оценки вероятностей которых в сумме превышают значение p. Это позволяет заранее исключить маловероятные токены. Как и в случае с температурой, чем ниже значение, тем более строгой будет фильтрация при выборе токенов.
Штраф за частоту — еще один полезный параметр для повышения разнообразия и оригинальности ответов. Штраф накладывается за каждое новое появление одного и того же токена в тексте, что снижает вероятность повторного использования в ответе ранее встречавшихся слов и словосочетаний.
Штраф за наличие. В отличие от штрафа за частоту, штраф за наличие накладывается один раз, то есть здесь не имеет значения, сколько раз данный токен встретился в тексте. Штраф за наличие способствует тому, что модель рассматривает более широкий спектр тем и идей при генерации ответа, не отказываясь при этом полностью от повторений отдельных слов.
Стоит заметить, что в отличие от повышения температуры, использование штрафов за частоту или за наличие позволяет добиться большей креативности именно в рамках одного ответа.
Эффективный промптинг: основы
Важно понимать, что чем больше токенов содержит промпт, тем больше возможных комбинаций для следующего токена будет рассматриваться при генерации ответа. Иначе говоря, объем и сложность вычислений увеличиваются с каждым токеном, что может сказаться на качестве результата и скорости его получения.
Однако простое сокращение количества токенов в запросе не может гарантировать улучшение производительности. Чтобы достичь максимального эффекта, необходимо соблюсти баланс между краткостью и содержательностью.
Элементы промпта
Посмотрим на промпты более детально. Любой запрос содержит один из следующих элементов:
инструкция — конкретное указание того, какую задачу следует выполнить;
контекст — дополнительная информация для более точного ответа;
входные данные — вопрос, ответ на который следует предоставить;
индикаторы вывода — ожидаемый формат ответа.
Использование того или иного элемента при составлении промпта зависит от формата решаемой задачи, а также от применяемой техники.
Техники промптинга
Рассмотрим три наиболее простые техники составления промптов:
Zero-shot prompting или задачи «нулевой разметки». При составлении запроса мы не предоставляем какого-либо описания выполняемой задачи, примеров реализации.
Такой промпт содержит вопрос или инструкцию (вспомним рассмотренный ранее пример с завершением предложения), или может быть в формате «Вопрос – ответ».
Запрос:
Результат:
Few-shot prompting (промптинг с несколькими примерами). Данная техника включает в запрос демонстрацию выполняемой задачи, предоставляя модели больше контекста. Рассмотрим задачу классификации с несколькими примерами.
Запрос:
Результат:
Chain of thought prompting (цепочка мыслей). Суть данной техники состоит в последовательном выполнении сложных рассуждений, шаг за шагом. Ее можно комбинировать с few-shot prompting, добавляя в ответ последовательность шагов, приведших к данному результату.
Рассмотрим на примере.
Запрос:
Результат:
Для сравнения, когда мы не использовали специальный вопрос, модель предоставила неверный ответ.
Запрос:
Результат:
PromptPerfect: промпты для чайников
Даже если вы пока новичок в составлении промптов, есть прекрасный инструмент, который может помочь вам в этом.
PromptPerfect позволяет оптимизировать промпты для разных языковых моделей, предоставляет доступ к ИИ по API, имеет интуитивно понятный интерфейс, а также поддерживает многоязычность. Из минусов — инструмент платный, но для нашего примера достаточно и пробной версии.
Итак, пример: мы хотим написать тест-кейс для проверки функциональности поиска товара в каталоге интернет-магазина.
На главной странице в режиме Auto-tune нажимаем Get Started:
Далее выбираем интересующую нас языковую модель и настраиваем параметры работы оптимизатора, например, количество и язык оптимизаций (для большей наглядности будем использовать английский язык):
Далее вводим наш промпт: «Напиши тест-кейс для проверки функциональности поиска товара в каталоге» в поле Original Prompt и нажимаем «Отправить». ChatGPT сгенерирует тест-кейс по нашему промпту, а оптимизатор предложит (по умолчанию) 2 варианта его оптимизации.
Сравниваем результаты первоначального промпта и его оптимизированных версий.
Можно заметить, что в первом случае тест-кейс, выданный ChatGPT, достаточно абстрактный, ему не хватает деталей, хотя он уже покрывает позитивные и негативные сценарии.
Запрос:
Результат:
Посмотрим теперь на первый вариант оптимизации нашего промпта. В нем более детально описаны тестовые данные: поиск товара по названию, по частичному совпадению, продвинутый поиск с использованием фильтров, а также требования к самому тест-кейсу: он должен быть полным, охватывать позитивные и негативные сценарии, быть ясным, структурированным и выдавать стабильные результаты при повторных запусках.
Как видим, все эти изменения отражены в ответе: в кейсе появились название, ID, предусловия, шаги, ожидаемые результаты и даже тестовое окружение! Также есть конкретные тестовые сценарии, которые мы указали в нашем запросе.
Заключение
Мы рассмотрели простые примеры использования ИИ в тестировании и убедились в важности умения качественно составлять промпты.
Резюмируя вышесказанное, подведем итоги:
Нейросети не заменяют SDET-специалистов, а лишь выводят нашу профессиональную деятельность на новый уровень.
Программирование становится доступнее, но вместе с тем требует развитых скилов общения с ИИ.
Овладение навыком промпт-инжиниринга дает возможность как разработчикам в тестировании, так и любым специалистам в IT оставаться востребованными.
Спасибо, что дочитали до конца! Больше авторских материалов для SDET-специалистов от моих коллег читайте в соцсетях SimbirSoft – ВКонтакте и Telegram.