Что пишут в блогах

Подписаться

Что пишут в блогах (EN)

Разделы портала

Онлайн-тренинги

.
Рефакторинг кода RestAssured.Net с Claude Code
27.07.2026 00:00

Автор: Баз Дейкстра (Bas Dijkstra)
Оригинал статьи
Перевод: Ольга Алифанова

Как некоторые из вас, вероятно, знают, воркшопы и обучающие курсы, которые я провожу, выступления, которые делаю, и статьи, которые пишу, как правило, сосредоточены на фундаментальных навыках тестирования ПО, разработки и автоматизации тестирования, а не на последних технологиях и трендах. Я просто не очень-то «работаю» с трендами. Тем не менее, я много читаю о том, что думают и пишут по поводу этих технологий другие, поскольку я независимый консультант и просто не могу позволить себе не следить за тем, что происходит в индустрии.

До недавнего времени я в основном избегал активного использования инструментов ИИ, за исключением ChatGPT, который помог мне составить персональный план тренировок на выносливость для велоспорта. Так было до тех пор, пока я не начал всё чаще слышать, как люди обсуждают Claude Code и насколько он хорош, особенно с новой моделью Opus 4.6. Это подтолкнуло меня проверить самому, действительно ли он полезен, и эта статья, вероятно, первая из цикла, где я буду делиться своими наблюдениями и выводами.

Конечно, можно было бы начать с создания чего-то с нуля (или «vibe coding», как сейчас модно говорить), но мне не кажется, что это хороший способ понять, что именно ИИ может дать для моей работы. В конце концов, я не занимаюсь созданием принципиально новых вещей, а помогаю людям выполнять уже существующие и важные задачи — в моём случае это тестирование и автоматизация — лучше и эффективнее.

Цель

Я работаю над RestAssured.Net уже около четырёх лет, и со временем количество функциональности, как и сам код, значительно выросли. В результате добавления всё новых и новых возможностей некоторые классы в проекте стали очень большими — даже слишком большими — и при этом часто выполняют сразу множество разных задач.

Я давно хотел провести рефакторинг и вынести отдельные части логики в самостоятельные классы, чтобы сделать код более понятным и удобным в сопровождении, но, честно говоря, иногда уже не вижу леса за деревьями. Поэтому было бы здорово, если бы Claude Code помог мне с этим.

Ограничения

Одна из вещей, которую я понял из своего ограниченного опыта работы с ИИ и из изучения опыта других — важно заранее установить чёткие ограничения, прежде чем «пускать» ИИ в кодовую базу. Поскольку у меня пока не так много практического опыта, разумно двигаться небольшими шагами и сохранять контроль над процессом. В конце концов, я отвечаю за кодовую базу RestAssured.Net, поэтому хочу понимать, что с ней происходит, и быть уверенным, что понимаю все изменения.

Первое ограничение: я не позволяю Claude Code трогать тесты. Приёмочные тесты RestAssured.Net служат для меня страховочной сеткой при исправлении багов и добавлении новой функциональности, я пишу их осознанно и тщательно поддерживаю. Поскольку задача — «чистый» рефакторинг, то есть изменение структуры кода без изменения поведения, тесты должны остаться неизменными, чтобы подтвердить успешность рефакторинга.

Второе: я тщательно проверяю каждое изменение, сделанное Claude, прежде чем добавить его в систему контроля версий. Цель этого эксперимента и использования ИИ в целом — не передать мышление на аутсорс (спасибо, Фиона Чарльз), а расширить собственные возможности. Как я уже говорил, в конечном итоге ответственность за код и изменения лежит на мне, а не на Claude. Поэтому я также не поручаю Claude запуск тестов и коммит в систему контроля версий.

Третье и последнее: действую небольшими шагами. Я видел множество (пугающих) историй о том, как люди позволяли LLM часами генерировать код без промежуточной проверки предложенных изменений, с результатами от просто забавных до откровенно ужасных. Я не утверждаю, что эта кодовая база столь же критична, как, например, код онлайн-банка, но за годы у неё появилась достойная аудитория пользователей. Подводить этих людей не хочется. И кто знает, возможно, кто-то из них использует библиотеку для тестирования тех самых банковских систем, поэтому моя ответственность — публиковать только те версии продукта, которые я считаю пригодными для использования. В таком контексте нет места коду, который я не понимаю и который может создать ложное чувство безопасности.

Первый промпт

После оформления подписки Pro на Claude Code, настройки и инициализации файла CLAUDE.md для проекта, я сначала попросил Claude проанализировать класс ExecutableRequest (он давно меня беспокоил из-за размера и сложности) и предложить улучшения. Я сделал это с помощью следующего запроса:

The ExecutableRequest class is quite long, with a number of different responsibilities. Analyze it and suggest improvements to the code structure without changing the behaviour. List your top 5 recommendations, together with impact on code quality and reasons for your prioritization.

Я не хотел, чтобы Claude сразу вносил изменения — сначала хотелось получить предложения, и, что, возможно, ещё важнее, объяснение, почему эти изменения имеют смысл. Это должно дать достаточно информации, чтобы принять обоснованное решение, стоит ли двигаться дальше.

Opus 4.6 работает медленнее многих других моделей, но предполагается, что качество результата выше. И действительно, после некоторого времени Claude выдал список предложений, которые на первый взгляд выглядели вполне разумно. Его рекомендацией номер один было вынести логику создания тела запроса в отдельный класс RequestBodyFactory. Название не идеальное, но на тот момент ничего лучше не пришло в голову, поэтому я попросил Claude приступить к рефакторингу.

Он так и сделал, и должен сказать — результат не разочаровал. Новый класс был создан без проблем, логика перенесена, класс ExecutableRequest изменён так, чтобы использовать методы нового RequestBodyFactory, и даже соблюдены все требования форматирования и стиля StyleCop. Последнее особенно важно, потому что у меня уровень строгости настроен практически на «ядерный»: даже малейшее нарушение приводит к ошибке компиляции.

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

Оставалось только просмотреть изменения перед коммитом. Как уже говорил в начале, ответственность за код лежит на мне, поэтому важно уметь читать и понимать его, даже если писал его не я.

В целом изменения выглядели очень хорошо, но один момент мне не понравился. В новом методе Create() класса RequestBodyFactory оказалось слишком много аргументов (кажется, девять). Поэтому я спросил, можно ли улучшить это. Claude предложил сгруппировать несколько параметров, связанных с настройками тела запроса, в отдельный тип RequestBodySettings и передавать уже его. Это действительно улучшало читаемость, поэтому я попросил внести изменение. Снова — код компилируется, тесты проходят, всё в порядке.

После этого причин что-то менять больше не осталось, и код можно было коммитить и отправлять. Дальше пайплайн сборки проверил выполнение тестов на всех версиях .NET, поддерживаемых RestAssured.Net. И снова — без проблем.

Чему я научился?

Научил ли меня этот эксперимент чему-то принципиально новому? Не обязательно. Но он подтвердил мои изначальные представления о разумном использовании ИИ в разработке и тестировании. Также стало ясно, что Claude — мощный и при этом удобный инструмент, по крайней мере при работе с кодовой базой и задачами такого (пусть и небольшого) масштаба.

Если кратко:

  • Claude отлично подходит для задач рефакторинга и улучшения кода, подобных описанной в статье
  • Наличие чётких ограничений (линтеры, тесты, ревью перед коммитом) критически важно, если нужно сохранять контроль над кодом, создаваемым ИИ
  • По крайней мере на начальном этапе лучше использовать ИИ для помощи в написании продуктового кода, оставляя написание тестов и анализ результатов людям

По поводу последнего пункта – понимаю, что не все с этим согласятся. Я видел множество примеров, где ИИ пишет тесты и даже выполняет код-ревью. Лично я пока не готов передавать такой уровень контроля программному обеспечению, которое полностью не понимаю и которому не до конца доверяю. По крайней мере без участия человека (например, себя самого) в процессе. Если решите иначе — это нормально, при условии, что готовы нести ответственность и справляться с возможными последствиями…

Тем временем я продолжу улучшать код RestAssured.Net с помощью Claude и других инструментов — там ещё много пространства для улучшений. И, скорее всего, сохраню текущие ограничения. Возможно, это немного медленнее, но зато значительно надёжнее.

Обсудить в форуме