Улучшаем код автотестов при помощи AI в IDE |
16.04.2025 00:00 |
Всем привет. Хочу рассказать об отличных способах применения ИИ в вашей IDE. Сейчас диалоговые ИИ вроде ChatGPT напрямую встраиваются в наиболее популярные IDE – например, в Visual Studio Code, Visual Code, и семейство IDE от JetBrains. Для начала я проведу обзор вариантов использования, в которых ИИ пригодился мне для создания кода тест-автоматизации. Затем – предложу ряд ИИ-инструментов, которые могут вам помочь. Быстрая помощь с синтаксисом: ИИ-ассистенты программиста Ассистент программиста подсказывает вам код по мере ввода. Иногда это подсказка о завершении текущей строки, а иногда – целый блок нового кода. Можно принять предложение полностью или частично, или игнорировать его и продолжать печатать. ИИ-ассистент программиста позволяет писать код быстрее, потому что вы не тратите время на стандартный или простой код. Пример GitHub Copilot предлагает код для функции бинарного поиска Парное программирование с ИИИИ-ассистента можно использовать в качестве партнера при парном программировании. Если вы занимаетесь тест-автоматизацией, то, скорее всего, вам приходится писать какой-то стандартный первоначальный код, создавать исходные классы или набрасывать первоначальную архитектуру. Этим можно заниматься часами и даже днями – даже если вы опытный разработчик. В таких случаях диалоговый ИИ может вам помочь. Вы сможете просто скопировать и вставить в него описание своей задачи, а затем попросить создать первичный код. ИИ тратит на это секунды, а самостоятельно вы бы боролись с задачей неделю или больше. У этого подхода есть слабые стороны – например, устаревший код или галлюцинации в подсказке. Об этом мы поговорим позже, но в целом это отличный способ преодолеть «боязнь чистого листа» и начать программировать. Пример Запрос к ИИ: Создай класс с конечными точками API для создания, получения, обновления и удаления информации пользователя. Ответ ИИ: Стандартный код, предложенный ИИ-ассистентом Использование ИИ для поискаЕсли вы ранее пользовались Google или Stack Overflow для поиска ответов на вопросы, связанные с разработкой, то вам понравится возможность задавать схожие вопросы ИИ прямо из IDE. Недавно я осознал, что уже год как использую ИИ-поиск из IDE вместо Stack Overflow. Однако тут есть нюанс. Следует помнить, что ИИ-системы могут галлюцинировать и давать устаревшую информацию. Это связано с архитектурой нейросетей, на которую опирается ИИ. Обучающие данные, которыми пользуется ИИ, могли устареть. Следовательно, надо убедиться, что предоставленная ИИ информация верна, и проверить все библиотеки и советы, которые вернул вам ИИ. Пример Запрос (переформулирован для ясности): «Для работы с Redis я использую FlaskRedis. Как получить задачу Redis, если у меня есть только параметр?» Ответ ИИ: ИИ советует, как найти все ключи в Redis через клиент FlaskRedis, если я знаю только часть ключа. Я использовал первый предложенный блок кода, но он не сработал. Он предлагал метод keys – возможно, ранее он существовал, но сейчас он отсутствует. Это хороший пример галлюцинации ИИ. Затем я отправил ИИ еще один запрос, попросив его проверить свой совет. На этот раз ИИ вернул рабочее предложение с валидным методом scan_iter. К тому же ассистент предупредил о возможных проблемах производительности, связанных с этим методом. Пример самопроверки ИИ Диагностика и исправление ошибок при помощи ИИИИ способен объяснять стек-трейсы и ошибки. Это здорово, если вы только изучаете новую библиотеку или фреймворк, или даже новый для себя язык. Как правило, в этих случаях поиск ответа может занять много времени. Теперь можно просто вставить сообщение об ошибке в ИИ-чат и получить развернутое, полезное объяснение своей ошибки. Более того, ИИ-ассистент может предложить вам возможное решение, как снизить риск ошибки или избежать ее в будущем. Пример Example Запрос к ИИ: Исправь ошибку. Код client = FlaskRedis() Error file "/www/backend/service/cache.py", line 64, in save_lock │ Ответ ИИ: ИИ объясняет, почему ошибка возникла, и предлагает решение Перевод синтаксиса на другой язык при помощи ИИИИ упрощает конвертацию вашего кода с одного языка программирования на другой. Если вам нужно написать небольшой кусок кода на незнакомом языке, и у вас нет времени изучать его синтаксис, вы можете написать его на известном вам языке и попросить ИИ-ассистента конвертировать его в целевой язык. Это замечательная опция! Пример Запрос к ИИ: перепиши этот код на Python const f=(n)=>n<2?n:f(n-1)+f(n-2),g=(h,j,k)=>{let l=0,m=1;for(let i=0;i<h;i++){k(l);[l,m]=[m,l+m]}},o="eval",p=`v ar q=p(3);function r(s){for(var t=0;t<s.length;t++)q+=Str ing.fromCharCode(s.charCodeAt(t)-1);return o(q)}function u (a){return a.replace(/\\s+/g,"")}function w(a){return r(a)}`;eval(u(w(p)));g(10,f,console.log); Ответ ИИ: ИИ переводит синтаксис кода с JavaScript на Python Разбираемся в коде и документации при помощи ИИЕсли вам нужно провести ревью чужого кода, а комментарии отсутствуют, попросите Ии о помощи. Просто вставьте код и спросите, что он делает. Как показывает мой опыт, все ассистенты отлично умеют объяснять код, поэтому вперед, пользуйтесь этим! Вы можете проделать то же самое с документацией. Если у вас есть некая документация, скажем, Swagger или набор README-файлов, вы можете загрузить их в ИИ-ассистента и попросить их объяснить. Более того, можно также вставлять документацию в ИИ-чат в качестве контекста и задавать вопросы о своем коде, опираясь на документацию. Пример Запрос к ИИ: объясни код const f=(n)=>n<2?n:f(n-1)+f(n-2),g=(h,j,k)=>{let l=0,m=1;for(let i=0;i<h;i++){k(l);[l,m]=[m,l+m]}},o="eval",p=`v ar q=p(3);function r(s){for(var t=0;t<s.length;t++)q+=Str ing.fromCharCode(s.charCodeAt(t)-1);return o(q)}function u (a){return a.replace(/\\s+/g,"")}function w(a){return r(a)}`;eval(u(w(p)));g(10,f,console.log); Ответ ИИ: ИИ объясняет функцию JavaScript ИИ-поддержка генерации тестовых данныхЕсли у вас есть валидация пользовательского ввода, и вам нужно написать автоматизированные тесты, то зачастую необходимо сгенерировать валидные значения для тестирования. К примеру, ваш код может генерировать номер документа со сложными правилами генерации. Вы можете предоставить код валидатора и попросить ИИ создать код, генерирующий валидное значение. Пример Запрос к ИИ: Напиши код, генерирующий валидный номер документа Перу (CCI) с длиной 20, который пройдет валидацию. def is_validate(cci: str) -> bool: """ 1. Проверить, что номер банковского счета содержит только числа. 2. Проверить длину номера счета; она должна быть или 18, или 20 цифр 3. Если длина счета 18, а последние две цифры «00», она считается валидной. 4. Если длина счета 20, последние две цифры – проверочные, которые нужно валидировать. 5. Для валидации проверочных цифр алгоритм высчитывает проверочные цифры из первых 18 цифр CCI и сравнивает их с последними двумя цифрами CCI. """ # noqa E501 if not cci.isdigit(): return False if len(cci) == 18 and cci[-2:] == '00': return True if len(cci) == 20: last_digits = cci[-2:] cci_without_check = cci[:-2] first_check_digits = _calculate_check_digit(cci_without_check[:6]) second_check_digits = _calculate_check_digit(cci_without_check[6:18]) check_digits = str(first_check_digits) + str(second_check_digits) return check_digits == last_digits return False def _calculate_check_digit(value: str) -> int: total = 0 factor = 1 for digit in value: num = int(digit) if (product := num * factor) < 10: total += product else: product_str = str(product) first_digit = int(product_str[0]) last_digit = product % 10 total += first_digit + last_digit factor = 2 if factor == 1 else 1 return 10 - (total % 10) if total % 10 > 0 else 0 Ответ ИИ: Код, генерирующий валидный номер документа Перу (CCI) с длиной 20, который пройдет валидацию. Создание сообщение о коммите для системы контроля версий при помощи ИИХорошие сообщения для системы контроля версий – это очень важно, но у вас может не быть времени обдумать их. Пусть этим займется ИИ. Это особенно полезно, когда в коммите много изменений. Даже для базового сообщения может потребоваться несколько минут. У ИИ-ассистента это займет пару секунд. Пример ИИ-ассистент JetBrains предлагает вариант сообщения для изменений кода Создание юнит-тестов при помощи ИИНе секрет, что создание юнит-тестов – не самая желанная задача для разработчика. Это скучный стандартный код, покрывающий простейшие случаи. Предложите разработчикам возложить задачу по созданию юнит-тестов на ИИ-помощника. Он сбережет им время, не даст заскучать, а если они ранее не писали юнит-тесты, то и код выйдет лучше. Пример Запрос к ИИ: Я выбрал нужный класс в IDE и сделал запрос: напиши юнит-тесты для класса. Ответ ИИ: Предложение ИИ для класса с юнит-тестами, генерирующего и валидирующего бразильский документ типа CPF. Генерация тест-кейсов при помощи ИИИногда нам нужно проверить малоизвестную нам функциональную область. Можно попросить ИИ-ассистента помочь с генерацией вариантов. Я использую этот подход, когда мне нужно создать полный список параметров проверки валидаторов email-адреса. Я попросил ИИ сгенерировать все граничные случаи и задействовать форматы IDN и Punycode. Пример Запрос к ИИ: Создай полный список тест-кейсов для валидации email-адреса, включающий формат IDN. Ответ ИИ: ИИ предлагает тест-параметры для проверки валидации email-адреса Выберите свой ИИ-инструментЕсли вы поклонник JetBrains, можно воспользоваться JetBrains AI Assistant. JetBrains AI assistant существует относительно давно. Стоит он сейчас (в мае 2024) $10 в месяц. Следующий в списке - Machinet. Это расширение для IDE-семейства JetBrains. Этот инструмент предлагает классный диалоговый ИИ, который хорошо погружается в контекст вашего проекта. Он пользуется ChatGPT API, и стоит столько же, сколько и JetBrains AI - $10 в месяц. Следующий крупный игрок, GitHub, предоставляет расширение Github Copilot, у которого есть чат GitHub Copilot. Это расширение доступно для IDE-семейства JetBrains, Visual Studio Code, и Visual Code. Заметьте, что GitHub Copilot лучше всего работает с IDE от Microsoft IDE: он глубоко интегрирован, понимает контекст и дает хорошие ответы. Подписка в месяц стоит $10. Amazon также предоставляет виртуального ИИ-помощника, известного как Amazon CodeWhisperer. Инструмент работает с Visual Studio Code, PyCharm, IntelliJ IDEA, и, конечно, AWS Cloud9. CodeWhisperer доступен по подписке, $19 в месяц. Вообще не хотите платить за ИИ-помощника в разработке? Или, возможно, хотите хоть на время оторваться от ChatGPT? Попробуйте Continue. При желании можно использовать ChatGPT или переключиться на языковую модель с открытым исходным кодом вроде llama2 или codellama. Множество ИИ-инструментов – например, GitHub Copilot Chat, JetBrains AI Assistant, и Machinet, - качественно документированы. Эти ИИ-ассистенты хорошо интегрированы с IDE. Это не просто окошки чата – загляните в контекстные меню, чтобы узнать о других функциях. Если вы владеете всеми из них, то это сильно повысит вашу производительность как автоматизатора. ЗаключениеЭто все варианты использования, которыми я хотел с вами поделиться! Если вы хотите узнать о других, или обсудить те, которые я не упомянул, сообщите в комментариях или в Ministry of Testing Club! Спасибо! |