ML para o Rescue: Ferramentas para desenvolvedores de IA

O aprendizado de máquina continua a penetrar nas mais diversas esferas da atividade humana, e uma área tecnológica como o desenvolvimento de software, é claro, não poderia ser uma exceção. De acordo com a previsão do especialista em IA e aprendizado de máquina Sergey Markov, dublado na palestra “Resultados da AI-2019” , em 2020, um grande número de ferramentas de desenvolvimento usando o aprendizado de máquina será exibido. Isso me levou à ideia de que algumas dessas ferramentas deveriam estar disponíveis no mercado no momento - elas podem ajudar "em casa" o desenvolvedor da web habitual escrevendo em Java, Python e JS? 

No futuro, direi que, infelizmente, atualmente não há soluções abertas que possam gerar pelo menos algum código de "combate". Mais próximo disso veio Bayoue DeepCoder, mas esses projetos ainda são muito brutos. Maior progresso é observado em áreas relacionadas - como autopreenchimento, análise estática, geração de testes. Vou falar sobre isso no artigo.



Kite - documentação automática e preenchimento automático inteligente no Python IDE


Website: https://kite.com/
Preço: Completamente grátis.

Plugin para acelerar a escrita de código com a ajuda do preenchimento automático inteligente. O Kite indexa a base de código do projeto, o que significa mostrar as dicas mais relevantes. Além do preenchimento automático, se necessário, você pode abrir a documentação interna com amostras de código para mais de 800 bibliotecas em um clique (mais útil para bibliotecas como numpy ou pandas). Uma vez por semana, um relatório é enviado ao correio com estatísticas sobre o uso da função de substituição automática. 
 

As sugestões de pipa (marcadas com um ícone) são muito mais relevantes que as nativas. O pop-up com documentação informará o que pode ser transferido para o kwargs

O Kite costumava enviar pequenos pedaços de código para o servidor, o que não é adequado para muitos por razões de segurança, mas boas notícias! - Agora Kite abandonou essa prática e toda a análise ocorre localmente. O plug-in é bastante fácil de usar - é fácil de instalar e funciona rapidamente sem carregar o sistema. O Kite suporta a maioria dos IDEs populares: Idea, PyCharm, Sublime, Vim, código Vs, Spyder e Atom.


A linha inferior: talvez o projeto mais pronto para uso em combate na seleção. Eu recomendo a todos que escrevem em Python.

Para outros idiomas, existem produtos semelhantes - Codota for Java ou TabNine, que suporta 22 idiomas. Não tive tempo de testá-las, mas parece que o Codota oferece dicas mais conservadoras, enquanto o TabNine (para Java) oferece partes inteiras de código, incluindo nomes de variáveis ​​(às vezes sem qualquer contexto) e chega ao ponto.

DeepCode - um analisador de código estático com foco na pesquisa de vulnerabilidades


Site: https://www.deepcode.ai/
Preço: a versão em nuvem é gratuita para projetos de código aberto e equipes para até 30 pessoas. Existe uma opção auto-hospedada para GitLab e BitBucket Enterprise, o preço é negociável.

Como os desenvolvedores colocam apropriadamente, o DeepCode é uma gramática para código. O objetivo é ajudar o desenvolvedor a detectar erros e vulnerabilidades no código. A solução auto-hospedada vem na forma de um contêiner de encaixe, é integrada ao sistema de controle de versão através de ganchos e é configurada em literalmente 10 minutos. Um bot também está disponível para verificar solicitações pull. Suporte declarado para Java, Python, JavaScript e TypeScript.


Exemplo de recomendação do DeepCode:

impressões de uso: muito satisfeito com a baixa porcentagem de falsos positivos. Todos os problemas encontrados foram bastante reais e não foram acionados por motivos independentes da qualidade da verificação (o código com erros não foi iniciado, o código não seguro não utilizou a entrada do usuário). Os avisos de desempenho também parecem bastante razoáveis. O número de problemas detectados em comparação com o analisador de código Java FineBugs ou o mesmo PVS-Studio parece insignificante - 200 contra 2-4 mil. Não sei se devo considerar isso um plus, mas pelo menos 200 peças podem realmente ser desmontadas, o que não pode ser dito em torno de 4 mil. 


O bot verifica todas as solicitações pull

A linha inferior: se você sempre ficou chateado com o número de falsos positivos ao trabalhar com linters, deveria tentar o DeepCode. Também é uma ótima maneira de contribuir com o código-fonte aberto: garanta o projeto por conta própria, execute o teste - e algumas solicitações de recebimento úteis no seu bolso.

DiffBlue - gerador de teste de unidade para Java 


Site: https://www.diffblue.com/ 
Preço: US $ 3375 por mês para uma equipe de 25 pessoas. Uma tarifa gratuita para uso individual ainda está nos planos.

Este produto parece o mais ambicioso da seleção. Uma startup britânica no ano passado que recebeu 20 milhões em investimentos da Goldman Sachs. Se, inicialmente, eu estava procurando algo que gere código para testes, o DiffBlue gera testes para código com a capacidade de ser incorporado ao IC. O produto apresenta boa integração com a infraestrutura de teste do Spring Boot. Trabalha com Gradle, Maven, testng, Junit.

O desenvolvedor anunciou dois modos de operação: 

  • Essencial: os testes são gerados pela assinatura do método
  • Avançado: o corpo do método também é levado em consideração e os testes são gerados para cada ramificação no código. 

O DiffBlue é fornecido como um utilitário CLI para incorporação no IC ou como um plug-in para o IntelliJ IDEA para gerar testes durante o desenvolvimento.


O próprio DiffBlue absorve classes, gera acessórios e afirmações.
 
Em projetos reais, o DiffBlue provou ser ambíguo. 

  1. . — «». , , .   Gradle . . jar' , jcover.config. c Serializable, Active Record . — 3000 (sic!), coverage 3%.
  2. Caso dois, muito mais bem sucedido. Microsserviço sem estado no Spring Boot. Segundo os desenvolvedores, eles dedicam muito tempo ao suporte a aplicativos de inicialização da primavera. Tudo funcionou sem erros, a cobertura aumentou de 28 para 42%, mas apenas de acordo com as instruções. Nas agências, a cobertura cresceu apenas 6% de (41% para 47%). Isso ocorre porque muitos testes foram testados por getters ou setters. Talvez no modo Avançado os resultados sejam ainda mais interessantes.


Isso também acontece. Para uma classe com uma dúzia de métodos públicos e lógica complexa, um manequim foi obtido.

A linha inferior: se tudo funcionasse como planejado, seria muito legal e faria sentido, mas isso ainda está muito longe. A versão 0.1 mostra que os caras ainda estão à frente.

Conclusão


O uso da IA ​​para programação está ganhando força, mas até agora o setor ainda está no começo da jornada. Existem muitas aplicações possíveis: em algumas, já houve concorrência; em outras, até agora, apenas produtos únicos são apresentados. O objetivo principal e aparentemente mais óbvio - a geração do código em si - ainda não foi adotado por ninguém, mas já é capaz de aumentar a velocidade do desenvolvimento, reduzir o número de bugs no código antigo e impedir o surgimento de novos.

All Articles