UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO INCREMENTANDO O DESENVOLVIMENTO DE SISTEMAS BASEADOS EM FRAMEWORK ATRAVÉS DE FERRAMENTA RAD Área de Engenharia de Software por Everton Flávio Rufino Seára Fabiane Barreto Vavassori Benitti, Drª. Eng. Orientadora Itajaí (SC), dezembro de 2005 UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO INCREMENTANDO O DESENVOLVIMENTO DE SISTEMAS BASEADOS EM FRAMEWORK ATRAVÉS DE FERRAMENTA RAD Área de Engenharia de Software por Everton Flávio Rufino Seára Relatório apresentado à Banca Examinadora do Trabalho de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientadora: Fabiane Barreto Vavassori Benitti, Drª. Eng. Itajaí (SC), dezembro de 2005 i SUMÁRIO LISTA DE ABREVIATURAS..................................................................iv LISTA DE FIGURAS................................................................................. v LISTA DE TABELAS ...............................................................................vi RESUMO...................................................................................................vii ABSTRACT..............................................................................................viii 1. INTRODUÇÃO ...................................................................................... 1 1.1. OBJETIVOS ........................................................................................................ 2 1.1.1. Objetivo geral .................................................................................................... 2 1.1.2. Objetivos específicos ......................................................................................... 2 1.2. METODOLOGIA................................................................................................ 3 1.3. ESTRUTURA DO TRABALHO ....................................................................... 5 2. FUNDAMENTAÇÃO TEÓRICA ........................................................ 6 2.1. REUSO DE CÓDIGO ......................................................................................... 6 2.1.1. Vantagens do reuso de código.......................................................................... 7 2.2. RAD - RAPID APPLICATION DEVELOPMENT......................................... 8 2.2.1. Benefícios do RAD .......................................................................................... 11 2.2.2. RAD X CASE .................................................................................................. 12 2.3. PADRÕES DE PROJETO................................................................................ 13 2.3.1. Programas de aplicação.................................................................................. 14 2.3.2. Toolkits............................................................................................................. 15 2.3.3. Frameworks..................................................................................................... 15 2.4. FRAMEWORK PHPLIB-UNIVALI............................................................... 19 2.4.1. Elementos flexíveis do framework PHPLib-UNIVALI............................... 23 2.5. SOLUÇÕES SIMILARES................................................................................ 24 2.5.1. Geração automática de cadastros e consultas para linguagem ASP baseado em banco de dados...................................................................................... 25 2.5.2. NETSIS - ferramenta CASE para geração de páginas ASP....................... 26 2.5.3. Polar Studio ..................................................................................................... 27 2.5.4. Análise comparativa entre as soluções pesquisadas .................................... 28 2.6. TECNOLOGIAS UTILIZADAS ..................................................................... 29 2.6.1. GALS – gerador de analisadores léxicos e sintáticos .................................. 30 2.6.2. XML - Extensive Markup Language ............................................................ 31 3. PROJETO ............................................................................................. 37 3.1. DEFINIÇÃO DOS REQUISITOS E REGRAS DE NEGÓCIO................... 37 3.2. MODELO DE CASOS DE USO ...................................................................... 39 3.3. DIAGRAMA DE CLASSES............................................................................. 41 3.3.1. Diagrama de classes do sistema ..................................................................... 41 3.3.2. Diagrama de classes do analisador SQL....................................................... 44 3.4. XML SCHEMA ................................................................................................. 46 3.5. IMPLEMENTAÇÃO ........................................................................................ 49 3.5.1. Reconhecedor de linguagem SQL ................................................................. 50 3.5.2. Estrutura de dados do sistema....................................................................... 51 3.5.3. Opções de configuração do sistema............................................................... 52 3.5.4. Gerador de código PHP.................................................................................. 52 3.6. FERRAMENTA RADPHP............................................................................... 54 3.6.1. Contextualizando o RADPHP no processo de desenvolvimento de software ...................................................................................................................... 54 3.6.2. Estudo de caso ................................................................................................. 57 3.6.3. Demonstração .................................................................................................. 59 3.6.4. Produtividade RAD ........................................................................................ 67 4. CONCLUSÕES .................................................................................... 69 4.1. TRABALHOS FUTUROS................................................................................ 70 REFERÊNCIAS BIBLIOGRÁFICAS ................................................... 71 APÊNDICE A – DICIONÁRIO DE DADOS PHPLIB-UNIVALI ..... 74 APÊNDICE B – CENÁRIOS DOS CASOS DE USO........................... 81 APÊNDICE C – XML SCHEMA DA FERRAMENTA RADPHP..... 94 APÊNDICE D – PONTOS DE FUNÇÃO DO SISTEMA DE PATRIMÔNIO ......................................................................................... 97 ANEXO I – ARTIGO ............................................................................... 99 iii LISTA DE ABREVIATURAS ASP CASE DER DOM DTD ER GALS HTML IDE IIS JAD PHP RAD RADPHP RF RN RNF SGML SQL TCC TI UML UNIVALI URL W3C XML XSD Active Server Pages Computer Aided System Engineering Diagrama de Entidade Relacionamento Document Object Model Document Type Definition Entidade Relacionamento Gerador de Analisadores Léxicos e Sintáticos Hypertext Markup Language Integrated Development Environment Internet Information Server Joint Application Development Hypertext Preprocessor Rapid Application Development Rapid Application Development Hypertext Preprocessor Requisitos Funcionais Regras de Negócio Requisitos Não Funcionais Standard Generalized Markup Language Structured Query Language Trabalho de Conclusão de Curso Tecnologia da Informação Unified Modeling Language Universidade do Vale do Itajaí Uniform Resource Locator World Wide Web Consortium Extensible Markup Language XML Schema Definition LISTA DE FIGURAS Figura 1. Elementos flexíveis em frameworks: (a) Caixa branca; (b) Caixa Preta ............................17 Figura 2. Relacionamento entre aplicações e framework PHPLib-UNIVALI...................................20 Figura 3. Arquivos de funções do framework PHPLib-UNIVALI ....................................................21 Figura 4. Diagrama lógico do framework PHPLib-UNIVALI ..........................................................22 Figura 5. Exemplo de código do framework PHPLib-UNIVALI (frozen-spot) ................................23 Figura 6. Exemplo de código hot-spot do framework PHPLib-UNIVALI ........................................24 Figura 7. Tela exemplo da ferramenta proposta por Silveira (2003) .................................................25 Figura 8. Interface exemplo da ferramenta NETSIS..........................................................................26 Figura 9. Arquitetura da Ferramenta Polar Studio .............................................................................27 Figura 10. IDE da Ferramenta Polar Studio.......................................................................................28 Figura 11. Exemplo de um documento XML ....................................................................................32 Figura 12. Exemplo de um documento DTD .....................................................................................33 Figura 13. Exemplo de um documento XML Schema.......................................................................35 Figura 14. Modelo de Casos de Uso da ferramenta RADPHP...........................................................40 Figura 15. Diagrama de classes do sistema........................................................................................42 Figura 16. Diagrama de classes do analisador SQL...........................................................................45 Figura 17. Visão geral do XML Schema para ferramenta RADPHP.................................................47 Figura 18. Detalhes do elemento project ...........................................................................................47 Figura 19. Estrutura interna do elemento attribute ............................................................................48 Figura 20. Estrutura interna dos elementos list ..................................................................................48 Figura 21. Estrutura interna dos elementos detail..............................................................................49 Figura 22. Estrutura interna dos elementos register ..........................................................................49 Figura 23. Definição da gramática na ferramenta GALS...................................................................51 Figura 24. Interface do wizard do XML Data Binding......................................................................52 Figura 25. Exemplo de modelo para geração de código ....................................................................53 Figura 26. Arquivos de modelo da ferramenta RADPHP e suas relações .........................................54 Figura 27. Modelo de processo de software em cascata ....................................................................55 Figura 28. Diagrama de entidade-relacionamento (DER) para o estudo de caso proposto ...............58 Figura 29. Interface para criação de projetos na ferramenta RADPHP .............................................59 Figura 30. Interface para configuração das informações do banco de dados.....................................60 Figura 31. Configuração do formulário de listagem ..........................................................................61 Figura 32. Configuração do formulário de detalhe ............................................................................62 Figura 33. Configuração do formulário de cadastro ..........................................................................63 Figura 34. Interface para geração de código na ferramenta RADPHP ..............................................64 Figura 35. Código fonte de um formulário de listagem gerado pela ferramenta RADPHP ..............64 Figura 36. Formulário de listagem de patrimônios ............................................................................65 Figura 37. Formulário de detalhe de setores ......................................................................................65 Figura 38. Formulário de cadastro de patrimônios ............................................................................65 Figura 39. Interface para configuração de consultas personalizadas .................................................66 Figura 40. Interfaces para alteração da base de dados (a) Tabelas; (b) Atributos..............................67 Figura 41. XML Schema da ferramenta RADPHP ............................................................................96 LISTA DE TABELAS Tabela 1. Benefícios do RAD ............................................................................................................11 Tabela 2. Comparando RAD e CASE................................................................................................13 Tabela 3. Ciclo de vida de um framework .........................................................................................19 Tabela 4. Comparação das ferramentas pesquisadas com a ferramenta proposta..............................29 Tabela 5. Atributos da Classe dbBase................................................................................................74 Tabela 6. Operações da Classe dbBase ..............................................................................................74 Tabela 7. Atributos da Classe formBase ............................................................................................75 Tabela 8. Operações da Classe formBase ..........................................................................................75 Tabela 9. Atributos da Classe formCadastro......................................................................................75 Tabela 10. Operações da Classe formCadastro ..................................................................................76 Tabela 11. Atributos da Classe formDetalhe .....................................................................................77 Tabela 12. Operações da Classe formDetalhe....................................................................................77 Tabela 13. Atributos da Classe formLista..........................................................................................78 Tabela 14. Operações da Classe formLista ........................................................................................78 Tabela 15. Atributos da Classe formListacomfiltro ...........................................................................78 Tabela 16. Operações da Classe formListacomfiltro .........................................................................78 Tabela 17. Atributos da Classe htmlBase...........................................................................................80 Tabela 18. Operações da Classe htmlBase.........................................................................................80 Tabela 19. Atributos da Classe htmlErro ...........................................................................................80 Tabela 20. Operações da Classe htmlErro .........................................................................................80 RESUMO SEÁRA, Everton Flávio Rufino. Incrementando o desenvolvimento de sistemas baseados em framework através de ferramenta RAD. Itajaí, 2005. 108 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2005. O cenário de desenvolvimento de software, cada vez mais competitivo, vem enfrentando profundas mudanças na última década, exigindo das instituições rápidas e contínuas adaptações para a sua sobrevivência e crescimento. Sabe-se que o processo de desenvolvimento de software é complexo no que tange o gerenciamento de tempo, custos e pessoal, o que se evidencia na medida em que os softwares tornam-se mais sofisticados. Dessa forma, existe uma grande tendência em desenvolver sistemas de informação utilizando ferramentas e métodos de desenvolvimento rápido. Nesse contexto, surgem as ferramentas RAD (Rapid Application Development), que prometem ser uma poderosa fórmula para agilizar os processos tradicionais de desenvolvimento de software. De forma geral, RAD descreve um ciclo de vida de software projetado para fornecer um processo de desenvolvimento mais rápido e de maior qualidade que os tradicionais processos de ciclo de vida de software. Também pode-se considerar que a utilização de frameworks acelera, consideravelmente, a produtividade no desenvolvimento de software, uma vez que os mesmos ditam a arquitetura da aplicação, definem a estrutura geral e suas divisões em classes e objetos, bem como a responsabilidade das classes e como estas colaboram entre si. Um framework também predefine os parâmetros do projeto, de maneira que o projetista possa se concentrar nos aspectos específicos da aplicação. Dessa forma, acredita-se que a união de ambas as soluções, RAD e framework, possa proporcionar mais do que um desenvolvimento rápido de software, mas, também, um produto de qualidade e de fácil manutenção por parte dos desenvolvedores. Portanto, este projeto visa conceber uma ferramenta RAD utilizando como base um framework de desenvolvimento de software, neste caso, o PHPLib-UNIVALI, a fim automatizar a geração de scripts em formato PHP (Hypertext Preprocessor). A ferramenta concebida tem como pressupostos a flexibilidade de configuração e visa oferecer uma interface amigável, de modo que o desenvolvedor tenha à sua disposição um software capaz de auxiliá-lo na criação de páginas que utilizam a tecnologia PHP de maneira rápida e eficiente. Dentre as diversas tecnologias utilizadas para execução deste projeto, vale ressaltar a aplicabilidade de linguagens formais e de documentos XML (Extensible Markup Language). Espera-se, dessa forma, que este projeto contribua tanto para o meio acadêmico quanto para o meio comercial, uma vez que foi concebida uma ferramenta que utiliza diversos conceitos computacionais e que pode ser amplamente utilizada para desenvolvimento de sistemas Web que utilizam PHP. Palavras-chave: Engenharia de Software. Desenvolvimento Rápido de Aplicações. Framework. ABSTRACT The software development scene, more and more competitive, has faced deep changes in the last decade, demanding fast and continuous adaptations from the institutions for its survival and growth. It is known that the software development process is complex and as regard to time management, costs and people, what it is evident in the measure that software becomes more sophisticated. In such case, there is a great tendency in developing information systems using fast development methods and tools. In this context, the Rapid Application Development (RAD) emerge, which promises to be a powerful formula to speed up the traditional software development process. Concisely, RAD describes a software life cycle designed to provide a faster and larger quality development process than the traditional one. On the other hand, it can be said, the use of frameworks also speed up the productivity in software development considerably, once they impose the application architecture, define the general structure and its division in objects and classes as well as the responsability of the classes and how these collaborate between them. A framework also define the project parameters, in the way that the software engineers can concentrate in specific aspects of the application. So, it is believed that, the union of both solutions RAD and framework can provide more than a fast software development, but a high quality product and easy maintenance by the developers. Therefore, this project aims to conceive a RAD tool that uses as base a software development framework, in this case, the PHPLib-UNIVALI, in order to automate the script generation in Hypertext Preprocessor (PHP) format. The conceived tool has as presupposed the configuration flexibility and it aims to offer a friendly interface so that the developer has at one’s disposal a software capable of helping him/her in PHP pages creation in a fast and efficient way. Among the several technologies used to execute this project, it is important to stand out the applicability of formal languages and XML (Extensible Markup Language) documents. It is hopes that this project contributes in both academic and business environment, once that it conceived a tool that uses several computational concepts and can be used widely to develop web systems using PHP. Keywords: Software Engineering. Rapid Application Development. Framework. 1. INTRODUÇÃO Segundo Rauter e Benato (2004), o cenário competitivo vem experimentando profundas mudanças na última década, exigindo das instituições rápidas e contínuas adaptações para a sua sobrevivência e crescimento. Benvenutti (2002), afirma que o trabalho de desenvolvimento de software é um processo difícil e consumidor de recursos como tempo, dinheiro e pessoal, o que evidencia-se na medida em que os softwares tornam-se mais complexos. Segundo Malcolm (2001), existe uma grande tendência em desenvolver sistemas de informação utilizando ferramentas e métodos de desenvolvimento rápido. Benvenutti (2002) assegura que uma maneira eficiente de agilizar o processo de desenvolvimento de software é aplicar técnicas de reuso, que consistem em reutilizar partes de código que já foram anteriormente testados, tornando assim o processo mais otimizado. Neste contexto, surge o conceito RAD (Rapid Application Development – Desenvolvimento Rápido de Aplicações) que, conforme Howard (2002), promete ser uma poderosa fórmula para cortar os tradicionais projetos de software demorados e proporcionar maior produtividade ao desenvolvedor. Também pode-se dizer que a utilização dos arcabouços de classes (frameworks), acelera consideravelmente a produtividade no desenvolvimento de software. Segundo Gamma et al. (2000), os frameworks são um conjunto de classes cooperantes que constroem um projeto reutilizável para uma específica classe de software. Um framework dita a arquitetura da sua aplicação, define a estrutura geral e sua divisão em classes e objetos, bem como define a responsabilidade das classes e como estas colaboram. Em acréscimo, um framework predefine os parâmetros do projeto, de maneira que o projetista possa se concentrar nos aspectos específicos da aplicação. Acredita-se, desta forma, que a junção de ambas as soluções, RAD e framework, possa proporcionar mais do que um desenvolvimento rápido de software, mas também um produto de qualidade e de fácil manutenção por parte dos desenvolvedores. A proposta deste trabalho, portanto, é conceber uma ferramenta RAD que utiliza como base um framework de desenvolvimento de software, neste caso, o PHPLib-UNIVALI, a fim de automatizar a geração de scripts em formato PHP (Hypertext Preprocessor – Pré-Processador de Hipertexto). Visa-se criar um software configurável e de interface amigável, oferecendo ao desenvolvedor uma ferramenta capaz de auxiliá-lo na criação de páginas, que utilizam a tecnologia PHP, de maneira rápida e eficiente. Assim, a Seção 1.1 apresenta os objetivos do trabalho e a Seção 1.2 demonstra a metodologia utilizada para execução do mesmo. Pode-se observar a estrutura do trabalho na Seção 1.3 e a fundamentação teórica no Capítulo 2. O Capítulo 3 descreve as funcionalidades, apresenta a modelagem conceitual e o protótipo da ferramenta proposta. As conclusões são expostas no Capítulo 4. 1.1. OBJETIVOS 1.1.1. Objetivo geral Conceber uma ferramenta RAD capaz de automatizar a geração de código compatível com o framework PHPLib-UNIVALI. 1.1.2. Objetivos específicos Os objetivos específicos deste projeto são: • Pesquisar e estudar soluções similares; • Determinar os requisitos exigidos pelo sistema; • Pesquisar conceitos e tecnologias necessárias para a implementação do sistema; • Realizar a modelagem conceitual do sistema; • Implementar o sistema; o Criar reconhecedor de script SQL (Structured Query Language) para Oracle; o Automatizar a geração de código PHP a partir um script SQL para Oracle; o Permitir customização de nome da página, tamanho e tipo dos campos, escolha de botões e SQLs para consultas; • Testar a implementação do sistema; e • Documentar o desenvolvimento e os resultados do sistema. 2 1.2. METODOLOGIA Pode-se considerar que a metodologia utilizada para a realização deste projeto consiste em seis grandes etapas (i) Estudo; (ii) Especificação do Sistema; (iii) implementação; (iv) testes; (v) validação; e (vi) elaboração do volume final; . A etapa de estudo consiste basicamente em pesquisar e estudar as tecnologias e teorias computacionais necessárias para a elaboração do projeto. Esta etapa é responsável pela realização dos seguintes estudos: • Conceitos RAD: tendo em vista que a proposta principal deste projeto é a concepção de uma ferramenta RAD, buscou-se denotar este conceito e seus benefícios; • Conceitos de framework: uma vez que a intenção da ferramenta RAD proposta é gerar código fonte baseada em um frawework, realizou-se um estudo que abrange o conceito de um frawework, seu principal objetivo, ciclo de vida e outros aspectos pertinentes; • Framework PHPLib-UNIVALI: nesta fase realizou-se estudo sobre o framework PHPLib-UNIVALI, visto que o mesmo foi o framework escolhido para ser base da geração de código da ferramenta, e foram documentadas suas principais funções; • Soluções similares: com o intuito de obter maior conhecimento sobre o sistema proposto, realizou-se uma pesquisa em busca de soluções similares, as mesmas foram analisadas e comparadas com o projeto em questão; e • Tecnologias necessárias: com o objetivo de simplificar a implementação do sistema, foram estudadas e definidas as tecnologias necessárias para implementar o sistema. A etapa de especificação do sistema objetivou elicitar e analisar as necessidades da ferramenta, bem como transformá-las em requisitos computacionais. Também foi intuito desta etapa realizar análise do sistema utilizando a Unified Modeling Language (UML) e XML Schema. Nesta etapa foram realizadas as seguintes tarefas: • Regras de negócio e requisitos do sistema: durante esta fase foram elicitados os requisitos funcionais, não funcionais e regras de negócio do sistema, com o objetivo de visualizar suas reais necessidades; 3 • Diagrama de caso de uso e prototipação: Nesta fase as necessidades encontradas foram transpostas em casos de uso, com o intento de identificar os cenários possíveis e condições necessárias para a implementação do sistema, além de identificar a interação entre os mesmos. Também foi criado um protótipo do sistema, a fim de ilustrar como devem ser dispostas as informações contidas em cada caso de uso; • Diagrama de Classes: Com base nos casos de uso e no protótipo da ferramenta, foi elaborado o diagrama de classes, identificando assim os atributos e operações de cada classe; e • XML Schema: Tendo sido escolhido o XML como base para o armazenamento das informações referentes aos projetos criados na ferramenta, foi criado o XML Schema com o a intenção de validar e identificar como seriam dispostas as informações. A etapa de implementação centrou-se diretamente na implementação da ferramenta proposta utilizando a linguagem de programação C++. Durante essa etapa foram implementados 4 módulos: • Reconhecedor de linguagem SQL; • Estrutura de dados do sistema; • Opções de configuração do sistema; e • Gerador de código PHP. A quarta etapa – testes – ocorreu em paralelo à etapa de implementação, onde cada módulo criado foi testado. Ao fim deste processo, foi realizado um teste de integração, com o intuito de verificar possíveis erros ocorridos durante o processo de integração dos módulos da ferramenta. A etapa de validação visou o desenvolvimento de uma aplicação simples utilizando a ferramenta concebida neste projeto. Além das etapas apresentadas, é importante ressaltar que durante todo o processo ocorreu concorrentemente a elaboração do texto final do TCC, que objetiva a concepção detalhada de todos os passos ocorridos durante o projeto. 4 1.3. ESTRUTURA DO TRABALHO Este trabalho está estruturado em 4 capítulos: (i) Introdução; (ii) Fundamentação Teórica; (iii) Projeto; e (iv) Conclusões. O Capítulo 1 (Introdução) apresenta o contexto do projeto, isto é, expõe sucintamente o tema e aborda as necessidades e os objetivos a serem alcançados com o trabalho. O Capítulo 2 (Fundamentação Teórica) aborda questões pertinentes ao projeto como conceitos de RAD e framework, além de apresentar o framework utilizado neste projeto, soluções similares e as tecnologias necessárias para implementar a ferramenta proposta. O Capítulo 3 (Projeto) descreve de forma detalhada o projeto e suas funcionalidades, apresentando aspectos relativos a sua implementação, requisitos funcionais e não funcionais, regras de negócio, diagrama de casos de uso, diagrama de classes e XML Schema. Além da perspectiva tecnológica, o Capítulo 3 contextualiza a ferramenta RADPHP no processo de desenvolvimento de software, apresenta um estudo de caso (elaborado com o intuito de validar a ferramenta), demonstra a ferramenta do ponto de vista funcional e aborda aspectos referentes a produtividade RAD. O Capítulo 4 apresenta as considerações finais sobre o trabalho, relacionando o projeto com seus objetivos, além de expor os resultados obtidos com a conclusão do mesmo e apresentar recomendações para continuidade do trabalho. [FIM DE SEÇÃO. Não remova esta quebra de seção] 5 2. FUNDAMENTAÇÃO TEÓRICA Segundo Karthink, Chung e Ramani (2003), as rápidas mudanças e especializações na tecnologia, aumentam cada vez mais a dificuldade dos projetistas em manter os processos industriais atualizados. A complexidade envolvida para construir um software circunda a competência de dezenas de processos, o que pode acarretar vários problemas. Peters e Pedrycz (2001) afirmam que estão ocorrendo muitas inovações na engenharia de software a fim de superar as dificuldades na construção do software. Dentre estas inovações pode-se elencar: (i) utilização de frameworks básicos; (ii) modelagem de sistemas de software; (iii) programação orientada a objetos; (iv) programação automática; e (v) programação visual. Como afirma Agarwal et al. (2000), em um mundo dominado por deadlines e usuários coléricos, onde a competitividade pode depender de quão rápido um software é desenvolvido, podese dizer que a utilização das inovações proporcionadas pela engenharia de software a fim de desenvolver métodos de desenvolvimento rápido de aplicações são certamente atraentes. Conforme mencionado no Capítulo 1, este projeto tem o intuito de conceber uma ferramenta que acelera o desenvolvimento de aplicações. Sendo assim, nas seções subseqüentes dá-se ênfase aos métodos de desenvolvimento de aplicações que serão utilizados como base neste projeto. A Seção 2.1 aborda o reuso de código, tendo em vista que o mesmo influencia fortemente no desenvolvimento rápido de aplicações. A Seção 2.2 discute o desenvolvimento rápido de aplicações (RAD), uma vez que este é o um dos principais enfoques do trabalho. É salientada a importância do uso de padrões de projeto na Seção 2.3, além de enfatizar os conceitos dos frameworks, visto que é uma das tecnologias utilizadas para desenvolvimento do projeto; a descrição do framework utilizado (PHPLib-UNIVALI) é realizada na Seção 2.4; e as ferramentas similares pesquisadas são expostas na Seção 2.5. 2.1. REUSO DE CÓDIGO Holanda, Souza e Melo (2001 apud BENVENUTTI, 2002), afirmam que muito se tem discutido sobre reuso de código e informações, devido a crescente importância que tem sido atribuída a esta solução que se propõe a resolver um grande problema observado em algumas organizações, o compartilhamento de experiências e informações. Segundo Peters (2001), no terreno da engenharia de software existem os componentes e os frameworks. Um componente é uma unidade de software construída e testada para fins especiais, é útil, adaptável, portável e reutilizável. Para Kiely (1998 apud PETERS, 2001), o principal objetivo do desenvolvimento de software baseado em componentes é permitir que os desenvolvedores utilizem mais de uma vez um código escrito em qualquer linguagem e que o mesmo possa ser executado em qualquer plataforma. De acordo com Szyperski (1998 apud BRAGA e WERNER, 1999), o desenvolvimento baseado em componentes está cada vez mais ganhando adeptos e é uma das propostas promissoras para a melhoria da produção de software nos próximos anos. A construção de software através de componentes leva a uma maior reutilização e conseqüentemente aumenta a qualidade e a produtividade, o que enfatiza a crença que esta nova modalidade de desenvolvimento de software venha a crescer. A construção de software baseado no uso de componentes reutilizáveis tem por objetivos reduzir a complexidade, o custo e o tempo de todo o processo de desenvolvimento, bem como aumentar a confiabilidade dos sistemas produzidos, graças ao uso de componentes previamente testados (SOUZA, 2000). De maneira geral, um framework, segundo Peters (2001), é uma combinação de componentes reutilizáveis que simplifica a construção de aplicações e que pode ser conectado a uma aplicação. Souza (2000) afirma que o processo de reutilização consiste em localizar, compreender, recuperar e modificar componentes pré-existentes. Desta forma, toda uma infra-estrutura capaz de apoiar as quatro atividades deste processo, dentre outros aspectos, torna-se necessária para o sucesso do reuso. 2.1.1. Vantagens do reuso de código Conforme Peters (2001), o objetivo da reutilização de código é aumentar cada vez mais a produtividade e qualidade de software. Benvenutti (2002) afirma que o reuso de código proporciona qualidade e produtividade no desenvolvimento e manutenção de software, pois ao utilizar partes de softwares prontos, não serão necessárias sua digitação, codificação e verificação de erros. 7 Benvenutti (2002), baseada em diversos estudos, relaciona diversas vantagens do reuso de código. Dentre estas vantagens pode-se citar: • Economia de tempo, pesquisa e dinheiro, uma vez que ocorre uma diminuição no tempo total de desenvolvimento e no número de pessoas necessárias para elaborar um sistema; • Flexibilidade de forma que os desenvolvedores podem combinar, recombinar e compartilhar componentes para suprir suas necessidades; e • Alta qualidade de material, tendo em vista que o código foi já testado e aprovado. Assim, a probabilidade dos componentes terem um nível de qualidade superior aos objetos criados fora da idéia de reutilização é muito maior. 2.2. RAD - RAPID APPLICATION DEVELOPMENT Segundo Jacques (1994), durante as décadas de 70 e 80 as técnicas de desenvolvimento de software compartilhavam um elemento comum: a abordagem cascata. A idéia era iniciar a análise, solidificar os requisitos, criar uma especificação de software e então implementar e testar. Jacques (1994) afirma que este método produzia sistemas mais rapidamente e com menos erros do que qualquer método previamente aplicado, entretanto, essa vantagem abrangia apenas a perspectiva do desenvolvedor. Para os gerentes e projetistas de software, a história era completamente diferente. Jacques (1994) assegura que em meados dos anos 80 estudos mostraram que vários desenvolvedores adotavam formas de prototipação para demonstrar aos usuários finais como seria o sistema após o término do processo de desenvolvimento. Sendo assim, Martin (1991 apud MALCOLM, 2001) propôs o que hoje é conhecido como Rapid Application Development (RAD). Pode-se dizer que a expressão RAD não é recente. Segundo Martin (1991 apud MALCOLM, 2001) a mesma surgiu em um disfarce original como “Rapid Iterative Production Prototyping”, desenvolvida pela Du Pont Organization como um aspecto da Engenharia da Informação. Com o crescimento da prototipação e das ferramentas de desenvolvimento, especialmente a expansão da programação visual, o RAD tem ganhado popularidade entre os desenvolvedores. 8 De acordo com Agarwal et al. (2000), James Martin lançou o termo RAD no início dos anos 90, com o intuito de distinguir a metodologia do tradicional modelo de desenvolvimento de software Cascata. Agarwal et al. (2000) afirma que RAD refere-se a um ciclo de vida projetado para fornecer um desenvolvimento muito mais rápido que os tradicionais processos de software, além de prover resultados de maior qualidade. Howard (2002) diz que, a promessa básica do paradigma RAD é que uma vez que um sistema é especificado e projetado, o mesmo pode ser construído e implementado sem maior remodelagem. O objetivo do RAD é reduzir o tempo entre a determinação dos requisitos e suas respectivas implementações, diminuindo assim, a probabilidade de mudança (HOWARD, 2002). O RAD é um ciclo de vida projetado para fornecer desenvolvimento muito mais rápido e resultados de mais alta qualidade que os alcançados com os tradicionais processos de desenvolvimento de software (MARTIN, 1991 apud CASEMAKER INC, 2000). Creegan (1994) afirma que para um projeto de desenvolvimento de software obter sucesso, o mesmo deve produzir um software de qualidade diante do tempo e orçamento definidos pelo usuário. Creegan (1994) ainda diz que o RAD suporta este objetivo e que transforma o ciclo de vida do desenvolvimento de software de um processo “estático” e “orientado a documentação” para um processo “dinâmico”, “evolucionário”, “interativo” e, segundo Agarwal et al. (2000), “iterativo”. Existe consenso entre Agarwal et al. (2000) e Jacques (1992) de que existem quatro aspectos fundamentais para o desenvolvimento rápido de aplicações: (i) ferramentas, (ii) metodologia, (iii) pessoas e (iv) gerenciamento / planejamento. Desta forma, conforme Agarwal et al. (2000), em um típico ciclo de vida RAD, as fases de especificação de requisitos e projeto consomem aproximadamente 30% do tempo total de esforços despendidos. Para Merlyn (1991) também existem quatro elementos chave para o RAD. Contudo, Merlyn (1991) classifica-os de uma forma um pouco diferenciada: 1. Reuniões do grupo de trabalho, ou Joint Application Development (JAD): Reuniões no estilo JAD são componentes importantes em qualquer ciclo de vida de ambientes CASE (Computer Aided System Engineering). Segundo Brochu (1993), JAD é a formação de equipes compostas pelos fornecedores dos problemas (clientes) e os provedores de soluções (desenvolvedores) a fim tomar decisões conjunta sobre o desenvolvimento do projeto; 9 2. Desenvolvimento Incremental: RAD quebra um projeto em pequenos pedaços que podem ser analisados, projetados e construídos em poucos meses; 3. Tecnologia CASE: CASE tem adicionado novos estímulos para o movimento JAD. Com sua ênfase em planejamento, análise e projeto e uma linguagem entendida pelo usuário e desenvolvedor. CASE fornece um idioma para uma comunicação mais clara entre desenvolvedor e usuário; e 4. Equipes pequenas: Merlyn (1991) diz que para um projeto RAD devem-se compor pequenas equipes com pessoas altamente capacitadas e motivadas, já que equipes pequenas, podem ser muito mais produtivas que equipes grandes. Embora se tenha passado mais de uma década desde o surgimento do termo RAD, segundo Agarwal et al. (2000), ainda não existe uma definição universal para o mesmo. Sendo assim, podese caracterizá-lo de duas formas: • Uma metodologia que prescreve as fases do desenvolvimento de software (similar aos fundamentos do modelo espiral e modelo iterativo de construção de software); e • Classes de ferramentas que permitem desenvolvimento rápido de objetos e aplicações, fornecendo interface gráfica com o usuário e proporcionando reusabilidade e geração de código. As ferramentas e a metodologia estão fortemente acopladas, uma vez que, as ferramentas habilitam a metodologia e circunscrevem o que é realizado durante o desenvolvimento de um projeto. Vale frisar que dentre as classificações do RAD este trabalho se enquadra nas classes de ferramentas, visto que não se planeja alterar ou incluir novas funcionalidades na metodologia, mas sim, conceber uma ferramenta atrelada à mesma. Agarwal et al. (2000) diz que a primeira geração de ferramentas RAD sofria com as limitações da época, o que não a possibilitava aumentar o nível de produção de aplicações. Atualmente as ferramentas RAD têm superado essas falhas e proporcionado uma série de funcionalidades, incluindo características CASE, programação visual, acesso remoto a banco de dados e suporte a arquiteturas cliente / servidor. 10 2.2.1. Benefícios do RAD Conforme Martin (1991 apud AGARWAL et al., 2000), a tecnologia RAD incorpora abordagens diferentes, no que diz respeito a desenvolvimento de sistemas, que as abordagens dominantes das últimas três décadas. RAD além de incluir iteração sucessiva e refinamento, acelera o desenvolvimento de protótipos. Os objetivos da utilização do RAD incluem desenvolvimento mais rápido de software e sistemas com alto nível de manutenção. Em acréscimo, dado que cada vez mais as ferramentas RAD incorporam o paradigma de orientação a objetos, os benefícios proporcinados pela reusabilidade ficam cada vez mais claros. Segundo Agarwal et al. (2000), os benefícios proporcionados pelas ferramentas RAD são categorizados em duas classes: (i) benefícios globais, classe que inclui toda produtividade do desenvolvimento da aplicação, consumo de recursos e gerenciamento do projeto de desenvolvimento de software; e (ii) resultados específicos, representam valores de nível menor, tais como, flexibilidade no desenvolvimento da aplicação, redução e reuso de código. Pode-se observar na Tabela 1 o relacionamento entre o uso das ferramentas RAD e os resultados esperados. Tabela 1. Benefícios do RAD Categoria Benefícios Globais Resultados específicos Itens A ferramenta RAD incrementa a produtividade no desenvolvimento da aplicação Um software desenvolvido usando uma ferramenta RAD usa menos recursos que um desenvolvido utilizando outras ferramentas de desenvolvimento. O uso de ferramentas RAD aumenta o planejamento / gerenciamento de um projeto de desenvolvimento de software. Com uma ferramenta RAD pode-se desenvolver aplicações de forma mais rápida do que usando outros tipos de ferramentas. Uma ferramenta RAD provê um alto nível de flexibilidade no desenvolvimento de uma aplicação. O uso de uma ferramenta RAD reduz a quantia de codificação necessária. Uma ferramenta RAD ajuda a categorizar e classificar objetos. Com uma ferramenta RAD o desenvolvimento de aplicação requer menos trabalho (mão-de-obra). Uma ferramenta RAD aumenta o reuso de código Uma ferramenta RAD ajuda a desenvolver aplicações mais sustentáveis. Fonte: Adaptado de Agarwal (2000) 11 Desta forma, espera-se com a concretização deste projeto alcançar grande parte dos benefícios mencionados na classe “resultados específicos” bem como, gerar um código fonte facilmente entendido pelos desenvolvedores, uma vez que o mesmo baseia-se no framework PHPLIb-UNIVALI, descrito na Seção 2.4. 2.2.2. RAD X CASE Além das ferramentas RAD, pode-se dizer que uma ferramenta CASE também acelera o processo de engenharia de software. Segundo Castilhos (2004), uma ferramenta CASE é uma forma de padronizar e agilizar a documentação em um processo de software, e quando utilizada corretamente, acarreta em qualidade e produtividade no desenvolvimento. Como já citado anteriormente, o RAD apresenta uma abordagem de criação rápida de aplicativos através de reutilização de código, em contrapartida, o CASE propõe uma abordagem metodológica em que o software é o produto de uma seqüência racional de passos (DEBONI, 1998). De acordo com Deboni (1998), as duas abordagens são, aparentemente, divergentes em suas tentativas de ajuda, entretanto, estas duas classes de ferramentas podem colaborar para que os projetistas de software tenham um caminho mais seguro e produtivo ao criarem sistemas com complexidade elevada. Ainda segundo Deboni (1998), as ferramentas de programação RAD disponibilizam aos projetistas uma grande quantidade de componentes e um meio eficiente para integrá-los. Desta forma, pode-se utilizar diretamente o RAD em projetos não muito complexos e com número relativamente pequeno de usuários. Atualmente deve-se também considerar que a complexidade da maioria dos sistemas exige que o desenvolvimento seja apoiado por uma ferramenta CASE. Assim, pode-se desenhar os diagramas representativos de visões do problema, em uma escala progressiva de detalhe e complexidade, objetivando a criação de uma “planta” da solução que só então será traduzida em software. De forma geral, o que garante que um sistema projetado utilizando uma ferramenta CASE possa ser construído em uma ferramenta RAD é a adoção, por ambas, dos mesmos princípios básicos de orientação a objetos. Sendo assim, Deboni (1998) afirma que a utilização dos mesmos conceitos tende a integrar a visão do desenvolvimento de software dada por ambas abordagens. 12 A Tabela 2 demonstra a divisão do RAD e do CASE no ciclo de vida de um software. Tabela 2. Comparando RAD e CASE Ferramenta Análise RAD Elaboração de protótipos para definição dos requisitos do sistema Projeto Teste em protótipos das opções de projeto. Projeto das Interfaces CASE Criação e teste de modelos do sistema, com o projeto de uma solução Levantamento de requisitos, criação de modelos para facilitar o entendimento do problema Construção Construção da aplicação integrando o código gerado pelo CASE Geração da estrutura do código do aplicativo, especialmente das regras de negócio Manutenção Correção dos códigos e testes dos aplicativos Engenharia reversa de aplicativos criados pela RAD, ajudando na documentação Fonte: Adaptado de Deboni (1998) Pode-se caracterizar o projeto proposto como uma ferramenta RAD, uma vez que o mesmo concentra-se em aspectos pertinentes da criação rápida de aplicativos, neste contexto, baseados em um framework de desenvolvimento de software. É importante frisar que não é concernente a este projeto gerar nenhuma espécie de documentação ou apoiar-se sobre aspectos metodológicos de desenvolvimento de software, tendo em vista estas características pertencem às ferramentas CASE. De certo modo, existe integração da ferramenta RAD proposta neste projeto com algumas das ferramentas CASE existentes no mercado, uma vez que para iniciar um projeto na ferramenta é necessário entrar com um arquivo SQL (Structured Query Language) que pode ser, eventualmente, gerado por uma ferramenta CASE. 2.3. PADRÕES DE PROJETO Pode-se dizer que projetar um software orientado a objetos é uma tarefa difícil, porém, segundo Gamma et al. (2000), projetar um software reutilizável orientado a objetos é ainda mais trabalhoso. Para isto, é necessário encontrar os objetos pertinentes, dividi-los em classes no nível correto de granularidade, definir as interfaces das classes e suas hierarquias de herança, bem como estabelecer as relações chave entre as mesmas. Tendo em vista esta grande complexidade, Gamma (1995 apud CAGNIN et al., 1999) propõe os padrões de projeto como um novo mecanismo para expressar experiências na elaboração de projetos orientados a objetos. De acordo com Gamma et al. (2000), estes padrões resolvem 13 problemas específicos e tornam os projetos orientados a objeto mais flexíveis e, em última instância, reutilizáveis. Tais padrões ajudam os projetistas a reutilizar projetos bem sucedidos ao basear os novos projetos na experiência anterior. De forma geral, um padrão de projeto nomeia, abstrai e identifica os aspectos chave de uma estrutura de projeto comum, a fim de torná-la útil para a criação um projeto orientado a objetos reutilizável. Um padrão de projeto identifica as classes e instâncias participantes, seus papéis, colaborações e a distribuição de responsabilidades (GAMMA et al., 2000). Pode-se classificar um padrão de projetos em quatro princípios fundamentais: • Nome do Padrão: Referência utilizada para descrever um problema de projeto, suas soluções e conseqüências de forma sucinta. O nome torna mais fácil pensar sobre projetos e comunicá-los, além de criar uma linguagem única entre a equipe; • Problema: Descreve quando aplicar o padrão, explicando o problema e seu contexto; • Solução: Descreve os elementos que compõem o projeto, seus relacionamentos, suas responsabilidades e colaborações. A solução não está voltada a uma solução em particular, pois um padrão pode ser aplicado em muitas situações distintas; e • Conseqüências: São os resultados e análises das vantagens e desvantagens da aplicação do padrão. As conseqüências de um padrão incluem o seu impacto sobre a flexibilidade, a extensibilidade ou a portabilidade de um sistema. Conforme Gamma et al. (2000), os padrões de projeto desempenham um papel muito importante em três grandes classes de software: (i) programas de aplicação; (ii) toolkits; e (iii) frameworks. Sendo assim, as seções seguintes descrevem, de forma geral, estas três classes de software, entretanto, enfatiza-se os frameworks, pois trata-se de um conceito abordado neste trabalho. 2.3.1. Programas de aplicação Segundo Gamma et al. (2000), para um programa de aplicação (softwares aplicativos) as prioridades mais altas são reusabilidade interna, facilidade de manutenção e extensão. A reusabilidade interna garante que não seja implementado mais do que se necessita. 14 A reusabilidade interna pode ser aumentada por padrões de projeto que reduzem dependências, tendo em vista que um acoplamento mais fraco aumenta a probabilidade de que uma classe possa cooperar com várias outras. Os padrões de projeto também tornam uma aplicação mais fácil de ser mantida e melhoram a facilidade de extensão. 2.3.2. Toolkits Para Gamma et al. (2000), um toolkit (biblioteca de classes) é um conjunto de classes relacionadas e reutilizáveis, projetadas para fornecer uma funcionalidade útil e de finalidade geral. Os toolkits não impõem um projeto específico à sua aplicação; simplesmente fornecem funcionalidades que podem auxiliar a aplicação a executar o seu trabalho, desta forma evitam a recodificação. De forma geral os toolkits são equivalentes em orientação a objetos a bibliotecas de sub-rotinas. 2.3.3. Frameworks Um framework é um conjunto de classes que representam um projeto abstrato para soluções de uma família de problemas relacionados (JOHNSON e FOOTE, 1988 apud BOSCH et al., 1999). Conforme mencionado na Seção 2.1, segundo Peters (2001) um framework, ou arcabouço de classe, é uma combinação de componentes reutilizáveis que simplifica a construção de aplicações e que pode ser conectado a uma aplicação. Gabriel (1996 apud PARSONS, RASHID e SPECK, 1999) define framework como um sistema que pode ser customizado, especializado, ou estendido para prover capacidades mais específicas, mais apropriadas ou ligeiramente diferentes. Gamma et al. (2000) provê uma definição mais abrangente, para ele um framework é definido como um conjunto de classes cooperantes que constroem um projeto reutilizável para uma específica classe de software. Um framework é customizado para uma aplicação peculiar através de subclasses específicas da aplicação, sendo essas subclasses herdadas das classes abstratas do framework. Desta forma, um framework prescreve a arquitetura da aplicação, define a estrutura geral e sua divisão em classes e objetos e, conseqüentemente, as responsabilidades chave das classes de objetos, como estas colaboram e o fluxo de controle. 15 Segundo Parsons, Rashid e Speck (1999), um framework consiste em dois pontos: (i) ponto gelado - frozen spots - ou insensível (fragmentos do software já codificados para serem reutilizados); e (ii) ponto quente - hot spots (elementos flexíveis, permitindo aos usuários ajustar o código de acordo com a necessidade da aplicação). Diferente da maioria das bibliotecas de classes, os frameworks encapsulam o controle de fluxo, bem como a interface dos objetos, modelando assim, o comportamento dinâmico do sistema e sua estrutura. Um framework captura as decisões do projeto que são comuns ao seu domínio de aplicação. Assim, os frameworks enfatizam a reutilização de projetos em relação à reutilização de código, embora um framework, geralmente, possua subclasses concretas que podem ser utilizadas prontamente (GAMMA et al., 2000). Gamma et al. (2000) ainda afirma que enfatizar a reutilização de projetos leva a uma inversão de controle entre a aplicação e o software sobre a qual esta está baseada. Quando usa-se um framework reutiliza-se o corpo principal, e escreve-se o código que este chama. Desta forma, é necessário escrever operações com nomes e convenções de chamada já especificadas; porém isso reduz as decisões de projeto. Um exemplo amplamente utilizado é o .NET Framework que, segundo Msdn (2005), possui recursos para criação de aplicações web, desktop, móvel e Web Services. Como resultado, pode-se não somente construir aplicações mais rapidamente, mas também com estruturas similares, tornando-as mais fáceis de serem mantidas e mais consistentes para os usuários. Em contrapartida, perde-se liberdade uma vez que muitas decisões do projeto foram tomadas no momento de concepção do framework. 2.3.3.1. Evolução dos frameworks Segundo Bosch et al. (1999) os frameworks tiveram suas origens com o ambiente Smalltalk e Apple Inc. Entretanto, somente a partir de 1992 com o surgimento da empresa Taligent, que os frameworks começaram a despertar os interesses das grandes corporações. A intenção da Taligent era desenvolver um sistema operacional baseado totalmente no conceito de frameworks orientado a objetos. Desta forma, a agência desenvolveu um conjunto de ferramentas RAD com o nome de CommonPoint, que consistia em mais de uma centena de frameworks. Em um contexto geral, pode-se dizer que os frameworks orientados a objetos passaram por várias mudanças desde suas primeiras versões. Robersts & Johnson (1996 apud BOSCH et al., 16 1999), descrevem a evolução de um framework em dois processos distintos: (i) caixa-branca; e (ii) caixa-preta, detalhados na Seção 2.3.3.2. Bosch et al. (1999) afirma que a evolução está presente como uma linguagem padrão, que descreve o processo desde o projeto inicial de um framework como um framework de caixa-branca, até um framework de caixa-preta. 2.3.3.2. Elementos flexíveis dos frameworks Parsons, Rashid e Speck (1999), baseados em características de customização, dividem os frameworks em duas categorias principais: • Frameworks de Caixa Branca: As aplicações geradas são adaptadas a partir de um conjunto de classes padrão, obrigando os desenvolvedores de aplicações e componentes a conhecerem a arquitetura do framework. Desta forma, a utilização do mesmo é geralmente limitada à operação de herança, conforme apresenta a Figura 1 (a). Segundo Gamma et al. (2000), termo “caixa branca” refere-se à visibilidade, uma vez que com a operação de herança, os interiores das classes ancestrais são freqüentemente visíveis para as subclasses; e • Frameworks de Caixa Preta: Em oposição, os frameworks de caixa preta escondem sua estrutura interna. Diferente dos frameworks de caixa branca, para utilizá-lo os usuários devem apenas conhecer uma descrição geral framework. O mecanismo de hot spots é geralmente a operação de composição, como expõe a Figura 1 (b). (a) (b) Figura 1. Elementos flexíveis em frameworks: (a) Caixa branca; (b) Caixa Preta Fonte: Adaptado de Parsons (1999) 17 Gamma et al. (2000) afirma que, tanto a utilização de herança (caixa branca), quanto composição (caixa preta) abrangem vantagens e desvantagens. A herança de classes é definida estaticamente e é simples de usar, em contrapartida, não se pode mudar as implementações herdadas das classes ascendentes em tempo de execução e as classes ancestrais freqüentemente definem pelo menos parte da representação física das suas subclasses. A composição de objetos é definida dinamicamente em tempo de execução pela obtenção de referências para outros objetos por um determinado objeto. A composição exige que os objetos respeitem as interfaces uns dos outros, o que requer interfaces cuidadosamente projetadas. Entretanto, a vantagem é que os objetos são acessados exclusivamente através de suas interfaces, não transgredindo o encapsulamento. Segundo Parsons, Rashid e Speck (1999), na prática existem poucos frameworks de caixa branca ou caixa preta puros, mas sim, existe uma combinação de ambos na maioria dos hot spots. Parsons, Rashid e Speck (1999) ainda afirmam que os frameworks tendem a amadurecer neste processo, iniciando como caixa branca e envolvendo frameworks de caixa preta. 2.3.3.3. Ciclo de vida de um framework De acordo com Bosch et al. (1999), a presença de frameworks reutilizáveis influencia fortemente no processo de desenvolvimento de uma aplicação. Bosch et al. (1999) ainda elenca três fases no desenvolvimento de software centrado em frameworks. • Desenvolvimento do Framework: Esta é a fase que, freqüentemente, despende mais esforços. O seu objetivo é conceber um projeto reutilizável de software em um domínio específico; • Uso do Framework: Também conhecida como fase de desenvolvimento de aplicação, seu principal objetivo é desenvolver uma aplicação utilizando um ou mais frameworks; e • Evolução e Manutenção do Framework: Como todo software, os frameworks estão sujeitos a mudanças, causadas por erros, inclusão de novas funcionalidades, etc. A fase de manutenção dedica-se a identificar as mudanças e manter o framework. 18 A Tabela 3 demonstra as fases, as pessoas e os artefatos envolvidos no ciclo de vida de um framework. Tabela 3. Ciclo de vida de um framework Fase Desenvolvimento do Framework Uso do Framework Manutenção e Evolução do Framework Pessoas envolvidas Engenheiros de Software e programadores desenvolvedores do Framework Programadores usuários do Framework 1 Responsáveis pela identificação e manutenção de erros e melhorias Artefatos de Software envolvidos Projeto do Núcleo do Framework Incrementos internos Núcleo do Framework Incrementos Internos Incrementos da Aplicação específica Núcleo do Framework Incrementos do Framework Fonte: Adaptado de Bosch et al. (1999) 2.4. FRAMEWORK PHPLIB-UNIVALI Pode-se encontrar em SourceForge (2005) a versão 2.0 do framework PHPLib-UNIVALI, entretanto, o material disponível no site não é a mesmo utilizada neste projeto. A versão do framework a ser usada é disponibilizada pelo setor de Tecnologia da Informação (TI) da Universidade do Vale do Itajaí (UNIVALI) e é base de grande parte dos sistemas web desenvolvidos pelo setor, bem como por seus núcleos de desenvolvimento internos e externos. O framework PHPLib-UNIVALI teve seu projeto inicial concebido pelo professor Rodrigo Becke Cabral no ano de 2003, desde então, vem sendo mantido por alunos, professores e funcionários da UNIVALI. No entanto, o mesmo não possui nenhum tipo de documentação, ficando por encargo deste projeto gerar uma documentação básica a fim de entender seus conceitos e funcionalidades. Cabe ressaltar que o intuito deste trabalho não é documentar o framework, mas sim utilizá-lo. Toda documentação aqui apresentada foi desenvolvida com a finalidade de melhor entender suas funcionalidades. Conforme aludido na Seção 2.3.3.2, os frameworks possuem duas formas de caracterização: (i) caixa branca; e (ii) caixa preta. Desta forma, pode-se caracterizar o framework PHPLibUNIVALI como caixa branca, uma vez que o relacionamento entre suas classes e as aplicações que as utilizam limitam-se à operação de herança. Todavia, o mesmo abrange um conjunto de arquivos 1 Também conhecidos como “framework reuser” ou desenvolvedores de aplicação. 19 de funções que podem ser agregadas às aplicações, o que descaracteriza-o totalmente como framework de caixa branca, vindo de encontro à afirmação de Parsons, Rashid e Speck, que existem poucos frameworks puros. A Figura 2 demonstra o relacionamento entre as aplicações e o framework PHPLibUNIVALI através de estereótipos do diagrama de pacotes da UML (Unified Modeling Language). Figura 2. Relacionamento entre aplicações e framework PHPLib-UNIVALI Os itens abaixo descrevem, de forma sucinta, a importância de cada pacote apresentado na Figura 2. • PHPLib-UNIVALI-Func: é um grupo de arquivos de funções que se agregam ao framework PHPLib-UNIVALI e podem, eventualmente, compor as aplicações que o utilizam como alicerce. Embora estes arquivos façam parte do framework e não ditem a arquitetura da aplicação, os mesmos não podem ser considerados um toolkit, uma vez que não apresentam nenhuma característica de orientação a objetos. Estes são apenas funções estruturadas e reutilizáveis dentro do framework, podendo ser conceitualmente definidos como bibliotecas de sub-rotinas. A Figura 3 apresenta detalhadamente o grupo de arquivos de funções bem como, esclarece o objetivo de cada um dentro do framework; 20 • framework PHPLib-UNIVALI: é o alicerce do PHPLib-UNIVALI. Este pacote contêm um conjunto de 8 classes co-relacionadas, conforme apresenta a Figura 4, que ditam a arquitetura, definem a estrutura geral e as responsabilidades de cada um dos objetos dentro da aplicação; e • Aplicação: é o sistema utilizado pelos usuários finais. Este pacote herda todas características do framework PHPLib-UNIVALI. Sendo assim, vale enfatizar que o principal objetivo deste projeto é gerar o pacote “Aplicação” customizado pelo usuário através das configurações realizadas ao decorrer do uso do sistema proposto. Figura 3. Arquivos de funções do framework PHPLib-UNIVALI A Figura 4 apresenta o diagrama lógico do framework PHPLib-UNIVALI, no entanto, vale destacar que, devido ao fraco encapsulamento dos atributos e métodos fornecido pela orientação a objetos da linguagem PHP 4 (versão que o framework foi desenvolvido), os relacionamentos de agregação que aparecem no modelo não existiam. Estes foram incluídos neste projeto a fim de construir uma modelagem conceitual correta do framework. Sendo assim, o código gerado pela ferramenta RAD proposta leva em consideração estes relacionamentos, no entanto, isto não acarreta em nenhum tipo de incompatibilidade por parte dos sistemas já desenvolvidos baseados no framework em questão. 21 Figura 4. Diagrama lógico do framework PHPLib-UNIVALI Devido ao grande número de atributos e métodos, o dicionário de dados de cada uma das classes do framework PHPLib-UNIVALI é apresentado no Apêndice A. 22 2.4.1. Elementos flexíveis do framework PHPLib-UNIVALI De acordo com Parsons, Rashid e Speck (1999) e conforme mencionado na Seção 2.3.3 um framework consiste em dois pontos: (i) frozen spots, que são fragmentos do software já codificados para serem reutilizados; e (ii) hot spots, que são elementos flexíveis que permitem aos usuários ajustar o código de acordo com a necessidade da aplicação. Os artefatos já codificados e fornecidos pelo framework PHPLib-UNIVALI são os frozen spots, onde se impõe a arquitetura da aplicação e define-se as propriedades, métodos e relacionamento entre as classes. A Figura 5, apresenta um exemplo de código-fonte do framework para melhor entendimento. class { var var var var var formCadastro extends formbase $largura; $tipoacao; $campos; $erros; $mensagem; ... function Inicializar() {} function Formular() {} function Novo() { return false; } ... } Figura 5. Exemplo de código do framework PHPLib-UNIVALI (frozen-spot) Analisando detalhadamente a Figura 5, pode-se perceber que os métodos estão apenas definidos ou apresentam um pequeno trecho de código padrão, no entanto, não realizam nenhuma ação em específico. Desta forma observa-se o frozen-spot do framework, isto é, a definição da arquitetura da aplicação. Este projeto propõe gerar, baseado na solução existente, o hot-spot do framework. O códigofonte é gerado a partir das configurações fornecidas pelo usuário através da ferramenta RAD. A Figura 6 demonstra um exemplo do hot-spot do framework PHPLib-UNIVALI. 23 class formNomeCadastro extends formCadastro { var cam_id; var cam_nome; var cam_data; ... function Inicializar() { return “Novo”; } function Formular() { # Tratamento para aspas foreach( $this as $chave => $valor) if(substr($chave,0,3) == "cam") { $this->$chave = @$_POST[$chave] ? stripslashes(@$_POST[$chave]) : stripslashes("$valor"); } $this->campoOculto("cam_id", $this->fer ); $this->campoTexto("cam_nome", "Nome", $this-> cam_nome, "30", "30", true ); $this->campoRotulo("cam_data", "Data", $this->cam_data ); } function Novo() { if ($this->erros) { return false; } # insere na tabela. ... return true; } ... } Figura 6. Exemplo de código hot-spot do framework PHPLib-UNIVALI O código-fonte interno aos métodos é o hot-spot do framework, e atualmente é gerado manualmente pelos programadores que utilizam o framework. Espera-se através desse projeto, automatizar esta geração, conseqüentemente, acelerando o processo de desenvolvimento dos sistemas. 2.5. SOLUÇÕES SIMILARES As seções seguintes apresentam algumas ferramentas pesquisadas durante a realização deste projeto. A pesquisa destas ferramentas tem como objetivo fornecer subsídios para o 24 desenvolvimento da solução proposta neste TCC, intitulado de RADPHP (Rapid Application Development Hypertext Preprocessor). 2.5.1. Geração automática de cadastros e consultas para linguagem ASP baseado em banco de dados Esta solução é caracterizada como trabalho de conclusão de curso de Ciência da Computação e, de acordo com Silveira (2003), é uma ferramenta com o intuito de auxiliar o desenvolvedor na criação automática de um sistema de cadastros e consultas na plataforma Web. Para isto, a ferramenta utiliza linguagem ASP (Active Server Pages) e baseia-se na estrutura de campos e relacionamentos do banco de dados. De forma geral, a ferramenta apresentada por Silveira (2003) objetiva automatizar a geração de inclusões, alterações, exclusões e consultas no banco de dados. Pode-se observar parte da interface da ferramenta na Figura 7. Figura 7. Tela exemplo da ferramenta proposta por Silveira (2003) Fonte: Silveira (2003) 25 Após a configuração das informações pelos desenvolvedores, a ferramenta gera as páginas em formato ASP. 2.5.2. NETSIS - ferramenta CASE para geração de páginas ASP Da mesma forma que o trabalho apresentado na Seção 2.5.1, este projeto também caracteriza-se como TCC do curso de Ciência da Computação e é de autoria de Castilhos (2004). Segundo Castilhos (2004), o trabalho é voltado ao desenvolvimento de uma ferramenta CASE direcionada para o auxílio de programadores e analistas de sistemas para definição e especificações do projeto e geração de código para aplicativos web, tendo assim por finalidade principal agilizar a criação de aplicativos de cadastros reduzindo custos e ganhando tempo. As aplicações produzidas pela ferramenta são baseadas na linguagem de programação ASP e suportadas pelos bancos de dados Access e SQL Server. Além da aplicação, a ferramenta propõe-se a gerar a estrutura do banco de dados, bem como seu dicionário de dados. A Figura 8 apresenta a interface da ferramenta NETSIS, mostrando o menu principal do software. Figura 8. Interface exemplo da ferramenta NETSIS Fonte: Castilhos (2004) 26 2.5.3. Polar Studio Blue Polar (2004, tradução do autor) define Polar Studio como: “Ambiente de desenvolvimento rápido de aplicações (RAD) destinado a criar aplicações comerciais baseadas na web de alta qualidade em tempo recorde”. O Polar Studio é um IDE (Integrated Development Environment - Ambiente de Desenvolvimento Integrado), concebido pela empresa Blue Polar, e pode ser adquirido em Blue Polar (2004) por 495,00 dólares. Com o objetivo de criar aplicações baseadas 100% em tecnologias web de forma rápida, o Polar Studio tem seu próprio conceito, onde as aplicações são modeladas diretamente no seu “repositório de aplicações” e são acessíveis via XML (Extensive Markup Language). A partir da modelagem da aplicação, o gerador de páginas da ferramenta, que funciona no servidor, gera o HTML (Hypertext Markup Language) que é visualizado pelo usuário. Desta forma, a aplicação criada é processada no servidor sobre o IIS (Internet Information Server) e o acesso aos dados ocorre através do servidor polar. A Figura 9 apresenta a arquitetura do Polar Studio. Figura 9. Arquitetura da Ferramenta Polar Studio Fonte: Adaptado de Blue Polar (2004) 27 É importante considerar que a IDE do Polar Studio tem seu próprio servidor web (WebServer) para testes imediatos. Assim, não existe a necessidade os ter, de fato, um WebServer instalado para testar a construção da aplicação. A Figura 10 apresenta a interface do IDE do Polar Studio. Figura 10. IDE da Ferramenta Polar Studio Fonte: Blue Polar (2004) 2.5.4. Análise comparativa entre as soluções pesquisadas De forma geral, tanto as ferramentas geradas em meio acadêmico (trabalhos de conclusão de curso de Silveira (2003) e Castilhos (2004)) quanto as comerciais (Blue Polar (2004)) apresentam praticamente as mesmas funcionalidades no que diz respeito à manipulação de dados. Um único item não existente na ferramenta de Castilhos (2004) que consiste no detalhe de dados. A Tabela 4 apresenta os detalhes da comparação da ferramenta RADPHP (proposta neste trabalho) com as soluções pesquisadas. 28 Tabela 4. Comparação das ferramentas pesquisadas com a ferramenta proposta Descrição Utiliza Framework Não intervenção do desenvolvedor Inserção de Dados Edição de Dados Exclusão de Dados Listagem dos Dados Detalhes dos Dados Paginação em Listagens Gera estrutura a partir de leitura do Banco de dados Gera estrutura a partir de leitura de arquivo SQL Criação Banco de Dados Estrutura da ferramenta em XML2 Linguagem de geração RADPHP X X X X X X X X SILVEIRA NETSIS X X X X X X X X X X X POLAR STUDIO X X X X X X X X X X X PHP X X ASP ASP ASP Observando a Tabela 4, pode-se dizer que um grande e importante diferencial existente na ferramenta RADPHP, não encontrado em nenhuma das ferramentas pesquisadas, é a utilização de um framework. Desta forma, os desenvolvedores podem realizar qualquer eventual modificação facilmente, tendo em vista que o código gerado segue um padrão de desenvolvimento simples e compreensível. Outra característica relevante, é o fato de todas as configurações realizadas pelo usuário, estrutura da ferramenta e informações sobre a estrutura do banco de dados utilizado na aplicação, serem armazenadas em arquivo (formato XML), garantindo desta forma, a portabilidade dos projetos criados. Sendo assim, o único pré-requisito é ter a ferramenta instalada. Percebe-se também, através da Tabela 4, que a única solução que concentra seus esforços na geração de código PHP é o RADPHP. Pode-se desta forma, considerar esta particularidade como um grande diferencial, uma vez que o PHP é uma linguagem gratuita e disponível a toda e qualquer pessoa. 2.6. TECNOLOGIAS UTILIZADAS Para a elaboração deste projeto e sua caracterização como trabalho de conclusão de curso, faz-se necessário a utilização de diferentes tipos de tecnologias, cada qual com sua particularidade. Dentre as tecnologias utilizadas vale ressaltar o uso de uma das etapas do processo de compilação; a análise. O processo de análise consiste, segundo Gesser (2003) em examinar o código 2 Refere-se a forma de armazenamento dos dados do projeto. 29 fonte de um programa e extrair as informações relevantes para o preenchimento das estruturas de dados utilizadas na etapa de síntese3. A etapa de análise é subdividida em três fases: (i) análise léxica; (ii) análise sintática; e (iii) análise semântica. É importante frisar que para o desenvolvimento desta etapa - neste projeto – é utilizada a ferramenta GALS (Gerador de Analisadores Léxicos e Sintáticos), proposta por Gesser (2003), que produz como resultado final os analisadores léxico e sintático, sendo de intuito deste projeto o desenvolvimento de um analisador semântico. A Seção 2.6.1 expõe as características e as funcionalidades da ferramenta GALS. A Seção 2.6.2 aborda tecnologias referentes a especificação e validação de documentos XML, tais como, DTD (Document Type Definition) e XML Schema. Considera-se importante abordar este assunto, pois, a proposta de desenvolvimento da ferramenta (Capítulo 3) não utiliza banco de dados e sim documentos XML para o armazenamento de dados. 2.6.1. GALS – gerador de analisadores léxicos e sintáticos Segundo Gesser (2003), o GALS é uma ferramenta que tem o intuito de gerar automaticamente analisadores léxicos e sintáticos, através de especificações léxicas, baseadas em expressões regulares, e especificações sintáticas, baseadas em gramáticas livres de contexto. Gesser (2003) afirma que o GALS tenta fornecer um ambiente amigável – que pode ser empregado para o uso didático ou profissional – e de interface simples, onde podem ser especificados aspectos de analisadores léxicos e sintáticos. O GALS fornece uma gama de funcionalidades, dentre estas se pode citar: • Configuração: Interface para definir as opções de projeto, como linguagem objeto, técnica empregada para o analisador sintático, nomes de classes; • Simulador: Permite testar os analisadores antes de gerar o código fonte; e • Documentação: Exibe documentação em formato HTML com as tabelas geradas para os analisadores léxico e sintático. 3 A compilação de um programa é dividida em duas etapas: (i) análise; e (ii) síntese. No entanto, para realização deste projeto é utilizada somente a etapa (i). 30 Para geração do analisador léxico devem ser declarados tokens, que são reconhecidos através de expressões regulares. Estes tokens podem ser declarados de diferentes formas: através de um identificador e uma expressão regular (seqüência de caracteres entre aspas) ou pela identificação de um token como caso particular de um outro já declarado. A especificação sintática dá-se através de uma gramática de livre contexto, existindo ainda a possibilidade de inserção de ações semânticas (opção esta utilizada neste projeto), de modo que seja possível realizar uma posterior análise semântica por meio de uma tradução dirigida pela sintaxe. Ao término da especificação da linguagem, é gerado um conjunto de classes e tabelas. As classes geradas compreendem os analisadores léxico, sintático e semântico, bem como classes auxiliares e de exceções. É de extrema importância destacar que a classe para o analisador semântico não possui nenhum tipo de implementação, mas sim, a interface que o analisador sintático espera. Como já mencionado na Seção 2.6, a implementação do analisador semântico é compreendida neste projeto. 2.6.2. XML - Extensive Markup Language Segundo Tesch Jr. (2002), a intensificação do uso dos computadores e o crescimento da complexidade do nível de manipulação e compartilhamento de informações, foram os fatores precursores para o surgimento das linguagens de marcação. Para Tesch Jr. (2002), as linguagens de marcação foram concebidas com intuito de minimizar os problemas de transferência de um formato de representação para um outro. Tais linguagens têm o objetivo de organizar e estruturar o conteúdo de um documento de um modo diferente de sua forma de exibição. Pode-se enumerar diversas linguagens de marcação, tais como o SGML (Standard Generalized Markup Language) e o HTML, no entanto, esta seção enfatiza aspectos pertinentes ao XML, uma vez que é uma das tecnologias utilizadas para o desenvolvimento deste trabalho. Segundo McGrath (1999 apud VARGAS, 2004), XML é uma abordagem padronizada para que informações sejam descritas, armazenadas, processadas e publicadas eletronicamente. Em contrapartida, Tittel (2003 apud KOKUBO, 2004), não considera o XML como uma linguagem de descrição de dados, mas sim, uma metalinguagem projetada para descrever outras linguagens de marcação. 31 Embora não exista consenso entre as definições, pode-se dizer que todas convergem para a mesma vertente e acabam complementando-se. Assim, pode-se dizer que XML é uma linguagem de marcação extensiva e autodescritiva e que permite a criação de padrões com elementos atributos pré-definidos. A Figura 11 apresenta um exemplo simplório de um documento XML. <fonte> <tipo>Arial</tipo> <tamanho>10</ tamanho> <cor>Vermelho</cor> <estilo>Negrito</estilo> <estilo>Itálico</estilo> <estilo>Sublinhado</estilo> <alinhamento>Centralizado</alinhamento> <efeito>Nenhum</efeito> </fonte> Figura 11. Exemplo de um documento XML 2.6.2.1. Especificação de documentos XML Segundo W3C (2005) o W3C (World Wide Web Consortium - Comitê Organizador da Web) é uma organização fundada em outubro de 1994 com o intento de desenvolver diretrizes e protocolos que asseguram o crescimento da Web em longo prazo, bem como fornecer padrões para as linguagens que se propõem a fornecer informações aos usuários da Web. Desta forma, o W3C estabelece os padrões de formulação do XML. Conforme Kirk (2000), o fato de existir apenas um órgão gestor decidindo como a linguagem deve evoluir, cria um padrão no qual os desenvolvedores de software podem utilizar tranqüilamente. Além de ser uma linguagem com padrão pré-estabelecidos e formulados pela W3C, o XML, segundo Kirk (2000) fornece ao desenvolvedor a possibilidade de criar seus próprios conjuntos de elementos e atributos; e até mesmo suas próprias entidades. Tesch Jr. (2002) diz que toda essa flexibilidade, faz com que seus tipos de vocabulários (ou componentes XML) possam ser criados como padrões para tipos de funções Web e até mesmo outros tipos de aplicações. Outro aspecto que deve ser amplamente considerado é a portabilidade dos documentos XML. Um documento XML pode armazenar informações relacionadas em apenas um arquivo, o que facilita a comunicação com outros sistemas, e até mesmo a alteração do conteúdo desejado. Tendo isso em vista, esse projeto propõe-se a utilizar documentos XML para armazenar a estrutura 32 de dados do sistema e suas informações. Desta forma, não existe a necessidade de armazenar estas informações em qualquer tipo de banco de dados. Muito se aborda a respeito das vantagens do XML, entretanto, Castro (2001 apud TESCH JR, 2002) afirma que o XML, em si, é relativamente simples. No entanto, o que o torna poderoso são as tecnologias empregadas juntamente com a linguagem, e, dentre estas tecnologias pode-se destacar a validação dos documentos XML. Existem duas classificações para os documentos XML: (i) documentos bem formados; e (ii) documentos válidos. Os documentos bem formados têm como única característica as regras de sintaxe determinadas pela W3C relativas aos documentos XML. Já os documentos válidos possuem sua estrutura definida formalmente através de uma DTD ou um XML Schema. A utilização de tais estruturas com o intuito de validar os documentos XML é de grande valia, pois garantem a integridade da informação na aplicação. 2.6.2.1.1. DTD - Document Type Definition Uma DTD é a base a partir da qual os documentos XML são criados. Para Kirk (2000), uma DTD define as partes de um documento e descreve como estes podem ser utilizados. Também é de responsabilidade de uma DTD determinar o que pode ser aplicado na parte interna do documento e se seus elementos são obrigatórios. De forma geral, uma DTD é um conjunto de regras que define as instruções que serão enviadas ao analisador sintático para o documento que está para ser analisado (KIRK, 2000). Assim, pode-se saber se um documento XML está sintaticamente correto. Tesch Jr (2002) afirma que uma DTD pode incluir um grupo de declarações de elementos e de atributos, bem como as entidades, notações e comentários que poderão ser utilizados em um documento. Na Figura 12 pode-se observar um exemplo de uma DTD. <?xml version="1.0" encoding="iso-8859-1"?> <!ELEMENT fonte (tipo+, tamanho, cor?, estilo*, alinhamento*, efeito*)> <!ELEMENT tipo (#PCDATA)> <!ELEMENT tamanho (#PCDATA)> <!ELEMENT cor (#PCDATA)> <!ELEMENT estilo (#PCDATA)> <!ELEMENT alinhamento (#PCDATA)> <!ELEMENT efeito (#PCDATA)> <!ELEMENT tamanho “10”)> Figura 12. Exemplo de um documento DTD 33 KIRK (2000 apud Kokubo, 2004) afirma que as DTDs podem ser classificadas de duas formas: (i) interna, onde documentos só podem ser auto-suficientes se a DTD estiver no próprio documento; e (ii) externa, onde a DTD localiza-se em um arquivo externo, que pode ser acessado localmente ou através de uma URL (Uniform Resource Locator). 2.6.2.1.2. XML Schema Castro (2001 apud TESCH JR, 2002) diz que é importante enfatizar que, esquema é o nome dado aos documentos gerados com o objetivo de definir o conteúdo dos documentos XML. Desta forma, tanto o DTD quanto o XML Schema são considerados esquemas. Conforme Maia (2005) o XML Schema – também chamado de XML Schema Definition (XSD) - foi originalmente proposto pela Microsoft, e, segundo Tesch Jr (2002), foi aprovado como padrão pelo W3C em março de 2001. Para Tesch Jr (2002), o XML Schema possui essencialmente a mesma função de uma DTD. Assim, o XML Schema define como determinado conjunto de um ou mais documentos XML devem ser construídos, quais elementos eles podem ou devem conter e ainda em que ordem os mesmos devem ser dispostos. Também é intuito do XML Schema definir os atributos dos elementos e qual será seu tipo de conteúdo. Segundo Maia (2005), de forma geral, o XML Schema tem a intenção de fixar os “blocos de construção” permitidos em um documento XML. Desta forma, um XML Schema define: • Elementos e atributos que podem aparecer em um documento; • Que elementos são elementos filhos; • A ordem dos elementos filhos; • O número de elementos filhos; • Se um elemento pode ser nulo; • Tipos de dados para elementos e atributos; e • Valores padrão e fixos para elementos e atributos. 34 A Figura 13 apresenta um exemplo de um documento XML Schema. <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="fonte"> <xs:complexType> <xs:sequence> <xs:element name="tipo" type="xs:string" maxOccurs="unbounded"/> <xs:element name="tamanho" type="xs:double" default="10"/> <xs:element name="cor" type="xs:string" minOccurs="0"/> <xs:element name="estilo" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="alinhamento" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="efeito" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> Figura 13. Exemplo de um documento XML Schema. 2.6.2.1.3. Análise comparativa DTD e XML Schema Conforme mencionado nas seções anteriores, tanto a DTD quanto o XML Schema têm o intuito de definir a estrutura de um documento XML. Pode-se dizer que as DTDs são utilizadas de forma intensa, no entanto Anderson et al. (2001 apud VARGAS, 2004) enumera uma série de limitações da tecnologia: 1. Linguagem proprietária, o que causa certa complexidade para o desenvolvedor; 2. Para integração entre DTDs, é necessário a utilização de um mecanismo chamado namespace. Os namespaces têm a função de evitar ambigüidades, no entanto, dificultam a construção das DTDs; e 3. Os tipos de dados, em sua grande maioria, restringem-se aos tipos “PCDATA” e “CDATA”. Segundo Anderson (2001, apud TESCH JR, 2002), o XML Schema é uma linguagem alternativa para desenvolvimento de esquemas, com o objetivo de suprir os problemas e outras dependências referentes às DTDs. 35 Castro (2001 apud TESCH JR, 2002) afirma que o XML Schema tem diversas vantagens em relação ao DTD. Os documentos XML Schema são escritos a partir de uma sintaxe XML, sendo assim, eles podem ser analisados através parsers (analisadores gramaticais) XML. Em contrapartida, em uma DTD todas as declarações são globais, o que impossibilita a definição de dois documentos com o mesmo nome, mesmo que eles estejam em contextos diferentes. Para Fornari (2003 apud VARGAS, 2004), as principais vantagens do XML Schema sobre a DTD são: • Possui 41 tipos de dados diferentes; • Permite criar novos tipos de dados; • Permite criar uma hierarquia de objetos com herança de características; • Permite que características herdadas sejam estendidas ou restringidas; • Possui o conceito de conjuntos, onde a ordem dos elementos não é importante; e • Permite valores nulos. Schmitt Filho (2002 apud VARGAS, 2004) afirma que mesmo sendo mais poderoso que as DTDs o XML Schema possui, alguns problemas: • Necessita de outras informações, além do elemento raiz, para torná-lo válido, contrariando as especificações de boa-formação do XML; • Não é 100% autodescritivo pelo fato de contrariar a boa-formação exigida pelo padrão XML; e • A notação de tipos causa maior complexidade para o desenvolvimento dos documentos. Embora o XML Schema ainda apresente alguns problemas, seus benefícios são maiores em relação aos fornecidos pelas DTDs. Segundo Maia (2005), o XML Schema tornou-se uma recomendação oficial do W3C em Maio de 2001. Sendo assim, a proposta deste projeto utiliza XML Schema para definir toda a estrutura XML do sistema. [FIM DE SEÇÃO. Não remova esta quebra de seção] 36 3. PROJETO Nesta seção são enfatizadas características concernentes à modelagem do sistema proposto. Para isso, referencia-se alguns diagramas da linguagem UML. Também é utilizado XML Schema para definição dos documentos XML utilizados no armazenamento de informações da ferramenta. Sendo assim, as seções subseqüentes apresentam as regras de negócio e a definição dos requisitos funcionais e não funcionais, a especificação do diagrama de casos de uso, o diagrama de classes do sistema e o XML Schema. 3.1. DEFINIÇÃO DOS REQUISITOS E REGRAS DE NEGÓCIO É de extrema importância definir as regras de negócio e antever as funções que são incorporadas em um sistema antes de iniciar efetivamente sua implementação. Dessa forma, esta seção descreve as regras de negócio e os requisitos funcionais e não funcionais do sistema RADPHP. Foram identificados os seguintes requisitos funcionais para o sistema proposto: • RF01: o sistema deve realizar a importação de um arquivo SQL a cada novo projeto para montar a estrutura de tabelas do banco de dados interna4 referente à aplicação em questão; • RF02: o sistema deve permitir a definição de listagens baseado na estrutura de banco de dados da aplicação; • RF03: o sistema deve permitir a definição de detalhes5 baseado na estrutura de banco de dados da aplicação; • RF04: o sistema deve implementar as funções de inclusão, exclusão e alteração de dados baseando-se na estrutura de banco de dados interna da aplicação (cadastro); 4 A estrutura de tabelas do banco de dados é chamada interna para enfatizar que não existe nenhuma relação entre a estrutura da ferramenta e o verdadeiro banco de dados da aplicação, tendo em vista que não realizá-se engenharia reversa a partir da ferramenta. 5 Detalhe é o nome de um formulário pré-estabelecido pelo framework que se refere a todo e qualquer detalhe de dados nas aplicações que o utilizam como alicerce. • RF05 o sistema deve permitir ao usuário informar o caminho da classe htmlBase (classe do framework PHPLib-UNIVALI) utilizado para a definição do layout da aplicação; • RF06: o sistema deve permitir a configuração de informações de acesso do banco de dados da aplicação; • RF07: o sistema deve permitir adicionar e alterar tabelas na estrutura do banco de dados interna da aplicação; • RF08: o sistema deve permitir adicionar e alterar atributos nas tabelas da estrutura do banco de dados interna da aplicação; • RF09: o sistema deve permitir a definição de consultas simples em formato SQL; • RF10: o sistema deve implementar a função abrir projeto; • RF11: o sistema deve implementar a função salvar projeto; e • RF12: o sistema deve gerar código da aplicação de acordo com as configurações do usuário. Para o sistema proposto foram identificadas as seguintes regras de negócio: • RN01: o sistema deve validar os campos de entrada de dados obrigatórios; • RN02: o sistema deve possuir mecanismo para consistir campos do tipo 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 no formulário de cadastro. • RN04: o sistema deve permitir a configuração dos nomes das páginas geradas, observando o padrão de sufixos: _lst para listagens; _det para detalhes; e _cad para cadastros; • RN05: o sistema não modifica a estrutura do banco de dados físico a partir das alterações efetuadas na estrutura de banco de dados interna através da ferramenta; e 38 • RN06: o sistema não incorpora as alterações realizadas manualmente pelo usuário no código fonte gerado. Foram identificados os seguintes requisitos não funcionais para o sistema proposto: • RNF01: o código gerado pelo sistema deve ser em linguagem PHP 4 e respeitar a arquitetura fornecida pelo framework PHPLib-UNIVALI (conformidade); • RNF02: o arquivo SQL que será importado no sistema deve respeitar os padrões do banco de dados Oracle (conformidade); • RNF03: o sistema não deverá utilizar banco de dados, todas as informações necessárias deverão ser armazenadas em XML em conformidade com XML Schema (implementação); e • RNF04: a definição de consultas SQL devem ser simples, ou seja, deve conter a definição de cada campo selecionado na cláusula SELECT, não permitindo tipos complexos e/ou operações aritméticas (implementação). 3.2. MODELO DE CASOS DE USO Furlan (1998) afirma que o diagrama de caso de uso destina-se a descrever os requisitos funcionais de um novo sistema. Um caso de uso representa uma entidade discreta e ilustra a interação entre as funcionalidades e os usuários. A Figura 14 apresenta o modelo de casos de uso da ferramenta RADPHP. 39 Figura 14. Modelo de Casos de Uso da ferramenta RADPHP Na Figura 14, pode-se observar a interação entre o usuário (ator) e os casos de uso que constituem o sistema. Para a utilização de qualquer funcionalidade da ferramenta é necessário criar um projeto, desta forma o caso de uso Cria Projeto (UC 01) descreve os passos para criação de um projeto. Estando o projeto criado, o usuário pode manipulá-lo. Desta forma, ele interage diretamente com os casos de uso UC 03, UC 04, UC 05, UC 06, UC 08, UC 09 e UC 10. É conveniente ao usuário poder salvar as informações manipuladas e continuar o projeto posteriormente. Assim, os casos de uso Abre Projeto e Salva Projeto (UC 02 e UC 07 respectivamente) retratam as ações que o usuário efetua em relação as operações básicas do projeto. A descrição das ações realizadas pelo usuário para obter seu produto final, ou seja, código fonte da aplicação, são delineadas a partir do caso de uso Gera Código (UC 11), que é responsável por descrever o processo de geração de código da aplicação. 40 Com o intuito de melhor descrever os casos de uso recomenda-se a elaboração de cenários que, segundo Gustafson (2003), é a descrição de uma seqüência de ações que pode ocorrer no domínio de um problema. Sendo assim, o Apêndice B apresenta os cenários de cada caso de uso, bem como suas relações com os requisitos funcionais e regras de negócio do sistema. 3.3. DIAGRAMA DE CLASSES Com o intuito de prover um melhor entendimento do funcionamento do sistema, a Seção 3.3.1 apresenta o diagrama de classes do mesmo e uma breve descrição de cada classe. Também é conveniente demonstrar a estrutura lógica do analisador SQL, uma vez que o mesmo é responsável pela análise léxica, sintática e semântica do script SQL fornecido ao sistema no momento em que um projeto é criado. Desta forma, a Seção 3.3.2 apresenta o diagrama de classes do analisador e uma descrição sucinta de cada uma de suas classes. 3.3.1. Diagrama de classes do sistema Esta seção apresenta o diagrama de classes do sistema (Figura 15) e um comentário explicativo sobre cada uma das classes do mesmo. 41 Figura 15. Diagrama de classes do sistema 42 Vale destacar que o diagrama de classes foi criado com base nos casos do sistema. Desta forma, tanto os atributos quanto as funcionalidades de cada uma das classes podem ser validadas através da Seção 3.2.1. Outro aspecto a ressaltar refere-se à classe com estereótipo enumeration, o qual, segundo Carlson (2002), define de uma lista de valores possíveis para um atributo que recebe o tipo da classe enumeration. Os itens a seguir apresentam a descrição das classes do diagrama: • rhpProject: Classe responsável pelo comportamento do projeto. Possui atribuições como: criar, abrir, fechar ou salvar um projeto, bem como é responsavel pela configuração das informações do banco de dados da aplicação; • rhpTable: Classe responsável pelo comportamento das tabelas do banco de dados da aplicação. Possui atribuições de criação e alteração das tabelas; • rhpAttribute: Classe responsável pelo comportamente dos atributos de uma tabela da base de dados da aplicação, identificando o nome do atributo, seu tipo, tamanho, se o mesmo é nulo e/ou uma chave; • rhpList: Classe responsável pelo comportamento do formulário de listagem do framework. Essa classe identifica e relaciona todos os atributos utilizados na listagem, como os mesmos são ordenados e se possuem link para outras páginas. Também é responsabilidade desta classe definir o título das páginas de listagem e se as mesmas possuem paginação; • rhpDetail: Classe responsável pelo comportamento do formulário de detalhe do framework. Desta forma, é de responsabilidade desta classe identificar e relacionar os atributos utilizados em um detalhe, bem como definir o título das páginas de detalhe da aplicação; • rhpRegister: Classe responsável pelo comportamento do formulário de cadastro do framework. Possuindo comportamento similar as classes rhpList e rhpDetail, essa classe identifica e relaciona os atributos utilizados em um formulário de cadastro da aplicação. Neste contexto, a mesma também define o título das páginas de cadastro da aplicação; • rhpQuery: Classe que define as consultas de um projeto. Tais definições são compostas por um nome (identificador da consulta) e um script SQL da mesma 43 definido pelo usuário. As consultas podem ser utilizadas para definição de listagens a partir de diversas tabelas; • rhpAttributeList: Classe associativa que armazena as informações adicionais de cada um dos atributos utilizados em uma listagem; • rhpAttributeDetail: Classe associativa que armazena as informações adicionais dos atributos utilizados em um formulário de detalhe; • rhpAttributeRegister: Classe associativa que armazena as informações adicionais dos atributos utilizados em um formulário de cadastro; • rhpReferenceTable: Classe responsável por identificar os atributos que são chave estrangeira. Desta forma, essa classe identifica o atributo e qual é a sua tabela pai; • rhpParser: Classe responsável por percorrer o arquivo SQL da base de dados da aplicação e identificar as tabelas, atributos, tipos de dados, chaves primárias e estrageiras em cada uma das tabelas; e • rhpButton: Classe responsável por identificar quais os botões um formulário pode ter. • rhpAttributeQuery: Classe que armazena as informações adicionais dos atributos utilizados em uma consulta. 3.3.2. Diagrama de classes do analisador SQL Esta seção apresenta o diagrama de classes do analisador SQL (Figura 16), bem como explica a funcionalidade de cada uma das classes do mesmo. O pacote que contêm o diagrama do analisador SQL do projeto foi nomeado sqlAnalyser. Desta forma, os itens a seguir apresentam uma breve descrição de cada uma das classes pertencentes ao pacote sqlAnalyser. • LexicalAnalyser: Classe responsável por realizar a análise léxica do arquivo SQL; • SyntacticAnalyser: Classe responsável por realizar a análise sintática do arquivo SQL; • SemanticAnalyser: Classe responsável por realizar a análise semântica do arquivo SQL; • AnalysisError: Classe base para tratamento de erros durante o parser do arquivo SQL; 44 • LexicalError: Classe responsável por identificar e efetuar o tratamento dos erros referentes ao analisador léxico; • SyntaticError: Classe responsável por identificar e efetuar o tratamento dos erros referentes ao analisador sintático; • SemanticError: Classe responsável por identificar e efetu7ar o tratamento dos erros referentes ao analisador semântico; • Token: Classe responsável pela identificação de cada um dos tokens reconhecidos durante a análise do arquivo SQL; e • TokenId: Classe que identifica o tipo de token encontrado durante a análise do arquivo SQL. Figura 16. Diagrama de classes do analisador SQL 45 É importante ressaltar que as classes do pacote sqlAnalyser são geradas através de definições de gramática a partir da ferramenta GALS, descrita com detalhes na Seção 2.6.1. No entanto, enquadra-se como exceção a classe SemanticAnalyser, a qual é gerada somente a estrutura pela ferramenta GALS e sua implementação torna-se responsabilidade do projeto. 3.4. XML SCHEMA Conforme mencionado na Seção 2.6.2.1.2, XML Schema tem o intuito de definir como documentos XML devem ser construídos, quais elementos os mesmos podem ou devem possuir, bem como em que ordem esses elementos devem ser dispostos. Desta forma, tendo em vista que as informações de configuração da ferramenta e a estrutura de banco de dados da aplicação devem ser armazenadas em documentos XML, é conveniente a elaboração de um XML Schema, com a finalidade de validar a estrutura e o conteúdo do documento XML que compõe a ferramenta. Para facilitar o entendimento, o XML Schema elaborado é apresentado em forma de diagrama, a partir da notação utilizada pela ferramenta XML Spy. Uma explicação detalhada sobre cada um dos estereótipos que compõem a notação pode ser encontrada em Kokubo (2004, p.17). Além dos diagramas, o Apêndice C apresenta o código fonte do XML Schema do projeto. A Figura 17 expõe a visão geral do XML Schema elaborado para validação do documento XML utilizado pela ferramenta RADPHP. 46 Figura 17. Visão geral do XML Schema para ferramenta RADPHP Além da visão geral do XML Schema (Figura 17), é fundamental apresentar a estrutura interna dos elementos formados por estruturas de dados complexos (complex types). Desta forma a Figura 18 apresenta os detalhes do elemento project e a Figura 19 a estrutura interna do elemento attribute. Figura 18. Detalhes do elemento project 47 Figura 19. Estrutura interna do elemento attribute As informações pertinentes à estrutura interna dos elementos list são exibidas através da Figura 20. Figura 20. Estrutura interna dos elementos list 48 Por fim, são apresentadas as informações referentes aos elementos detail (Figura 21) e register (Figura 22). Figura 21. Estrutura interna dos elementos detail Figura 22. Estrutura interna dos elementos register 3.5. IMPLEMENTAÇÃO De forma geral, a fase de implementação da ferramenta RADPHP dividiu-se em quatro grandes etapas: (i) implementar reconhecedor de linguagem SQL; (ii) implementar estrutura de dados do sistema; (iii) implementar as opções de configuração do sistema; e (iv) implementar 49 gerador de código PHP. Sendo assim, as seções seguintes retratam as técnicas e tecnologias utilizadas em cada uma das etapas desta fase. 3.5.1. Reconhecedor de linguagem SQL Um dos pré-requisitos para o desenvolvimento de aplicações utilizando a ferramenta RADPHP é a criação de um projeto, que armazena todas as informações de configuração e a estrutura do banco de dados da aplicação. Dessa forma, fez-se necessário o desenvolvimento de um analisador, com o intuito de converter a estrutura do banco de dados da aplicação – inicialmente em linguagem SQL – para uma forma entendida pela ferramenta RADPHP. O analisador SQL da ferramenta foi implementado em conformidade com o banco de dados Oracle 8i e possui funções de reconhecimento de tabelas, atributos, tipos e tamanho de campos, comentários e constraints. É de suma importância destacar que durante a implementação deste obteve-se auxílio da ferramenta GALS. De forma geral, o GALS (descrito em detalhes na Seção 2.6.1) propõe-se a gerar analisadores léxicos e sintáticos baseados em gramáticas. Neste caso, utilizou-se o método SLR que, segundo Crespo (1998), consiste na construção - a partir de uma gramática livre de contexto de um autômato finito determinista. A Figura 23 apresenta parte de uma gramática independente de contexto – para reconhecimento de criação de tabelas em linguagem SQL – definida através da ferramenta GALS. A gramática descrita na Figura 23 – em sua totalidade – acarretou na geração da estrutura de classes apresentada na Seção 3.3.2. Foi de inteira responsabilidade do projeto a implementação da classe SemanticAnalyser, criada em linguagem C++ em consonância com a estrutura de classes gerada pela ferramenta GALS. 50 Figura 23. Definição da gramática na ferramenta GALS Vale ressaltar que o desenvolvimento do analisador foi desvinculado da ferramenta RADPHP através de um pacote de classes, nomeado sqlAnalyser¸ portanto, pode ser utilizado separadamente por qualquer aplicação desenvolvida em linguagem C++. 3.5.2. Estrutura de dados do sistema Tendo em vista que um dos requisitos da ferramenta RADPHP é a não utilização de bancos de dados para armazenamento das informações pertinentes ao projeto, foram utilizados documentos XML - para armazenamento das informações - e XML Schema (descrito com detalhes na Seção 3.4) para definição da estrutura do documento XML utilizado pela ferramenta. O acesso e armazenamento dos dados em documentos XML na ferramenta deu-se através de um recurso intitulado XML Data Binding, que de acordo com Borland (2002), é um wizard que trabalha com geração automática de código para acesso a documentos XML através do método DOM (Document Object Model). O XML Data Binding (Figura 24) objetiva criar uma estrutura de dados comum para facilitar o acesso e manipulação de documentos XML através de XML Schema. 51 Figura 24. Interface do wizard do XML Data Binding 3.5.3. Opções de configuração do sistema As opções de configuração do sistema consistem basicamente na interface para desenvolvimento dos formulários, consultas, alterações na estrutura do banco de dados e definição das informações de acesso a base de dados. Para o desenvolvimento da interface, apresentada na Seção 3.6.3, utilizou-se a IDE Borland C++ Builder 6. É importante salientar que a ferramenta RADPHP foi desenvolvida em duas camadas: (i) interface, que se constitui do módulo de interação com o usuário; e (ii) aplicação, que contem a implementação de todas as regras de negócio da aplicação. Dessa forma, pode-se facilmente criar uma nova interface para ferramenta (sendo ela visual ou textual) sem a necessidade de realizar alterações consideráveis na estrutura da aplicação. 3.5.4. Gerador de código PHP O desenvolvimento do módulo gerador de código do projeto RADPHP foi a última etapa da fase de implementação, sendo responsável pela geração do código da aplicação respeitando a padronização definida pelo framework PHPLib-UNIVALI. 52 A geração de código dá-se através de arquivos de modelo – vide Figura 25 – orientados por tags pré-definidas pela ferramenta e que são substituídas pelo código correspondente. Figura 25. Exemplo de modelo para geração de código A Figura 25 apresenta um exemplo de modelo para uma consulta SQL. A geração efetiva do código PHP é realizada através de um parser, implementado na camada de aplicação, que substitui as tags iniciadas por “<%rhp” pelo código gerado através das configurações do usuário. Em sua totalidade, a ferramenta RADPHP é composta por 20 arquivos de modelo, divididos em três grupos: (i) elementos, formado pelos componentes do framework, como campo de edição de textos, lista de valores, e-mail, etc.; (ii) ações, que contem os modelos responsáveis pela interação com o banco de dados; e (iii) formulários, constituído dos modelos para definição dos formulários de listagem, detalhe, cadastro e consulta. A Figura 26 apresenta os três grupos de modelos e os arquivos que os compõem, bem como as relações existentes entre os mesmos. 53 Figura 26. Arquivos de modelo da ferramenta RADPHP e suas relações Vale ressaltar que, embora não seja recomendado, existe a possibilidade da alteração dos arquivos de modelo – manualmente – por parte dos usuários da ferramenta, o que acarretará na geração do código alterado pelo usuário a cada novo projeto. No entanto, a remoção, edição ou alteração de alguma das tags do modelo ocasionará em erro durante a geração do código da aplicação. 3.6. FERRAMENTA RADPHP A ferramenta RADPHP foi concebida com a intenção de fornecer as funcionalidades necessárias para a criação de projetos que empreguem o framework PHPLib-UNIVALI. Antes de apresentar a ferramenta, é conveniente contextualizá-la dentro do processo de desenvolvimento de software, uma vez que a utilização da mesma engloba etapas específicas e não o processo em sua totalidade. Dessa forma, a Seção 3.6.1 contextualiza a ferramenta no processo de desenvolvimento de software, a Seção 3.6.2 apresenta um estudo de caso, com o objetivo de validar o software e a Seção 3.6.3 demonstra o funcionamento do RADPHP. As considerações sobre produtividade RAD em relação ao estudo de caso são apresentadas na Seção 3.6.4. 3.6.1. Contextualizando o RADPHP no processo de desenvolvimento de software De acordo com Peters e Pedrycz (2001), processo de software é uma seqüência de etapas com feedback que produz uma variedade de documentos e resulta na produção e na evolução de um software. 54 O processo de software pode ser visto de forma hierárquica e, segundo Peters e Pedrycz (2001), durante a fase de desenvolvimento pode-se elencar três principais etapas: • Requisitos: Decide-se o que o sistema deve fazer, suas atividades, riscos e planos de testes; • Projeto: Determina-se a estrutura do sistema e suas funções específicas; e • Implementação: Produz o código-fonte, documentação e testes. Alguns modelos de ciclo de vida de software apresentam maior nível de maturidade, pois fundamentam-se em conhecimento e experiência obtidos após uma infinidade de projetos desenvolvidos em grande escala por engenheiros de software. Um exemplo clássico é o modelo em cascata, que pode ser considerado um dos mais antigos modelos de ciclo de vida. Segundo Peters e Pedrycz (2001), em seu formato original ele descrevia uma seqüência de atividades do ciclo de vida de software, começando pela exploração de conceitos e concluindo com a manutenção e uma inevitável substituição. A Figura 27 apresenta detalhadamente as etapas do modelo cascata. Figura 27. Modelo de processo de software em cascata Fonte: Adaptado de Peters e Pedrycz (2001) 55 Observando atentamente a Figura 27 observa-se claramente oito etapas distintas. É importante enfatizar que a inserção da ferramenta RADPHP no processo de desenvolvimento revela-se somente após a etapa de projeto. A ferramenta propõe-se a atuar como facilitador, operando diretamente na etapa de implementação e provendo funcionalidades de geração automática de código-fonte para formulários de listagem, detalhe e cadastro em aplicações web. Vale destacar que não é descartado qualquer tipo de intervenção humana na etapa citada, uma vez que a ferramenta não objetiva substituir o desenvolvedor, mas, auxiliá-lo no processo de desenvolvimento, a fim de que o mesmo possa direcionar seus esforços para as regras de negócio da aplicação. Também pode-se considerar a aplicação indireta da ferramenta em mais duas etapas do processo de desenvolvimento de software: (i) teste, tendo em vista que o código-fonte é gerado automaticamente, o que reduz a margem erros de implementação; e (ii) manutenção, já que a ferramenta facilita futuras modificações na aplicação e segue um padrão para geração de código (fornecido pelo framework PHPLib-UNIVALI), que pode ser facilmente compreendido por desenvolvedores que utilizam o framework. Dessa forma, a atuação direta ou indireta da ferramenta RADPHP nestas três etapas do processo de desenvolvimento de software objetiva a redução de tempo e esforço repetitivo por parte dos desenvolvedores durante o desenvolvimento de software. Além do modelo cascata pode-se contextualizar a ferramenta em outros modelos de ciclo de vida de software, como por exemplo o modelo de prototipação, que segundo Peters e Pedrycz (2001), vem solucionar o problema da espera no modelo em casaca (não é necessário esperar até o final do ciclo de desenvolvimento para se obter uma versão operacional do software), pois sua abordagem tem como ponto principal produzir protótipos de software com funcionalidades e desempenho limitados. Semelhantemente ao modelo em cascata a ferramenta RADPHP atua diretamente na fase de construção do protótipo e indiretamente nas fases de teste e manutenção do mesmo. Sendo assim, pode-se dizer que independente do modelo de ciclo de vida de software a ferramenta RADPHP traz benefícios diretos para a fase de implementação e indiretos as fases de teste e manutenção, uma vez que estas fases possuem comportamento similar em ambos processos. Conforme dito anteriormente, o processo de desenvolvimento software produz uma variedade de documentos, grande parte deles na etapa de projeto, no entanto, a utilização da ferramenta RADPHP se restringe apenas pelo modelo de entidade-relacionamento (modelo ER), 56 usualmente representado graficamente através de um diagrama de entidade-relacionamento (DER) e que de acordo com Heuser (2000), é considerado padrão para modelagem conceitual de banco de dados. 3.6.2. Estudo de caso Estando bem definido o escopo da ferramenta perante o processo de desenvolvimento de software e seu funcionamento, torna-se adequado elaborar um estudo de caso com o intuito de validar os objetivos idealizados para o projeto. Dessa forma, desenvolveu-se uma aplicação utilizando a ferramenta RADPHP – com a finalidade de estabelecer um controle de patrimônios. O objetivo da aplicação é simples: realizar controle de patrimônios levando em consideração a que setor ele pertence, quem é seu responsável e em que estado (status) cada patrimônio se encontra. Para facilitar o entendimento são apresentados a seguir os requisitos funcionais, não funcionais e regras de negócio da aplicação. Foram identificados os seguintes requisitos funcionais para a aplicação proposta: • RF01: O sistema deverá apresentar uma lista de setores; • RF02: O sistema deverá apresentar uma lista dos patrimônios; • RF03: O sistema deverá apresentar uma lista dos responsáveis; • RF04: O sistema deverá apresentar uma lista dos estados disponíveis para cada patrimônio; • RF05: O sistema deverá permitir a inserção de novos setores; • RF06: O sistema deverá permitir a inserção de novos patrimônios; • RF07: O sistema deverá permitir a inserção de novos responsáveis; • RF08: O sistema deverá permitir a inserção de novos estados dos patrimônios; • RF09: O sistema deverá permitir a alteração dos dados dos setores, patrimônios, responsáveis e estados; e 57 • RF10: O sistema deverá permitir a exclusão de setores, patrimônios, responsáveis e estados. Para a aplicação proposta no estudo de caso foram identificadas as seguintes regras de negócio: • RN01: O sistema deve validar os campos de obrigatórios durante os cadastros de dados; • RN02: Cada patrimônio deve estar alocado a somente um setor; • RN03: Cada patrimônio deve ter um responsável; e • RN04: Cada patrimônio deve estar em um estado corrente (ex: quebrado, emprestado, etc.). Também foram identificados os seguintes requisitos não funcionais para a aplicação: • RNF01: O sistema deverá rodar sobre plataforma PHP 4.1.0 ou superior; e • RNF02: O sistema deverá ser compatível com banco de dados Oracle 8i ou superior. Como mencionado na Seção 3.6.1, é necessário a elaboração de um DER para a utilização da ferramenta RADPHP, já que um dos quesitos para criação de um projeto na ferramenta é possuir a definição do banco de dados da aplicação em linguagem SQL. Sendo assim, a Figura 28 apresenta o diagrama de entidade-relacionamento da aplicação proposta neste estudo de caso. Figura 28. Diagrama de entidade-relacionamento (DER) para o estudo de caso proposto 58 3.6.3. Demonstração Conforme mencionado na Seção 3.6.2, realizou-se o desenvolvimento de um estudo de caso com a finalidade de validar as funcionalidades da ferramenta. Dessa forma, é apresentado nesta seção o desenvolvimento do estudo de caso, com o intuito de demonstrar o funcionamento da ferramenta RADPHP. Pode-se dizer que a utilização a ferramenta RADPHP está diretamente vinculada à criação de um projeto, o qual armazena todas as configurações do banco de dados da aplicação, dos formulários e consultas geradas a partir da ferramenta. A Figura 29 apresenta a interface para criação de um novo projeto. Figura 29. Interface para criação de projetos na ferramenta RADPHP A criação de um novo projeto dá-se através do preenchimento do nome do projeto, do arquivo SQL que contêm as estrutura do banco de dados da aplicação e, eventualmente, do modelo do layout da mesma (arquivo htmlBase.inc do framework PHPLib-UNIVALI). Após fornecer as informações necessárias deve-se clicar no botão “Novo Projeto”, desta forma o sistema analisa 59 léxica, sintática e semanticamente o arquivo SQL fornecido e cria a estrutura do banco de dados da aplicação necessária para a configuração dos formulários disponíveis na ferramenta. Tendo em vista que um projeto já foi criado, inicia-se o desenvolvimento da aplicação, que consiste basicamente na configuração das informações de conexão com o banco de dados e configurações dos formulários. Pode-se observar na Figura 30 a interface de configuração dos elementos do banco de dados, que resumem-se nos dados do servidor, usuário e senha de acesso. É importante salientar que todas as informações a serem manipuladas são acessíveis através da barra de ferramentas, na parte esquerda do software. Figura 30. Interface para configuração das informações do banco de dados A configuração dos três tipos de formulários (listagem, detalhe e cadastro) ocorre de forma similar. Para tal, o usuário deve selecionar a tabela desejada, através da barra de ferramentas, e manipular as informações do formulário e dos atributos do mesmo. Com o intuito de exemplificar o funcionamento da ferramenta, a Figura 31 ilustra a configuração do formulário de listagem de responsáveis, desenvolvido durante o estudo de caso. 60 Analisando a Figura 31 observa-se todas as informações necessárias para a configuração de um formulário de listagem como as colunas que irão compor a listagem, bem como a forma de ordenação. O campo “paginação” identifica se a listagem será ou não paginada, atribuindo um valor padrão de 20 registros por página. Também observa-se as “Informações adicionais do campo”, onde além de estipular o rótulo pode-se atribuir um link a cada registro da listagem, bem como selecionar os parâmetro a serem passados para o formulário de detalhe. Figura 31. Configuração do formulário de listagem Pode-se também observar através da Figura 32 o exemplo da configuração do formulário de detalhe dos setores a aplicação proposta no estudo de caso, possuindo – de forma reduzida – as mesmas características de configuração do formulário de listagem. 61 Figura 32. Configuração do formulário de detalhe A configuração do formulário de cadastro pode ser observada através da Figura 33. Vale destacar que durante a configuração de um formulário os atributos podem ser identificados através dos símbolos PK (chave primária), FK (chave estrangeira) e 2K (chave primária e estrangeira). Os atributos identificados com os símbolos FK e 2K podem referenciar atributos de outras tabelas. No exemplo apresentado na Figura 33, o atributo “responsavel_id” da tabela “patrimônio” referencia o atributo “responsavel_nome” da tabela “responsavel”. Também é importante salientar as características peculiares contidas durante a configuração do formulário de cadastro, como a escolha do componente a ser utilizado para cada campo, através da opção “Formato do campo no formulário” e opção para preenchimento obrigatório do campo. 62 Figura 33. Configuração do formulário de cadastro A última etapa obrigatória para o funcionamento das aplicações geradas através da ferramenta RADPHP é a geração de código fonte, realizada através da interface apresentada na Figura 34. Para tal, deve-se selecionar os arquivos da aplicação que irão compor o sistema e clicar no botão “Gerar Código”. Dessa forma, o código fonte é gerado em uma estrutura de diretórios que incorpora o nome do projeto, e algumas sub-pastas contendo os arquivos do framework (caso a opção de geração do framework for selecionada), as imagens e o arquivo de estilos. 63 Figura 34. Interface para geração de código na ferramenta RADPHP A Figura 35 apresenta o código fonte do formulário de listagem de setores (gerado a partir do modelo “list_model.mo”, apresentado na Figura 26) criado pela ferramenta RADPHP (em conformidade com o framework PHPLib-UNIVALI) durante o estudo de caso. Figura 35. Código fonte de um formulário de listagem gerado pela ferramenta RADPHP 64 Como resultado do estudo de caso obteve-se a geração dos formulários de listagem, detalhe e cadastro para cada um das 4 tabelas da aplicação (patrimonio, responsavel, setor, status). Com o intuito de ilustrar os resultados, a Figura 38 expõe a aplicação de estudo de caso em execução, apresentando o formulário de listagem de patrimônios. Figura 36. Formulário de listagem de patrimônios A Figura 37 apresenta o formulário de detalhe de setores, gerado através da configuração apresentada na Figura 32. Figura 37. Formulário de detalhe de setores Concluindo, a Figura 38 apresenta o formulário de cadastro de patrimônios, gerado através da ferramenta durante o desenvolvimento do estudo de caso. Figura 38. Formulário de cadastro de patrimônios 65 Além das funcionalidades apresentadas, a ferramenta RADPHP possibilita a criação de consultas personalizadas e alteração na estrutura da base de dados da aplicação. A criação de uma consulta dá-se através do fornecimento de um script SQL e o ajuste de algumas opções de configuração, conforme apresenta a Figura 39. No exemplo exposto (Figura 39) destaca-se a criação de uma consulta – no âmbito do estudo de caso – com o intuito de apresentar todos os responsáveis por patrimônios com “status” disponível. É importante observar que o modelo de configuração assemelha-se, em grande parte, ao formulário de listagem possuindo atributos como paginação, botões e informações adicionais do campo. Figura 39. Interface para configuração de consultas personalizadas Conforme dito anteriormente, a ferramenta RADPHP também apresenta recursos de alteração da estrutura do banco de dados da aplicação, que consistem fundamentalmente na criação e alteração de tabelas (Figura 40 (a), onde pode-se manipular informações como nome e comentário da tabela) e atributos (Figura 40 (b), possibilitando a modificação dos dados do atributo, como nome, tipo e tamanho do campo, aceitação de valores nulos e caracterização do campo como chave primária ou estrangeira). 66 (a) (b) Figura 40. Interfaces para alteração da base de dados (a) Tabelas; (b) Atributos É de suma importância ressaltar que as informações modificadas na ferramenta RADPHP durante a execução de um projeto não são concretizadas no banco de dados físico da aplicação, uma vez que a ferramenta não possui vínculo direto com o banco de dados real. 3.6.4. Produtividade RAD Durante o desenvolvimento da aplicação apresentada no estudo de caso mensurou-se o tempo de desenvolvimento6 da mesma, com o intuito de avaliar a eficácia da produtividade RAD nas etapas do processo de desenvolvimento englobados pela ferramenta. Sendo assim, observou-se que a construção da aplicação de estudo de caso utilizando a ferramenta RADPHP foi de 13 minutos e 03 segundos (tendo seu início as 12:51:00 e término as 13:04:03) e seu tamanho físico de aproximadamente 2000 linhas de código, distribuídas em 13 diferentes arquivos, isentando os arquivos do framework PHPLib-UNIVALI. Além de medir o tempo de desenvolvimento, realizou-se cálculo utilizando a métrica de software de pontos por função que, segundo Peters e Pedrycz (2001), está relacionada com os documentos de especificação de requisitos, onde é determinada a funcionalidade de um sistema de software. Em essência, o modelo de pontos por função se baseia em características visíveis do sistema que são ponderadas de modo a produzir uma pontuação geral, com o objetivo de obter uma medida do tamanho do produto a ser desenvolvido. 6 Neste contexto, desenvolvimento refere-se a etapa de implementação, uma vez que a ferramenta RADPHP não possui vínculo direto com as etapas de análise e projeto de software. 67 Através do cálculo de pontos por função sobre o estudo de caso – apresentado detalhadamente no Apêndice D – chegou-se ao valor de 81 pontos por função ajustados e 103 pontos por função brutos. Tendo em vista que foram gastos aproximadamente 13 minutos para o desenvolvimento da aplicação, estima-se que a produtividade obtida com o uso da ferramenta RADPHP em relação aos pontos por função ajustados seja de 373 pontos por hora. Não remova esta quebra de seção] 68 4. CONCLUSÕES Tendo em vista a necessidade de desenvolver softwares de maneira rápida e eficiente, tornase cada vez mais viável a utilização de ferramentas RAD para acelerar este processo. Neste contexto, considera-se este trabalho uma possível solução para a necessidade apresentada, uma vez que a mesma abrange conceitos referentes a RAD e framework, o que amplia, consideravelmente, a velocidade e padronização no desenvolvimento de software. Dentre as oito diferentes etapas do processo de desenvolvimento de software, a ferramenta RADPHP atua em três delas. Existe atuação direta na etapa de implementação e indireta nas etapas de teste e manutenção, o que engloba uma parte considerável do processo de desenvolvimento, contribuindo para geração automática de código e redução de tempo de desenvolvimento de sistemas. Vale ressaltar que a ferramenta propõe-se a atuar apenas como facilitador, não descartando nenhum tipo de intervenção humana ao decorrer das etapas mencionadas. Um ponto a ser destacado é a utilização das diversas tecnologias e ferramentas no desenvolvimento do projeto. Para conclusão da etapa de implementação foi necessário estudar e empregar a linguagem de programação C++, documentos XML, XML Schema, linguagem SQL, linguagem de programação PHP, banco de dados Oracle e a ferramenta GALS. Dessa forma, evidencia-se a importância da etapa de Fundamentação Teórica (Capítulo 2), tendo em vista que durante este estágio foram absorvidos conceitos importantes e que nortearam o desenvolvimento da ferramenta RADPHP. Com a validação da ferramenta, através do estudo de caso, pôde-se observar sua real utilidade e avaliar de forma prática a redução do tempo de desenvolvimento da aplicação, uma vez que como resultado obteve-se um sistema que possui aproximadamente 2000 linhas de código desenvolvido em 13 minutos, tendo como média mais de 153 linhas de código por minuto. Considera-se assim, que os objetivos estabelecidos para a o projeto foram alcançados, visto que foi concebida uma ferramenta que possui características RAD e que engloba grande parte dos benefícios descritos na Seção 2.2.1. Como diferencial salienta-se a utilização do framework PHPLib-UNIVALI como alicerce dos sistemas gerados pela ferramenta, o que garante a padronização do código gerado, e conseqüentemente, um alto nível de manutenção, uma vez que o código fonte pode ser facilmente alterado através da ferramenta e por desenvolvedores que conheçam o framework PHPLib-UNIVALI. Por fim, espera-se, que este projeto possa ser efetivamente utilizado e que seu resultado contribua como referência para outros trabalhos científicos. 4.1. TRABALHOS FUTUROS Embora os resultados obtidos com o projeto possam ser considerados satisfatórios, é possível identificar possibilidades de melhorias para realização em trabalhos futuros. A seguir são apresentadas sugestões para continuação deste projeto: • Suporte a outros bancos de dados através de acesso direto a base (sem necessidade de análise de arquivo SQL como entrada); • Identificação de Visões (Views) durante o processo de análise do arquivo SQL para banco de dados Oracle; • Geração d e Script SQL contendo a estrutura do banco de dados atualizada a partir da ferramenta; • Possibilidade de realização de cadastros utilizando várias tabelas no mesmo formulário; • Possibilidade de inclusão dinâmica de componentes para cadastro; • Interface para auxiliar a criação de SQLs para consulta; • Possibilidade de identificar o código-fonte alterado manualmente pelo usuário e incorporá-lo na geração de código através da ferramenta; • Alteração de Interface e Menu da aplicação dentro da própria ferramenta; e • Conexão FTP para envio dos arquivos gerados ao servidor. SEÇÃO. Não remova esta quebra de seção] 70 REFERÊNCIAS BIBLIOGRÁFICAS AGARWAL, Ritu; PRASAD, Jayesh; TANNIRU, Mohan; LYNCH, John. Risks of Rapid Application Development. Communications of ACM, New York, v. 43, n.11, p.177-188, Nov. 2000. BENVENUTTI, Vanessa. Arquitetura de agentes para o processo de reuso de software. 2002. 115 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2002. BLUE POLAR. Business and internet applications. 2004. Disponível em: <http://www.bluepolar.com>. Acesso em: 02. abr. 2005. BOSCH, Jan; MOLIN, Peter; MATTSSON, Michael; BENGTSSON, Per O; FAYAD, M. Objectoriented frameworks - problems & experiences. In: FAYAD, Mohamed; SCHMIDT, Douglas; JOHNSON, Ralph. Building Application Frameworks. New York: John Wiley & Sons, 1999. p.55-82. BORLAND. Tópicos de ajuda: C++ builder help - XML Data Binding wizard, 2002. BRAGA, Regina M. M.; WERNER, Cláudia M.L. Odyssey-DE: um processo para desenvolvimento de componentes reutilizáveis. In: CONFERÊNCIA INTERNACIONAL DE TECNOLOGIA DE SOFTWARE, 10., Curitiba, 1999. Anais... [S.l.: s.n.], 1999. p.177-194. BROCHU, Earl. JAD isn't just for system projects any more. Computing Canada, Abr. 1993. Disponível em: <http://www.findarticles.com/p/articles/mi_m0CGC/ is_n9_v19/ai_13786383>. Acesso em: 13 fev. 2005. CAGNIN, Maria Istela. PENTEADO, Rosângela D. GERMANO, Fernão S. R. MASIERO, Paulo C. Reengenharia com uso de padrões de projeto. In: SIMPÓSIO BRASILEIRO DE ENGENHARIA DE SOFTWARE, 14., Florianópolis. 1999. Anais... [S.l.: s.n.], 1999. CARLSON, David. Modelagem de aplicações XML com UML: aplicações práticas de e-business. São Paulo: Pearson Education, 2002. CASEMAKER INC. What is Rapid Application Development?. Santa Clara, 2000. Disponível em: <www.casemaker.com/download/products/totem/rad_wp.pdf>. Acesso em: 12 mar. 2005. CASTILHOS, Cristiano de. Ferramenta CASE para geração de páginas ASP. 2004. 74 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação)–Centro de Ciências Exatas e Naturais, Universidade Regional de Blumenau, Blumenau, 2004. CREEGAN, Robert W. RAD may be the answer. Computing Canada, Jun, 1994. Disponível em: <http://www.findarticles.com/p/articles/mi_m0CGC/is_n13_v20/ai_15554759>. Acesso em: 08 fev. 2005. CRESPO, Rui Gustavo. Processadores de linguagens: da concepção à implementação. Lisboa: IST Press, 1998. DEBONI, José Eduardo Zindel. CASE e RAD: concorrência ou colaboração? Developers’ Magazine. Rio de Janeiro: AXCEL, ano 2, n. 19, p. 20-21, mar. 1998. FURLAN, José Davi. Modelagem de objetos através da UML: the Unified Modeling Language. São Paulo: Makron Books, 1998. GAMMA, Erich; HELM, Richard; JOHNSON, Ralph; VLISSIDES, John. Padrões de projeto: soluções reutilizáveis de software orientado a abjetos. Porto Alegre: Bookman, 2000. GESSER, Eduardo Carlos. GALS - Gerador de analisadores léxicos e sintáticos. 2002. 150 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação), Centro Tecnológico, Universidade Federal de Santa Catarina, Florianópolis, 2003. GUSTAFSON, David A. Teoria e problemas de engenharia de software. Porto Alegre: Bookman, 2003. HOWARD, Alan. Rapid Application Development: rough and dirty or value-for-money engineering? Communications of ACM, New York, v. 45, n. 10, p. 27-29, Oct. 2002. JACQUES, Trevor. From code-and-fix to 4GLs: why we need RAD. Computing Canada, Jan, 1992. Disponível em: <http://www.findarticles.com/p/articles/mi_m0CGC/is_n2_v18/ai_11760128 >. Acesso em: 08 fev. 2005. KARTHINK, S. CHUNG, C. W. RAMANI, K. Rapid Application Development – supplier models. In: COMPUTERS AND INFORMATION IN ENGINEERING (CIE) CONFERENCE, 23., 2003, Chicago. Proceedings… New York: ASME, 2003. KIRK, C. DTDs no XML. In: PITTS-MOULTIS, N.; KIRK, C. XML black book: solução e poder. São Paulo: Makron Books, 2000. p. 99-129. KOKUBO, Eduardo. Sistema para importação de informações do currículo Lattes. 2004. 104 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2004. MAIA, Maurício M. Tutorial XML-Schema: UNICAMP Dicas-L. Disponível em: < http://www.dicas-l.unicamp.br/dicas-l/20050326.php>. Acesso em: 16 abr. 2005. MALCOLM, Eva. Requirements acquisition for Rapid Applications Development. Information & Management, Northampton, v. 39, n. 2, p. 101-107, Dez. 2001. MERLYN, Vaughan. Is RAD “RAD”?. Software Magazine, Fev, 1991. Disponível em: < http://www.findarticles.com/p/articles/mi_m0SMG/is_n2_v11/ai_10349436>. Acesso em: 08 fev. 2005. MSDN. .NET Framework Developer Center. 2005. Disponível em: <http://msdn.microsoft.com/netframework/> Acesso em 02 ago. 2005. PARSONS, David; RASHID, Awais; SPECK, Andreas. T. A framework for object oriented frameworks design. In: TECHNOLOGY OF OBJECT-ORIENTED LANGUAGES AND SYSTEMS, 31st, Nanjing, 1999. Proceedings… Washington: IEEE Computer Society, 1999. p.141-151. 72 PETERS, J. F.; PEDRYCZ, W. Engenharia de software. Rio de Janeiro: Campus, 2001. RAUTER, André. BENATO, Karina. Visualização da informação para análise da estratégia competitiva das instituições na web. In: CONGRESSO BRASILEIRO DE COMPUTAÇÃO, 4., 2004, Itajaí. Anais... Itajaí: UNIVALI, 2004. 1 CD-ROM. SILVEIRA, Claudionor. Geração automática de cadastros e consultas para linguagem ASP baseado em banco de dados. 2003. 77 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação)–Centro de Ciências Exatas e Naturais, Universidade Regional de Blumenau, Blumenau, 2003. SOMMERVILLE, Ian. Engenharia de software. São Paulo: Addison Wesley, 2003. SORCEFORGE. SourceForge.Net: SourceForge.net: project info - PHPLibs UNIVALI. Disponível em: < http://sourceforge.net/projects/phplib-univali/>. Acesso em 21 fev. 2005. SOUZA, Robson Pinheiro de. Serviços para publicação e recuperação de componentes de software através da Internet em ambientes de reuso. In: SIMPÓSIO BRASILEIRO DE ENGENHARIA DE SOFTWARE. 14., João Pessoa. 2000. Anais... [S.l.: s.n.], 2000. TESCH JR, José Roberto. XML Schema. Florianópolis: Visual Books, 2002. VARGAS, Ariel. Ferramenta educacional estúdio de cinema. 2004. 139 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2004. W3C. World Wide Web Consortium. Sophia-Antipolis, 2005. Disponível em: <http://www.w3.org/>. Acesso em 12 abr. 2005.[FIM DE SEÇÃO. Não remova esta quebra de seção] 73 APÊNDICE A – DICIONÁRIO DE DADOS PHPLIB-UNIVALI Para melhor entendimento do estudo, as tabelas abaixo apresentam o dicionário de dados do framework PHPLib-UNIVALI. Tabela 5. Atributos da Classe dbBase Atributo conexao result stmt user pass sql Comentário String de conexão com o banco de dados. Resultados retornado com a execução de um sql. Identificador de uma conexão Nome do usuário do banco de dados. Senha do banco de dados. SQL que será executado pelo Banco de Dados. Tabela 6. Operações da Classe dbBase Operação dbBase () Conectar () Desconectar () Executar (var, var) Encerrar () Tupla () TuplaSimples (var, var) SQL (var, var, var) AtualizaLOB (var, var, var, var, var) ExecutarProc (var, var, var, var) Comentário Construtor da Classe. Método responsável pela conexão com o banco de dados. Método responsável por desconectar o usuário do banco de dados. param: q [ var - in ] param: modo [ var - in ] Executa a consulta no banco de dados. Encerra a consulta no banco de dados. Retorna uma linha de registro de cada vez de uma consulta no banco de dados. param: q [ var - in ] param: modo [ var - in ] Executa e retorna uma única linha de registro. param: q [ var - in ] param: autovar [ var - in ] param: modo [ var - in ] Tem a mesma função do método Executar, no entanto retorna true se a consulta foi realizada com sucesso, e false caso contrário. param: tabela [ var - in ] param: chave [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: type [ var - in ] Atualiza um campo LOB (BLOB ou CLOB) param: nome_proc [ var - in ] param: array_in [ var - in ] param: array_out [ var - in ] ExecutarDML (var, var, var, var, var) Commit () Rollback () param: modo [ var - in ] Executa um procedimento. param: tipo [ var - in ] param: tabela [ var - in ] param: arrayValores [ var - in ] param: arrayWhere [ var - in ] param: modo [ var - in ] Monta um script SQL automaticamente (INSERT, UPDATE, DELETE) Efetua o Commit Efetua o Rollback Tabela 7. Atributos da Classe formBase Atributo nome titulo acao nome_acao Comentário Nome do formulário Título do formulário Ação Javascript que o formulário irá executar ao clicar em um botão Rótulo do botão onde a ação javascript será executada. Tabela 8. Operações da Classe formBase Operação formbase (var) Processar () Comentário param: nome [ var - in ] Construtor da classe Processa todo conteúdo da página (monta o formulário) Tabela 9. Atributos da Classe formCadastro Atributo largura tipoacao campos erros mensagem fexcluir url_cancelar nome_url_cancelar url_sucesso nome_url_sucesso action form_enctype Comentário Largura da tabela do formulário de Cadastro. Tipo da ação que o formulário irá executar Novo, Editar, Excluir) Campos do Formulário de Cadastro. Array que contem os erros encontrados durante a execução do formulário. Mensagem que pode ser apresentada antes do formulário de cadastro. Indica se o botão excluir deve ser apresentado. Ação do botão cancelar no cadastro. Rotulo do botão cancelar no cadastro. Ação do botão Enviar no cadastro. Rotulo do botão Enviar no cadastro. Guarda o caminho para onde o furmulário deve seguir caso ele seja direcionado para outra página. Informa o tipo de dado que será enviado no formulário. 75 Tabela 10. Operações da Classe formCadastro Operação formCadastro (var) Comentário param: nome [ var - in ] Construtor da Classe. PreCadastrar () Realiza pré processamento com o intúito de encontrar erros. Inicializar () Inicializa os atrinutos da classe. Processar () Processa e monta o formulário Formular () Gera os campos (layout do formulário) Novo () Método que executa a ação novo (inserção) Editar () Método que executa a ação editar (alterar) Excluir () Método que executa a ação excluir (deletar) campoOculto (var, var) param: nome [ var - in ] param: valor [ var - in ] Armazena um valor oculto. campoRotulo (var, var, var) param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] Campo informativo (descrição) campoTexto (var, var, var, var, param: nome [ var - in ] var, var) param: campo [ var - in ] param: valor [ var - in ] param: tamanhovisivel [ var - in ] param: tamanhomaximo [ var - in ] param: obrigatorio [ var - in ] Campo para digitação de um pequeno texto (Edit) campoData (var, var, var, var) param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: obrigatorio [ var - in ] Campo para digitação de datas. campoMemo (var, var, var, param: nome [ var - in ] var, var, var) param: campo [ var - in ] param: valor [ var - in ] param: colunas [ var - in ] param: linhas [ var - in ] param: obrigatorio [ var - in ] Campo para digitação de textos maiores. campoLista (var, var, var, var) param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: default [ var - in ] Campo "Select", para seleção de um dado. campoArquivo (var, var, var, param: nome [ var - in ] var) param: campo [ var - in ] param: valor [ var - in ] param: tamanho [ var - in ] Campo para carregar arquivos. campoRadio (var, var, var, var) param: nome [ var - in ] 76 campoCep (var, var, var, var, var) campoSenha (var, var, var, var, var, var) campoCheckBox (var, var, var, var, var) RenderHTML () param: campo [ var - in ] param: valor [ var - in ] param: default [ var - in ] Campo de única escolha. param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: obrigatorio [ var - in ] param: hifen [ var - in ] Campo para tratamento de CEP param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: tamanhovisivel [ var - in ] param: tamanhomaximo [ var - in ] param: obrigatorio [ var - in ] Campo para senha. param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: default [ var - in ] param: cols [ var - in ] Campo Check Box. Múltipla escolha. Gera o HTML de saida da classe. Tabela 11. Atributos da Classe formDetalhe Atributo largura detalhe url_novo url_editar url_cancelar nome_url_novo nome_url_editar nome_url_cancelar Comentário Largura da tabela que será apresentado o detalhe. Linhas que serão apresentadas no formulário de detalhe Destino da página quando se clicar no botão de ação novo. Destino da página quando se clicar no botão de ação editar. Destino da página quando se clicar no botão de ação cancelar. Rotulo do botão novo. Rotulo do botão editar. Rotulo do botão cancelar. Tabela 12. Operações da Classe formDetalhe Operação formdetalhe (var) RenderHTML () Comentário param: nome [ var - in ] Construtor da Classe. Gera o HTML apresentado no form de detalhe. 77 Tabela 13. Atributos da Classe formLista Atributo largura linhas colunas cabecalho paginacao tabulacao url_novo nome_url_novo url_cancelar nome_url_cancelar Comentário Largura da tabela de listagem na página Array contendo as informações da listagem Array que contem o alinhamento de cada célula da listagem Cabeçalho dos campos na listagem Atributo que informa se existirá ou não paginação na listagem Array que contem os ítens da tabulação na listagem Ação do botão novo na listagem Rotulo do botão novo na listagem Ação do botão cancelar na listagem Rotulo do botão cancelar na listagem Tabela 14. Operações da Classe formLista Operação formlista (var) geraTabulacao (var, var, var) RenderHTML () Comentário param: nome [ var - in ] param: campo [ var - in ] param: tabela [ var - in ] param: todos [ var - in ] Gera o HTML apresentado no form de listagem. Tabela 15. Atributos da Classe formListacomfiltro Atributo largura linhas colunas cabecalho paginacao tabulacao url_novo nome_url_novo url_cancelar nome_url_cancelar campos informacoes Comentário Largura da tabela do formulário Lista com Filtro. Linhas da listagem (resultados) Alinhamento das células da listagem. Cabeçalho da listagem. Atributo que informa se existirá ou não paginação na listagem Array que contem os ítens da paginação. Ação do botão novo no cadastro. Nome do botão Novo no cadastro. Ação do botão Cancelar no cadastro. Nome do botão Cancelar no cadastro. Campos do Cadastro. Texto informativo. Tabela 16. Operações da Classe formListacomfiltro Operação formlistacomfiltro (var) campoOculto (var, var) Comentário param: nome [ var - in ] Construtor da Classe. param: nome [ var - in ] param: valor [ var - in ] Armazena um valor oculto. 78 campoRotulo (var, var, var) param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] Campo informativo (descrição). campoTexto (var, var, var, var, param: nome [ var - in ] var, var) param: campo [ var - in ] param: valor [ var - in ] param: tamanhovisivel [ var - in ] param: tamanhomaximo [ var - in ] param: obrigatorio [ var - in ] Campo para digitação de um pequeno texto (Edit) campoData (var, var, var, var) param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: obrigatorio [ var - in ] Campo para digitação de datas. campoMemo (var, var, var, param: nome [ var - in ] var, var, var) param: campo [ var - in ] param: valor [ var - in ] param: colunas [ var - in ] param: linhas [ var - in ] param: obrigatorio [ var - in ] Campo para digitação de textos maiores. campoLista (var, var, var, var) param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: default [ var - in ] Campo "Select", para seleção de um dado. campoArquivo (var, var, var, param: nome [ var - in ] var) param: campo [ var - in ] param: valor [ var - in ] param: tamanho [ var - in ] Campo para carregar arquivos. campoRadio (var, var, var, var) param: nome [ var - in ] param: campo [ var - in ] param: valor [ var - in ] param: default [ var - in ] Campo de única escolha. campoCep (var, var, var, var, param: nome [ var - in ] var) param: campo [ var - in ] param: valor [ var - in ] param: obrigatorio [ var - in ] param: hifen [ var - in ] Campo para tratamento de CEP campoCheckBox (var, var, var, param: nome [ var - in ] var, var) param: campo [ var - in ] param: valor [ var - in ] param: default [ var - in ] param: cols [ var - in ] 79 RenderHTML () Campo Check Box. Múltipla escolha. Gera o HTML de saída da classe, Tabela 17. Atributos da Classe htmlBase Atributo titulo secao expirar atualizar Comentário Título da página Identificador das páginas geradas pelo framework Indica se a página deve expirar. Indica de quanto em quanto tempo a página deve ser atualizada. Tabela 18. Operações da Classe htmlBase Operação htmlBase () Login () Processar () Cabecalho () Rodape () Corpo () CorpoLogin () Executar () Comentário Construtor da classe. Método responsável pelo controle de login. Processa o conteúdo dos formulários. Cabeçalho da página (referente ao layout) Rodapé da página (referente ao layout) Corpo da página (referente ao layout) Cabeçalho da tela de login página (referente ao layout) Executa a página, montando todas as informações e apresentando ao usuário. Tabela 19. Atributos da Classe htmlErro Atributo mensagem Comentário Mensagem de erro que será apresentada quando um erro for encontrado. Tabela 20. Operações da Classe htmlErro Operação htmlErro (var, var) Corpo () Comentário param: mensagem [ var - in ] param: titulo [ var - in ] Construtor da Classe Corpo da classe com o layout da mensagem de erro. [FIM DE SEÇÃO. Não remova esta quebra de seção] 80 APÊNDICE B – CENÁRIOS DOS CASOS DE USO UC 01 - Cria Projeto Caso de uso responsável por criar um novo projeto e obter suas características. Relações RF01: o sistema deve realizar a importação de um arquivo SQL a cada novo projeto • para montar a estrutura de tabelas do banco de dados interna referente à aplicação em questão. RF05: o sistema deve permitir ao usuário informar o caminho da classe htmlBase • (classe do framework PHPLib-UNIVALI) utilizado para a definição do layout da aplicação. Condições • Pós Condição: Um projeto foi criado. Cenários Criar Projeto {Principal}. 1. Usuário informa dados para criação do projeto (Figura 29); 2. Sistema verifica autenticidade dos dados; 3. Sistema Importa SQL; 4. Sistema cria projeto. Importa htmlBase {Alternativo}. No passo 1, caso o usuário tenha informado o caminho do arquivo htmlBase 1.1. Sistema importa arquivo htmlBase. Arquivo não encontrado {Exceção}. Se no passo 2 algum arquivo não for encontrado: 2.1. Sistema apresenta mensagem: <nome_do_arquivo>. Tente novamente!". 2.2. Aborta criação do projeto; 2.3 Retorna ao passo 1. "Não foi possível encontrar o arquivo Erro SQL {Exceção}. No passo 3, caso ocorra algum erro na importação do Script SQL: 3.1. Sistema apresenta a mensagem: "Arquivo SQL inválido, não foi possível criar o projeto!" 3.2. Aborta criação do projeto; 3.3 Retorna ao passo 1. UC 02 - Abre Projeto Caso de uso responsável por abrir arquivo com as configurações do projeto. Relações • RF10: o sistema deve implementar a função abrir projeto. Condições • Pré Condição: Algum projeto já deve ter sido criado e salvo em um arquivo de formato "RHP". • Pós Condição: Um projeto foi aberto. Cenários Abre Projeto {Principal}. 1. Usuário Informa arquivo que será aberto; 2. Sistema verifica autenticidade do arquivo; 3. Sistema cria estrutura de banco de dados interna da ferramenta através do arquivo de configuração; 4. Sistema obtem informações de configuração; 5. Sistema abre projeto. Erro ao abrir arquivo {Exceção}. Se no passo 2 ocorrer algum erro: 2.1. Sistema apresenta mensagem: "Arquivo corrompido, não foi possível abrir o projeto!". 2.2. Sistema aborta execução. 82 UC 03 - Configura informações de acesso ao Banco de Dados Caso de uso responsável por alterar as informações utilizadas pela aplicação para acesso ao banco de dados. Relações • RF06: o sistema deve permitir a configuração de informações de acesso do banco de dados da aplicação. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: As configurações de acesso ao banco de dados foram realizadas. Cenários Configura Informações {Principal}. 1. Usuário informa dados de acesso ao banco de dados (Figura 30); 2. Sistema confere dados; 3. Sistema configura informações; 4. Sistema apresenta mensagem "Configuração do banco de dados realizada com sucesso!". Limpar Campos {Alternativo}. Se durante o passo 1 usuário desejar limpar os campos (Figura 30): 1.1. Usuário informa ao sistema que deve limpar os campos; 1.2. Sistema limpa campos. Erro na senha {Exceção}. Se no passo 2 as senhas forem diferentes: 2.1. Sistema apresenta mensagem: "Os campos <senha> e <confirma senha> devem ser idênticos!"; 2.2. Sistema aborta execução. UC 04- Configura criação de listagens Caso de uso responsável por configurar a criação de listagens a partir da estrutura de banco de dados interna da aplicação. 83 Relações • RF02: o sistema deve permitir a definição de listagens baseado na estrutura de banco de dados da aplicação. • RN04: o sistema deve permitir a configuração dos nomes das páginas geradas, observando o padrão de sufixos: _lst para listagens; _det para detalhes; e _cad para cadastros. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: A configuração de uma listagem foi realizada. Cenários Configurar Listagem {Principal}. 1. Usuário seleciona tabela (Figura 31); 2. Usuário entra com as informações de configuração da listagem (Figura 31); 3. Usuário entra com as informações dos atributos da listagem (Figura 31); 4. Usuário confirma dados (Figura 31); 5. Sistema configura criação da listagem. Arquivo já existe {Exceção}. Se no passo 4 o arquivo já existir: 4.1. Sistema apresenta mensagem: "Arquivo <nome_do_arquivo>_lst.php já existe. Não foi possível completar esta operação!"; 4.2. Sistema aborta execução; 4.3. Retorna ao passo 2. Selecionar campo {Exceção}. Se no passo 4 o sistema verificar que nenhum campo foi selecionado: 4.1. Sistema apresenta mensagem: "Você deve selecionar pelo menos um campo para criar uma listagem!"; 4.2. Sistema aborta execução; 4.3. Retorna ao passo 2. 84 UC 05 - Configura criação de detalhes Caso de uso responsável por configurar a criação de detalhes a partir da estrutura de banco de dados interna da aplicação. Relações • RF03: o sistema deve permitir a definição de detalhes baseado na estrutura de banco de dados da aplicação. • RN04: o sistema deve permitir a configuração dos nomes das páginas geradas, observando o padrão de sufixos: _lst para listagens; _det para detalhes; e _cad para cadastros. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: A configuração de um detalhe foi realizada. Cenários Configurar Detalhe {Principal}. 1. Usuário seleciona tabela (Figura 32); 2. Usuário entra com as informações de configuração do detalhe (Figura 32); 3. Usuário entra com as informações dos atributos do detalhe (Figura 32); 4. Usuário confirma dados (Figura 32); 5. Sistema configura criação da detalhe. Arquivo já existe {Exceção}. Se no passo 4 o arquivo já existir: 4.1. Sistema apresenta mensagem: "Arquivo <nome_do_arquivo>_det.php já existe. Não foi possível completar esta operação!"; 4.2. Sistema aborta execução; 4.3. Retorna ao passo 2. Selecionar campo {Exceção}. Se no passo 4 o sistema verificar que nenhum campo foi selecionado: 4.1. Sistema apresenta mensagem: "Você deve selecionar pelo menos um campo para criar um detalhe!"; 85 4.2. Sistema aborta execução; 4.3. Retorna ao passo 2. UC 06 - Configura criação de cadastro Caso de uso responsável por configurar a criação de cadastros a partir da estrutura de banco de dados interna da aplicação. Relações • RF04: o sistema deve implementar as funções de inclusão, exclusão e alteração de dados baseando-se na estrutura de banco de dados interna da aplicação (cadastro). • RN01: o sistema deve validar os campos de entrada de dados obrigatórios. • RN02: o sistema deve possuir mecanismo para consistir campos do tipo 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 no formulário de cadastro. • RN04: o sistema deve permitir a configuração dos nomes das páginas geradas, observando o padrão de sufixos: _lst para listagens; _det para detalhes; e _cad para cadastros. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: A configuração de um cadastro foi realizada. Cenários Configurar Cadastro {Principal}. 1. Usuário seleciona tabela (Figura 33); 2. Usuário entra com as informações de configuração do cadastro (Figura 33); 3. Usuário entra com as informações dos atributos do cadastro (Figura 33); 4. Usuário confirma dados (Figura 33); 5. Sistema configura criação do detalhe. Arquivo já existe {Exceção}. 86 Se no passo 4 o arquivo já existir: 4.1. Sistema apresenta mensagem: "Arquivo <nome_do_arquivo>_cad.php já existe. Não foi possível completar esta operação!"; 4.2. Sistema aborta execução; 4.3. Retorna ao passo 2. Selecionar campo {Exceção}. Se no passo 4 o sistema verificar que nenhum campo foi selecionado: 4.1. Sistema apresenta mensagem: "Você deve selecionar pelo menos um campo para criar um cadastro!"; 4.2. Sistema aborta execução; 4.3. Retorna ao passo 2. UC 07 - Salva Projeto Caso de uso responsável por salvar arquivo com as configurações do projeto. Relações • RF11: o sistema deve implementar a função salvar projeto. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: Um projeto será salvo. Cenários Salvar Projeto {Principal}. 1. Usuário informa ao sistema que deseja salvar o projeto; 2. Sistema verifica se não é a primeira vez que se está salvando o projeto; 3. Sistema Salva projeto. Salvar pela primeira vez {Alternativo}. Se no passo 2 for a primeira vez que o projeto é salvo: 2.1. Sistema solicita nome do projeto; 2.2. Usuário informa nome do projeto; 87 2.3. Sistema verifica se arquivo com mesmo nome já existe. Se arquivo existe: 2.4. sistema apresenta mensagem: "<nome_do_arquivo> já existe. Deseja substituí-lo?"; 2.5. Usuário seleciona opção; Se escolha igual a <Não>: 2.6. Sistema aborta operação; Retorna ao passo 1; Se escolha igual a <Sim>: Retorna ao passo 3 Erro ao salvar {Exceção}. Se ocorrer algum erro desconhecido durante o processo: 1. Sistema apresenta a mensagem: "Não foi possível realizar esta operação!". UC 08 - Altera estrutura de tabelas Este caso de uso descreve os passos para alterar o nome e o comentário de uma tabela, bem como inserir uma nova tabela na estrutura de banco de dados interna da aplicação. Relações • RF07: o sistema deve permitir adicionar e alterar tabelas na estrutura do banco de dados interna da aplicação. • RN05: o sistema não efetua engenharia reversa a partir das alterações efetuadas na estrutura de banco de dados interna através da ferramenta. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: A estrutura de uma tabela será alterada. Cenários Altera estrutura de tabelas {Principal}. 1. Usuário Seleciona opção de criar ou alterar uma tabela; 2. Sistema verifica opção selecionada pelo usuário: 88 Se opção igual a "Nova Tabela": Executa fluxo "Nova Tabela"; senão: Executa fluxo "Editar Tabela"; 3. Sistema verifica autenticidade dos dados; 4. Sistema efetua alterações na estrutura de tabelas. Nova Tabela {Alternativo}. 1. Usuário Insere os dados referentes a tabela (Figura 40- a); Retorna ao passo 3 do fluxo principal. Editar Tabela {Alternativo}. 1. Sistema Insere os dados referentes a tabela; 2. Usuário altera os dados referentes a tabela (Figura 40 - a); Retorna ao passo 3 do fluxo principal. Tabela já existe {Exceção}. Se no passo 3 tabela com mesmo nome já existe. 3.1. Sistema apresenta mensagem: "Tabela <nome_da_tabela> já existe. Tente novamente!"; 3.2. Sistema aborta operação. Erro ao alterar tabela {Exceção}. Se no passo 3 ocorrer algum erro com o nome da tabela: 3.1. Sistema apresenta mensagem: "Nomes de tabelas não podem possuir acentos ou caracteres especiais. Tente novamente!"; 3.2. sistema aborta execução. UC 09 - Altera estrutura de atributos Este caso de uso descreve os passos para editar um atributo existente , bem como inserir um atributo em uma tabela da estrutura de banco de dados interna da aplicação. Relações • RF08: o sistema deve permitir adicionar e alterar atributos nas tabelas da estrutura do banco de dados interna da aplicação. 89 • RN05: o sistema não efetua engenharia reversa a partir das alterações efetuadas na estrutura de banco de dados interna através da ferramenta. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: A estrutura de atributos de uma tabela será alterada. Cenários Alterar estrutura de atributos {Principal}. 1. Sistema lista os atributos existentes; 2. Usuário altera o atributo desejado (Figura 40 - b); 3. Sistema insere dados referentes ao atributo; 4. Sistema confere dados; 5. Sistema altera estrutura de atributos do banco de dados interno da aplicação. Adicionar Atributo {Alternativo}. No passo 2 2.1. Usuário seleciona a opção adicionar; 2.2. Usuário insere dados referentes ao atributo (Figura 40 - b); Retorna ao passo 4. Campo já existe {Exceção}. Se no passo 4 campo com mesmo nome já existe na mesma tabela. 4.1. Sistema apresenta mensagem: "Campo <nome_do_campo> já existe nesta tabela. Tente novamente!"; 4.2. Sistema aborta operação. Erro ao alterar atributo {Exceção}. Se no passo 4 do fluxo principal for encontrado algum com o nome do campo: 4.1. Sistema apresenta mensagem: "Nomes de campos não podem possuir acentos ou caracteres especiais. Tente novamente!"; 4.2. sistema aborta execução. 90 UC 10 - Define Consultas SQL Este caso de uso descreve os passos para alterar ou inserir uma nova consulta SQL. Relações • RF09: o sistema deve permitir a definição de consultas simples em formato SQL. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: Uma consulta é definida. Cenários Define Consultas {Principal}. 1. Usuário seleciona opção de criar ou alterar uma consulta; 2. Sistema verifica opção selecionada pelo usuário: Se opção igual a "Nova Consulta": Executa fluxo "Nova Consulta"; senão: Executa fluxo "Editar Consulta"; 3. Sistema define consulta SQL para uso em listagens. Nova Consulta {Alternativo}. 1. Usuário insere os dados referentes a consulta (Figura 39); Retorna ao passo 3 do fluxo principal. Editar Consulta {Alternativo}. 1. Sistema insere os dados referentes a consulta; 2. Usuário altera os dados referentes a consulta (Figura 39); Retorna ao passo 3 do fluxo principal. Configura criação de Listagem para consulta {Alternativo}. 1. Usuário seleciona consulta; 2. Usuário entra com as informações de configuração da listagem para a consulta selecionada (Figura 39); 3. Usuário entra com as informações dos atributos da listagem; 91 4. Usuário confirma dados (Figura 39); 5. Sistema configura criação da listagem para consulta selecionada. Arquivo já existe {Exceção}. Se no passo 4 do cenário "Configura criação de Listagem para consulta" o arquivo já existir: 4.1. Sistema apresenta mensagem: "Arquivo <nome_do_arquivo> já existe. Não foi possivel completar esta operação!"; 4.2. Sistema aborta execução; Retorna ao passo 2. Selecionar Campo {Exceção}. Se no passo 4 do cenário "Configura criação de Listagem para consulta" o sistema verificar que nenhum campo foi selecionado: 4.1. Sistema apresenta mensagem: "Você deve selecionar pelo menos um campo para criar uma listagem a partir de uma consulta!"; 4.2. Sistema aborta execução; Retorna ao passo 2. UC 11 - Gera Código Este caso de uso descreve os passos para geração do código fonte da aplicação configurada pelo usuário. Relações • RF12: o sistema deve gerar código da aplicação de acordo com as configurações do usuário. Condições • Pré Condição: Ter um projeto aberto ou criado. • Pós Condição: O código fonte PHP baseado no framework PHPLib-UNIVALI foi gerado. Cenários Gera código {Principal}. 92 1. Sistema apresenta lista de arquivos que podem ser gerados; 2. Usuário seleciona o caminho para gerar os arquivos (Figura 34); 3. Usuário seleciona os arquivos a serem gerados (Figura 34); 4. Sistema gera o código da aplicação (substituindo os arquivos já gerados, caso eles existam). Nenhum arquivo selecionado {Exceção}. Se no passo 3 nenhum arquivo foi selecionado: 3.1. Sistema apresenta mensagem: "Você deve selecionar pelo menos um arquivo para gerar o código da aplicação!"; Retorna ao passo 3. [FIM DE SEÇÃO. Não remova esta quebra de seção] 93 APÊNDICE C – XML SCHEMA DA FERRAMENTA RADPHP <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by rth77 (rth77) --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:complexType name="infoProject"> <xs:sequence> <xs:element name="projectName" type="xs:string"/> <xs:element name="layout" type="xs:string" minOccurs="0"/> <xs:element name="userName" type="xs:string" minOccurs="0"/> <xs:element name="password" type="xs:string" minOccurs="0"/> <xs:element name="ipServer" type="xs:string" minOccurs="0"/> <xs:element name="serviceName" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="infoList"> <xs:sequence> <xs:element name="title" type="xs:string" minOccurs="0"/> <xs:element name="buttons" type="valueButtons" minOccurs="0" maxOccurs="3"/> <xs:element name="paging" type="xs:boolean"/> <xs:element name="attributesList" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="attributeID" type="xs:int" minOccurs="0"/> <xs:element name="caption" type="xs:string" minOccurs="0"/> <xs:element name="link" type="xs:string" minOccurs="0"/> <xs:element name="parameterAttribute" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="referenceTableList" type="referenceTable" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="orderAttribute" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="infoDetail"> <xs:sequence> <xs:element name="title" type="xs:string" minOccurs="0"/> <xs:element name="buttons" type="valueButtons" minOccurs="0" maxOccurs="3"/> <xs:element name="attributesDetail" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="attributeID" type="xs:int" minOccurs="0"/> <xs:element name="caption" type="xs:string" minOccurs="0"/> <xs:element name="referenceTableDetail" type="referenceTable" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="infoRegister"> <xs:sequence> <xs:element name="title" type="xs:string" minOccurs="0"/> <xs:element name="buttons" type="valueButtons" minOccurs="0" maxOccurs="3"/> <xs:element name="attributesRegister" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="attributeID" type="xs:int" minOccurs="0"/> <xs:element name="caption" type="xs:string" minOccurs="0"/> <xs:element name="visibleSize" type="xs:int" minOccurs="0"/> <xs:element name="obligatory" type="xs:boolean" default="false"/> <xs:element name="type" type="xs:string"> <xs:annotation> <xs:documentation>Tipo do Campo do Cadastro</xs:documentation> </xs:annotation> </xs:element> <xs:element name="referenceTableRegister" type="referenceTable" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:simpleType name="valueButtons"> <xs:restriction base="xs:int"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> <xs:enumeration value="2"/> <xs:enumeration value="3"/> </xs:restriction> </xs:simpleType> <xs:complexType name="referenceTable"> <xs:sequence> <xs:element name="attributeID" type="xs:int"/> <xs:element name="tableID" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:element name="radPHP"> <xs:annotation> <xs:documentation>RADPHP root element</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="project" type="infoProject"/> <xs:sequence maxOccurs="unbounded"> <xs:element name="tables"> <xs:complexType> <xs:sequence> <xs:element name="table" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="tableName" type="xs:string"/> <xs:element name="tableComment" type="xs:string" minOccurs="0"/> <xs:element name="fileName" type="xs:string" minOccurs="0"/> <xs:element name="attribute" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="attributeID" type="xs:int"/> <xs:element name="attributeName" type="xs:string"/> <xs:element name="attributeType" type="xs:string"/> <xs:element name="attributeSize" type="xs:float" minOccurs="0"/> <xs:element name="attributeisNull" type="xs:boolean"/> <xs:element name="primaryKey" type="xs:boolean"/> <xs:element name="foreignKey" type="referenceTable" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="list" type="infoList" minOccurs="0"/> <xs:element name="detail" type="infoDetail" minOccurs="0"/> <xs:element name="register" type="infoRegister" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="queries" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="query" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="queryName" type="xs:string"/> <xs:element name="querySQL" type="xs:string"/> <xs:element name="pageTitle" type="xs:string" minOccurs="0"/> <xs:element name="fileName" type="xs:string"/> <xs:element name="paging" type="xs:boolean"/> 95 <xs:element name="buttons" type="valueButtons" minOccurs="0" maxOccurs="3"/> <xs:element name="atrtibutesList" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="caption" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> Figura 41. XML Schema da ferramenta RADPHP [FIM DE SEÇÃO. Não remova esta quebra de seção] 96 APÊNDICE D – PONTOS DE FUNÇÃO DO SISTEMA DE PATRIMÔNIO Função do Tipo Dado Arquivo Interface Externa (AIE) Não consta na aplicação Arquivo Lógico Interno (ALI) Arquivo Número de referenciado registros lógicos setor 1 status 1 responsavel 1 patrimonio 1 Qtd. Dados referenciados 3 2 4 6 Grau da Função Simples Simples Simples Simples Total PF 7 7 7 7 28 Função do Tipo Transação Entrada Externa Arquivo referenciado Incluir setor Alterar setor Excluir setor Incluir status Alterar status Excluir status Incluir responsável Alterar responsável Excluir responsável Incluir patrimônio Alterar patrimônio Excluir patrimônio Número de registros lógicos 1 1 1 1 1 1 1 1 1 4 4 4 Qtd. Dados referenciados 2 2 2 1 1 1 3 3 3 5 5 5 Grau da Função Simples Simples Simples Simples Simples Simples Simples Simples Simples Complexa Complexa Complexa Total PF 3 3 3 3 3 3 3 3 3 6 6 6 45 Saída Externa Não consta função com dados derivados. Consulta Externa Arquivo referenciado Listagem setor Listagem de status Listagem de responsável Listagem de patrimônio Detalhe setor Detalhe status Detalhe responsável Detalhe patrimônio Consulta Resp. por Patrimônio Número de registros lógicos 1 1 1 2 1 1 1 4 2 Qtd. Dados referenciados 1 1 2 2 3 2 4 6 2 Grau da Função Simples Simples Simples Simples Simples Simples Simples Complexa Simples Total PF 3 3 3 3 3 3 3 6 3 30 Pontos por Função Bruto: 103 Fatores de Ajuste Fatores Pontos 4 0 0 0 0 5 3 1 0 1 0 0 0 0 1. Comunicação de Dados 2. Processamento de Dados Distribuídos 3. Execução 4. Configuração Altamente Usada 5. Índice de Transação 6. Entrada de Dados On-line 7. Eficiência do Usuário Final 8. Atualização On-line 9. Processamento Complexo 10. Reutilização 11. Fácil Instalação 12. Fácil Operação 13. Sites Múltiplos 14. Alterações Facilitadas Total Nível de Influência Fator de ajuste = (14 * 0,01) +0,65 Fator de ajuste = 0,79 PF ajustados = 103 * 0,79 PF ajustados = 81 pf Sendo PA = PF ajustados e h = hora. PA = pf/h PA = 81/(13/60) PA = 373 pf/h Sendo PB = PF brutos e h = hora. PB = pf/h PB = 103/(13/60) PB = 475 pf/h [FIM DE SEÇÃO. Não remova esta quebra de seção] 98 14 ANEXO I – ARTIGO