Tecnologia > Inovação, Programação

Aprendizado de máquinas é dez vezes mais efetivo na correção de códigos

Solução desenvolvida pelo MIT é capaz de corrigir 10 vezes mais erros do que sistemas anteriormente usados para a mesma finalidade

04 de Fevereiro de 2016 - 11h17

Um sistema desenvolvido pelo MIT, baseado em tecnologias de aprendizado de máquina ou “machine learning”, é particularmente eficaz na correção de erros. Segundo o grupo de pesquisadores do instituto, responsável pelo estudo, o novo sistema, denominado Prophet, é capaz de corrigir 10 vezes mais erros do que sistemas anteriormente usados para a mesma finalidade.

O grupo apresentou um estudo durante o simpósio Principles of Programming Languages, em janeiro, descrevendo o Prophet, segundo eles o primeiro sistema a aprender um modelo probabilístico de código correto.

Essencialmente, o sistema funciona a partir da análise das correções já realizadas em programas de código aberto para aprender com elas. O “Prophet” recebeu dados sobre correções de 777 erros em oito aplicações open source armazenadas no repositório GitHub. O sistema aplica esse conhecimento para produzir novas correções em software semelhantes.

Fan Long, estudante de pós-graduação em engenharia elétrica e ciências da computação, co-autor do estudo, já havia desenvolvido um algoritmo para reparação de erros de código, modificando de forma sistemática o código de um programa. O único problema é que esse processo era muito demorado.

O novo sistema de aprendizado de máquina funciona junto com esse algoritmo, mas classifica possíveis problemas de acordo com a probabilidade de estarem corretos antes de submetê-los a testes mais demorados com o algoritmo.

"Um dos aspectos mais intrigantes desta pesquisa é a descoberta de que, de fato, existem propriedades universais no código correto que podem ser aprendidas pelo sistema a partir de um conjunto de aplicações e aplicadas em outro conjunto de aplicações", explica Martin Rinard, professor de engenharia elétrica e ciência da computação, também co-autor do estudo. "Se você é capaz de reconhecer o código correto, isso tem enormes implicações em toda a engenharia de software. Esta é apenas a primeira aplicação do que esperamos que venha a ser uma técnica totalmente nova."

Tal como acontece com todos os sistemas de aprendizado de máquina, um aspecto crucial do projeto de Long e Rinard foi a seleção do "conjunto de recursos" que o sistema teve que analisar.

Os pesquisadores concentraram-se em valores armazenados na memória - ou variáveis que podem ser modificados durante a execução de um programa, e as que não podem. E identificaram 30 características que podem estar envolvidas em numa operação, como a adição ou multiplicação, ou em uma comparação, como maior do que ou igual a; podem ser locais, o que significa que só ocorrem dentro de um único bloco de código; ou podem ser globais, o que significa que ele são acessíveis para o programa como um todo; e assim por diante.

A partir daí, Long e Rinard escreveram um programa que avaliou todas as possíveis relações entre essas características em sucessivas linhas de código. Em seguida, o algoritmo de aprendizado de máquina tentou determinar qual a combinação de características mais consistentemente encontradas em um patch bem sucedido.

"Todas as características que estamos tentando olhar são as relações entre o patch que você deve inserir e o código que você está tentando corrigir", diz Longo. "Normalmente, haverá boas combinações nos patches corretos, correspondendo a lógica do programa útil ou produtivo. E haverá padrões ruins que significam desconexões na lógica de programação ou na lógica, tonando os patches menos propensos a serem bem sucedidos", afirma Rinard.