Pesquisa sobre modelagem e geração de código

Recentemente, nós conduzimos uma pesquisa com membros da UML-BR, provavelmente a maior comunidade de UML do Brasil. Os membros dessa lista são principalmente usuários da linguagem/praticantes de modelagem, ao invés de fabricantes de ferramentas. Nosso objetivo com essa pesquisa era primariamente entender o quão comum é a prática de geração de código a partir de modelos (UML ou não), em que modalidade é praticada, e entre os que não praticam, por que não o fazem.

O número de participantes foi bastante pequeno (14 respostas), o que limita bastante a significância estatística dos dados obtidos. De qualquer forma, há valor em analisar essa pequena amostra qualitativamente.

Resultados da pesquisa

Que linguagens de programação a sua equipe usa?

Esta primeira pergunta serviu apenas para fornecer contexto para qualificar as respostas seguintes. Por exemplo, para ajudar a identificar que tecnologias de implementação são mais frequentemente associadas com geração de código. Como já era esperado, fica claro o domínio de Java (como linguagem ou plataforma) e .Net (tanto C# como VB.net). Destaque para as presenças de COBOL (!), Visual Dataflex e Apex (os dois últimos aparentemente como única linguagem na empresa).

Que ferramenta(s) de modelagem a sua equipe usa?

Enterprise Architect claramente lidera como linguagem de modelagem (6 dos 11 que usam alguma ferramenta), seguido pelos suites Rational da IBM (entrevistados mencionaram Rose e RSA), e pelo Jude/Astah* da japonesa Change Vision. Duas ferramentas de criação de diagramas que executam no browser foram mencionadas: Create.ly e yUML.me.

A sua equipe modela com que finalidade(s) primária(s)? (escolha mais de uma opção se aplicável)

Entre os entrevistados que usam modelagem (11 de 14), todos disseram que comunicação com desenvolvedores era uma finalidade primária. 63% dos que modelam (7 de 11) também usam modelos para comunicação com clientes. Apenas quatro entrevistados identificaram geração de código como finalidade primária.

Para aqueles que disseram não modelar (3), coincidência ou não, dois usam 4GLs como linguagem primária – 4GLs fornecem muitos dos benefícios de modelagem e geração de código, então o ROI não é tão claro quanto para quem usa 3GLs. Contraste isso com o fato que dos 4 entrevistados que vêem geração de código como finalidade primária, todos têm Java ou .Net (C#, VB.Net) como linguagem/plataforma.

Esta pergunta requeria um motivo caso a equipe não modelasse ou não gerasse código a partir de modelos. Razões mencionadas (apenas por aqueles que modelam):

  • modelar é caro, e o time já sabe escrever código, então não há valor suficiente
  • modelos não são detalhados o suficiente para se gerar código
  • código gerado não iria satisfazer as necessidades do time
  • várias ferramentas testadas, nenhuma satisfez as necessidades
  • não há tempo (para se modelar a ponto de se gerar código?)

Que ferramenta(s) de geração de código a sua equipe usa?

Mesmo que geração de código não seja uma finalidade primária para a maioria dos que modelam, metade dos entrevistados responderam que usam alguma ferramenta de geração de código, o que inclui frameworks que suportam scaffolding (Django) e IDEs/wizards. Isso revela a percepção de que geração de código tem importância limitada no desenvolvimento, e o quão variado é o rol de ferramentas identificadas como geradores de código. Também revela um problema na questão por não qualificar “geração de código” como sendo especificamente a partir de modelos (o que excluiria wizards em IDEs).

A sua ferramenta de geração de código gera código com comportamento (lógica de negócios) ou apenas métodos vazios (que você precisa preencher manualmente)?

Entre aqueles que geram código, mais da metade dos entrevistados usa ferramentas que gera apenas métodos vazios (stubs), o que corrobora com a visão de que geração de código não oferece valor suficiente. Ferramentas que só ajudam o programador no “pontapé inicial” têm valor limitado quando se considera custos com manutenção e evolução são boa parte do custo em software.

Como a sua equipe lida com o código gerado, em relação a mudanças no modelo?

Note que entre os entrevistados que geram código (7), quase todos usam geração de código apenas como ponto de partida. Apenas um entrevistado declarou regerar o código após mudanças no modelo, e modificações existentes são preservadas via regiões protegidas. Os outros (6/7) ou replicam modificações no modelo e no código manualmente (2/7), ou abandonam o modelo e fazem modificações diretamente no código (4/7). Nenhum dos entrevistados usam técnicas como o padrão generation gap para combinar código gerado com código escrito manualmente.

Conclusão

Mesmo que o tamanho da amostra não seja grande o suficiente para se fazer conclusões definitivas, acho que as respostas obtidas confirmam fortemente algumas suspeitas que tínhamos:

  1. geração de código é pouco utilizada
  2. quando utilizada, a capacidade em que é utilizada não produz valor significativo em um projeto
  3. desenvolvimento baseado em modelos (MDD) é ainda raramente praticado (1 em 14)

O que você acha? Concorda com as conclusões? Tem conclusões próprias para contribuir?

EmailFacebookLinkedInGoogle+Twitter

2 thoughts on “Pesquisa sobre modelagem e geração de código

  1. RO

    April 25, 2011 at 6:01pm

    I hope you’ll publish a translation of this document. It’s very interesting!

    Since I’m fluent in Spanish (“portugues mal falado”) ;-) I was able to read it fairly easily, and confirmed that Chrome’s translation was pretty good. Unfortunately, it can’t touch the graphs (since they’re images), and that’s where much of the valuable info is found.

  2. rafael.chaves

    April 26, 2011 at 2:14am

    Thanks, RO, I am planning to do it at some point. Cheers,

    Rafael

Comments are closed.