- Engenheiros de software eficazes criam e mantêm um modelo mental claro dos requisitos e do código, executando um loop de comparação e atualização de forma repetida
- LLMs conseguem escrever e modificar código, criar testes e depurar, mas têm dificuldade em manter um modelo mental preciso, o que leva à confusão em tarefas complexas
- Atualmente, os LLMs têm limitações para identificar com precisão as diferenças entre código e requisitos e corrigi-las adequadamente devido a problemas de omissão de contexto, viés de recência e alucinação
- Pessoas conseguem alternar o raciocínio com flexibilidade conforme a situação, como armazenar temporariamente o contexto completo ou ocultar detalhes por um momento para enxergar o panorama geral, mas os LLMs não conseguem implementar isso
- LLMs são úteis em tarefas com requisitos simples, mas no desenvolvimento de software complexo, no fim, o engenheiro de software precisa assumir diretamente a responsabilidade pela clareza dos requisitos e pelo comportamento do código, e o LLM atua como ferramenta de apoio
Loop de engenharia de software
- Engenheiros experientes trabalham repetindo as seguintes etapas
1. construir um modelo mental dos requisitos
2. escrever o código de acordo com esse modelo
3. entender o que o código escrito realmente faz
4. identificar as diferenças e corrigir o código ou os requisitos
- O ponto central desse loop é a capacidade de manter um modelo mental preciso e sustentável
Limitações dos LLMs
- LLMs conseguem executar tarefas como escrever código, identificar problemas e corrigi-los, criar e executar testes, adicionar logs e usar depuradores
- No entanto, por não conseguirem manter um modelo mental, surgem problemas como os seguintes
- presumir que o código que eles próprios escreveram está funcionando bem
- quando um teste falha, depender de suposições para decidir se devem corrigir o código ou o teste
- quando entram em confusão, apagar todo o código e reescrevê-lo do zero
- Diferentemente dos humanos, quando um teste falha eles não têm flexibilidade para revisar o modelo e decidir a direção da correção, nem para destravar o problema por meio de conversa quando ficam frustrados
- Engenheiros de software executam testes durante o trabalho e, quando surge um problema, conseguem julgar com clareza que parte deve ser corrigida
- Às vezes, mesmo quando reiniciam todo o trabalho, isso acaba levando a uma compreensão mais profunda do problema
Possibilidades futuras
- Isso pode mudar no futuro à medida que os modelos evoluírem mais, mas engenharia de software exige mais do que simples geração de código
- Ao resolver problemas importantes, humanos conseguem trazer temporariamente à memória todo o contexto, focar em um ponto específico ou observar o quadro geral
- O importante não é continuar aumentando indefinidamente a quantidade de contexto, e sim lidar seletivamente com as informações necessárias
- Falta aos LLMs a capacidade de, como os humanos, armazenar e restaurar contexto temporariamente ou alternar o raciocínio entre o quadro geral e os detalhes
- Principais limitações atuais dos LLMs
- omissão de contexto (Context omission): não conseguem encontrar bem as partes em que falta informação necessária
- viés de recência (Recency bias): dão peso excessivo às informações mais recentes dentro da janela de contexto
- alucinação (Hallucination): inventam detalhes que não existem
- A adição de memória pode melhorar parte disso, mas, quando a complexidade ultrapassa certo ponto, eles ainda falham em entender o contexto e manter o modelo
- Também lhes falta a capacidade de manter dois modelos mentais semelhantes, analisar as diferenças entre eles e decidir onde corrigir os requisitos ou o código
Papel e uso no momento atual
- LLMs têm pontos fortes em geração rápida de código e integração de requisitos e documentação, então podem ser bastante úteis em tarefas simples e bem definidas
- No entanto, em problemas não triviais, é difícil manter contexto suficiente e promover melhorias iterativas
- Portanto, tarefas como clareza dos requisitos e validação do código continuam sendo responsabilidade do engenheiro de software
- Busca-se um ambiente em que humanos e agentes (LLMs) construam software juntos, mas, no momento, o engenheiro deve liderar, e o LLM deve ser usado como ferramenta
Ainda não há comentários.