domingo, 29 de dezembro de 2013

Geradores de Código em Java - Otimize seu tempo, Economize Dinheiro e Melhore sua Qualidade - Parte 1

INTRODUÇÃO

Geradores de código são soluções inteligentes que reduzem o tempo de desenvolvimento dos projetos, disponibilizam mais tempo da mão de obra para tarefas complexas e melhoram a qualidade do sistema gerado.
Existem diversas ferramentas geradoras de aplicativos no mercado, tais como: GENEXUS, JCOMPANY e JBANANA. No entanto, as melhores ferramentas não são gratuitas e direcionam o desenvolvimento de acordo com os padrões estabelecidos por elas.
Além disso, médias e grandes companhias possuem em seu repertório uma enorme variedade de padrões, ferramentas e linguagens que acabam por restringir a aplicação ampla e um gerador de código de uso comercial, excetuando projetos novos e/ou compatíveis com sua tecnologia. Vale salientar que mesmo em novos projetos é normalmente necessário criar uma infraestrutura para o uso destes geradores comerciais, que implica em mais custos.
Outra desvantagem é a dependência do cliente às atualizações tecnológicas do fornecedor . Se o fornecedor não evoluir a ferramenta ou mesmo descontinuá-la, o cliente poderá arcar com o ônus de usar um recurso ultrapassado para a demanda de novas funções.

Para evitar essas deficiências seria preciso que cada área ou empresa desenvolvesse seus padrões de geração conforme tecnologia pre existente nelas.
O presente blog demonstra o desenvolvimento de um gerador de código construído em java, utilizando a tecnologia velocity da apache, que a partir da metainformação de uma base de dados relacionais postgres, sqlserver e mysql e templates customizados de acordo com a tecnologia existente do cliente, gere uma aplicação com diversas funcionalidades prontas.

GERADORES DE CÓDIGO
Nem tudo que se enfrenta pode ser modificado mas
nada pode ser modificado até que seja enfrentado.
Albert Einstein
DEFINIÇÃO

“Geradores de código são basicamente programas que geram outros programas” (SCHVEPE, 2006, p.15). Os geradores podem ser definidos como ferramentas tanto para formatar códigos simples quanto para gerar aplicações complexas a partir de modelos abstratos (templates). Eles agilizam o processo de desenvolvimento, pois incrementam a produtividade e reduz o tempo utilizado na codificação da aplicação e, consequentemente, o custo final.

Além de diminuir o impacto financeiro, a utilização de geradores padronizam a programação, facilitando futuras manutenções. Dependendo do nível alcançado na implementação dos geradores é possível criar funcionalidades mais complexas.
O gerador de código não elimina a necessidade de programadores, mas elimina tarefas chatas e repetitivas.

VANTAGENS

A utilização de geradores para desenvolvimento de softwares traz enormes vantagens aos códigos gerados, tais como (HERRINGTON, 2003. p. 15):

● qualidade: a escrita de grande quantidade de código vai gradualmente diminuindo a qualidade final do software. Na geração automática, a qualidade do software está diretamente ligada à qualidade dos templates. Esse, por sua vez, não possui qualidade associada à quantidade de código a ser desenvolvida,
visto que os templates possuem uma estrutura fixa que não é alterada pelo tamanho do projeto;

● consistência: o código gerado tende a ser consistente, pois possui uma padronização de nomenclatura de classes, métodos, variáveis e localização (pastas e subpastas), o que torna o código de fácil entendimento e modificação;

● único ponto de conhecimento: caso seja necessária uma alteração de alguma estrutura de entrada do projeto, necessita-se apenas saber o local onde essa modificação deve ser realizada. Após isso, o código gerado se propagará para todos os processos seguintes à alteração, gerando sempre um código compatível com as entradas;

● maior tempo para o projeto: considerando-se o uso de uma biblioteca externa (API), podem acontecer alterações nessa fonte obrigando assim que modificações sejam feitas em todas as partes do código em que aquela modificação irá influenciar. Com a utilização do gerador, esse processo poderá ser feito apenas nos templates do gerador e uma nova geração efetuará as mudanças necessárias no código. Essa característica faz toda a diferença em cronogramas de projetos que utilizam ou não geradores (forma manual);

● abstração: como, normalmente, os geradores utilizam os modelos abstratos de dados (templates) do código alvo, fica fácil migrar de uma plataforma/linguagem para outra, necessitando apenas uma revisão no escopo de abstração, ou seja, modificar os templates de acordo com as necessidades da plataforma/
linguagem alvo;

● agilidade: uma característica chave da geração de código é a maleabilidade do código de saída. No nível de negócio, o software será de mais fácil manutenção e implementação de novas funcionalidades. Mesmo considerando-se o tempo que se economiza no ato da geração, podemos afirmar que essa técnica dá um grande percentual de agilidade ao desenvolvedor. Além destes benefícios, um gerador de código deve seguir algumas premissas, de acordo com Ambler (AMBLER, 2002. pag. 113) um bom gerador de código deve possuir as seguintes características:

● Conformidade com os padrões de codificação. O desenvolvedor deve ser capaz de editar o código-fonte gerado pelo gerador de código. Se o código gerado variar muito do padrão da equipe/empresa tornará mais difícil trabalhar com o gerador, reduzindo o benefício da geração. Portanto, a empresa precisa de ferramentas que possam ser configuradas de acordo com convenções de codificação ao invés da empresa ter que converter seus padrões em conformidade com a ferramenta (colocando-o à mercê dos caprichos do fornecedor).

● Suporte para personalização. Gerador de código-fonte deve fornecer a capacidade de permitir que se defina que tipo de código deve ser gerado.

● Intrusão mínima. Algumas ferramentas são intrusivos, colocando identificadores em seus comentários de código fonte, como identificações exclusivas ou marcas proprietárias para indicar qual o código foi gerado. Algumas ferramentas são ainda mais intrusivas e limitam as alterações a certas partes do código-fonte gerado, muitas vezes indicando estas seções com comentários. Essas "intromissões" são normalmente postas em prática para a conveniência do vendedor de ferramentas, tornando mais fácil a engenharia reversa de seu
próprio código. As invasões não estão lá para sua conveniência e elas não são necessárias.

● Suporte flexível para engenharia reversa. Colaborador normalmente trabalha em uma pequena porção de um sistema de cada vez. Para apoiar este processo de forma eficaz, você precisa ser capaz de fazer engenharia reversa de apenas uma parte do sistema em um momento, talvez dez classes C + + para
fora da 300 que compõem o seu sistema, e apenas gerar os tipos de diagramas que você precisa agora , talvez um diagrama de classes UML simples para começar.

● Facilidade de utilização. Uma ferramenta é difícil de utilizar e difícil de aprender, acaba aumentando os custos da empresa e desta forma, tornando ineficaz o uso da ferramenta. O gerador de código deve suportar várias linguagens. Por exemplo, um sistema baseado na Web pode incluir HTML, JavaScript,
Perl, Java e banco de dados de código proprietário. O ideal é uma gerador de código que apoie as linguagens que a empresa pretende trabalhar.

Esta é a final da parte I - De geradores de Código em Java. Continuo em breve.
Grato
Pablo

REFERÊNCIAS BIBLIOGRÁFICAS
AMBLER, S.W. Mapping Objects to Relational Databases. An AmbySoft Whitepaper.
AmbySoft Inc. 1997. Disponível em: <http://www.agiledata.org/essays/mappingObjects.
html>. Acesso em: 24 abril 2012.
AMBLER, Scott. Agile Modeling: Effective Practices for eXtreme Programming and
the Unified Process. WILEY COMPUTER PUBLISHING, 2002.

HERRINGTON, Jack. Code Generation in Action. MANNING, 2003.

http://geradorcodigojava.blogspot.com.br/2013/12/geradores-de-codigo-em-java-otimize-seu.html
http://geradorcodigojava.blogspot.com.br/2013/12/velocity-velocity-e-um-template-engine.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu.html
http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu_217.html

http://geradorcodigojava.blogspot.com.br/2014/01/geradores-de-codigo-em-java-otimize-seu_5.html

Um comentário:

  1. Excelente trabalho ... parabéns.
    Gostaria muito de testar essa ferramenta se vc tiver construida ?
    Obrigado !

    ResponderExcluir