Ваш ИИ-код выдает МУСОР? (Вот как это исправить)
BBetter Stack
Computing/SoftwareManagementInternet Technology
Transcript
00:00:00Сегодня я хочу поговорить о CRAP. И нет, это не тот самый CRAP.
00:00:05Я говорю об аббревиатуре, которая расшифровывается как Change Risk Anti-Patterns Index.
00:00:12Она предназначена для поиска рискованных функций в вашем коде — тех, что обладают высокой сложностью, но плохо протестированы.
00:00:18Это не новая концепция, но она привлекла мое внимание в последнее время благодаря пакету, выпущенному
00:00:24Александром Прохоренко под названием Cargo CRAP, который выявляет эти ключевые функции в коде на Rust.
00:00:31Сама идея метрики CRAP принадлежит Альберто Савойе и Бобу Эвансу, которые придумали эту
00:00:37метрику еще в 2007 году, экспериментируя с инструментами автоматизированного тестирования.
00:00:44Но Александр недавно подогрел интерес к этой забытой метрике, написав проницательную статью о ней,
00:00:49и о том, почему сейчас, когда почти весь код пишется ИИ-агентами, как никогда важно
00:00:55сканировать кодовую базу на предмет подобных скрытых проблем. Это отличная концепция, и мы подробно разберем её
00:01:01в сегодняшнем видео. Давайте приступим. Чтобы понять, почему это важно, давайте взглянем на эту функцию на моем экране.
00:01:11Она выполняет многоступенчатое преобразование данных с глубоко вложенными операторами match,
00:01:16несколькими циклами и множеством путей обработки ошибок. Так что её цикломатическая сложность довольно высока — около 15.
00:01:24Если вы не знакомы с термином «цикломатическая сложность», то это, по сути, причудливый способ измерения того,
00:01:30сколько различных путей может пройти фрагмент данных через ваш код. Каждый раз, когда вы пишете if,
00:01:36match, цикл while или блок catch, вы создаете развилку, и чем больше таких развилок,
00:01:43тем выше показатель сложности. И тем сложнее человеческому мозгу просчитать все возможные варианты развития событий
00:01:51внутри функции. Именно поэтому мы стараемся разбивать функции на более мелкие задачи.
00:01:57И для этой функции на экране сложность 15 означает, что существует 15 совершенно разных путей,
00:02:04по которым этот код может выполняться от начала до конца. Если эта функция полностью покрыта модульными тестами,
00:02:09то её оценка CRAP остается равной 15. Она сложная, но безопасная, потому что мы подтвердили её поведение.
00:02:16И именно этого мы ожидаем при запуске инструмента CargoCrap. Здесь мы видим, что оценка равна 13,
00:02:23а не 15. Вероятно, библиотека не учла обработчики ошибок.
00:02:27В любом случае, 15 и 13 — это довольно близкие значения. Так что инструмент работает как надо.
00:02:33Но давайте посмотрим, что будет, если кто-то удалит эти тесты или если ИИ-агент сгенерирует функцию
00:02:39с нуля и вообще не напишет тесты. В этом примере я просто закомментирую свои тесты.
00:02:45И если мы снова запустим CargoCrap, то оценка внезапно подскочит выше 100.
00:02:51Этот инструмент использует простую формулу для расчета риска, балансирующую цикломатическую сложность —
00:02:57количество линейных путей выполнения кода — и покрытие тестами.
00:03:03Если мы взглянем на эту функцию, где C — цикломатическая сложность, а COV — покрытие тестами
00:03:10в виде дроби от нуля до единицы. Эта формула сильно штрафует сложный код без тестов.
00:03:17Так что если покрытие составляет сто процентов, вся первая часть уравнения обнуляется,
00:03:23и ваша оценка CRAP просто равна цикломатической сложности.
00:03:26Но если покрытие падает, кубический показатель степени в левой части заставляет оценку риска взлетать.
00:03:33Функция со сложностью 10 и нулевым покрытием дает оценку CRAP 110.
00:03:39И это хорошо, потому что если вы хотите кодовую базу, где, скажем,
00:03:43ни одна функция не превышает цикломатическую сложность пять, то это ваш базовый показатель для контроля.
00:03:49И если какая-то функция станет сложнее пяти, вы будете знать, что это область, требующая внимания.
00:03:55Обычно допускается более высокая сложность. По умолчанию в CargoCrap установлено значение 30.
00:04:00Но я лишь говорю, что вы можете настроить эту метрику самостоятельно так, как пожелаете.
00:04:05По сути, это хороший «средний» показатель, на который стоит обращать внимание.
00:04:09И это становится критически важным в эпоху ИИ-сгенерированного кода.
00:04:13Потому что ИИ-агенты невероятно хороши в создании высокосложных, синтаксически верных блоков кода,
00:04:20которые обрабатывают даже те крайние случаи, о которых вы не подумали, но они крайне плохо пишут
00:04:25осмысленные и надежные интеграционные тесты, если их не заставлять это делать явно.
00:04:30Так что такие инструменты, как CargoCrap, предназначены для использования в качестве дополнительной проверки после прохождения всех модульных тестов,
00:04:37чтобы оценить общее качество кода.
00:04:39В сущности, он работает как тепловая карта вашего технического долга, указывая прямо на тот код,
00:04:44который с наибольшей вероятностью сломается при рефакторинге.
00:04:47Это также особенно полезно, если вы хотите поддерживать хорошо структурированную кодовую базу,
00:04:52в случае, если вам нужно нанять нового инженера в команду.
00:04:56И по рассказам мы знаем, насколько безумно захламленными могут стать кодовые базы из-за всего этого
00:05:02ИИ-сгенерированного кода в наши дни, если мы не будем проявлять бдительность.
00:05:06А иногда у ИИ-агентов есть тенденция дублировать одну и ту же функцию в нескольких файлах.
00:05:13Поэтому я считаю важным знать о подобных инструментах и, что более важно, о подобных методологиях,
00:05:19и не забывать о них в современном процессе разработки для поддержания высокого качества кода.
00:05:24Авторы этой методологии также выпустили метрику CRAP для Java.
00:05:30Честно говоря, до прочтения статьи Александра я даже не знал об этой метрике.
00:05:34Поэтому я благодарен, что его инструмент заставил меня заметить эту давно забытую инженерную практику.
00:05:40И я уверен, что другие языки программирования тоже выиграли бы от такого инструмента.
00:05:44Так что если вы ищете интересный проект для свободного времени,
00:05:48прочитайте оригинальную статью Альберто Савойи и сделайте такой инструмент для другого языка,
00:05:53ведь это может стать очень полезной утилитой для многих разработчиков.
00:05:57Итак, друзья, вот и всё.
00:05:58Это CRAP в двух словах.
00:06:01Прозвучало забавно.
00:06:02В любом случае, какие еще забытые инженерные практики или метрики вы знаете,
00:06:08на которые нам следует обратить внимание в эпоху агентного кодинга?
00:06:13Дайте знать в комментариях ниже.
00:06:15И ребята, если вам нравятся такие технические разборы,
00:06:18пожалуйста, дайте мне знать, нажав кнопку лайка под видео.
00:06:21И также не забудьте подписаться на наш канал.
00:06:24С вами был Андрус из BetterStack, увидимся в следующих видео.
00:06:28Увидимся в следующих видео.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video