Pull to refresh

Comments 49

Отлично, прямой конкурент для Github Copilot. Такими темпами оно станет скоро бесплатным и безлимитным.

Оставшись бесполезным

Ну, зря Вы так: он хорошо пишет комментарии в коде и неплохо генерирует процентов девяносто юнит-тестов.

Ага, комментарии уровня: "Это стул, на него обычно садится человек" - лишний шум

А юнит тесты, хз как можно писать с помощью АИ. Юнит тест - это на основе своего внутреннего понимания задачи - сломать код. Аи по запросу "напиши тесты" этого делать не будет. Нафиг такие тесты

Единственная сила аи - авто и комплит

Да, нет же, хорошо описывает. Если нужно подробно (что лично я не люблю), то умеет и так.

Немного Вас не понял... Он хорошо юниты на эдж-кейсы делает. Например, если метод принимает X [1..10], то он сгенерирует тесты на 0, 1, 10 и 11.

Какие же это edge-cases, ха. Вот edge-cases: 1e100, 0.1, "foo", null.

Вообще, стараться специально поломать ваш код угодливый T9 не станет: попробуйте заставить его в TDD, например.

Зато люди триста лет назад придумали property-based tests.

Ваши примеры для языков без статического контроля типов. В Delphi если вместо Integer подсунуть Double или строку - даже не скомпилируется.

Во-первых, я что-то не вижу тега «Delphi» в шапке. Во-вторых, 1e100 — это целое, его можно напрямую привести без потери точности.

Там ниже Visual Studio 2022 обсуждают, тоже вроде нет в шапке. Зато есть общий тег Programming. А 1e100 - это константа из какого целочисленного типа? Вы же понимаете, что целочисленная константа может принадлежать к определённому целочисленному типу, только если попадает в диапазон его значений?

В статически типизированных языках попытка присвоения такого значения целочисленной переменной отлавливается на раз. Ну а Python сам сменит тип переменной после присвоения на подходящий.

Куда чего питон сменит? Само по себе 1e100 — float, какой бы ни была мантисса, это понятно. Я ж говорю: «привести».

>>> import math;
>>> math.floor(1e100)
10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104

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

1e100 — это целое

А теперь

Само по себе 1e100 — float

С уточнённой формулировкой соглашусь.

Проще/короче уж написать int(1e100), а результат будет тот же ))

А точное целое 1e100 можно написать так 10**100

Даже если эти примеры это пайлоад в ресте? Неужели в входном json'e нельзя подсунуть строку вместо числа?

Это был строго синтетический пример. Ну, а т.к. я пишу на .NET C#, то пример был для него. Прошу прощения, что не указал отдельно. Как правильно написал хабровчанин ниже, тесты с Вашими входными параметрами не смогли бы скомпилироваться в дотнете.

Да какая разница, зачем цепляться именно к этому примеру? Вы просто за деревьями лес не видите.

Ну пусть это будет не целое, которое завернет компилятор, а строка. Так вот тестирование на пустой строке — это не edge case. Edge case — это невалидная UTF-8 строка, строка с бинарным нулём, строка длиной гигабайт и так далее.

Да, тут Вы правы, такое он не умеет, и лично я от него не жду. Но, он снимает с моих плеч кучу рутины по написанию однотипных тестов на простые случаи. Их же тоже нужно проверять (для того, чтобы удостовериться в целостности контракта), так?

Snapshot testing изобрели триста лет назад, их генерация — вопрос несложного тулинга. Да промпт дольше писать, чем такие тесты нагенерировать.

И, как я уже говорил, TDD идет лесом.

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

Если метод не работает при валидных данных, абсолютно все равно как он работает на не валидных.

Проверять валидные кейсы за разработчиком, вкатившимся более недели назад, — бессмысленно. Люди способны имплементировать success path почти всегда (кроме клинических случаев).

А вот неочевидные подводные камни — не всегда, именно отсюда TDD родился.

Проверка крайних случаев это не единственная задача юнит тестов.

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

Основная функция юнит теста это фиксация поведения. Это позволяет расширять или рефакторить код более уверено. Вы упоминали snapshot testing, но он хорошо работает только для чистой функции. А если нужно проверить, что определенная функция была вызвана в определенный момент с определенными аргументами?

ChatGPT позволяет мне быстро зафиксировать поведение функции / класса. После первого раунда, я глазами пробегаюсь и прошу догенерировать конкретные кейсы. Чаще всего получается быстрее, чем мануально. При этом моя голова тоже работает.

если нужно проверить, что определенная функция была вызвана в определенный момент с определенными аргументами?

Для этого лучше всего подходят моки.

Разумеется. Просто я хотел подчеркнуть что проверка крайних случаев это только одна из задач юнит тестирования. И что даже если ChatGPT не очень силен в этом (в том числе потому что среднестатистический разработчик не очень силен в этом), то другие аспекты он покрывает достаточно хорошо, а потому полезен. Он снимает с меня исполнительскую нагрузку, оставляя только аналитическую.

Я не хочу подробно, я хочу "полезно". Что такое "полезно" вопрос открытый.

Отлично, он напишет тесты на корнер кейсы так, что тесты зеленые. Где в этом действие умственные усилия по проверке, что код верен? Я уж не говорю про тривиальность примера

Я не говорю, что аи бесполезен, просто логика использования совсем не к месту

Опять не завезли поддержку Visual Studio 2022. Кто-то в курсе, почему все плагины ассистов (континум, сбер, яндекс, гугл, джуни) делают только под вскод или джетбрейнз? У студии явно немалая доля юзеров, почему их (нас!) динамят?

Да закопает ее MS, флагманский редактор VS Code у них

Сильное заявление О_о Насчет Rider согласен, сам сидел на нем, пока JB не прикрыли как раз обновление плагинов. Пришлось свичнуться обратно на VS 2022, с которой ушел еще со времен 2017, и, в принципе, не то, чтобы страдаю) Но странно сравнивать ее с ноутпадом, которому завезли solution explorer)

Как обновление плагинов прикрыли? С не российских ip адресов все нормально обновляется

А если в меню плагинов зайти в "Plugin homepage", там выбрать необходимую версию, скачать её и после сделать "Install Plugin from Disk" то обновляется даже не глядя ни на какой IP.

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

Что-то вокруг VS Code много хайпа, пытался в нем что-то делать, не понял, как это можно сравнивать его с полноценной IDE, да хоть с Rider, хоть с Visual Studio.
Да у него много плюсов - VS Code легкий и быстрый, кроссплатформенный и все.

Когда упрётесь в удаленную отладку Wibdows сервиса, писаного хоть на C++, хоть на .NET, или отладку параллельных вычислений, в специфику какой нибуть экзотики и т.п. поймёте, что просто классного и легкого редактора для этого мало.

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

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

С другой стороны, не всем нужен экскаватор и если хватает VS Code для все дел, то действительно полноценная IDE не нужна и это будет правильно и эффективно.

С Windows дела не имел с прошлого века, но «отладка параллельных вычислений, специфика какой-нибудь экзотики» — это прям описание моей повседневности.

И vim лично меня буквально всем устраивает.

VS Code легкий и быстрый

Если vscode быстрый и легкий что же за ад тогда в IDE.

Тоже глубоко сожалею, попробовал прямо счас его в VS Code на C#-проекте: классные интеграции предлагаемых доработок - дифф с текущим файлом, инсерт в него же и т. п. Наверно у нас так может Копайлот, но лень заморачиваться с оплатой)

Потому что Visual Studio 2022 крутится около .NET проектов, а VS Code можно подрубить под написание кода любой экосистемы, или отсутствующей таковой. Возможно, для разработчиков плагинов не надо отстегивать MS на интеграцию в VS Code.

Да ну почему же, экосистема c++ там тоже большая. Да и собственно уже лет 10 можно писать хоть на питоне, хоть на js, да любые другие языки.

Интересно, что даже в Delphi 12.2 появилась встроенная интеграция с движками AI, как локальными Ollama, так и облачными (OpenAI, Gemini и Claude).

Где-то читал, что в студии используется Gemini 2.0. Ну и если спросить у него напрямую, то ответ такой: Я — Gemini, и я создан компанией Google. Я действительно использую модель Gemini 2.0, которая сейчас доступна для индивидуальных пользователей в Gemini Code Assist.

Точно бесплатный? В vs code плашку выдал - You are missing a valid license for Gemini Code Assist and may lose access to the service. Contact your billing administrator to purchase or assign a license.

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

У меня в VS Code на нескольких аккаунтах так, на некоторых точно не использовал никаких облаков, они просто личные :(

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

Мне кажется гемини худший вариант для кода, если брать для сравнения OpenAi и Claude.

Гемини в 30+ раз дешевле, и можно бесплатно через API юзать.

Зачем бесплатно юзать то, что работает хуже, чем платное?

Я помню пробовал использовать его для генераций xpath-ов. Полная фигня, часто генерит просто никуда не ссылающиеся выражения. А надежд то былооо...

после установки он почему-то предлагает To use Gemini Code Assist Standard or Enterprise, you need to select a Google Cloud project. Хотя на youtube глянул, там ничего подобного не требуется.

Sign up to leave a comment.