Pesquisadores do MIT propõem um novo modelo para software program modular e legível | Notícias do MIT



Pesquisadores do MIT propõem um novo modelo para software program modular e legível | Notícias do MIT

A codificação com grandes modelos de linguagem (LLMs) é uma grande promessa, mas também expõe algumas falhas de longa knowledge no software program: código que é confuso, difícil de alterar com segurança e muitas vezes opaco sobre o que realmente está acontecendo nos bastidores. Pesquisadores do Laboratório de Ciência da Computação e Inteligência Synthetic do MIT (CSAIL) estão traçando um caminho mais “modular” pela frente.

Sua nova abordagem divide os sistemas em “conceitos”, partes separadas de um sistema, cada uma projetada para realizar bem uma tarefa, e “sincronizações”, regras explícitas que descrevem exatamente como essas peças se encaixam. O resultado é um software program mais modular, transparente e mais fácil de entender. Uma pequena linguagem específica de domínio (DSL) torna possível expressar sincronizações de forma simples, de uma forma que os LLMs possam gerar de forma confiável. Num estudo de caso actual, a equipa mostrou como este método pode reunir funcionalidades que de outra forma estariam dispersas por vários serviços.

A equipe, incluindo Daniel Jackson, professor de engenharia elétrica e ciência da computação (EECS) do MIT e diretor associado do CSAIL, e Eagon Meng, estudante de doutorado do EECS, afiliado do CSAIL e designer da nova sincronização DSL, exploram essa abordagem em seu artigo “O que você vê é o que faz: um padrão estrutural para software program legível”, que eles apresentaram na Splash Convention em Cingapura em outubro. O desafio, eles explicam, é que na maioria dos sistemas modernos, um único recurso nunca é totalmente independente. Adicionar um botão “compartilhar” a uma plataforma social como o Instagram, por exemplo, não reside em apenas um serviço. Sua funcionalidade é dividida em código que lida com postagem, notificação, autenticação de usuários e muito mais. Todas essas peças, apesar de estarem espalhadas pelo código, devem ser cuidadosamente alinhadas, e qualquer mudança corre o risco de efeitos colaterais não intencionais em outros lugares.

Jackson chama isso de “fragmentação de recursos”, um obstáculo central à confiabilidade do software program. “Da maneira como construímos software program hoje, a funcionalidade não é localizada. Você quer entender como funciona o ‘compartilhamento’, mas precisa procurá-lo em três ou quatro lugares diferentes e, quando encontrá-lo, as conexões ficam enterradas em código de baixo nível”, diz Jackson.

Conceitos e sincronizações têm como objetivo resolver esse problema. Um conceito agrupa uma funcionalidade única e coerente, como compartilhar, curtir ou seguir, junto com seu estado e as ações que pode realizar. As sincronizações, por outro lado, descrevem em um nível superior como esses conceitos interagem. Em vez de escrever um código de integração confuso de baixo nível, os desenvolvedores podem usar uma pequena linguagem específica de domínio para explicar essas conexões diretamente. Nesta DSL, as regras são simples e claras: a ação de um conceito pode desencadear outra, de modo que uma mudança em uma parte do estado possa ser mantida em sincronia com outra.

“Pense nos conceitos como módulos que são completamente limpos e independentes. As sincronizações agem como contratos – elas dizem exatamente como os conceitos devem interagir. Isso é poderoso porque torna o sistema mais fácil para os humanos entenderem e mais fácil para ferramentas como LLMs gerarem corretamente”, diz Jackson. “Por que não podemos ler código como um livro? Acreditamos que o software program deve ser legível e escrito em termos de nossa compreensão: nossa esperança é que os conceitos sejam mapeados para fenômenos familiares, e as sincronizações representem nossa intuição sobre o que acontece quando eles se juntam”, diz Meng.

Os benefícios vão além da clareza. Como as sincronizações são explícitas e declarativas, elas podem ser analisadas, verificadas e, claro, geradas por um LLM. Isso abre a porta para um desenvolvimento de software program mais seguro e automatizado, onde os assistentes de IA podem propor novos recursos sem introduzir efeitos colaterais ocultos.

Em seu estudo de caso, os pesquisadores atribuíram recursos como curtir, comentar e compartilhar cada um a um único conceito – como uma arquitetura de microsserviços, mas mais modular. Sem esse padrão, esses recursos estavam espalhados por muitos serviços, dificultando sua localização e teste. Usando a abordagem de conceitos e sincronizações, cada recurso tornou-se centralizado e legível, enquanto as sincronizações explicavam exatamente como os conceitos interagiam.

O estudo também mostrou como as sincronizações podem eliminar preocupações comuns, como tratamento de erros, formatação de respostas ou armazenamento persistente. Em vez de incorporar esses detalhes em todos os serviços, a sincronização pode tratá-los uma vez, garantindo consistência em todo o sistema.

Direções mais avançadas também são possíveis. As sincronizações podem coordenar sistemas distribuídos, mantendo réplicas em diferentes servidores em sincronia, ou permitir que bancos de dados compartilhados interajam de forma limpa. O enfraquecimento da semântica de sincronização poderia permitir uma consistência eventual, preservando ao mesmo tempo a clareza no nível arquitetônico.

Jackson vê potencial para uma mudança cultural mais ampla no desenvolvimento de software program. Uma ideia é a criação de “catálogos de conceitos”, bibliotecas compartilhadas de conceitos bem testados e específicos de domínio. O desenvolvimento de aplicativos poderia então se tornar menos uma questão de juntar o código do zero e mais uma questão de selecionar os conceitos certos e escrever as sincronizações entre eles. “Os conceitos podem se tornar um novo tipo de linguagem de programação de alto nível, com sincronizações como os programas escritos nessa linguagem.”

“É uma maneira de tornar visíveis as conexões no software program”, diz Jackson. “Hoje, escondemos essas conexões no código. Mas se você puder vê-las explicitamente, poderá raciocinar sobre o software program em um nível muito mais elevado. Você ainda terá que lidar com a complexidade inerente à interação dos recursos. Mas agora está aberto, não disperso e obscurecido.”

“A construção de software program para uso humano com base em abstrações de máquinas de computação subjacentes sobrecarregou o mundo com software program que é muitas vezes caro, frustrante e até perigoso de entender e usar”, diz Kevin Sullivan, professor associado da Universidade da Virgínia, que não esteve envolvido na pesquisa. “Os impactos (como nos cuidados de saúde) têm sido devastadores. Meng e Jackson invertem o guião e insistem em construir software program interactivo com base em abstracções da compreensão humana, a que chamam ‘conceitos’. Eles combinam lógica matemática expressiva e linguagem pure para especificar tais abstrações intencionais, fornecendo uma base para verificar seus significados, compondo-os em sistemas e refinando-os em programas adequados para uso humano. É uma direção nova e importante na teoria e na prática do design de software program que vale a pena observar.”

“Há muitos anos está claro que precisamos de melhores maneiras de descrever e especificar o que queremos que o software program faça”, acrescenta Thomas Ball, professor honorário da Universidade de Lancaster e docente afiliado da Universidade de Washington, que também não esteve envolvido na pesquisa. “A capacidade dos LLMs de gerar código apenas adicionou combustível ao fogo das especificações. O trabalho de Meng e Jackson em design de conceito fornece uma maneira promissora de descrever o que queremos do software program de maneira modular. Seus conceitos e especificações são adequados para serem combinados com LLMs para atingir a intenção do designer.”

Olhando para o futuro, os investigadores esperam que o seu trabalho possa influenciar a forma como a indústria e a academia pensam sobre a arquitetura de software program na period da IA. “Para que o software program se torne mais confiável, precisamos de maneiras de escrevê-lo que tornem suas intenções transparentes”, diz Jackson. “Conceitos e sincronizações são um passo em direção a esse objetivo.”

Este trabalho foi parcialmente financiado pela Iniciativa Machine Studying Functions (MLA) das CSAIL Alliances. No momento do financiamento, o conselho de iniciativa period composto pela British Telecom, Cisco e Ernst and Younger.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *