top of page
Foto do escritorVictor Hugo Germano

Github Copilot e Qualidade de Código. Como mentir com estatística



Apresentando meu viés, ao analizar este artigo:


Eu tenho explorado já há algum tempo o tema do uso de ferramentas de IA para a tarefa de desenvolvimento de software, e minha posição sobre o hype é bastante clara:



Inclusive comentando sobre o uso dessas ferramentas, e seu impacto aparente de longo prazo. Esse post é uma continuidade do que já estou escrevendo.


Github Copilot e Qualidade de código. Como mentir com estatística


Github Copilot é talvez a principal ferramenta na atualidade quando se fala de assistentes de código. O peso da Microsoft, com a sua abordagem de produto peculiar, tem com certeza aumentado o hype da ferramenta e provavelmente se você está num contexto corporativo, já bateram na sua porta oferecendo AI dentro do Pacote do Visual Studio, ou do Office 365.

A um preço realmente caro, na casa dos US$400 por ano por dev, o mínimo que se espera é que a empresa apresente resultados e informações consistentes sobre a eficiência do uso da ferramenta.


Pois é isso que o último artigo "Github Copilot aumenta a qualidade de código? Isso é os dados dizem" se propõe a demostrar, com a análise sobre o impacto positivo na qualidade de código que o uso de copilot pode trazer para seu time.


O artigo é terrível, e o estudo extremamente enviesado e sem muito critério. Parece que foi escrito por uma LLM com o prompt: "crie um estudo sobre qualidade de código que fale bem do copilot". Esperava maior rigor da empresa.

Primeira regra de uma pessoa de tecnologia:


Empresas não divulgam pesquisas com resultados ruins sobre seus produtos. Não existe incentivo nenhum em divulgar informações que possam impactar negativamente a venda de seus produtos.

Separar o marketing de tecnologia das informações relevantes é a skill importante no mundo de vendedores de ferramenta.


O Estudo - Qualidade de código?


Segundo o próprio artigo:

"Resultados in nosso último estudo mostram que a qualidade de código escrito com o Github Copilot é significativamente mais funcional, legível, confiável, manutenível e concisa"


Este estudo foi, provavelmente, feito para um Executivo ou Líder de tecnologia sem conhecimento técnico, e consegue facilmente dar a entender que estamos diante de um salto quântico de melhoria. Numa primeira passada, a expectativa é grande e a possiblidade de quando de performance, a eterna busca do mercado.


Os resultados apresentados são interessantes, mas não se sustentam numa análise minimamente detalhada.


GitHub conduziu um experimento com 243 desenvolvedores, divididos em dois grupos: um usando Copilot e outro não. As principais alegações incluem:


  • Desenvolvedores usando Copilot têm 56% mais chances de ter todos os testes passando

  • Usando Copilot consegue adicionar 13% mais código antes de introduzir algum Code smell

  • Usando Copilot o código é 3.62% mais legível, 2.94% mais confiável, 2.47% mais manutenível, e 4.16% mais conciso;

  • PRs de usuários do Copilot têm 5% mais chances de serem aprovados sem comentários



GitHub Copilot com estatísticas falhas
GitHub Copilot com estatísticas falhas

O que a minha mente cética vê nessas afirmações:

Com tanto tempo no mercado, eu posso dizer com 99.99% de certeza que essas métricas não significam absolutamente nada. Zero, niente, rien, 白 - e não devem ser usadas nesse contexto!

Porque esse gráfico acima erra também nos percentuais? Foi o Bing que fez? 62.2% + 39.2% = 100% ??!?! Como assim?!


Além disso, sem avaliar o contexto e o significado, um aumento de 2.94% em confiabilidade me parece um erro de arredondamento! Esse tipo de percentual é irrisório e sem significado: "hoje estou 2% mais gordo, tomei uma coca-cola no almoço"


Qual o desafio técnico avaliado?


Difícil de acreditar que a empresa conseguiu somente 243 indivíduos para fazer essa pesquisa - um número infinitamente pequeno para se ter alguma percepção da complexidade do trabalho de desenvolvimento de software e sua interação diária. Mas é interessante saber qual foi o desafio em que o uso do Copilot foi avaliado:


Escrever código para uma API fictícia de um APP de review de restaurante. Cada grupo completou o exercício com 10 testes de unidade para validar a funcionalidade

Junto com construir uma app de TODO List, talvez seja o desafio de entrevista mais conhecido do mundo, e bem longe do dia a dia de trabalho de desenvolvimento (Ainda que eu acredite que CRUD seja a maior parte das aplicações hoje em dia).


Se você treinar a sua própria rede neural no seu celular é capaz de conseguir responder a esse desafio - sem nenhuma LLM moderna.


Quantos casos esse 10 testes de unidade conseguem cobrir para uma API? Qual a real complexidade e relevância desse endpoint coberto por testes?


O que é Qualidade de Código?



GitHub Copilot
GitHub Copilot


Informação interessante to texto: Inicialmente é dito que Copilot pode adicionar até 13% mais código até introduzir code smell. Ao olhar o gráfico, estamos falando de 2 linhas de código. Estatisticamente relevante (segundo eles), mas praticamente inútil.


Onde o artigo nitidamente dá uma viajada é na hora de definir a avaliação de qualidade e erros para o teste:


Neste estudo, nós definimos Erros de Código como qualquer código que reduz a capacidade deste código ser facilmente compreendido. Não incluindo erros funcionais que podem impedir o código de funcionar, mas ao invés disso, erros que representam praticas ruins de código.

Ou seja: gerar código que não funciona não foi o critério do estudo. Afinal, não é importante para qualidade de software. E ao invés disso, foram analisados


Inconsistência de nomes, identificadores obtusos, tamanho excessivo de linhas, excesso de espaços, documentação faltante, código repetido, profundidade do loop, separação de funcionalidade insuficiente e complexidade variante.

O problema com esses items é que eles não significam muita coisa sem o contexto da tecnologia, experiência dos envolvidos, familiaridade com a linguagem. E nenhum desses itens avaliados tem uma definição muito clara e definitiva para qualquer linguagem de programação.


O que é duplicação para Rust, não necessariamente é para Java. O que parece absurdo de entender para quem não conhece de C++ e manipulação de matrizes, é o dia a dia de quem trabalha com Arduino e IoT.


Um exemplo:

Sem o contexto ou conhecimento, essa linha de código não é boa o suficiente. Mas para quem está estudando OpenCV e YOLO, é uma linha tranquila de entender.

cv2.putText(img, f"{class_name} {confidence:.2f}", vertex1, cv2.FONT_HERSHEY_SIMPLEX, 1, colour, 2,)

Toda equipe precisa criar as próprias convenções de código, para dar significado ao que é Qualidade de Código. Seja em C, Javascript, Rust ou Typescript, contexto e experiência são infinitamente mais importantes.


Apresentar uma estatística com a suposição de que o uso de uma ferramenta traz ganhos significativos, ao mesmo tempo em que mostra 3% de melhora em métricas subjetivas é no mínimo questionável, e me faz pensar se esse artigo não é direcionado para persuadir erroneamente pessoas que não entendem o mínimo de Tecnologia, mas que podem assinar o cheque com a expectativa de ganho de performance.


Em um dos meus últimos artigos, eu já apresentava resultados muito mais detalhados do uso de LLMs como assistentes de codificação, e a tendência que estamos identificando de aumento de complexidade, churn de código e potencial redução de qualidade. Vale a pena ler.


Jadarma faz uma análise ainda mais detalhada das diversas falhas desse "estudo", indo mais além e demonstrando como, da escolha do grupo de estudo, ao cálculo estatístico dessa notícia, tudo está errado.


Esperava mais.





134 visualizações

Posts recentes

Ver tudo

Comentários


bottom of page