2.4 FERRAMENTAS SIMILARES
2.4.4 Análise Comparativa
Além das ferramentas citadas anteriormente, podem ser citadas ainda o C# Data Tier Generator (ANTTILA, 2001), LLBLGen Pro (SOLUTIONSDESIGN, 2007), FireStorm/DAO (CODEFUTURES, 2007), RADPHP (SEARA, 2005), Gerador de código HTML baseado em dicionário de dados utilizando banco de dados (COELHO, 2006), Ferramenta CASE para a geração de páginas ASP (CASTILHOS, 2004) e Geração automática de cadastros e consultas para linguagem ASP baseado em banco de dados (SILVEIRA, 2003). A Tabela 1 mostra o comparativo entre todas as ferramentas citadas anteriormente e ferramenta proposta neste trabalho.
Tabela 1. Comparação entre as ferramentas similares Fornecedor /
Criador Ferramenta Entrada de Dados Banco de Dados Linguagem de
Saída Características
Code Smith Code Smith Studio
Banco de dados, XSD Schema
SQL Server ou qualquer outro que forneça conectividade ADO
Qualquer linguagem baseada em texto
Ferramenta comercial. Utiliza templates com sintaxe semelhante ao ASP.NET para formatar o arquivo de saída
Microsoft Microsoft Visual Studio
Base de dados, Web-service, Objetos
Todos – através de driver ODBC, OleDb ou .NET providers nativos
Todas baseadas no .NET
Framework
Ferramenta comercial. É capaz de gerar comandos SQL, camadas de acesso a banco de dados, interfaces com o usuário, integração entre as camadas de modelo e visão através da utilização de padrões conhecidos como o Observer, entre outras funcionalidades de geração de código
Idea Blade Idea Blade
DevForce Banco de dados
Todos – através de driver ODBC, OleDb ou .NET providers nativos
C# e VB.NET Ferramenta comercial. Pluggin para o Microsoft Visual Studio
Shaked Khan et al Smart Code
Generator Banco de dados SQL Server, Oracle e MySQL
Qualquer linguagem baseada em texto
Projeto open source. Utiliza templates com sintaxe semelhante ao ASP.NET para formatar o arquivo de saída, mas não permite ao usuário selecionar quais os atributos de uma tabela devem ser gerados, nem customizar as classes geradas a partir do mapeamento objeto/relacional
Philip Laureano TaHoGen
Pluggin do Visual Studio ou
integração com aplicação
-
Qualquer linguagem baseada em texto
Projeto open source. Utiliza templates com sintaxe semelhante ao ASP.NET para formatar o arquivo de saída
Adrian Anttila C# Data Tier
Generator Banco de Dados SQL Server 2000 Scripts SQL e C#
Projeto open source. Gera stored procedures com comandos SQL comuns e uma classe C# para utilizar tais stored procedures
Solution Design LLBLGen Pro Banco de Dados
Access, SQL Server,Oracle,
PostgreSQL, Firebird, Interbase, IBM DB2, MySql, Sybase Adaptive Server
Enterprise, Sybase SQL iAnywhere
C# e VB.NET
Ferramenta comercial. Permite salvar o mapeamento
objeto/relacional realizado pelo usuário em formato XML
CodeFutures FireStorm / DAO
Script SQL e Banco de Dados
Todos - Através de driver JDBC (Java Database Connectivity)
Java
Ferramenta comercial. Utiliza drivers JDBC para acessar as bases de dados
Fabíola Greve et
al. Cordel Modelo UML em
formato XMI -
Qualquer linguagem baseada em texto
Trabalho acadêmico. Utiliza o motor de template Velocity para formatar o arquivo de saída. Gera código conforme o modelo MDA Everton F. R.
Seára RADPHP Script SQL - PHP (Hypertext
Preprocessor)
Trabalho acadêmico. Gera scripts em formato PHP baseado no framework PHPLib-UNIVALI
Lincoln S. Rocha
et al. XSpeed Modelo UML em
formato XMI - Java
Trabalho acadêmico. Utiliza o motor de template Velocity para a geração do código-fonte, mas o código gerado fica restrito à plataforma Java. Tem como
objetivo gerar código para ambiente distribuído
Luis F. Coelho COELHO
Dicionário de dados salvo em banco de dados Oracle
-
Scripts SQL e HTML (HyperText Markup Language)
Trabalho acadêmico. Utiliza o motor de template Velocity para a geração do código-fonte HTML e scripts SQL. O dicionário de dados deve ser cadastrado pelo usuário do sistema
Cristiano de
Castilhos CASTILHOS
Dicionário de dados salvo em banco de dados SQL Server ou Access
- ASP (Active
Server Pages)
Trabalho acadêmico. O dicionário de dados deve ser cadastrado pelo usuário do sistema
Claudionor
Silveira SILVEIRA Banco de dados Access ASP
Trabalho acadêmico. Gera sistema de cadastros e consultas completos baseados na plataforma Web
Francis Benito
Odisi Keops Banco de dados PostgreSQL, Oracle e
SQL Server
Qualquer linguagem baseada em texto
Trabalho acadêmico. Utiliza o motor de templates NVelocity para permitir a geração de código-fonte para qualquer linguagem de programação baseada em texto.
Permite salvar as configurações realizadas pelo usuário em formato XML.
Todas as ferramentas citadas anteriormente, com exceção do Code Smith, Smart Code Generator e da ferramenta proposta, apresentam limitações relacionadas à possibilidade de utilização de templates ou de acesso a um banco de dados existente para extração dos metadados, ou seja, possuem apenas uma das funcionalidades citadas. Conforme já citado anteriormente, o Code Smith, que possui as duas funcionalidades, é uma ferramenta comercial, cujo custo da licença é cobrado por desenvolvedor (CODESMITH, 2007a). Já o Smart Code Generator, projeto open source, não permite que o usuário selecione quais os atributos da classe devem ser gerados, customize o nome das classes e atributos, nem permite a configuração de métodos de classe e comandos SQL utilizados por tais métodos para acesso aos dados. Outra desvantagem desta ferramenta, é a necessidade de utilizar o Visual Studio, pois utiliza ASP.NET User Controls que são criados pelo Visual Studio (KHAN et al, 2007).
Portanto, uma ferramenta que consiga gerar código com base nos metadados de um banco de dados, além de permitir a utilização de arquivos templates para formatação do código-fonte gerado, apresenta um diferencial em relação à flexibilidade quando comparado com as ferramentas pesquisadas. As principais vantagens da ferramenta proposta em relação às ferramentas citadas anteriormente são: (i) a possibilidade de customização durante o processo de mapeamento objeto/relacional através uma interface própria, onde é possível selecionar as tabelas e os atributos a serem gerados; (ii) a possibilidade de realizar o mapeamento entre os tipos de dados dos bancos de dados suportados e os tipos da linguagem de programação utilizada para geração do código-fonte;
(iii) a possibilidade de gerar código para qualquer linguagem de programação baseada em texto através da utilização de templates; (iv) a possibilidade de ser utilizada tanto para o desenvolvimento de uma aplicação completamente nova, onde todos os artefatos de software são desenvolvidos a partir do zero, inclusive o banco de dados, quanto para a proposta de implementação de uma nova arquitetura para um sistema legado já existente, onde o banco de dados existe há vários anos, e a troca e remodelagem do mesmo é impraticável. Certamente a ferramenta proposta também apresenta algumas desvantagens como: (i) limitação aos bancos de dados Oracle, PostgreSQL e SQL Server; e (ii) falta de suporte para modelos UML em formato XMI.
De acordo com Microsoft (2008b, tradução nossa), pequenas aplicações geralmente utilizam apenas uma linguagem de programação. Já no desenvolvimento de grandes aplicações, é comum a utilização de diferentes linguagens de programação, onde os desenvolvedores envolvidos criam componentes e serviços, e os disponibilizam através de sites remotos. Nestes casos, a melhor escolha é utilizar várias linguagens, onde a linguagem de programação de cada equipe dependa das
habilidades e experiência dos desenvolvedores. Volanakis (2005, tradução nossa) cita que uma ferramenta que permita escolher a linguagem de programação, fornece ao desenvolvedor a possibilidade de escolher a linguagem de programação que ofereça a melhor solução para o problema. Como exemplos de ferramentas que fornecem ao usuário esta característica podem ser citados o Visual Studio (MICROSOFT, 2008b) e o Eclipse (ECLIPSE, 2008).
A utilização de uma ferramenta de geração de código possibilita a equipe de desenvolvimento definir um padrão para o código-fonte gerado (CLEAVELAND, 1988, tradução nossa). Caso opte-se por utilizar uma ferramenta para cada linguagem de programação, todas as configurações realizadas em uma ferramenta devem ser replicadas nas demais. Com isso, todo o trabalho já realizado uma vez precisa ser refeito em cada uma das ferramentas de geração utilizadas, indo contra uma das principais vantagens fornecidas pela geração de código, observada em Herrington (2003b, tradução nossa) e Cleaveland (1988, tradução nossa), que é o ganho de produtividade. Além disso, diferentes ferramentas geralmente fornecem diferentes funcionalidades, aumentando a possibilidade do código-fonte gerado não seguir a mesma arquitetura. Com isso, uma das principais vantagens da geração de código, citada em Herrington (2003b, tradução nossa) e Cleaveland (1988, tradução nossa), que é a qualidade e consistência do código gerado, simplesmente deixa de existir.
A geração de código para as classes de acesso aos dados é aconselhada, pois na maioria das vezes, o código é bem estruturado e repetitivo, ao contrário do código das regras de negócio e interfaces de usuário. Gerando código para as classes de acesso aos dados, permite ao desenvolvedor focar em aspectos normalmente mais indefinidos como a codificação das regras de negócios ou interfaces de usuário. Além disso, o código de acesso aos dados é considerado a base de um sistema. Gerando as classes que acessam tais dados, garante que as mesmas terão uma arquitetura e interface consistente. Logo, torna-se mais fácil desenvolver as demais camadas do sistema (HERRINGTON, 2003b, tradução nossa). A geração de código para as classes de acesso a dados permite ainda definir um padrão de arquitetura para todo o código gerado, além de facilitar a correção de bugs comuns como, erros na ordenação dos parâmetros de um comando SQL, tratamento inadequado das exceções, entre outros (HERRINGTON, 2003a, tradução nossa).
3 PROJETO
Nesta seção são descritas as características referentes à modelagem da ferramenta de geração de código proposta. A técnica de geração de código utiliza um programa para gerar outro programa ou parte dele. Para realizar esta tarefa, o gerador de código recebe como entrada uma especificação de alto nível, convertendo-a em programas ou parte de programas. Conforme abordado na seção 2.2, as ferramentas de geração de código podem ser classificadas em dois grandes grupos denominados ativo e passivo. Devido ao fato da ferramenta proposta permitir que futuras manutenções no código-fonte gerado sejam realizadas através da própria ferramenta, esta pode ser classificada como um gerador de código ativo.
Para tal, nesta seção são apresentadas as regras de negócios, bem como os requisitos funcionais e não funcionais do sistema. Além disso, são mostrados os diagramas de casos de uso e diagramas de classes utilizando a notação UML. Também é descrito o XSD que define os documentos XML utilizados para armazenar as configurações realizadas pelo usuário, com relação às classes a serem geradas. Por último, é mostrado um exemplo de código-fonte a ser gerado pelo sistema.
Desta forma, as seções subseqüentes apresentam as regras de negócio, definição dos requisitos funcionais e não funcionais do sistema, a especificação dos diagramas de casos de uso, diagramas de classe, XML Schema, e um exemplo de código-fonte a ser gerado pela aplicação.