Релиз модели24 июля 2026 г., 13:46 МСК🤖 Auto

Uncle Bob выпустил CRAP4Java: инструмент для борьбы с кодом от AI-агентов

Легендарный разработчик Роберт Мартин (Uncle Bob) представил утилиту CRAP4Java, которая оценивает качество кода по формуле, учитывающей сложность и покрытие тестами, чтобы выявлять проблемные участки, часто генерируемые ИИ.

Баннер новости 4292

Новый инструмент против «мусорного» кода

Роберт Мартин, известный как Uncle Bob, опубликовал на GitHub проект crap4java. Это независимый инструмент для анализа Java-проектов, основанный на метрике CRAP (Code Radically Anticipating Problems). Инициатива напрямую связана с его недавним заявлением о том, что он отказывается читать код, написанный ИИ-агентами, из-за его низкой читаемости и надежности.

Инструмент работает как самостоятельное приложение (standalone), не требуя сложной интеграции в CI/CD, хотя и использует данные JaCoCo. Его главная цель — автоматизировать поиск методов с высоким риском поддержки и багов, которые часто появляются при автоматической генерации кода.

Как работает формула CRAP

В основе утилиты лежит математическая модель, которая комбинирует цикломатическую сложность (CC) и покрытие кода тестами. Метрика рассчитывается по следующей формуле:

CRAP = CC^2 * (1 - coverage)^3 + CC

Где:

  • CC — цикломатическая сложность метода.
  • coverage — доля покрытия метода тестами (от 0 до 1), получаемая из отчетов JaCoCo.

Чем выше значение CRAP, тем «опаснее» метод. Значение выше 8.0 считается порогом, превышение которого приводит к коду ошибки 2, сигнализируя о необходимости рефакторинга.

Технические детали и интеграция

Утилита использует плагин JaCoCo версии 0.8.12 для сбора метрик. Процесс анализа включает несколько шагов:

  1. Удаление старых артефактов покрытия (файлы в target/site/jacoco/ и target/jacoco.exec).
  2. Запуск тестов и генерации отчета через Maven.
  3. Парсинг файла target/site/jacoco/jacoco.xml.
  4. Анализ выбранных Java-файлов и вывод рейтинга.

Результаты сортируются по убыванию CRAP-оценки. Методы с отсутствующим покрытием (N/A) выводятся в конце списка.

Ключевые метрики и интерфейс

Инструмент предоставляет гибкий CLI для анализа всего проекта или только измененных файлов. Ниже приведена структура вывода и ключевые параметры:

Параметр / Команда Описание и поведение
--help Вывод справки по использованию утилиты.
Без аргументов Анализ всех Java-файлов в директории src/.
--changed Анализ только тех файлов, которые были изменены (diff).
<file ...> Анализ конкретных указанных файлов.
Порог ошибки Код выхода 2, если CRAP > 8.0. Код 0 — успех.
Отсутствие покрытия В отчете отображается как N/A и ставится в конец списка.

Почему это важно для Java-разработчиков

С ростом использования AI-ассистентов (Copilot, Cursor и др.) в кодовую базу проникает код, который может быть синтаксически верным, но структурно сложным для поддержки. Метрика CRAP, предложенная еще самим Uncle Bob, позволяет количественно оценить этот риск.

Использование crap4java позволяет командам:

  • Автоматически выявлять «горячие точки» кода, требующие рефакторинга.
  • Контролировать качество кода, сгенерированного ИИ, до его попадания в основную ветку.
  • Интегрировать проверку в процесс сборки (mvn test / package) без остановки разработки.

Проект доступен для сборки через mvn -DskipTests package и запуска через java -jar target/crap4java-0.1.0-SNAPSHOT.jar.

Источник: Github ↗