
A ferramenta detecta semelhanças entre programas para ajudar os programadores a escrever software mais rápido e eficiente.
A programação de computadores nunca foi fácil. Os primeiros programadores escreveram programas à mão, traçando caracteres em papel milimetrado antes de convertê-los em grandes pilhas de cartões perfurados que podiam ser processados por um computador. Um erro e tudo terá que ser refeito.
Os codificadores hoje em dia usam muitas ferramentas poderosas que automatizam grande parte do trabalho, desde detectar erros enquanto você digita até testar seu código antes de aplicá-lo. Mas, por outro lado, pouco mudou. Um erro bobo ainda pode travar o software inteiro. E à medida que os sistemas se tornam cada vez mais complexos, rastrear esses erros se torna cada vez mais difícil.
“Às vezes, pode levar vários dias para que as equipes de programadores consertem um bug”, diz Justin Gottschlich, diretor do grupo de pesquisa de programação de máquinas da Intel.
É por isso que algumas pessoas pensam que devemos apenas fazer as máquinas se programarem. A geração automática de código tem sido um tópico quente de pesquisa por vários anos. A Microsoft está incorporando a geração de código básico em suas ferramentas de desenvolvimento de software amplamente utilizadas, o Facebook criou um sistema chamado Aroma que encerra automaticamente pequenos programas e a DeepMind desenvolveu uma rede neural que pode criar versões mais eficientes de algoritmos simples do que aqueles desenvolvidos por humanos. Até mesmo o modelo de linguagem OpenAI GPT-3 pode compor trechos de código simples , como layouts de página da web, a partir de consultas de linguagem natural.
Gottslich e seus colegas chamam isso de programação de máquina.... Trabalhando com um grupo da Intel, MIT e Georgia Institute of Technology em Atlanta, ele desenvolveu um sistema chamado Machine Inferred Code Similarity , ou MISIM, que pode extrair o significado de um trecho de código - o que o código diz a um computador - de quase da mesma forma que os sistemas de processamento de linguagem natural (PNL) podem ler um parágrafo escrito em inglês.
O MISIM pode então sugerir outras maneiras de escrever o código, sugerindo correções e maneiras de torná-lo mais rápido ou mais eficiente. A capacidade da ferramenta de entender o que um programa está tentando fazer permite que ela identifique outros programas que estão fazendo coisas semelhantes. Em teoria, essa abordagem poderia ser usada por máquinas que escreveram seu próprio software, contando com uma colcha de retalhos de software pré-existente com o mínimo de controle humano ou entrada.
O MISIM funciona comparando fragmentos de código com milhões de outros programas que já viu, retirados de um grande número de repositórios online. Primeiro, ele traduz o código em um formato que captura o que ele faz, mas ignora como foi escrito porque dois programas, escritos de maneiras muito diferentes, às vezes fazem a mesma coisa. O MISIM então usa a rede neural para procurar outro código que tenha um significado semelhante. Em uma pré-impressão, Gottshlich e colegas relatam que o MISIM é 40 vezes mais preciso do que os sistemas anteriores que tentam fazer isso, incluindo o Aroma.
O MISIM é um passo empolgante à frente, diz Veselin Raychev, CTO da empresa suíça DeepCode, cujas ferramentas de detecção de erros - algumas das mais avançadas do mercado - usam redes neurais treinadas em milhões de programas para sugerir melhorias aos codificadores à medida que as escrevem.
Mas o aprendizado de máquina ainda não é capaz de prever se algo é um bug, diz Raichev. Isso ocorre porque é difícil ensinar a uma rede neural o que é ou não um bug se não for rotulada como tal por um humano.Segundo ele, já existem muitos estudos interessantes com redes neurais profundas e correção de erros, "mas praticamente ainda não estão aí, por uma margem muito grande". Via de regra, as ferramentas de detecção de bugs de IA fornecem muitos falsos positivos, disse ele.
O MISIM lida com isso usando aprendizado de máquina para identificar semelhanças entre programas, em vez de detectar bugs diretamente. Ao comparar um novo programa a um software existente que é conhecido por ser correto, ele pode alertar o codificador sobre diferenças importantes que levam a erros.
A Intel planeja usar essa ferramenta como um sistema de recomendação para seus próprios desenvolvedores, oferecendo alternativas para escrever código de forma mais rápida ou eficiente. Mas, como o MISIM não está vinculado à sintaxe de um programa específico, ele pode fazer muito mais. Por exemplo, ele pode ser usado para traduzir código escrito em uma linguagem antiga, como COBOL, para uma linguagem mais moderna, como Python. Isso é importante porque muitas instituições, incluindo o governo dos Estados Unidos , ainda dependem de software escrito em linguagens que poucos programadores sabem como manter ou atualizar.
Em última análise, Gottslikh acredita que essa ideia pode ser aplicada à linguagem natural. Combinado com PNL (Processamento de Linguagem Natural, que não deve ser confundido com Programação Neuro Linguística ), a capacidade de trabalhar com o significado do código separadamente de sua representação textual pode um dia permitir que as pessoas escrevam software simplesmente descrevendo o que querem fazer em palavras, diz ele.
“Criar pequenos aplicativos para o seu telefone ou coisas do tipo irá ajudá-lo no seu dia a dia - acho que não é tão longe”, diz Gottshlich. "Eu gostaria de ver 8 bilhões de pessoas criando software da maneira que fosse natural para elas."