O seu código de IA está uma porcaria? (Veja como consertar)
BBetter Stack
Computing/SoftwareManagementInternet Technology
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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video