Хотя мне в основном нравится завершение кода, помощники LLM дали мне довольно много проблем с кодом Visual Studio. При изменении расширений модели крупной языковой модели (LLM) для обзоров VS код почти имел плату. Поэтому, хотя я не был уверен в том, чтобы запустить помощника по коду, который не запускался внутри IDE, по крайней мере, ему не нужно было бы хорошо играть с кодом VS.
Claude Code из Anpropic описывает себя как «инструмент агента кодирования, который живет в вашем терминале». Он читает ваш проект и «оптимизирует ваш рабочий процесс». Я действительно не знаю, что означает этот последний бит, но остальные модные слова в порядке. Claude Code описывается как развивающийся предварительный просмотр бета -исследования, который может откровенно описать каждый генеративный продукт AI (Genai). Я знаю, что это, возможно, запланированный путь к «кодированию вибрации», поскольку он имеет взаимодействие с низким или без кода через разработчика. Но я сейчас проигнорирую это.
Однако я хотел посмотреть, может ли он сделать какую-то тестовую разработку (TDD). Скорее забавно, что отчасти отказался от TDD, потому что LLM борются с ним. LLM довольно хороши в создании проходящих тестов после того, как код будет выполнен; К сожалению, написание тестов впоследствии означает, что вы просто отмечаете свою собственную домашнюю работу. Но мне сказали, что LLM могут работать с TDD.
Установка Claude Code
Ему нужен node.js 18+, поэтому я открываю свой терминал:
Я в порядке с этим, так что давайте поместим несколько монет в слот. Если вы пойдете на антропную консоль, вы можете зарегистрироваться и купить токены. Это не огромное наложение, но, учитывая, что я что -то пробую из лаборатории, они могли бы стать немного мягче:
Модель хочет посмотреть на ваш код проекта, поэтому я начну консольный проект с некоторыми тестами и посмотрю, смогу ли я убедить его сделать со мной немного TDD. Если вы посмотрите на пост, который я сделал на Codium, вы увидите некоторые из тех же методов и применяемых кодов.
Я открываю код VS из нового каталога, затем использую командную палитру для создания нового проекта в качестве приложения консоли. Я также хочу использовать тестовую структуру NUNIT, поэтому я добавляю конфигурацию непосредственно в свой CSPROJ.
Затем я определяю минимальный класс Bankaccount:
namespace bankaccount {public class savingsaccount {} class Program {static void main (строка[] args) {savingsaccount account = new SavingsAccount (1000); account.deposit (500); account.withdraw (200); Console.WriteLine ($ «Текущий баланс: {account.getBalance ()}»); }}} 1234567891011121314151617 пространство имен Bankaccount {public Class SavingsAccount {} Class Program {static void main (строка[] args) {savingsaccount account = new SavingsAccount (1000); account.deposit (500); account.withdraw (200); Console.WriteLine ($ «Текущий баланс: {account.getBalance ()}»); }}}
Конечно, вышеупомянутое не будет работать — что является сущностью. Я добавляю в базовый тестовый класс, чтобы убедиться, что у меня все правильно настроено:
Использование Bankaccount; Использование NUNIT.FrameWork; Общедоступные тесты {
[SetUp]
public void setup () {}
[Test] public void test1 () {assert.pass (); }} 12345678910111213 с использованием bankaccount; Использование NUNIT.FrameWork; Общедоступные тесты { [SetUp] public void setup () {} [Test] public void test1 () {assert.pass (); }}
Итак, теперь мы можем сделать наш старший инженер -бит и определить тесты, чтобы наш младший (Клод) мог написать код. Вот начальные тесты:
Использование Bankaccount; Использование NUNIT.FrameWork; Общедоступные тесты {
[SetUp]
public void setup () {}
[Test]
public void test_deposit () {savingsaccount ba = new SavingsAccount (); ba.deposit (20); Assert.areequal («$ 20», ba.showbalance ()); }
[Test]
public void test_withdraw_more_than_balance () {savingsaccount ba = new SavingsAccount (); Assert.Throws
Теперь давайте завершим установку Клода и поместим его на работу. Мы переходим в Рабочий каталог и включаем Клод:
Который приводит к:
И да, это какое -то хорошее искусство ASCII. Конечно, я настроил это с антропной консолью выше.
Затем нас выталкивают в браузер. И я только что попал в терминал!
Теперь я нахожусь. Помните, это предварительный просмотр бета -исследования.
Для начала я могу создать файл claude.md, с которым я могу обучать Клода. Надеюсь, я смогу сказать здесь, что мы делаем TDD. Я добавил строку в сгенерированный файл, описывающий мои намерения, но я понятия не имею, эффективно ли она.
После того, как я попросил его пройти тесты, Клод написал код, и мы получили проходящие тесты:
Просто чтобы подтвердить, тесты прошли:
Сгенерированный код в порядке. Итак, мы делаем TDD! Я бы сказал, что это лучше не происходит в IDE.
Конечно, этот банковский код является одновременно базовым и, вероятно, прост в поиске по всему Интернету. Поэтому я представлю идею ежедневного интереса с помощью тестов:
[Test]
public void test_daily_interest_rate () {savingsaccount ba = new SavingsAccount (); ba.setDailyIntertrate (0,05 м); ba.deposit (100); ba.applydailyInterest (); Assert.areequal («$ 100,05», ba.showbalance ()); } 123456789
[Test] public void test_daily_interest_rate () {savingsaccount ba = new SavingsAccount (); ba.setDailyIntertrate (0,05 м); ba.deposit (100); ba.applydailyInterest (); Assert.areequal («$ 100,05», ba.showbalance ()); }
Я сохраняю это и снова прошу Клода написать пропущенные методы. Он успешно предлагает новый код, необходимый:
Это хорошо. Очевидно, что сберегательный счет должен поступать с ежедневной ставкой по умолчанию, но с точки зрения гибкого кодирования, этот прогресс в порядке. Теперь, если вы задержитесь, вы увидите ошибку. Я думаю, что ежедневная процентная ставка составляет процент. Но код просто прямой умножает баланс на 0,05, что составляет 5%. Это было бы немного высоко для ежедневного интереса. Ошибка идеально видна, когда мы запускаем тесты, хотя:
Думайте об этом как о TDD с парой. Я скажу Клоду, что эта ставка должна быть процентной:
Там мы пойдем. Я попрошу Клода внести изменения. Все хорошо, но теперь у нас есть другая ошибка, когда мы запускаем тесты:
Это просто проблема формата. Мы хотим, чтобы только точность баланса показала два места после десятичной точки, чтобы представлять центы.
Клод понимает это и исправляет:
И теперь я должен фактически исправить свой тест, который не настаивает на правильной точности. И после того, как я исправил свой тест, наконец -то мы хороши:
Заключение
Итак, я доказал, что Claude Code может сделать TDD в принципе. Это делает меня счастливым, так как это оставляет меня с достаточно безопасным кодом, не надеясь, что мой партнер Pair Pair понимает все. LLM технически ничего не понимает; Это не работа инструмента. Но это может следовать инструкциям. Важно отметить, что я не позволил ему запустить тесты — нет необходимости, чтобы он был вокруг себя, когда человек может выбрать направление.
Дисциплина TDD довольно хорошо работает с помощью LLM, поскольку человек -разработчик может устранить качественные барьеры и определить дизайн. На самом деле, это часто было так, как старшие инженеры работали со смешанными командами, так что это даже не формирует новые отношения. Я могу только надеяться, что будущие помощники LLM смогут продвигаться вперед с TDD и закрыть пробел в доверительном доверии, от которого они в настоящее время страдают.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид был лондонским профессиональным разработчиком программного обеспечения в Oracle Corp. и British Telecom, а также консультантом, помогающим командам работать более гибким образом. Он написал книгу по дизайну пользовательского интерфейса и с тех пор пишет технические статьи …. Подробнее от Дэвида Истмана