AI está pronta para transformar radicalmente o desenvolvimento de software

10/05/2019

Estamos entrando na era do que o diretor de Inteligência Artificial (AI) da Tesla, Andrej Karpathy, chama de “Software 2.0”, em que as redes neurais escrevem o código, e as principais tarefas das pessoas são definir as tarefas, coletar os dados e construir as interfaces do usuário.

Mas nem todas as tarefas podem ser abordadas por redes neurais – pelo menos, ainda não – e o desenvolvimento de software tradicional ainda tem um papel a desempenhar. Mesmo assim, no entanto, a Inteligência Artificial, o Aprendizado de Máquina (Machine Learning) e a análise avançada estão mudando a maneira como o software é projetado, escrito, testado e implantado.

Testes

A brasileira Totvs fornece software de missão crítica para cerca de 100.000 clientes corporativos. Por exemplo, trilhões de dólares são negociados a cada dia em suas soluções de serviços financeiros. Tais aplicativos exigem testes capazes. Os criadores de casos de teste precisam ser extremamente conscientes sobre como eles projetam cenários de teste, cada um com várias horas de criação.

Acompanhar é um desafio significativo, diz Vicente Goetten, diretor executivo do Totvs Labs. Cada caso de teste deve ser personalizado para se ajustar à interface do usuário. Com os aplicativos constantemente sendo redesenhados, as interfaces estão sempre mudando. E, se a própria plataforma for alterada, por exemplo, ao atualizar para uma versão mais recente do JavaScript, todos os elementos de design serão alterados de uma só vez. “Imagine reescrever milhares e milhares de casos de uso”, diz Goetten.

A Totvs recorreu à Inteligência Artificial para obter ajuda. A plataforma utilizada pela Totvs para executar testes, Functionalize, agora suporta a criação inteligente de casos de teste. A tecnologia pode olhar para uma tela da maneira que um humano faz para identificar onde estão os campos e botões de entrada, em vez de confiar no código subjacente. Ele também pode criar cenários de teste e dados de amostra para enfatizar aplicativos.

“Antes, um QA sênior levaria um dia para concluir um caso de teste na solução legada que estávamos usando”, diz ele. “Agora, em minutos, eles podem criar o mesmo caso de teste.”

A mais recente adição é a capacidade de entender o inglês simples, diz Gotten. “Você pode dizer o que testar, e ele automaticamente criará um caso de teste para você”, afirma. “Isso está abrindo uma nova porta para nós. Podemos ter QAs menos sêniores escrevendo casos de teste para nós.”

Monitoramento e Implantação

Mesmo quando o software passa pelo controle de qualidade, nem sempre funciona conforme o esperado. “Hoje de manhã, tivemos alguns dados de produtos que foram introduzidos e o site não estava pronto para lidar com eles”, aponta Patrick Berry, diretor sênior de tecnologia da Build.com, uma varejista on-line de melhorias domésticas.

Centenas de horas foram para monitorar o desempenho do software da Build.com e, quando um problema surgiu, a empresa revertia o software de volta a um estado bom anteriormente conhecido e o enviava aos desenvolvedores para corrigir os problemas.

“O problema que enfrentamos foi que o software que escrevemos estava ficando tão complexo e em uma escala de tráfego em que estava além de qualquer pessoa ou mesmo de uma equipe de pessoas olhar todos os sistemas de monitoramento que temos e dizer ‘As coisas estão bem’ ou ‘As coisas estão ruins; faça alguma coisa agora’”, diz Berry. “Ele absorveu muito tempo e desacelerou os lançamentos. Não conseguimos valorizar os clientes com rapidez suficiente e não recebíamos feedback dos desenvolvedores rápido o suficiente para que as coisas precisassem ser corrigidas.”

Assim, a Build.com mudou para a Harness, uma plataforma de entrega de software como serviço, que reduziu o tempo gasto em monitoramento de desempenho para quase zero, aumentando a velocidade de implantação em vinte vezes, diz ele. Agora, se houver um problema, o sistema reverterá automaticamente para um estado anterior, o último backup da noite passada, e o problema será enviado para correção, com base nos recursos internos de aprendizado de máquina. A Build.com também está procurando usar mais AI como parte do processo de desenvolvimento de código.

“Nós não temos código escrevendo de código ainda”, explica. “Mas onde AI e ML podem dar uma mão no lado do desenvolvimento, é realmente sobre o entendimento de que padrões comuns são bons ou ruins. Pode-se destacar que isso é uma anomalia, e nós podemos voltar atrás e remediar isso.”

Segurança

Berry também espera ver mais ferramentas que alavanquem a Inteligência Artificial para ajudar as empresas a escrever um código melhor e mais seguro em primeiro lugar.

“É aí que estamos realmente procurando usar Inteligência Artificial e Aprendizado de Máquina na frente do desenvolvimento – para aumentar as áreas onde você não pode simplesmente jogar pessoas suficientes para o problema”, diz ele. “Digamos que sua base de código tenha milhões de linhas de código. Quantas pessoas você lançará na auditoria desses milhões de linhas de código? Precisamos de soluções que sejam dimensionadas.”

Por exemplo, a Build.com usa o GitHub como seu repositório de códigos. “Eles estão introduzindo certos sistemas que monitoram seu código e alertam você sobre possíveis vulnerabilidades nas bibliotecas de terceiros que utilizamos”, diz ele.

Esta é uma área ativa de desenvolvimento para o GitHub, diz Omoju Miller, engenheira de Aprendizado de Máquina do GitHub. “Estamos trabalhando na criação de modelos que suportem vulnerabilidades comuns e descobertas de exposição.”

O GitHub também acaba de lançar uma ferramenta para ajudar os desenvolvedores a identificar onde acidentalmente compartilharam seus tokens no código, segundo ela.

Descoberta

O GitHub também está trabalhando em ferramentas que “ajudam os desenvolvedores a descobrir funções de uma maneira natural”, diz Miller. Com a AI, os desenvolvedores podem procurar por funções baseadas em suas intenções, diz ela.

“Usando a grande quantidade de código disponível publicamente na plataforma de codificação de código aberto do GitHub, a equipe de pesquisa de aprendizado de máquina fez um progresso significativo ao possibilitar isso”, aponta a engenheira. “Com a pesquisa de código semântico, o desenvolvedor pode aumentar e simplificar suas necessidades de resolução de problemas computacionais.”

Isso significa que os desenvolvedores não serão mais limitados pelo que sabem, diz Miller. “Eles podem aproveitar todo o conhecimento sobre o código armazenado no GitHub para ajudá-los a resolver seus problemas.”

Análise

As tecnologias de AI também estão aparecendo em ferramentas de análise de software estáticas e dinâmicas, destaca Ray Wang, analista principal e fundador da Constellation Research.

“As capacidades de Aprendizado de Máquina já são muito mais ricas do que onde estávamos há 18 meses”, diz, “e estamos começando a ver redes neurais sendo aplicadas. No momento, é mais para análise estática que dinâmica, mas nos próximos anos, vamos ver o surgimento da análise dinâmica [alimentada por AI]”.

Código de desenvolvimento

Quando se trata de escrever novos códigos a partir do zero, no entanto, a tecnologia atual deixa a desejar, afirma Berry, da Build.com. “Existem certos sistemas por aí agora, como seus ambientes de desenvolvimento integrados, mas é mais como recortar e colar com modelos construídos internamente.”

Mas isso está começando a mudar. O IDE mais popular, o Visual Studio, da Microsoft, tem o complemento de código assistido por AI incorporado em sua versão mais recente, lançada em abril. A funcionalidade é baseada no aprendizado de máquina a partir de milhares de repositórios GitHub de código aberto, de acordo com Mark Wilson-Thomas, gerente de programas sênior da Microsoft para o Visual Studio IntelliCode.

“Destilamos a sabedoria do código da comunidade de código aberto”, diz Amanda Silver, sócia diretora de gerenciamento de programas da Microsoft para Visual Studio e Visual Studio Code. Também ajuda a entender como as classes comuns são usadas, acrescenta ela, “o que é especialmente útil quando se trabalha com código não familiar”.

Em uma pesquisa recente com usuários do IntelliCode, mais de 70% relataram que se sentiram mais produtivos ao usar o novo IntelliCode com tecnologia AI que o IntelliSense clássico, diz ela. As empresas que usam essa ferramenta também podem criar modelos personalizados e privados para seus próprios funcionários, diz ela.

“Isso permite que o IntelliCode fale o dialeto local de sua equipe ou organização sem transmitir seu código-fonte à Microsoft”, aponta.

A analista do Gartner, Svetlana Sicular, diz que esse tipo de funcionalidade é a razão pela qual a Microsoft comprou o GitHub em primeiro lugar.

O GitHub, que hospeda mais de 100 milhões de repositórios – dos quais mais de 25 milhões são de código aberto – foi comprado pela Microsoft no ano passado. A plataforma é gratuita para repositórios públicos, bem como para pequenos projetos privados.

“O GitHub é um depósito de códigos”, afirma Sicular. “Minha teoria é que a Microsoft irá usá-lo para gerar novos códigos.”

Plataformas inteligentes de desenvolvimento de aplicativos

Berry da Build.com também está de olho no que está acontecendo no espaço de pouco código e quase sem código. “Não é nada novo”, diz ele. “Os desenvolvedores estão conectando sistemas desde que haja desenvolvimento”.

Mais recentemente, isso tornou a implantação de sistemas de inteligência artificial mais fácil e rápida, diz ele. “As soluções pré-enlatadas para mecanismos de recomendação, por exemplo, transformaram o que costumava ser soluções muito difíceis e personalizadas em commodities”, diz ele.

Agora, essa abordagem de baixo código está ficando ainda mais inteligente, permitindo que as empresas parem de perder tempo na construção de sistemas de commodities, diz ele. “Trata-se, na verdade, de nos dar uma oportunidade de criar inovações genuínas e inovadoras. Estou muito empolgado com o que esses campos podem nos fornecer daqui para frente”, diz ele.

Tome, por exemplo, a Mendix. A empresa vem oferecendo um sistema de blocos de construção para criar aplicativos por cerca de uma década. Os desenvolvedores juntam funcionalidades das opções disponíveis na plataforma e, quando não são suficientes, vinculam a código externo para as partes que faltam. Agora, a companhia construiu um sistema de deep learning para analisar esses modelos, analisar seu comportamento na produção para ver quais são os mais bem-sucedidos e identificar padrões baseados nesses modelos.

Ainda assim, há resistência dos departamentos de TI em usar essas plataformas e falta de confiança do lado dos negócios, diz Vikram Kunchala, líder de segurança de aplicativos da Deloitte Cyber.

“A adoção parece ser mais uma curiosidade neste momento”, diz ele. “As empresas estão experimentando isso em pedaços menores. Ou se eles tiverem que fazer algo rápido – já vimos um pouco disso. Mas eu não vi nenhum cliente adotando isso como um padrão corporativo pelo que eu saiba”.

Software 2.0

Mas a maior mudança de todas é a migração para aplicativos que não têm nenhuma conexão com o código tradicional.

Digamos, por exemplo, que você queira criar um aplicativo que reproduza o Jogo da Velha. Você poderia programar as regras e uma estratégia de jogo. Se o adversário fizer isso, você faz aquilo. O trabalho do desenvolvedor é escolher a estratégia correta e criar uma interface de usuário atraente.

Se o objetivo é vencer os jogadores humanos, essa estratégia funciona para o Jogo da Velha, damas e até xadrez. Mas para jogos mais difíceis, como o Go, criar um conjunto de regras é muito difícil. Aí entram tecnologias de AI, como aprendizagem profunda e redes neurais, que transformam o processo de software em sua cabeça.

Em vez de começar com as regras, os desenvolvedores começam com dados – um grande número de jogos. Com o AlphaGo, o Google treinou o sistema em milhares de jogos humanos. Com a versão mais recente, AlphaGo Zero, os dados de treinamento eram jogos que o sistema jogava contra si mesmo, começando com movimentos aleatórios.

Contanto que os dados de treinamento sejam claros e exista o suficiente, e os critérios para sucesso ou fracasso também sejam claros, essa abordagem tem o potencial de revolucionar o desenvolvimento de software. Os desenvolvedores, em vez de tentar descobrir e codificar as regras do jogo, agora precisam trabalhar no gerenciamento de dados de treinamento e critérios de sucesso, deixando a codificação real para o sistema.

Essa é exatamente a abordagem que a Tesla está tomando com seus carros autônomos, diz Andrej Karpathy, diretor de AI da fabricante de automóveis.

“Esta é uma maneira totalmente nova de projetar software”, disse ele em uma conferência de tecnologia no ano passado. “Agora, em vez de escrever código explicitamente, estamos acumulando e massageando conjuntos de dados, e esses são efetivamente o código.”

Assim, por exemplo, os limpadores de pára-brisa do Tesla tinham dificuldade em saber quando ligar e desligar enquanto os carros passavam pelos túneis. No desenvolvimento de software tradicional, os programadores procuravam o código para descobrir onde estava a lógica defeituosa. Com o Software 2.0, os desenvolvedores analisam os dados.

Nesse caso específico, por exemplo, não havia dados de treinamento suficientes para carros passando por túneis. A Tesla teve que sair, obter mais dados, anotar esses dados, adicioná-los ao conjunto de dados de treinamento e executar novamente os algoritmos de deep learning.

“Nós fizemos todos os problemas parecerem os mesmos com esta abordagem”, diz Karpathy.

Ainda há espaço para o desenvolvimento tradicional, acrescenta. Atualmente, as interfaces de usuário para esses sistemas e as integrações com outras plataformas ainda são construídas manualmente.

Porém, à medida que mais empresas recorrem à AI para aqueles aplicativos em que há muitos dados disponíveis e plataformas de pouco código para o resto, então o trabalho de desenvolvimento de software se transformará drasticamente em um futuro muito próximo.

Autora: Maria Korolov.

Fonte: CIO.

Voltar