O seu código de IA está uma porcaria? (Veja como consertar)

BBetter Stack
컴퓨터/소프트웨어경영/리더십AI/미래기술

Transcript

00:00:00Hoje, quero falar sobre CRAP. E não, não é aquele tipo de “crap”.
00:00:05Estou falando da sigla, que significa Change Risk Anti-Patterns Index (Índice de Antipadrões de Risco de Mudança).
00:00:12E foi projetado para encontrar funções arriscadas no seu código, que são altamente complexas, mas mal testadas.
00:00:18Não é um conceito particularmente novo, mas um que chamou minha atenção recentemente, graças a um pacote lançado por
00:00:24Alexander Prokhoranko chamado Cargo CRAP, que identifica essas funções chave em código Rust.
00:00:31A ideia original para a métrica CRAP vem de Alberto Savoia e Bob Evans, que inventaram a
00:00:37métrica lá em 2007, enquanto experimentavam com ferramentas automatizadas de teste para desenvolvedores.
00:00:44Mas Alexander reacendeu a atenção para essa métrica esquecida recentemente, ao escrever este post perspicaz
00:00:49sobre ela e como, hoje em dia, quando quase todo código é escrito por agentes de IA, é mais importante do que nunca
00:00:55escanear sua base de código em busca desses problemas ocultos. É um conceito muito legal e vamos explorá-lo
00:01:01em mais detalhes no vídeo de hoje. Então vamos mergulhar nisso. Para entender por que isso importa, vamos dar uma olhada
00:01:11nesta função na minha tela. Ela lida com uma transformação de dados de múltiplas etapas com “match statements”
00:01:16profundamente aninhados, alguns loops e muitos caminhos de tratamento de erros. Então, sua complexidade ciclomática é bem alta, em torno de 15.
00:01:24Agora, se você não está familiarizado com o termo complexidade ciclomática, é basicamente uma maneira sofisticada de medir
00:01:30como os dados podem percorrer o seu código. Sempre que você escreve um comando if
00:01:36ou um “match”, ou um loop “while”, ou um bloco “catch”, você está criando uma bifurcação na estrada, e quanto mais bifurcações você tiver,
00:01:43maior a pontuação de complexidade fica. E mais difícil se torna para um cérebro humano mapear cada resultado possível
00:01:51em uma função. Então é por isso que, sempre que possível, tentamos dividir funções em tarefas menores.
00:01:57E para esta função na minha tela, uma complexidade de 15 significa que existem 15 caminhos inteiramente separados
00:02:04que essa lógica pode executar do início ao fim. Agora, se essa função estiver totalmente coberta por testes unitários,
00:02:09sua pontuação CRAP permanece em 15. É complexa, mas é segura porque estamos validando seu comportamento.
00:02:16E é isso que devemos esperar quando rodamos a ferramenta do Alexander, CargoCrap. E aqui vemos que a pontuação é 13,
00:02:23não 15. Provavelmente porque a biblioteca não levou em conta os tratadores de erro.
00:02:27Mas, de qualquer forma, 15 e 13 são bem próximos. Então, basicamente, essa ferramenta está fazendo o que esperamos.
00:02:33Mas vamos ver o que acontece se alguém deletar esses testes ou se um agente de IA gerar essa função
00:02:39do zero e pular completamente a escrita de testes. Então, neste exemplo, vou apenas comentar meus testes.
00:02:45E se rodarmos o CargoCrap novamente, de repente essa pontuação passa de 100.
00:02:51Portanto, ele usa uma fórmula direta para calcular o risco, equilibrando a complexidade ciclomática,
00:02:57o número de caminhos de execução linear através do seu código contra a cobertura de testes.
00:03:03Então, se olharmos para esta função, C é a complexidade ciclomática da função e COV é a cobertura de testes
00:03:10expressa como uma fração entre zero e um. E a matemática penaliza fortemente código complexo que carece de testes.
00:03:17Portanto, se sua cobertura for de cem por cento, todo o primeiro caminho da equação cai para zero
00:03:23e sua pontuação CRAP simplesmente iguala sua complexidade ciclomática.
00:03:26Mas se sua cobertura cair, o expoente cúbico no lado esquerdo faz a pontuação de risco disparar.
00:03:33E uma função com uma complexidade de 10 e zero de cobertura gera uma pontuação CRAP de 110.
00:03:39E isso é bom, porque se você quer uma base de código onde, digamos, por exemplo,
00:03:43nenhuma função exceda uma complexidade ciclomática de cinco, então esta é sua métrica base para ficar de olho.
00:03:49E se qualquer função ficar maior que cinco, você sabe que esta é a área para prestar atenção.
00:03:55Normalmente você permitiria uma complexidade maior. CargoCrap tem um padrão definido em 30.
00:04:00Mas estou apenas dizendo que você pode definir essa métrica por conta própria como desejar.
00:04:05E, basicamente, essa é uma boa métrica de meio-termo para prestar atenção.
00:04:09E isso se torna crítico na era do código gerado por IA.
00:04:13Porque agentes de IA são incrivelmente bons em cuspir esses blocos de código altamente complexos e sintaticamente corretos
00:04:20que lidam com casos extremos nos quais você nem pensou, mas eles são notoriamente ruins em escrever
00:04:25testes de integração significativos e robustos, a menos que sejam explicitamente forçados.
00:04:30Então, ferramentas como CargoCrap são feitas para serem executadas como uma segunda verificação após rodar todos os testes unitários
00:04:37para avaliar a qualidade geral do código.
00:04:39Então, basicamente, atua como um mapa de calor para sua dívida técnica, apontando diretamente para o código
00:04:44que é mais provável que quebre durante uma refatoração.
00:04:47E isso também é especialmente útil se você quiser manter sua base de código bem estruturada
00:04:52caso precise integrar um novo engenheiro à sua equipe.
00:04:56E sabemos, por relatos anedóticos, o quão insanamente desequilibradas as bases de código podem ficar com todo esse
00:05:02código gerado por IA hoje em dia, se não prestarmos atenção.
00:05:06E, às vezes, esses agentes de IA também têm uma tendência a duplicar a mesma função em vários arquivos.
00:05:13Então, acho que ferramentas como essas e, mais importante, metodologias como essas são importantes de se conhecer
00:05:19e não esquecer em nosso cenário de codificação moderno para manter nossa qualidade de código alta.
00:05:24Os mesmos autores que criaram essa metodologia também lançaram uma ferramenta de métrica CRAP para Java.
00:05:30E, honestamente, até ler o post do blog de Alexander recentemente, eu nem sabia dessa métrica.
00:05:34Então, sou grato por sua ferramenta ter me feito notar essa prática de engenharia há muito esquecida.
00:05:40E tenho certeza de que outras linguagens de programação também se beneficiariam de tal ferramenta.
00:05:44Então, se você está pensando em um projeto divertido para construir no seu tempo livre,
00:05:48vá ler o post original de Alberto Savoia e construa um para outra linguagem de programação,
00:05:53porque poderia ser um utilitário muito útil para muitos desenvolvedores.
00:05:57Então, aí está, pessoal.
00:05:58Isso é CRAP em poucas palavras.
00:06:01Isso soou engraçado.
00:06:02De qualquer forma, quais são algumas outras práticas ou métricas de engenharia há muito esquecidas que você conhece
00:06:08e às quais deveríamos prestar mais atenção nesta nova era da codificação agentica?
00:06:13Deixe-nos saber na seção de comentários abaixo.
00:06:15E pessoal, se vocês gostam desses tipos de detalhamentos técnicos,
00:06:18por favor, me avisem esmagando esse botão de curtir abaixo do vídeo.
00:06:21E também não se esqueçam de se inscrever no nosso canal.
00:06:24Este foi Andrus da BetterStack e verei vocês nos próximos vídeos.
00:06:28Verei vocês nos próximos vídeos.

Key Takeaway

O índice CRAP atua como um mapa de calor para a dívida técnica ao aplicar uma penalidade matemática em funções de alta complexidade que carecem de cobertura de testes, um controle indispensável para validar código gerado por IA.

Highlights

  • O índice CRAP (Change Risk Anti-Patterns) quantifica o risco de alterações em funções de código baseando-se na complexidade ciclomática e na cobertura de testes.

  • A fórmula matemática penaliza severamente funções complexas com baixa cobertura, onde o risco aumenta exponencialmente conforme a cobertura de testes diminui.

  • Uma função com complexidade ciclomática de 10 e cobertura de testes zero resulta em uma pontuação CRAP de 110.

  • Ferramentas como o Cargo CRAP para Rust permitem identificar automaticamente funções críticas que possuem alta probabilidade de falha durante refatorações.

  • Agentes de IA frequentemente geram código complexo sintaticamente correto, mas falham em incluir testes de integração adequados, tornando o uso de métricas como a CRAP essencial para medir a qualidade.

Timeline

Definição do Índice CRAP

  • O índice CRAP identifica funções arriscadas com alta complexidade e baixa cobertura de testes.
  • A sigla significa Change Risk Anti-Patterns Index, sendo um conceito introduzido originalmente por Alberto Savoia e Bob Evans em 2007.

O índice foi desenvolvido para auxiliar desenvolvedores a encontrar pontos críticos no código. Recentemente, a métrica ganhou nova relevância com o lançamento da ferramenta Cargo CRAP, que aplica o conceito especificamente em projetos escritos na linguagem Rust.

Complexidade e Risco no Código

  • A complexidade ciclomática mede o número de caminhos lógicos distintos em uma função através de estruturas como if, loops e blocos de tratamento de erro.
  • Funções com alta complexidade ciclomática tornam-se difíceis de mapear mentalmente e possuem maior potencial de falha.

Uma função com complexidade 15 possui 15 caminhos de execução separados. Se a função for totalmente coberta por testes, o risco permanece controlado. A pontuação CRAP correlaciona a complexidade com a eficácia da validação por testes unitários.

A Matemática da Penalização de Risco

  • A fórmula CRAP penaliza funções complexas que carecem de testes, utilizando um expoente cúbico aplicado à taxa de cobertura.
  • Com 100% de cobertura, a pontuação CRAP é igual à complexidade ciclomática da função.

O cálculo equilibra a complexidade ciclomática (C) contra a cobertura de testes (COV, expressa entre 0 e 1). À medida que a cobertura diminui, o expoente cúbico faz a pontuação de risco disparar. Uma função com complexidade 10 e zero cobertura gera um índice CRAP de 110.

Qualidade do Código Gerado por IA

  • Agentes de IA frequentemente produzem código complexo sem testes de integração robustos, exigindo uma camada adicional de verificação.
  • Ferramentas de análise de risco servem como um mapa de calor para identificar dívida técnica e áreas suscetíveis a quebras em refatorações.

O uso de métricas CRAP é vital na era da codificação assistida por IA. Essas ferramentas funcionam como uma segunda verificação pós-testes unitários, garantindo que a base de código permaneça estruturada e compreensível para novos membros da equipe.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video