Desenvolvimento Moldável: Simplificando Insights de Softwares
Aprenda como o desenvolvimento moldável transforma a compreensão de software com ferramentas personalizadas.
― 7 min ler
Índice
O desenvolvimento moldável ajuda a tornar o software mais fácil de entender. Ele faz isso permitindo que os desenvolvedores criem ferramentas personalizadas que podem responder a perguntas específicas sobre o software. Essa abordagem resulta em um sistema mais explicável, onde os usuários podem explorar interativamente o funcionamento interno do software.
Introdução: Desenvolvimento Moldável em Poucas Palavras
Sistemas de software guardam muita informação que pode ajudar tanto desenvolvedores quanto usuários comuns. No entanto, acessar esse conhecimento pode ser complicado. Recursos típicos para avaliar software, como código-fonte e sistemas em execução, podem não oferecer respostas claras. A documentação também pode estar desatualizada ou incompleta.
Embora ferramentas de análise de software possam ajudar, elas geralmente não dão conta do recado porque cada sistema é único. Muitas vezes, os desenvolvedores gastam muito tempo tentando entender o que um sistema faz e como ele funciona. Esse é um custo significativo no desenvolvimento de software.
Para melhorar essa situação, o desenvolvimento moldável cria sistemas que podem responder às suas próprias perguntas. Ao facilitar a adição de muitas ferramentas personalizadas, ele cria um modelo dinâmico do software que os usuários podem explorar. Essas ferramentas podem incluir recursos como inspetores, editores de código, depuradores e cadernos.
Por exemplo, em um jogo como Ludo, em vez de apenas ver o código-fonte ou executar o jogo, os desenvolvedores podem criar visões personalizadas para fazer perguntas específicas sobre o jogo e obter respostas fáceis. Eles podem visualizar os movimentos feitos, ver o estado atual do jogo e interagir com ele de uma forma mais compreensível.
Padrões de Desenvolvimento Moldável
O desenvolvimento moldável pode ser dividido em uma série de padrões que trabalham juntos. Esses padrões fornecem uma estrutura para criar tais sistemas.
Padrões de Ferramentas
Esses padrões focam na construção de ferramentas personalizadas que são fáceis de criar e usar.
Ferramenta Moldável
Se as ferramentas existentes não atendem às necessidades de um domínio específico, uma ferramenta moldável pode ser desenvolvida. Em vez de criar plugins complexos, que podem ser caros, uma ferramenta moldável permite a personalização em tempo de execução. Por exemplo, um executor de testes poderia identificar casos de teste automaticamente com base em convenções de nomenclatura comuns ou anotações, facilitando a execução de testes específicos de um domínio.
Playground Contextual
Ao usar uma ferramenta moldável, um playground contextual oferece uma maneira de explorar entidades de software de forma interativa. Esse ambiente permite que os usuários escrevam e testem pequenos trechos de código sem precisar alternar entre diferentes ferramentas. Por exemplo, em uma aplicação Python, um playground poderia permitir que os usuários manipulassem instâncias reais de objetos e testassem suas ideias sem precisar configurar testes separados ou trabalhar em um editor padrão.
Visão Personalizada
Visões personalizadas ajudam a apresentar informações do domínio de forma eficaz. Em vez de usar uma visão genérica que pode não destacar detalhes importantes, os desenvolvedores podem criar visões sob medida. Usando um jogo de Ludo como exemplo, eles podem construir uma visão personalizada mostrando os movimentos de cada jogador, facilitando a compreensão do estado atual do jogo.
Busca Personalizada
Em modelos de domínio complexos, navegar entre entidades pode ser complicado. Recursos de busca personalizada permitem que os usuários localizem entidades com base em diferentes critérios rapidamente. Por exemplo, dentro de um aplicativo de agenda, os usuários podem procurar contatos ou endereços específicos, aumentando a eficiência.
Ação Personalizada
Para tarefas repetitivas, ações personalizadas simplificam a execução. Em vez de rodar os mesmos trechos de código repetidamente, um desenvolvedor pode encapsular ações comuns em um único clique de botão dentro da ferramenta moldável. Isso ajuda a agilizar processos e reduz a chance de erros.
Narrativa Composta
Explicar um sistema de software pode ser desafiador algumas vezes. Uma narrativa composta combina várias visões em uma história coesa, ajudando os usuários a entender recursos ou problemas específicos. Ao passar por várias etapas, os usuários podem ver como navegar em um sistema ou solucionar um problema de forma eficaz.
Padrões de Modelagem
Esses padrões focam em como estruturar melhor as entidades do domínio para melhorar a compreensão e a consulta.
Objeto Moldável
Um objeto moldável é uma instância viva de uma entidade do domínio que os desenvolvedores podem interrogar. Em vez de escrever código em um editor de texto tradicional, eles podem interagir com um objeto ao vivo para fazer perguntas e obter insights. O processo de exploração pode levar à criação de ferramentas personalizadas que aumentam a compreensão.
Objeto de Exemplo
Objetos de exemplo servem como instâncias concretas que mostram estados ou comportamentos específicos no sistema. Eles podem ser úteis para testes e documentação, permitindo que os desenvolvedores se refiram ou demonstrem rapidamente a funcionalidade.
Wrapper de Dados Moldável
Ao trabalhar com dados existentes, aplicar um wrapper de dados moldável torna os dados mais fáceis de gerenciar. Em vez de lidar com estruturas de dados brutas, os desenvolvedores podem encapsular os dados em uma classe dedicada que representa melhor os conceitos do domínio. Isso permite a criação de visões e ações personalizadas que refletem a interpretação dos dados.
Wrapper de Coleção
Semelhante aos wrappers de dados moldáveis, os wrappers de coleção lidam com grupos de objetos do domínio. Eles permitem que ferramentas personalizadas sejam aplicadas a coleções, melhorando a navegação e as habilidades de exploração.
Padrões de Processo
Padrões de processo orientam como organizar e gerenciar as tarefas envolvidas no desenvolvimento moldável.
Diário de Projeto
Manter um diário de projeto ajuda a acompanhar o progresso, decisões e experimentos. Em vez de criar documentação após a conclusão de um projeto, os desenvolvedores podem usar um caderno ao vivo para documentar sua jornada. Essa abordagem permite manter um histórico das mudanças e decisões que podem melhorar os esforços de desenvolvimento futuros.
Acúmulo de Ferramentas
Antes de começar o desenvolvimento moldável, pode ser necessário configurar ferramentas fundamentais. Isso pode incluir analisadores para formatos específicos ou pontes para outros sistemas. Investir nessas ferramentas no começo pode acelerar o processo de desenvolvimento real.
Ponto Cego
Identificar "pontos cegos" em um sistema é crucial. Essas são áreas que as partes interessadas acham desafiadoras de entender ou monitorar. Ao focar nesses pontos cegos, os desenvolvedores podem criar ferramentas que fornecem insights e ajudam as partes interessadas a ver o valor do desenvolvimento moldável.
Visão Simples
Ao desenvolver uma visão personalizada, começar simples é fundamental. Criar uma visão que transmita as informações essenciais permite eficiência. Se houver necessidade de mais complexidade depois, melhorias podem ser feitas.
Ferramenta de Análise Descartável
Às vezes, durante avaliações ou investigações de bugs, ferramentas personalizadas rápidas são benéficas. Essas ferramentas descartáveis podem ser desenvolvidas para fornecer insights imediatos sobre problemas específicos sem a necessidade de componentes reutilizáveis.
Conclusão
O desenvolvimento moldável oferece uma maneira de tornar sistemas de software mais explicáveis e fáceis de explorar. Ao dividir o processo em padrões compreensíveis, os desenvolvedores podem se concentrar em atender a necessidades específicas dentro de seus projetos. Ao evoluir continuamente esses sistemas com ferramentas personalizadas que se adaptam às necessidades dos usuários, o software pode se tornar mais acessível tanto para partes interessadas técnicas quanto não técnicas.
Título: Moldable Development Patterns
Resumo: Moldable development supports decision-making by making software systems explainable. This is done by making it cheap to add numerous custom tools to your software, turning it into a live, explorable domain model. Based on several years of experience of applying moldable development to both open-source and industrial systems, we have identified several mutually supporting patterns to explain how moldable development works in practice. This paper targets (i) readers curious to learn about moldable development, (ii) current users of the Glamorous Toolkit moldable IDE wanting to learn best practices, and (iii) developers interested in applying moldable development using other platforms and technology.
Autores: Oscar Nierstrasz, Tudor Gîrba
Última atualização: 2024-09-27 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2409.18811
Fonte PDF: https://arxiv.org/pdf/2409.18811
Licença: https://creativecommons.org/licenses/by-sa/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.
Ligações de referência
- https://www.micahsmith.com/blog/2021/02/sharing-a-preprint-using-acmart/
- https://www.europlop.net
- https://gtoolkit.com
- https://pharo.org
- https://web.archive.org/web/20240523010248/
- https://www.jetbrains.com/help/idea/customizing-views.html
- https://web.archive.org/web/20240413225707/
- https://www.jetbrains.com/help/writerside/custom-search-service.html
- https://web.archive.org/web/20240916005104/
- https://en.wikipedia.org/wiki/Narrative
- https://api.github.com/orgs/feenkcom
- https://www.lifeware.ch
- https://web.archive.org/web/20231213144857/
- https://book.gtoolkit.com/adding-simple-list-views-for-ludo-players--3g9kpmxty3fj9eev3ucmqkztc
- https://hillside.net/plop/2013/papers/proceedings/papers/cunningham.pdf
- https://web.archive.org/web/20240917092258/
- https://en.wikipedia.org/wiki/Zettelkasten
- https://web.archive.org/web/20240820082136/
- https://docs.jupyter.org/en/latest/
- https://docs.jupyter.org/
- https://roamresearch.com
- https://lepiter.io/feenk/steering-agile-architecture-by-example--th-e2p6aps2brbby94deek31xqxh/
- https://web.archive.org/web/20240430071604/
- https://jupyterbook.org/en/stable/interactive/interactive.html
- https://xkcd.com/1319/