O processo de desenvolvimento de software é conhecido por ser complexo em termos de tempo, custos e gestão de pessoal, o que se torna evidente à medida que o software se torna mais sofisticado. Nesse contexto surgem as ferramentas RAD (Rapid Application Development), que prometem ser uma fórmula poderosa para agilizar os processos tradicionais de desenvolvimento de software. Portanto, o objetivo deste projeto é projetar uma ferramenta RAD que utilize como base um framework de desenvolvimento de software, neste caso PHPLib-UNIVALI, para automatizar a geração de scripts no formato PHP (Hypertext Preprocessor).
INTRODUÇÃO
OBJETIVOS
- Objetivo geral
- Objetivos específicos
Projetar uma ferramenta RAD capaz de automatizar a geração de código compatível com o framework PHPLib-UNIVALI.
METODOLOGIA
Também foi feito um protótipo do sistema para ilustrar como as informações em cada caso de uso deveriam ser organizadas. Diagrama de classes: Com base nos casos de uso e no protótipo da ferramenta, foi criado o diagrama de classes, identificando as propriedades e operações de cada classe; Isso é. A fase de implementação focou diretamente na implementação da ferramenta proposta utilizando a linguagem de programação C++.
ESTRUTURA DO TRABALHO
FUNDAMENTAÇÃO TEÓRICA
REUSO DE CÓDIGO
- Vantagens do reuso de código
RAD - RAPID APPLICATION DEVELOPMENT
- Benefícios do RAD
- RAD X CASE
PADRÕES DE PROJETO
- Programas de aplicação
- Toolkits
- Frameworks
FRAMEWORK PHPLIB-UNIVALI
- Elementos flexíveis do framework PHPLib-UNIVALI
SOLUÇÕES SIMILARES
- Geração automática de cadastros e consultas para linguagem ASP
- NETSIS - ferramenta CASE para geração de páginas ASP
- Polar Studio
- Análise comparativa entre as soluções pesquisadas
TECNOLOGIAS UTILIZADAS
- GALS – gerador de analisadores léxicos e sintáticos
- XML - Extensive Markup Language
PROJETO
DEFINIÇÃO DOS REQUISITOS E REGRAS DE NEGÓCIO
RF01: O sistema deve importar um arquivo SQL para cada novo projeto para construir a estrutura interna da tabela do banco de dados4 da aplicação em questão; RF02: O sistema deve permitir a definição de listas com base na estrutura do banco de dados da aplicação; RF03: o sistema deve permitir a definição de detalhes5 com base na estrutura do banco de dados da aplicação;
RF04: o sistema deverá implementar as funções de inclusão, exclusão e modificação de dados com base na estrutura interna do banco de dados da aplicação (cadastro); RF06: O sistema deve permitir a configuração das informações de acesso ao banco de dados da aplicação; RF07: O sistema deve permitir adicionar e modificar tabelas na estrutura interna do banco de dados da aplicação;
RF08: o sistema deve permitir a adição e modificação de atributos nas tabelas da estrutura interna do banco de dados da aplicação; RN02: o sistema deve possuir mecanismo para incluir campos como e-mail, data e CEP durante o processo de entrada de dados; RN03: o sistema deve permitir a definição de rótulos e o tamanho visível do campo na ficha cadastral.
RNF02: O arquivo SQL que será importado para o sistema deverá estar de acordo com os padrões do banco de dados Oracle (compliance);
MODELO DE CASOS DE USO
RNF01: o código gerado pelo sistema deverá estar na linguagem PHP 4 e respeitar a arquitetura fornecida pelo framework PHPLib-UNIVALI (conformidade); RNF03: o sistema não deve utilizar banco de dados, todas as informações necessárias devem ser armazenadas em XML de acordo com XML Schema (implementação); Isso é. RNF04: a definição das consultas SQL deve ser simples, ou seja, deve conter a definição de cada campo selecionado na cláusula SELECT, o que não permite tipos complexos e/ou operações aritméticas (implementação).
Na Figura 14 pode-se observar a interação entre o usuário (ator) e os casos de uso que compõem o sistema. Para utilizar qualquer funcionalidade da ferramenta é necessário criar um projeto, portanto o caso de uso Criar projeto (UC 01) descreve os passos para criação de um projeto. Assim, os casos de uso Abrir Projeto e Salvar Projeto (UC 02 e UC 07, respectivamente) retratam as ações que o usuário realiza em relação às operações básicas do projeto.
As descrições das ações que o usuário realiza para obter seu produto final, ou seja, o código fonte da aplicação, são descritas com base no caso de uso Gerar Código (UC 11), que é responsável por descrever o processo de geração do código da aplicação. Para uma melhor descrição dos casos de uso, recomenda-se o desenvolvimento de cenários, que segundo Gustafson (2003) são uma descrição da sequência de ações que podem ocorrer no domínio do problema. Portanto, o Apêndice B apresenta cenários para cada caso de uso, bem como seus relacionamentos com requisitos funcionais do sistema e regras de negócios.
DIAGRAMA DE CLASSES
- Diagrama de classes do analisador SQL
Desta forma, tanto os atributos como as funcionalidades de cada classe podem ser validados através da Secção 3.2.1. Possui responsabilidades como: criar, abrir, fechar ou salvar um projeto, além de ser responsável por configurar informações no banco de dados da aplicação; Esta classe identifica e lista todos os atributos usados na lista, como eles são ordenados e se estão relacionados a outras páginas.
Também é responsabilidade desta classe determinar o título das páginas de listagem e se elas possuem paginação; Portanto, é responsabilidade desta classe identificar e listar os atributos utilizados no detalhe, bem como definir o título das páginas de detalhes da aplicação. Com comportamento semelhante às classes rhpList e rhpDetail, esta classe identifica e vincula os atributos utilizados em um formulário de registro de aplicação.
Esta seção apresenta o diagrama de classes do SQL Analyzer (Figura 16) e explica a funcionalidade de cada uma de suas classes. Portanto, os itens a seguir apresentam uma breve descrição de cada uma das classes pertencentes ao pacote sqlAnalyser. Token: Classe responsável por identificar cada um dos tokens reconhecidos durante a análise do arquivo SQL; Isso é.
É importante observar que as classes do pacote sqlAnalyser são geradas via definições gramaticais utilizando a ferramenta GALS, descrita detalhadamente na seção 2.6.1.
XML SCHEMA
Além de uma visão geral do esquema XML (Figura 17), é essencial uma representação da estrutura interna dos elementos formados por estruturas de dados complexas (tipos complexos). Assim, a Figura 18 representa os detalhes do elemento projeto, e a Figura 19 representa a estrutura interna do elemento atributo.
IMPLEMENTAÇÃO
- Reconhecedor de linguagem SQL
- Estrutura de dados do sistema
- Opções de configuração do sistema
- Gerador de código PHP
Um dos pré-requisitos para desenvolver aplicações utilizando a ferramenta RADPHP é a criação de um projeto, que armazene todas as informações de configuração e estrutura do banco de dados da aplicação. Portanto, foi necessário desenvolver um analisador, com o objetivo de converter a estrutura do banco de dados da aplicação – inicialmente na linguagem SQL – em uma forma compreendida pela ferramenta RADPHP. O analisador SQL da ferramenta é implementado de acordo com o banco de dados Oracle 8i e possui funções de reconhecimento de tabelas, atributos, tipos e tamanhos de campos, comentários e restrições.
A Figura 23 mostra parte de uma gramática independente de contexto - para reconhecer a criação de tabelas em linguagem SQL - definida através da ferramenta GALS. Vale ressaltar que o desenvolvimento do analisador é separado da ferramenta RADPHP por um pacote de classes, denominado sqlAnalyser¸, portanto pode ser utilizado separadamente por qualquer aplicação desenvolvida em linguagem C++. Como um dos requisitos da ferramenta RADPHP é a não utilização de bancos de dados para armazenar informações relevantes ao projeto, foram utilizados documentos XML - para armazenar as informações - e XML Schema (descrito detalhadamente na Seção 3.4) para definir a estrutura do o documento XML usado pela ferramenta.
A ligação de dados XML (Figura 24) visa criar uma estrutura de dados comum para facilitar o acesso e manipulação de documentos XML através do XML Schema. As opções de configuração do sistema consistem basicamente na interface para desenvolvimento de formulários, consultas, alterações na estrutura do banco de dados e definição de informações de acesso ao banco de dados. É importante ressaltar que a ferramenta RADPHP é desenvolvida em duas camadas: (i) a interface, que consiste no módulo de interação com o usuário; e (ii) a aplicação, que contém a implementação de todas as regras de negócio da aplicação.
Em sua totalidade, a ferramenta RADPHP é composta por 20 arquivos modelo, divididos em três grupos: (i) elementos, formados pelos componentes do framework, como campo de edição de texto, lista de valores, email, etc.; (ii) ações, que contêm os modelos responsáveis pela interação com o banco de dados; e (iii) formulários, compostos por modelos de definição de listas, detalhamento, cadastro e formulários de consulta.
FERRAMENTA RADPHP
- Contextualizando o RADPHP no processo de desenvolvimento de
- Estudo de caso
- Demonstração
- Produtividade RAD
É importante ressaltar que a inclusão da ferramenta RADPHP no processo de desenvolvimento só é revelada após a fase de design. Portanto, a atuação direta ou indireta da ferramenta RADPHP nessas três etapas do processo de desenvolvimento de software visa reduzir o tempo e o esforço repetitivo por parte dos desenvolvedores durante o desenvolvimento de software. Desta forma, foi desenvolvida uma aplicação – utilizando a ferramenta RADPHP – com o objetivo de estabelecer o controle patrimonial.
Portanto, esta seção apresenta o desenvolvimento do estudo de caso, a fim de demonstrar o funcionamento da ferramenta RADPHP. Pode-se dizer que a utilização da ferramenta RADPHP está diretamente relacionada à criação de um projeto, que armazena toda a configuração do banco de dados da aplicação, formulários e consultas criadas pela ferramenta. A última etapa obrigatória para o funcionamento das aplicações criadas utilizando a ferramenta RADPHP é a geração do código-fonte, realizada através da interface mostrada na Figura 34.
A Figura 35 representa o código fonte do formulário de lista de setores (gerado a partir do modelo "list_model.mo" apresentado na Figura 26) gerado pela ferramenta RADPHP (de acordo com o framework PHPLib-UNIVALI) durante o estudo de caso. Concluindo, a Figura 38 apresenta a ficha de registro patrimonial gerada pela ferramenta durante o desenvolvimento do estudo de caso. Além das funcionalidades apresentadas, o RADPHP permite criar consultas personalizadas e modificar a estrutura do banco de dados da aplicação.
É de extrema importância ressaltar que as informações alteradas na ferramenta RADPHP durante a execução de um projeto não são implementadas no banco de dados físico da aplicação, pois a ferramenta não possui conexão direta com o banco de dados real.
CONCLUSÕES
TRABALHOS FUTUROS
Identificação de visualizações durante o processo de análise de um arquivo SQL para um banco de dados Oracle; Tuple() Retorna uma linha de registro por vez de uma consulta ao banco de dados. RF01: O sistema deve importar um arquivo SQL para cada novo projeto para construir a estrutura interna da tabela do banco de dados da aplicação em questão.
O sistema cria a estrutura interna do banco de dados da ferramenta através do arquivo de configuração. Utilize o caso responsável para alterar as informações utilizadas pela aplicação para acessar o banco de dados. Utilize o case responsável para configurar a criação de listas a partir da estrutura interna do banco de dados da aplicação.
O caso de uso responsável por configurar a geração de detalhes da estrutura interna do banco de dados da aplicação. RF03: O sistema deve permitir a definição de detalhes de acordo com a estrutura do banco de dados da aplicação. Caso de uso responsável por configurar a geração de registros da estrutura interna do banco de dados da aplicação.
Este caso de uso descreve as etapas para alterar o nome e o comentário de uma tabela, bem como para inserir uma nova tabela na estrutura interna do banco de dados da aplicação. RN05: o sistema não reverte alterações feitas na estrutura interna do banco de dados pela ferramenta. Este caso de uso descreve as etapas para modificar um atributo existente, bem como para inserir um atributo em uma tabela na estrutura interna do banco de dados da aplicação.
ARTIGO