Monografia_FelipeAugusto

74
FACULDADE CATÓLICA DO TOCANTINS BACHARELADO EM SISTEMAS DE INFORMAÇÃO FELIPE AUGUSTO FEITOSA DESENVOLVIMENTO DE SOFTWARE COM O FRAMEWORK GRAILS: Sistema de Gerenciamento do Processo de Criação de Produtos Publicitários PALMAS 2012

Transcript of Monografia_FelipeAugusto

Page 1: Monografia_FelipeAugusto

FACULDADE CATÓLICA DO TOCANTINS

BACHARELADO EM SISTEMAS DE INFORMAÇÃO

FELIPE AUGUSTO FEITOSA

DESENVOLVIMENTO DE SOFTWARE COM O FRAMEWORK

GRAILS: Sistema de Gerenciamento do Processo de Criação de

Produtos Publicitários

PALMAS

2012

Page 2: Monografia_FelipeAugusto

FELIPE AUGUSTO FEITOSA

DESENVOLVIMENTO DE SOFTWARE COM O FRAMEWORK

GRAILS: Sistema de Gerenciamento do Processo de Criação de

Produtos Publicitários

Trabalho apresentado como requisito parcial de

avaliação da disciplina de Trabalho de Conclusão

de Curso do curso de Sistemas de Informação da

Faculdade Católica do Tocantins – FACTO.

Orientadora: Professora Especialista Thatiane de

Oliveira Rosa

PALMAS

2012

Page 3: Monografia_FelipeAugusto

ABSTRACT

In recent years, the job market has been demanding greater flexibility and

efficiency in the process of developing information systems, in consequence, the

frameworks has emerged that aim to offer the developer tools and standards that

help to meet the needs and requirements imposed by the market. One can’t deny

that in the current scenario, the Java platform is very important to offer a wide array

of tools, so compared to other technology systems development. Moreover, Java

presents a series of problems such as complexity in developing systems for the web.

Thus, it becomes difficult to meet the requirements imposed by the labor market,

without sacrificing productivity provided by Java. Therefore, in order to solve the

problem of complexity in Java development for web frameworks and languages were

created alternatives that leverage the full potential of the platform, Java, however

with higher productivity. From this it appeared that Grails is a framework that is

intended to allow systems to be developed in an agile and simple, based on the

Groovy programming language, which runs on the JVM. Thus, this work has as main

goal to present a study on the Grails framework, and demonstrate the process of

developing a system to streamline and automate the process of managing the

creation of products for an advertising agency.

Keywords: Framework, Grails, Agile Development.

Page 4: Monografia_FelipeAugusto

RESUMO

Nos últimos anos, o mercado de trabalho vem exigindo maior agilidade e

eficiência no processo de desenvolvimento de sistemas de informação, em

decorrência disto, surgiram os frameworks, que têm como objetivo oferecer ao

desenvolvedor ferramentas e padrões, que o auxiliem a atender às necessidades e

exigências impostas pelo mercado. Não se pode negar, que no cenário atual, a

plataforma Java é muito importante, por oferecer uma vasta quantidade de

ferramentas, isso se comparada a outras tecnologias de desenvolvimento de

sistemas. Por outro lado, Java apresenta uma série de problemas, como por

exemplo, a complexidade no desenvolvimento de sistemas para a web. Desta forma,

torna-se difícil atender às necessidades impostas pelo mercado de trabalho, sem

abrir mão da produtividade proporcionada por Java. Por tanto, com o objetivo de

solucionar o problema de complexidade do desenvolvimento em Java para web,

foram criados frameworks e linguagens alternativas, que aproveitam todo o potencial

da plataforma, Java, entretanto com maior produtividade. A partir disto, surgiu o

Grails que é um framework, que tem o intuito permitir que sistemas sejam

desenvolvidos de forma ágil e simples, baseando-se na linguagem de programação

Groovy, a qual roda sobre a JVM. Desta forma, este trabalho possui como objetivo

principal apresentar um estudo sobre o framework Grails, assim como demonstrar o

processo de desenvolvimento de um sistema para otimizar e automatizar o

gerenciamento do processo de criação de produtos de uma agência de publicidade.

Palavras-chave: Framework, Grails, Desenvolvimento ágil.

Page 5: Monografia_FelipeAugusto

LISTA DE ILSUTRAÇÕES

Figura 1 - Ciclo de vida do modelo espiral (Modificado de SOMMERVILLE, 2010, p. 33) 13 Figura 2 - Estrutura de diretórios do Grails. .............................................................. 22 Figura 3 - Criação do projeto em Grails. ................................................................... 25 Figura 4 - Executando a aplicação. .......................................................................... 25 Figura 5 - Aplicação em execução. .......................................................................... 26 Figura 6 - Criação da classe de domínio. ................................................................. 27 Figura 7 - Criação do controlador ............................................................................. 27 Figura 8 - Apresentação do controler ....................................................................... 28 Figura 9 - Casse de domínio: CadastraContato ....................................................... 29 Figura 10 - Controlador: CadastraContato .............................................................. 29 Figura 11 - Tela de cadastro ................................................................................... 30 Figura 12 - Configuração do driver de conexão do banco de dados. ...................... 30 Figura 13 - Ambientes do banco de dadados. ......................................................... 31 Figura 14 - GSP’s do controle CadastraContato ..................................................... 32 Figura 15 - Código dos campos nome .................................................................... 33 Figura 16 - Instalando plug-in .................................................................................. 33 Figura 17 - Diagrama de caso de uso geral ............................................................ 38 Figura 18 - Módulo a ser desenvolvido ................................................................... 40 Figura 19 - Diagrama de classe do módulo desenvolvido ....................................... 41 Figura 20 - Classe de domínio do Produto .............................................................. 42 Figura 21 - Classe de domínio do Atributo .............................................................. 42 Figura 22 - Classe de domínio do Valor do Atributo ................................................ 42 Figura 23 - Classe de domínio Processo ................................................................ 43 Figura 24 - Classe de domínio Movimentação ........................................................ 43 Figura 25 - Classe de serviço de transações – método saveProduto() ................... 44 Figura 26 - Controlador produto – Action save ........................................................ 44 Figura 27 - Tela de login ......................................................................................... 45 Figura 28 - View login.gsp ....................................................................................... 46 Figura 29 - Controlador Login – Action authenticate ............................................... 47 Figura 30 - Tela Gerenciar Produto ......................................................................... 47 Figura 31 - View create da pátina Gerenciar Produto ............................................. 48 Figura 32 - Tela Visualizar Produto ......................................................................... 49 Figura 33 - Tela de ilustração do caso de uso Gerenciar Produto .......................... 57 Figura 34 - Tela de ilustração do caso de uso Visualizar Produto .......................... 59 Figura 35 - Tela de ilustração do caso de uso Listar Processo ............................... 61 Figura 36 - Tela de ilustração do caso de uso Inserir Processo .............................. 63 Figura 37 - Tela de ilustração do caso de uso Visualizar Processo ........................ 65 Figura 38 - Tela de ilustração do caso de uso Excluir Processo ............................. 67 Figura 39 - Tela de ilustração do caso de uso Inserir Movimentação ..................... 69 Figura 40 - Tela de ilustração do caso de uso Visualizar Movimentação ................ 71 Figura 41 - Diagrama de Sequência do requisito Visualizar Produto ...................... 73 Figura 42 - Diagrama de Sequência do requisito Inserir movimentação ................. 74

Page 6: Monografia_FelipeAugusto

LISTA DE ABREVIATURAS E SIGLAS

COC - Convention Over Configuration

CRUD - Create - Read - Update - Delete

DI - Dependency Injection

DRY - Don't Repeat Yourself

GGTS - Groovy/Grails Tool Suite

GORM - Grails Object Relational Mapping

Grant - Groovy Ant

GSP - Groovy Server Pages

HTML - HyperText Markup Language

IDE - Integrated Development Enveronment

IoC - Invertion of Control

JDBC - Java Database Connectivity

JDK - Java Development Kit

JSP - Java Server Pages

JVM – Java Virtual Machine

MVC - Model View Controller

ORM - Objetc Relational Mapping

RoR - Ruby on Rails

SQL - Structured Query Language

UML - Unified Modeling Language

XML - Extensible Markup Language

Page 7: Monografia_FelipeAugusto

SUMÁRIO

1. INTRODUÇÃO ..................................................................................................... 9 1.1. Contexto ........................................................................................................ 9 1.2. Objetivos ..................................................................................................... 10

1.2.1. Objetivo Geral ....................................................................................... 10 1.2.2. Objetivos Específicos ............................................................................ 10

1.3. Justificativas ................................................................................................ 11 2. REFERENCIAL TEÓRICO ................................................................................. 12

2.1. Processo de Desenvolvimento Ágil ............................................................. 12 2.2. Frameworks de Desenvolvimento Ágil ........................................................ 14 2.3. Framework Grails ........................................................................................ 15

2.3.1. Definição ............................................................................................... 16 2.3.1.1. Origem do Framework .................................................................... 16 2.3.1.2. Groovy ............................................................................................ 17

2.3.2. Principais Tecnologias Relacionadas ................................................... 18 2.3.2.1. Spring ............................................................................................. 18 2.3.2.2. Hibernate ........................................................................................ 18 2.3.2.3. SiteMesh ........................................................................................ 19 2.3.2.4. Outras tecnologias.......................................................................... 19

2.3.3. Funcionamento ..................................................................................... 20 2.3.3.1. Grails .............................................................................................. 20 2.3.3.2. Estrutura de Diretórios .................................................................... 21 2.3.3.3. Persistência de Dados .................................................................... 23 2.3.3.4. Scaffold .......................................................................................... 23 2.3.3.5. Camada de Visualização ................................................................ 24

2.4. Estudo de Caso – Aplicação Agenda Desenvolvida em Grails ................... 24 2.4.1.1. Preparação do Ambiente ................................................................ 25 2.4.1.2. Classes de Domínio e Controladores ............................................. 26 2.4.1.3. Conexão com o Banco de Dados ................................................... 30 2.4.1.4. Camada de Visualização da Aplicação .......................................... 32 2.4.1.5. Pluglins ........................................................................................... 33

3. Metodologia ....................................................................................................... 35 4. DESENVOLVIMENTO ....................................................................................... 37

4.1. Memora Inteligência Gráfica ........................................................................ 37 4.2. Visão Geral do Sistema ............................................................................... 37 4.3. Módulo de Gerenciamento do Processo de Criação de Produtos ............... 39 4.4. Utilização do Grails para Desenvolvimento do Módulo de Gerenciamento do Processo de Criação de Produtos ......................................................................... 40

4.4.1. Classes de Domínio e Controladores ................................................... 40 4.4.2. Views .................................................................................................... 45

5. CONSIDERAÇÕES FINAIS ............................................................................... 50 6. REFERÊNCIAS .................................................................................................. 52 7. ANEXO A ........................................................................................................... 55

7.1. Requisitos funcionais ................................................................................... 55 7.1.1. Requisitos Funcionais ........................................................................... 55 7.1.2. Requisitos Não-Funcionais ................................................................... 56

Page 8: Monografia_FelipeAugusto

7.2. Caso de uso expandido e Wireframe do Módulo de Gerenciamento do Processo de Criação de Produtos ......................................................................... 56

7.2.1. Gerenciar Produto ................................................................................. 56 7.2.2. Visualizar Produto ................................................................................. 58 7.2.3. Listar Processo ..................................................................................... 60 7.2.4. Inserir Processo .................................................................................... 62 7.2.5. Visualizar Processo .............................................................................. 64 7.2.6. Excluir Processo ................................................................................... 66 7.2.7. Inserir Movimentação ............................................................................ 68 7.2.8. Visualizar Movimentação ...................................................................... 70

7.3. Diagrama de Sequências e Contratos ......................................................... 72 7.3.1. Visualizar Produto ................................................................................. 72 7.3.2. Inserir Movimentação ............................................................................ 73

Page 9: Monografia_FelipeAugusto

9

1. INTRODUÇÃO

1.1. Contexto

O mercado de trabalho vem exigindo, cada vez mais, que os sistemas de

informação sejam desenvolvidos com maior qualidade, agilidade e eficiência. Neste

sentindo, visando atender a esta necessidade latente, foram criados os frameworks,

que consistem em tecnologias, que objetivam oferecer ao desenvolvedor

ferramentas e padrões, que o auxiliem a atender às exigências impostas pelo

mercado. Ainda é importante ressaltar, que no contexto de desenvolvimento de

sistemas de informação, a plataforma Java possui grande destaque, pelo fato de ser

uma tecnologia robusta e que oferece recursos poderosos. Por outro lado, apresenta

alguns problemas, se considerado contexto web, sendo complexa para

determinados procedimentos.

Os frameworks permitem que os engenheiros de software preocupem-se

pouco com a escrita de código e os reaproveite bastante, assim como obtenham

rápidos resultados. Desta forma, visando sanar os problemas do desenvolvimento

web baseado em Java, surgiram diversos frameworks, dentre eles destaca-se o

projeto Grails, que foi iniciado em 2005, baseado em outro framework denominado

Ruby on Rails, além disso, oferece várias tecnologias necessárias para o

desenvolvimento de sistemas web como o Hibernate, Tomcat, SiteMesh, Spring e

outras, o tornando um framework Ful Stack.

Portanto, é possível afirmar que o framework Grails tem o objetivo de tornar o

desenvolvimento web, baseado em Java, mais amigável, rápido e eficiente,

utilizando para isto a linguagem Groovy, que foi desenvolvida com o intuito de ser

uma linguagem open source, que roda sobre a JVM (Java Virtual Machine) e permite

desfrutar de todo o poder proporcionado pelas bibliotecas e scripts, desenvolvidos

em Java.

Rocher (2006) considera Grails a próxima geração de framework de

aplicações web para Java, que utilizando a linguagem Groovy, prove simplicidade e

a convenção. A partir disto, o trabalho em questão propõe o estudo do framework

Grails como uma alternativa para desenvolvimento de sistemas de forma ágil, a fim

Page 10: Monografia_FelipeAugusto

10

de compreender a sua forma de trabalho e organização, assim como sua as

vantagens e desvantagens, quando comparado a outros frameworks disponíveis no

mercado. Para tanto, com a finalidade de constatar a agilidade e dinamicidade

promovidas pelo framework em questão, propõe-se ainda desenvolver um sistema

para a agência de publicidade Memora Inteligência Gráfica.

A agência de publicidade Memora Inteligência Gráfica, vem crescendo muito

desde 2005 e aumentando suas demandas de atividades, o que por sua vez, exige

maior controle e criteriosidade na produção de seus produtos. Neste contexto, o

sistema a ser desenvolvido, visa automatizar e permitir melhor gerenciamento de

diversas tarefas e práticas, que atualmente são realizadas de forma manual, via e-

mail e telefone, assim como presencialmente. Dentre as tarefas que serão

consideradas durante a análise para serem automatizadas, com a finalidade de

proporcionar maior agilidade e confiabilidade, destacam-se: coleta de informações

relativas ao produto a ser desenvolvido; e acompanhamento das alterações do

mesmo.

1.2. Objetivos

1.2.1. Objetivo Geral

Este trabalho possui como objetivo principal apresentar um estudo sobre o

framework Grails, assim como apresentar o processo de desenvolvimento de um

sistema para otimizar e automatizar o gerenciamento do processo de criação de

produtos de uma empresa de publicidade.

1.2.2. Objetivos Específicos

Page 11: Monografia_FelipeAugusto

11

• Realizar um estudo teórico do framework Grails, e a partir disto um

comparativo com os principais frameworks de desenvolvimento ágil, disponíveis no

mercado;

• Apresentar um estudo prático do framework Grails, demonstrando seu

funcionamento básico, por meio de um estudo de caso;

• Desenvolver o módulo de um sistema web, baseado em Grails, que atenda às

reais necessidades de gerenciamento do processo de criação de produtos, da

empresa de publicidade Memora Inteligência Gráfica;

• Testar a eficiência do framework Grails, aplicado ao contexto da empresa de

publicidade;

1.3. Justificativas

Com o avanço da internet o mercado tecnológico trouxe uma migração dos

sistemas desktop para os sistemas web, sendo necessários recursos e ferramentas

que permitam ao mercado de software realizar o processo de desenvolvimento de

forma mais ágil. Segundo Adriano Antunes (2011, p. 26), o framework Grails foi

criado no intuito de fornecer um maior nível de abstração com o enfoque em

simplificar e facilitar as configurações e aproveitar mais a sintaxe bem expressiva e

limpa da linguagem dinâmica Groovy. Desta forma, o Grails apresenta-se como uma

solução ágil para ser utilizada com a plataforma Java na web, com o objetivo de

deixar os programadores menos preocupados com detalhes desnecessários (como

configuração de XML (Extensible Markup Language), funcionalidades básicas de

controle e a criação do layout básico de apresentação), que consomem o tempo do

que realmente é importante, tornando novamente o desenvolvimento da robusta e

poderosa plataforma Java mais divertida. Desta maneira, pode-se criar ou melhorar

(assim como reaproveitar códigos Java já existentes) de uma forma mais prática,

sistemas já atuantes em empresas assim como desenvolver, de acordo com a

necessidade, novos sistemas de forma mais ágil atendendo demandas em curto

prazo.

Page 12: Monografia_FelipeAugusto

12

2. REFERENCIAL TEÓRICO

2.1. Processo de Desenvolvimento Ágil

Por volta de 2001 profissionais da área de tecnologia da informação

perceberam que o processo de desenvolvimento de sistemas de informação estava

se tornando muito burocrático, a partir disto, alguns especialistas sem reuniram para

propor alguns princípios e valores para agilizar tal processo de desenvolvimento,

tendo como base suas próprias experiências com programação. Em conjunto, tais

especialistas, baseando-se nas teorias e práticas dominadas por cada um,

concordaram que, normalmente, os projetos de sucesso tinham um conjunto de

princípios em comum, desta forma, com base nestes princípios foi criado o Manifesto

de Desenvolvimento Ágil de Software, mais conhecido como Manifesto Ágil. Sendo

assim, o termo desenvolvimento ágil refere-se a metodologias de desenvolvimento,

que adotam os valores do manifesto ágil, que de acordo com a Agile Manifesto

(2001), são:

• Indivíduos e interação são mais importantes que processos e ferramentas;

• Software em funcionamento é mais importante que documentação

abrangente;

• Colaboração do cliente é mais importante que negociação de contratos;

• Responder a mudanças é mais importante que seguir um plano.

• Devido às características do processo de desenvolvimento ágil, o modelo de

desenvolvimento adotado é o espiral, onde as etapas do modelo em cascata são

executadas várias vezes, ao longo de todo o processo de desenvolvimento do

sistema. Desta forma, ao final de cada ciclo, obtém-se um software funcional,

testado e aprovado.

O Modelo espiral é evolucionário, pois combina a natureza iterativa da

prototipagem, com o intuito de diminuir riscos. Desta forma, o processo de

desenvolvimento é representado por uma espiral dividida em quatro quadrantes,

onde em cada uma é abordado um aspecto do processo de desenvolvimento:

Page 13: Monografia_FelipeAugusto

13

1. Determinação dos objetos, alternativas e restrições: onde são identificados os

objetivos específicos para a etapa, assim como as alternativas para realizar os

objetivos e restrições;

2. Análise das alternativas e identificação e/ou resolução de riscos: onde são

identificados os riscos principais, assim como analisadas e definidas maneiras para

reduzir tais riscos;

3. Desenvolvimento e validação da versão corrente do produto: nesta etapa é

escolhido um modelo apropriado para o desenvolvimento, podendo ser qualquer um

dos modelos de ciclo de vida;

4. Planejamento: O projeto é revisado, podendo dar início ao próximo passo do

ciclo espiral planejado.

Figura 1 - Ciclo de vida do modelo espiral (Modificado de SOMMERVILLE, 2010, p. 33)

Assim como pode ser verificado na figura 1, com o modelo espiral, o software

é desenvolvido em várias versões evolucionárias, podendo elas serem, de início,

modelos em papel ou prototipagem, e durante as últimas iterações, serem

produzidas versões cada vez mais completas do sistema, fazendo com que o

desenvolvedor e o cliente o entendam melhor, além de permitir que os riscos sejam

melhor tratados em cada nível evolucionário.

A seção seguinte abordará alguns dos diversos frameworks de

desenvolvimento ágil existentes no mercado atual, que apresentam soluções

similares ao framework Grails, que é objeto de estudo deste trabalho.

Page 14: Monografia_FelipeAugusto

14

2.2. Frameworks de Desenvolvimento Ágil

Atualmente, existem diversos frameworks que prometem agilizar o processo

de desenvolvimento de sistemas utilizando algumas tecnologias, tais como: o padrão

MVC (Model View Controller – Modelagem, Visualização e Controle); o modelo COC

(Convention Over Configuration – convenção sobre configuração); o framework

hibernate, entre outras ferramentas. Desta forma, baseando-se em pesquisas

bibliográficas, os principais frameworks de desenvolvimento ágil disponível no

mercado hoje são:

• Django: escrito na linguagem Phyton foi desenvolvido para criações rápidas

de aplicações web, utilizando os padrões MVC, ORM (Objetc Relational Mapping –

Mapeamento Objeto-Relacional) e DRY (Don’t Repeat Yourself – Não se repita). O

mesmo possui o objetivo de reduzir o tempo, e automatizar as tarefas, que os

programadores teriam que executar para tornar a aplicação funcional (DJANGO

BRASIL, 2012);

• Rails ou RoR (Ruby on Rails): foi criado com o intuito de aumentar a

velocidade e facilidade no desenvolvimento de sistemas web. Rails foi desenvolvido

sobre Ruby , que é uma linguagem robusta, orientada a objetos e bem ágil, que

também utiliza os padrões MVC, ORM e DRY, entre outros (RUBY ON RAILS,

2012);

• VRaptor: é um framework desenvolvido no Brasil, que tem como intuito prover

um desenvolvimento de sistemas web de forma ágil, utilizando a linguagem Java. É

uma tecnologia nova, e que tende a crescer cada vez mais (VRAPTOR, 2012);

• CakePHP: assim como o nome sugere, é um framework escrito em PHP, e

seu principal objetivo é fornecer aos programadores uma estrutura de

desenvolvimento de sistemas robustos e de forma rápida. Ele utiliza padrões de

projetos conhecidos, tais como ActiveRecord, Assossiation Data Mapping, Front

Controller e MVC (CAKE PHP, 2012);

• Codieigniter: também utiliza a linguagem PHP para o desenvolvimento de

suas aplicações web, e por meio de sua vasta quantidade de bibliotecas, tem como

Page 15: Monografia_FelipeAugusto

15

objetivo promover um desenvolvimento de sistemas bem simples e ágil, permitindo

ao programador concentrar todo seu tempo em atividades mais úteis e lógicas

(CODIEIGNITER BRASIL, 2012);

• JRuby : Foi criado para que os desenvolvedores possam implementar com a

linguagem Ruby para a plataforma Java, sendo então possível rodar na JVM (Java

Virtual Machine) (JRUBY, 2012);

• Grails: Foi desenvolvido pensando nos programadores e no mercado Java,

inspirado principalmente no Rails. Grails, antes chamado de Groovy on Rails, é

desenvolvido em Groovy, uma linguagem totalmente dinâmica inspirada no Java,

que os programadores “carinhosamente” afirmam ser um Java melhorado, tal

afirmação é realizada por ele rodar perfeitamente sobre a JVM, ganhando todo o

poder que o Java fornece, como bibliotecas (GRAILS, 2012).

Como visto, é possível verificar que existem atualmente vários frameworks

disponíveis, de forma livre, para o desenvolvimento de sistemas web, os quais

prometem um desenvolvimento ágil. Mas apesar de todos servirem para o mesmo

propósito, cada um reside sua preferência e particularidade como a linguagem de

programação. Dentre os frameworks de desenvolvimento ágil expostos, este

trabalho apresentará um estudo detalhado do Grails, desta forma, a próxima seção

aborda sua definição, origem, principais tecnologias, dentre outras características.

2.3. Framework Grails

Grails é um framework para desenvolvimento de aplicações web, que utiliza a

linguagem dinâmica groovy, originada da linguagem Java. Tal framework, por ter a

pretensão de ser de alta produtividade, baseia-se no paradigma de convenção.

Desta forma, para que seja possível compreender melhor o objeto de estudo deste

trabalho, esta seção abordará, de forma sucinta e didática, o framework Grails, a

linguagem dinâmica Groovy, assim como algumas de suas principais tecnologias

como Spring, Hibernate e SiteMesh. Além disso, são apresentadas algumas de suas

principais características de funcionamento, como a organização da estrutura de

diretórios, a persistência de dados, scaffold e a camada de visualização.

Page 16: Monografia_FelipeAugusto

16

2.3.1. Definição

Grails tem como principal objetivo ser um framework open source de alta

produtividade, e para isso ele utiliza tecnologias, tais como, os frameworks Hibernate

e Spring, por meio de uma interface simples e consistente. O framework Grails utiliza

o padrão de desenvolvimento MVC (Model View Control) de forma natural, livrando o

desenvolvedor dos detalhes complexos da persistência de dados, assim como

também fornecendo um template web para facilitar a implementação da interface

com o usuário (ANTUNES, 2011, p. 26).

Para que seja possível melhor compreender como tal framework foi

idealizado, a seção seguinte discorre o processo que originou o Grails.

2.3.1.1. Origem do Framework

"Framework é um conjunto de classes que colaboram para realizar uma

responsabilidade para um domínio de um subsistema da aplicação." (FAYAD;

SCHMIDT, 2007).

Entende-se por framework um conjunto de classes e bibliotecas, que auxiliam

no desenvolvimento de software, que tem por objetivo poupar trabalho na execução

de procedimentos repetitivos, mas que são importantes (DEPA, 2010), como por

exemplo, as configurações do projeto de software. Muitos destes procedimentos

repetitivos já são executados, de forma automática, pela maioria dos frameworks

existentes atualmente.

Com a popularização do Ruby on Rails em 2006, a programação para web

tonou-se mais ágil, por adotar princípios ágeis como o DRY e CoC (Convention Over

Configuration - Convenção sobre Configuração), que tratam respectivamente sobre

o reaproveitamento de código e o foco na convenção com o mínimo de

configuração, utilizando a estrutura MVC como padrão, passando assim a se tornar

uma ameaça ao Java, por fornecer principalmente algumas características como

plug-ins, Scaffold e expansividade. Neste contexto, plug-ins pode ser entendido

Page 17: Monografia_FelipeAugusto

17

como componentes pré-integrados, que eliminam a necessidade de associar cada

componente de um projeto a uma aplicação. Já Scaffold visa eliminar a repetição de

tarefas, criando uma base para construção da aplicação. Por fim, a expansibilidade

permite a criação de plug-ins, de maneira intuitiva, para recursos que a linguagem

não suporta (ANTUNES, p. 24-25, 2011).

Desta maneira, buscou-se algumas soluções para manter a linguagem Java

dentro do que o mercado precisava, e ao mesmo tempo, possibilitar a fácil utilização

de sua vasta quantidade de bibliotecas. A partir disto, surgiram os projetos JRuby e

Jython, ambos usando as linguagens Ruby e Phyton, dentro da plataforma Java.

Entretanto tais projetos não foram bem aceitos, por apresentarem muitas diferenças

no código, para quem estava acostumando com o Java. Sendo assim, a solução

idealizada foi a criação de um framework baseado em Ruby on Rails (RoR)

utilizando a linguagem Groovy, que é originada do Java, assim juntando Groovy com

o Rails, surgi o Grails que veio para enfim manter a plataforma Java em nível de

competição com os novos modelos de desenvolvimento de softwares para web.

2.3.1.2. Groovy

Em 2004, James Strachan, um programador experiente em Java, estava

estudando a linguagem Phyton, e ao descobrir essa linguagem percebeu que seria

interessante integrar à linguagem Java algumas das características de Phyton, como

por exemplo, o suporte sintático para operações habituais como tipos comuns e sua

natureza dinâmica.

Portanto, Groovy foi criado com a intenção de se comunicar bem com Java, e

adquirir características dinâmicas e sintáticas presentes nas linguagens como

Phyton, Ruby e Smalltalk. Assim como Java, Groovy é compilado em bytecode e

executado sobre a JVM (Java Virtual Machine), sendo possível importar objetos

Java em Groovy e vice-versa. Além disso, Groovy adota uma sintaxe que possibilita

aumentar, de maneira significativa, a produtividade em tempo de execução,

permitindo assim que objetos sejam manuseados de forma que em Java seriam

extremamente complicados (ANTUNES, 2011, p. 29-30; ROCHER, 2006, p. 17).

Page 18: Monografia_FelipeAugusto

18

Após compreender o conceito e origem do framework Grails, assim como da

linguagem Groovy, a próxima seção apresenta as principais tecnologias

relacionadas a tal framework.

2.3.2. Principais Tecnologias Relacionadas

2.3.2.1. Spring

O Spring é um framework criado por Rod Jonhnson e descrito no seu livro,

Expert One-on-One: J2EE Design e Development. Ele é um poderoso container de

injeção de dependências, que tem como objetivo livrar o desenvolvedor de grandes

trabalhos revivendo a questão da agilidade no desenvolvimento (SANTOS, 2012).

Usado hoje por muitos em desenvolvimento de sistemas para a plataforma Java, o

Spring é uma ferramenta integrante do Grails, sendo assim, boa parte das

funcionalidades que o Grails executa está ligado ao Spring e todo o poder de injeção

de dependências que ele oferece. É importante ressalta, que o Spring é baseado no

princípio de Invertion of Control - IoC (Inversão de Controle), que tem a função de

retirar do programador o trabalho de acoplamento, e no princípio de Dependency

Injection – DI (Injeção de Dependência), que é encarregado de montar

dependências como bibliotecas que serão utilizadas em uma determinada classe,

para que o desenvolvedor não perca tempo fazendo isso (ANTUNES, 2011, p. 37;

(WALLS; BREIDENBACH 2005, p. 8; WEISSMANN, 2010).

2.3.2.2. Hibernate

Com o objetivo de simplificar os processos de persistência de dados, para a

programação orientada a objetos, no modelo relacional de banco de dados, o

Hibernate atua no Grails por meio do GORM (Grails Object Relational Mapping).

Deste modo, auxilia o desenvolvedor a ter pouco trabalho com a escrita de códigos

Page 19: Monografia_FelipeAugusto

19

de acesso a banco de dados e de comandos SQL (Structured Query Language -

Linguagem de Consulta Estruturada), utilizando o padrão de convenção para sua

comunicação com as classes e as tabelas do banco (ANTUNES, 2011, p. 38).

2.3.2.3. SiteMesh

SiteMesh consiste em um gerenciador e manipulador de layout, que foi criado

pela OpenSymphony para auxiliar no desenvolvimento de layouts, que seguem o

padrão decorator, para sistemas grandes. Tal gerenciador auxilia na criação de

templates com comandos e objetos padrões livrando o desenvolvedor de criar

manualmente tais estruturas básicas. Vale ressaltar que, por padrão, o SiteMesh

vem configurado como o provedor de layout do Grails (DAVIS; RUDOLPH, 2010, p.

79; WEISSMANN, 2010).

2.3.2.4. Outras tecnologias

O Grails por ser um framework “Full Stack”, oferece ao desenvolvedor as

ferramentas necessárias para que a aplicação seja executada, sem a necessidade

de realizar muitas configurações. Desta forma, é preciso apenas instalar o

framework e criar o projeto, a partir disto, a aplicação já estará pronta para funcionar.

É importante ressaltar, que além das tecnologias apresentadas, nas seções

anteriores, o framework Grails baseia-se em outras, as quais também são muito

importantes para o seu funcionamento (SANTOS, 2012). Dentre tais tecnologias,

destacam-se:

� Tomcat: Servidor web, que foi integrado ao framework Grails na versão 1.2,

tal fato possibilitou que não houvesse mais a necessidade de os desenvolvedores

terem que instalá-lo e configurá-lo. No que se refere à relação entre o Tomcat e o

Grails, vale ainda ressaltar, que é possível realizar o deploy da aplicação, para isto,

é necessário apenas configurar o arquivo config.groovy e, logo em seguida, executar

o comando “grails tomcat deploy”.

Page 20: Monografia_FelipeAugusto

20

� H2 Database: Por padrão, o Grails já trás consigo o banco de dados H2

configurado, para que seja possível testar as aplicações. Portanto, o mesmo vem

junto ao pacote de instalação do framework e é pré-configurado no arquivo

DataSource.groovy. O H2 é um banco de dados leve, o qual é escrito em Java,

sendo muito útil para realizar testes de aplicações de pequeno porte, desenvolvidas

pelo Grails. Tal banco de dados armazena, em tempo de execução, as informações

da aplicação em memória, entretanto possibilita que tais informações também sejam

armazenadas permanentemente no banco de dados, para isto, é necessário apenas

indicar no arquivo DataSoruce.groovy como a aplicação deve se comportar.

� JUnit: Para a realização de testes de funcionamento da aplicação, o Grails

trouxe junto a si o JUnit criado para realizar testes automatizados na linguagem Java

e gerar relatórios de resultados. Com ele pode-se realizar testes em métodos de

uma classe, verificando se o mesmo funciona da maneira esperada, exibindo

possíveis erros ou falhas.

Após conhecer as principais tecnologias que integram o framework Grails, a

próxima seção discorre sobre o funcionamento do mesmo.

2.3.3. Funcionamento

2.3.3.1. Grails

Para iniciar o estudo do framework Grails é bastante interessante

compreender os conceitos básicos sobre as tecnologias apresentadas

anteriormente, como o Hibernate e Spring, assim como as linguagens Groovy e

Java.

Uma das principais características do Grails é a agilidade, sendo esta

percebida até mesmo no procedimento de instalação, visto que em poucos passos

todo o ambiente está pronto para iniciar o desenvolvimento de uma aplicação.

Basicamente, para que o framework Grails esteja pronto deve-se instalar o JDK

(Java Development Kit) e configurar as variáveis de ambiente para o Grails, assim

como para o Java, informando o diretório da pasta bin e do Grails_HOME. Pelo fato

Page 21: Monografia_FelipeAugusto

21

de a linguagem Groovy compor as ferramentas integradas do framework não é

necessário declarar as variáveis de ambientes para ele. Além disso, vale ressaltar

ainda, que conforme explicitado anteriormente, pelo fato de o Grails ser um

framework “Full Stack”, as ferramentas como Hibernate, Spring, H2 e SiteMesh já

vêm embutidas em seu pacote de instalação, não sendo necessário que o

desenvolvedor as configure.

Com o Grails devidamente instalado e as variáveis de ambiente configuradas,

o desenvolvedor já está pronto para iniciar seu projeto. Como tal framework é

bastante completo e simples de se utilizar, todas as operações necessárias podem

ser realizadas utilizando o prompt de comando, mas as IDE’s (Integrated

Development Environment - Ambiente Integrado para Desenvolvimento) como Net

Beans, Eclipse e a Spring Source Tool Suite (IDE feito pela empresa Spring baseada

no eclipse), podem ser utilizadas para auxiliar no desenvolvimento do projeto, para

isto, é necessário apenas configurá-las para receber o Grails.

2.3.3.2. Estrutura de Diretórios

Para criar um projeto em Grails é de extrema importância conhecer bem a sua

estrutura de diretórios. Tal estrutura pode ser criada após executar o comando

“grails create-app [nome da aplicação]”, dentro do diretório com o nome

escolhido para a aplicação, a partir disto, é gerada a estrutura apresentada na figura

2.

Page 22: Monografia_FelipeAugusto

22

Figura 2 - Estrutura de diretórios do Grails.

Conforme ilustrado na figura 2, o primeiro diretório da estrutura é nomeado

como grails-app, o mesmo contém os principais conteúdos do projeto, uma vez que

99% das classes criadas durante o desenvolvimento do sistema deverão estar em

um dos seus subdiretórios, os quais são discriminados a seguir.

O subdiretório grails-app/conf contém os arquivos de configuração do banco

de dados e de inicialização do sistema (BootStrap), Hibertate, entre outras. Já no

subdiretório grails-app/controllers são encontrados todos os controles da aplicação,

onde os fluxos de informações são gerenciados.

No subdiretório grails-app/domain estão as classes de domínio, são elas que

representarão as tabelas do banco. Já no subdiretório grails-app/i18n são

encontrados os Propers, que armazenam as mensagens do sistema e as linguagens

textuais existentes.

No subdiretório grails-app/services são armazenados os serviços (regras de

negócios) desacoplados do contexto da aplicação, um exemplo seria uma classe

que faz uma conexão secundária entre a aplicação e o banco de dados. O

subdiretório grails-app/taglib armazena todas as tags customizadas criadas usando

o Grails.

O subdiretório grails-app/utils armazena os codecs, classes utilitárias e

classes utilizadas por plug-ins. Por fim, no subdiretório grails-app/views ficam todas

as GSP’s (Groovy Server Pages) que farão parte da aplicação.

Page 23: Monografia_FelipeAugusto

23

O segundo diretório apresentado é o lib, que armazena todos os arquivos

com extensão .jar, os quais fazem referência a bibliotecas de terceiros, que serão

utilizadas no sistema como o JDBC (Java Database Connectivity).

O diretório seguinte é o scripts, no qual devem ser armazenados todos os

scripts que serão utilizados para facilitar o desenvolvimento da aplicação. Todos os

scripts para o Grails são desenvolvidos em Grant (Groovy Ant), que é uma abstração

do Ant feita em Groovy.

Já no diretório src devem ser armazenados os códigos fonte que não se

encaixam na estrutura de diretórios do Grails. Dentro deste diretório há dois outros

chamados de Java e Groovy, onde serão colocados os códigos implementados em

Java e os códigos implementados em Groovy.

O diretório test é responsável por armazenar todos os testes unitários,

funcionais e de integração do projeto.

Por fim, o diretório web-app contém todo o conteúdo estático da aplicação

como imagens e arquivos .html.

2.3.3.3. Persistência de Dados

O Grails oferece um conforto muito grande quando se trata de persistência de

dados, uma vez que trás consigo o banco de dados já configurado para testar as

aplicações em desenvolvimento. O mais interessante nisso é que o desenvolvedor

terá o mínimo de trabalho para configurar o processo de comunicação da aplicação

com o banco de dados, uma vez que a mesma já é criada de forma automática,

seguindo regras de convenção, tabelas e códigos SQL padrões. Vale ainda

ressaltar, que o framework permite o acesso a base de dados legadas e geração de

comandos SQL para bancos de dados externos como o MySQL.

2.3.3.4. Scaffold

Page 24: Monografia_FelipeAugusto

24

Scaffold é um recurso poderoso implementado pelas ferramentas de

desenvolvimento ágil, que surgiu para facilitar a criação de componentes da camada

de visualização e de controle da aplicação. Desta forma, o Scaffold cria toda a

estrutura necessária retirando do desenvolvedor o trabalho de criar os componentes

de controle da aplicação. Existem dois tipos de scaffold, o dinâmico e o estático. O

scaffold dinâmico é responsável por gerar toda a estrutura em memória, e o scaffold

estático, através do comando “grails generate-all”, cria as camadas de

controllers e visualização correspondentes às classes de domínios definidas. É

importante ressaltar, que o scaffold, criará o CRUD (Create – Read – Update –

Delete) da aplicação, dentro dos controladores (CALAHORRO, 2009 p. 29-31;

SANTOS, 2010).

2.3.3.5. Camada de Visualização

Dentro do padrão MVC, a camada de visualização é responsável por toda a

parte de apresentação da aplicação. Tal camada utiliza a tecnologia GSP (Groovy

Server Pages), inspirada no JSP (Java Server Pages), que é identificada nos

arquivos html (HyperText Markup Language) pelas tags específicas indicadas por

<g:>, que são responsáveis por mostrarem os recursos exclusivos do Grails. Os

arquivos gsp são armazenados dentro do diretório grails-app/views, após utilizar a

função scaffold com o comando “grails generate-all”.

Após apresentar o funcionamento do framework Grails, torna-se possível

então apresentar um estudo de caso baseando-se na utilização do mesmo, portanto,

a próxima seção apresenta uma demonstração simples da construção uma

aplicação com o framework Grails.

2.4. Estudo de Caso – Aplicação Agenda Desenvolvida em Grails

Com base no que foi visto no decorrer do trabalho, esta seção apresenta o

framework Grails de forma uma pouco mais prática, sendo detalhados alguns dos

Page 25: Monografia_FelipeAugusto

25

seus comportamentos, assim como a preparação do ambiente do projeto, as classes

de controle e de domínio, configuração do banco de dados, a camada de

visualização e algumas outras funcionalidades.

2.4.1.1. Preparação do Ambiente

Depois de configuradas as variáveis de ambiente do Grails, o próximo passo

é acessar o prompt de comando, e navegar até o diretório onde são armazenados

os projetos baseados em Grails e digitar o seguinte comando: “grails create-

app [nome do projeto]” para criar o projeto, conforme ilustrado na figura 3.

Figura 3 - Criação do projeto em Grails.

Com a execução deste comando, será criada uma pasta no diretório corrente

com o nome escolhido. Feito isso, toda a estrutura do sistema já estará pronta.

Neste momento, já é possível executar a aplicação com o comando “grails run-

app”, que ela já estará pronta para funcionar normalmente, como ilustrado na figura

4. Isso é concedido pelo fato de, como afirmado anteriormente, o Grails ser “Full

Stack” e já trazer consigo todas as dependências configuradas e funcionando, como

por exemplo, o Tomcat, banco de dados H2, entre outras ferramentas necessárias.

Figura 4 - Executando a aplicação.

Page 26: Monografia_FelipeAugusto

26

Figura 5 - Aplicação em execução.

A figura 5 mostra a aplicação em funcionamento. Esta tela é uma

apresentação padrão, oferecida pelo Grails que na área Avaliable Controllers, lista

os controladores gerados, entretanto como, até momento nenhum foi criado, a lista é

apresentada vazia. Além disso, tal tela apresenta na área Application Status,

informações tais como a versão do framework, quantidade de controllers que

existem na aplicação, quantidade de domains, entre outras informações. Além disso,

na área Installed Plug-ins são identificados os pluguins que já estão configurados e

prontos para uso.

2.4.1.2. Classes de Domínio e Controladores

Page 27: Monografia_FelipeAugusto

27

As classes de domínio representam as tabelas do banco de dados, sendo que

as mesmas devem conter os atributos (colunas do banco) de uma determinada

página. Para criar uma domain class é necessário executar o comando “grails

create-domain-class [nome da domain]”, como pode ser observado na

figura 6.

Figura 6 - Criação da classe de domínio.

Assim como pode ser verificado na figura 6, após executar o comando, a

domain é criada no diretório “domain/agenda”. Com a domain existente, é

necessário agora criar o controlador relacionado a ela, tal procedimento pode ser

realizado por meio do comando “grails create-controller [nome da

domain]”, conforme mostrado na figura 7.

Figura 7 - Criação do controlador

Após executado o comando o controlador da domain é criado no diretório

“controller/agenda”. Conforme visto na figura 8, é possível perceber que após a

criação do controlador o mesmo é apresentado na área Available Controller.

Page 28: Monografia_FelipeAugusto

28

Figura 8 - Apresentação do controler

É importante ressaltar que é necessário preencher os atributos da domain

criada, neste caso, uma agenda, como nome, telefone, endereço e e-mail. Para tal

fim, é necessário abrir o arquivo “CadastraContato.groovy”, que encontra-se dentro

do diretório “domain/agenda”, conforme mostra a figura 9:

Page 29: Monografia_FelipeAugusto

29

Figura 9 - Casse de domínio: CadastraContato

No controller será adotado o scaffold dinâmico, para que o CRUD seja gerado

em memória, para tanto, deve-se implementar o controller conforme a ilustra a figura

10.

Figura 10 - Controlador: CadastraContato

Como visto na linha 3 do código acima (figura 10), o scaffold dinâmico é

ativado, ao atribuir o valor true. Vale ressaltar que é possível gerar o CRUD de forma

estática, ao executar o comando “grails generate-all”.

Após realizar todos os passos descritos anteriormente, é possível executar a

aplicação para testar o controlador funcionando, com os atributos definidos na

domain previamente criada. Após executar o comando “grails run-app”, deve-se

clicar no controller “CadastraContato”, e logo em seguida criar um contato, clicando

no botão “Novo CadastraContato”, por conseguinte é apresentada a tela de

preenchimento dos dados um novo contato (Figura 11):

Page 30: Monografia_FelipeAugusto

30

Figura 11 - Tela de cadastro

2.4.1.3. Conexão com o Banco de Dados

O framework Grails traz consigo um arquivo de configuração para a conexão

com o banco de dados. Conforme explicitado anteriormente, por padrão, ele já vem

configurado com o banco de dados H2, mas nada impede que possa ser utilizado

outro banco de dados para a aplicação como o MySQL e Oracle. No arquivo

DataSource.groovy, encontrado no diretório grails-app/conf, são definidas todas as

configurações necessárias para que a conexão da aplicação com o banco de dados

funcione corretamente.

Figura 12 - Configuração do driver de conexão do banco de dados.

Page 31: Monografia_FelipeAugusto

31

Conforme pode ser observado na figura 12, é bem simples a chamada do

driver de conexão com o banco de dados. Na linha 3, à variável driverClassName

é atribuído o endereço do driver do banco escolhido, neste exemplo é utilizado o

drive do banco padrão do framework (H2 Database). Já os atributos username e

password devem ser preenchidos de acordo como o que foi configurado no banco

de dados escolhido, para que o sistema consiga estabelecer a conexão, como

acessar o banco de forma correta.

Figura 13 - Ambientes do banco de dadados.

É importante resslatar que o Grails já traz configurado 3 (três) ambientes de

execusão da aplicação, o ambiente de desenvolvimento, o de teste e o de produção.

O Grails também permite que possa ser utilizado um banco de dados para cada

ambiente, assim como aplicar configurações de comportamentos diferentes,

conforme pode ser observado nas linhas 17, 23 e 29 contidas na figura 13.

Page 32: Monografia_FelipeAugusto

32

No momento da execução da aplicação, é necessário informar qual ambiente

será utilizado, por padrão o framework grails inicia a aplicação no modo de

desenvolvimento, entretanto, caso seja necessário, é possível configurar para que

seja iniciada no ambiente de produção, com o comando “grails prod run-app”,

ou ainda ao executar o comando “grails test run-app”, a aplicação ser

iniciada no modo de teste. Já o comando “grails dev run-app” força a

aplicação ser iniciada para o ambiente de desenvolvimento.

2.4.1.4. Camada de Visualização da Aplicação

Para a camada de visualização da aplicação, existem duas maneiras de gera-

la, de forma estática ou em memória, no decorrer do desenvolvimento do sistema,

pode-se usar o modo dinâmico para gerar as gsp’s (Groovy Server Page), mas

quando partir para a modificação da estrutura das views, é necessário gerá-las com

o comando [grails generate-all], assim serão criadas, no diretório “grails-

app/view” (como ilustra a figura 14). As views criadas nesse diretório estarão

diretamente ligadas a determinada closures das classes de controle, são elas as

create.gsp, edit.gsp, list.gsp e show.gsp.

Figura 14 - GSP’s do controle CadastraContato

Como mostra na figura 14, uma gsp chamada “_form” é responsável por criar

os campos das telas de cadastro. Os arquivos da camada de visualização foram

separados desta forma a partir da versão 2.0 do grails, para facilitar a edição dos

campos e desvincula-los da create.gsp. Pode-se observar um trecho do código na

figura 15 onde é criado uma label e um textField para a inserção de um valor do tipo

texto.

Page 33: Monografia_FelipeAugusto

33

Figura 15 - Código dos campos nome

Por meio do SiteMesh o Grails criará o layout das páginas, mas nada impede

que as gsp’s sejam acessadas e modifique-se o código para a maneira desejada.

Para isto, basta abrir a gsp desejada e editar conforme a necessidade.

2.4.1.5. Pluglins

Existe uma vasta quantidade de plug-ins prontos para Grails, o fato de ele

utilizar a linguagem dinâmica Groovy, derivada do Java, faz com que ele absorva

sua vasta riqueza, no que diz respeito aos scripts e plug-ins. Portanto Grails permite

trabalhar com plug-ins de forma bastante simples, fazendo com que em pouco

tempo seja possível colocar um plug-in em funcionamento. Sendo assim, para

instalar um plug-in, utiliza-se o comando “grails install-plug-in [nome do

plug-in]”, conforme pode ser verificado na figura 16.

Figura 16 - Instalando plug-in

Uma observação muito importante é que, cada plug-in necessita de ser

configurado para que seu funcionamento ocorra da maneira desejada, para tal fim,

deve-se seguir a orientação da documentação do mesmo, uma vez que a

configuração é realizada de forma específica.

Page 34: Monografia_FelipeAugusto

34

Vale ressaltar ainda, que existe outra forma de instalar um plug-in, a qual

baseia-se no arquivo BildConfig.groovy, localizado no dentro do diretório grails-

app/conf.

Page 35: Monografia_FelipeAugusto

35

3. METODOLOGIA

Para que fosse possível compreender o objeto de estudo deste trabalho,

adotou-se inicialmente a metodologia de pesquisa bibliográfica a qual caracterizou-

se principalmente pelo estudo de livros, trabalho de conclusão de curso, artigos

científicos, periódicos, guias de usuário e sites com conteúdos relacionados a

métodos ágeis, aos diversos frameworks de desenvolvimento ágil e Grails. Além

disso, durante o período de estudo e compreensão do framework Grails participou-

se de cursos introdutórios a Grails, que foram extremamente úteis para aquisição do

conhecimento necessário para execução deste trabalho. Todos os documentos e

conteúdos pesquisados foram de suma importância para o desenvolvimento

bibliográfico deste projeto, pois forneceram embasamento teórico e prático para

entendimento dos conceitos e procedimento relacionados à tecnologia Grails.

Além disso, para que fosse possível melhor compreender o sistema que seria

desenvolvido, bem como o seu contexto de utilização, adotou-se os procedimentos

de pesquisa de campo e descritiva. Desta forma, durante todo o período de

desenvolvimento do trabalho em questão, realizou o acompanhamento do dia a dia

do funcionamento da empresa, bem como foram realizadas entrevistas, com os

proprietários e funcionários da mesma, com o objetivo de compreender de forma

consistente a real necessidade da empresa.

Após realizar os estudos bibliográficos foi possível compreender os principais

conceitos relacionados ao trabalho em questão, tais como métodos de

desenvolvimento ágil, assim como conhecer e compreender os principais

frameworks de desenvolvimento ágil. Além disso, foi possível entender como o

framework Grails surgiu, a sua ideologia, principais ferramentas e forma de

funcionamento. Já com as pesquisas de campo e descritiva foi possível conhecer a

dinâmica de trabalho da empresa Memora Inteligência Gráfica, e a partir disto, criar

o projeto de software e modelar uma solução tecnológica, que atendesse às suas

reais necessidades. Com isto, utilizando o Grails, deu-se início ao processo de

implementação do módulo de gerenciamento de criação de produtos, o qual foi

constantemente testado e validado pelo cliente.

Vale ainda ressaltar, que durante o processo de desenvolvimento do trabalho

em questão foram utilizadas algumas ferramentas, que auxiliaram no processo de

Page 36: Monografia_FelipeAugusto

36

desenvolvimento da solução. Desta forma, durante a fase de análise adotou-se a

ferramenta Astah Community, utilizada para criar os diagramas UML (Unified

Modeling Language), além disso, foi adotada a IDE GGTS (Groovy/Grails Tool Suite)

para implementação dos códigos em Groovy.

Page 37: Monografia_FelipeAugusto

37

4. DESENVOLVIMENTO

4.1. Memora Inteligência Gráfica

Em 2005 a empresaria Nilcione Messias dos Santos fundou a agência de

eventos, cujo nome foi definido como Memora Cerimonial e Publicidade. Assim que

surgiu, a empresa prestava serviços voltados a cerimonial e secretaria, mas com o

passar dos anos foi empregado a publicidade, focando em convites de formaturas,

mas também abrangendo publicidade gráfica em geral, passando então a se tornar o

foco principal da empresa, isso levou a mudança do nome para Memora Inteligência

Gráfica, passando assim a assumir a publicidade como principal fonte rentável da

mesma.

A Memora é reconhecida hoje como agência de publicidade, e tem uma

demanda de trabalho muito grande, atendendo todo o estado e explorando estados

próximos, conquistando clientes de diversas cidades circunvizinhas ao estado do

Tocantins, essa demanda de projetos à distância passou a se tornar algo comum à

empresa, pois grande parte do processo de desenvolvimento do produto pode ser

feita por meio de internet e telefone, não sendo totalmente dispensadas as

presenças física do cliente e da empresa, mas reduzindo-as para situações

extremas. Neste ponto surgiu a necessidade de um sistema que auxilie e facilite na

produção e acompanhamento do desenvolvimento dos produtos, em relação a

clientes e funcionários. Sistema este, capaz de em tempo real, poder acompanhar

passo-a-passo o processo de desenvolvimento, bem como a troca de informações

necessárias para o andamento da produção, visando conforto e qualidade no

processo.

4.2. Visão Geral do Sistema

O sistema desenvolvido neste trabalho, possibilita realizar o controle de todo

o fluxo de criação dos produtos elaborados pela agência de publicidade Memora,

Page 38: Monografia_FelipeAugusto

38

fazendo com que todos os dados e processos sejam unificados, simplificando, desta

forma, o acompanhamento e gerenciamento do desenvolvimento dos produtos, tanto

por parte da empresa, quanto do cliente.

Conforme explicitado anteriormente, o sistema em questão é desenvolvido

baseando-se em uma necessidade real da empresa, possuindo o objetivo de

automatizar ações, que hoje são realizadas/registradas de formas diversas, como e-

mail, telefone, e outros meios de comunicação. Portanto, com a implantação do

sistema, todas as informações, de cada produto, são reunidas em um único local.

Sendo assim, o sistema possibilita cadastrar informações básicas tanto do cliente,

quanto do produto, assim como registra todas as etapas de criação do produto, por

meio dos processos executados, e suas respectivas movimentações. Os requisitos

funcionais que compõem o sistema podem ser observados na figura 17, a qual

ilustra o diagrama de casos de uso.

Figura 17 - Diagrama de caso de uso geral

Page 39: Monografia_FelipeAugusto

39

Conforme pode ser observado na figura 17, interagem com o sistema diversos

atores, como Usuário, Cliente, Funcionário, Vendedor e Administrador. Dentre os

requisitos ilustrados, tem-se o gerenciamento de instituições, onde será possível

realizar cadastros de diversos tipos de instituições, ou seja, tanto instituições de

ensino e/ou empresas. Além disso, o sistema permite o cadastro de comissões,

requisito que visa promover a oportunidade de reunir um grupo de clientes para

gerenciar/acompanhar a criação de um determinado produto.

É importante ressaltar, que tal gerenciamento/acompanhamento será

realizado de forma dinâmica, sendo o processo de criação do produto dividido em

etapas: em um primeiro momento é realizado o cadastro do tipo de produto, logo em

seguida, o cadastro dos atributos referentes a determinado tipo de produto, por

conseguinte, é disponibilizada a funcionalidade de gerenciamento de produtos, de

acordo com o tipo selecionado. Para cada produto cadastrado será disponibilizado o

cadastro de processos, e para cada processo será disponibilizado o cadastro de

movimentações, desta forma, será possível armazenar todo o fluxo de

desenvolvimento do produto no sistema.

No decorrer deste trabalho, o módulo desenvolvido foi o responsável por

automatizar o processo de gerenciamento do processo de criação de produtos,

portanto, na próxima seção o módulo em questão é descrito.

4.3. Módulo de Gerenciamento do Processo de Criação de Produtos

Para implementação neste trabalho, foi selecionado o módulo mais crítico do

sistema, ou seja, o de gerenciamento do processo de criação dos produtos, e assim

comprovar que o framework Grails cumpre sua promessa de desenvolvimento ágil. A

figura 18 ilustra o diagrama de casos de uso, com os atores e requisitos funcionais

do módulo que será trabalhado.

Page 40: Monografia_FelipeAugusto

40

Figura 18 - Módulo a ser desenvolvido

Conforme ilustrado na figura 18, os requisitos que compõem o módulo

em questão estão relacionados ao gerenciamento de produto, bem como de

seus processos e suas respectivas movimentações. Este módulo é

considerado o mais crítico do sistema, pelo fato concentrar as informações

mais importantes, desde o início do desenvolvimento do produto, até a

conclusão do mesmo, além de permitir maior interação do cliente sobre o

gerenciamento das movimentações dos processos, assim como maior

controle por parte da empresa. Para que seja possível melhor compreender

cada um dos casos de uso que compõem este módulo do sistema, a seção de

Anexos apresenta os artefatos modelados, como: os casos de uso

expandidos; wireframes; assim como os diagramas de sequência dos casos

de uso, com fluxo considerado mais complexo.

4.4. Utilização do Grails para Desenvolvimento do Módulo de Gerenciamento

do Processo de Criação de Produtos

4.4.1. Classes de Domínio e Controladores

Page 41: Monografia_FelipeAugusto

41

Em um primeiro momento, o projeto foi criado, seguindo os passos descritos

na sessão 2.2.1.1. Logo em seguida, as classes de domínio e controle também

foram geradas, seguindo os mesmos passos descritos na sessão 2.2.1.2. É

importante ressaltar, que até o momento, as classes criadas foram apenas as

necessárias para a implementação do módulo de gerenciamento do processo de

criação de produtos. O diagrama de classes do módulo em questão pode ser

observado na figura 19.

Figura 19 - Diagrama de classe do módulo desenvolvido

É importante reforçar, que conforme explicado anteriormente, no modelo de

desenvolvimento proposto pelo Grails, as classes de domínio representam as

tabelas do banco de dados, sendo que as mesmas devem conter os atributos

(colunas do banco) de uma determinada página. Sendo assim, na classe “Produto”,

estão condidas as informações relacionadas ao tipo do produto, cliente vinculado,

data do contrato e data de conclusão. Tal classe possui relacionamento com a

Page 42: Monografia_FelipeAugusto

42

classe de domínio denominada “TipoDeProduto, que contém os atributos referentes

ao um tipo de produto específico. Pode-se observar na figura 20, que todos os

atributos da classe de domínio “Produto”, foram marcados como obrigatório, pois

tratam-se de informações extremamente necessárias para efetivação do cadastro.

Figura 20 - Classe de domínio do Produto

As informações específicas de cada tipo de produto são cadastradas pelo próprio

administrador do sistema, tais informações estão concentradas na classe de domínio

“Atributo” (Figura 21), sendo que valores atribuídos a cada atributo são mencionados

na classe de domínio “ValorDoAtributo” (Figura 22).

Figura 21 - Classe de domínio do Atributo

Figura 22 - Classe de domínio do Valor do Atributo

Com o produto previamente cadastrado, torna-se possível organizar seus

processos, com essa finalidade, foi criada uma classe de domínio chamada

“Processo”, que é responsável por separar as etapas de criação do produto. Desta

Page 43: Monografia_FelipeAugusto

43

forma, para cada processo cadastrado, de um determinado produto, são criadas

diversas movimentações, sendo tais movimentações responsáveis por armazenar os

dados do fluxo de determinado processo de criação.

Na etapa em questão, tanto o cliente quanto os funcionários da empresa têm

permissão de inserção de dados. Para tanto, foi criada uma classe de domínio

chamada “Movimentação” (Figura 24), que está relacionada à classe “Processo”

(Figura 23), descrita anteriormente, a fim de estabelecer um vínculo dos anexos, que

podem ou não vir a existir, e uma descrição a ser passada para a parte envolvente,

contendo informações sobre o andamento da movimentação. A classe

“Movimentação” (Figura 24) contém ainda o titulo, e a data de criação. Os processos

e as movimentações do produto são as partes mais críticas do sistema, pois são

nelas onde serão concentradas todas as informações pertinentes ao

desenvolvimento geral do produto.

Figura 23 - Classe de domínio Processo

Figura 24 - Classe de domínio Movimentação

Com a finalidade de atender a dinamicidade de tipos de produtos oferecidos

pela empresa, o diagrama de classes foi elaborado de forma que o sistema

mantivesse tal flexibilidade, no que se referente aos atributos e tipos de produtos.

Page 44: Monografia_FelipeAugusto

44

Desta forma, para garantir a consistência e integridade dos valores dos atributos,

salvos no banco de dados, foi utilizada a técnica de Rollback, implementada na

classe de serviço, que conforme explicado anteriormente, compõe a estrutura do

Grails, sendo salva no subdiretório grails-app/services. A configuração de tal

procedimento pode ser observada na figura 25.

Figura 25 - Classe de serviço de transações – método saveProduto()

Ainda relacionado ao processo de armazenamento das informações de um

produto, a figura 26 ilustra a chamada ao método de transação na action “save”

do controlador “Produto”.

Figura 26 - Controlador produto – Action save

Page 45: Monografia_FelipeAugusto

45

Conforme pode ser observado na figura 26, a linha 56 é responsável por

realizar uma chamada ao método de transação “saveProduto” da classe

“transacoesServices”, sendo responsável por realizar todos os tratamentos

necessários durante o processo de armazenamento de um determinado produto.

4.4.2. Views

O framework Grails traz consigo um BootStrap com o CRUD básico muito

bem estruturado, conforme mencionado nas sessões 2.3.3.5 e 2.4.1.4 após a

execução do comando “grails generate-all”, são geradas as telas de

visualização padrões, mas como mostra na figura 27, é possível modifica-las de

acordo com as necessidade. Desta forma, para a implementação do layout do

sistema em questão foi utilizado o BootStrap do Twitter.

Figura 27 - Tela de login

Para que fosse possível gerar a visualização apresentada na figura 27, foi

implementado o código ilustrado na figura 28. Na linha 42 é criado um formulário

Page 46: Monografia_FelipeAugusto

46

com a tag <g:form action="authenticate" method="post">, portanto,

quando o usuário pressionar o botão “Entrar”, a tag em questão enviará o formulário

para a action authenticate, contida no controlador padrão. Deste modo, por

convenção, pode-se afirmar que, neste caso, o controlador é o “LoginController”

como ilustrado na figura 28.

Figura 28 - View login.gsp

Assim que o controlador “LoginController” é acionado, a operação executada

é bem simples, isto porque o framewok Grails realizada grande parte do trabalho

para o desenvolvedor. A linha 15, da figura 29, apresentada a instrução

“findByLoginAndPassword(params.login,params,password)”, que é

responsável por realizar uma consulta ao banco resgatando os dados equivalentes a

expressão enviada. Nas linhas que se seguem, é adicionado o objeto usuário na

sessão, bem como o perfil de acesso dele. Entretanto, caso a consulta retorne

nenhum valor, é exibida uma mensagem de informativa, e o usuário é redirecionado

para a tela de login.

Page 47: Monografia_FelipeAugusto

47

Figura 29 - Controlador Login – Action authenticate

A figura 30, ilustra uma das principais telas do sistema, ou seja, a de

gerenciamento de produtos. Conforme pode ser observado, a figura apresenta o

formulário com os dados de cadastro de um produto, assim como uma tabela com a

listagem dos produtos já cadastrados, em ordem decrescente. Sendo assim

possível, nesta mesma tela, acessar as funções de visualização do produto, edição

e exclusão.

Figura 30 - Tela Gerenciar Produto

Page 48: Monografia_FelipeAugusto

48

É importante ressaltar que nesta tela, quando o valor do campo “Tipo De

Produto” é alterado na combobox, a página é renderizada novamente, sendo então

apresentados os dados do produto relacionado ao tipo selecionado. Isso é possível

por uma ação realizada na tag referente a combobox, <g:select

onchange="submit()">, que pode ser observada na linha 27, da figura 31, onde

é ativada a ação submit(), responsável por ativar a action create do controlador

“Produto”, onde a mesma retorna para a mesma página o id do tipo de produto

selecionado, para que os dados referentes a ele sejam carregados na tela.

Figura 31 - View create da pátina Gerenciar Produto

Ao solicitar a opção de visualização dos dados do produto, o usuário será

redirecionado para a tela Visualização do Produto, apresentada na figura 32. Esta

tela contém as informações de cadastro do produto, bem como seus processos e

suas respectivas movimentações.

Page 49: Monografia_FelipeAugusto

49

Figura 32 - Tela Visualizar Produto

A tela ilustrada na figura 32 é a responsável por apresentar a todos os

envolvidos na criação de um produto o passo a passo da evolução do mesmo,

permitindo assim que todas as informações de um produto sejam

registradas/encontradas/acompanhadas em um único lugar. Portanto, nesta tela,

tanto os funcionários quanto os clientes, poderão acompanhar o andamento do

desenvolvimento do produto, assim como adicionar novas movimentações aos

processos, mas somente o funcionário e o administrador poderão acrescentar

processos, os clientes apenas poderão visualiza-los e cadastrar movimentações.

Page 50: Monografia_FelipeAugusto

50

5. CONSIDERAÇÕES FINAIS

A realidade atual no mercado de trabalho é a necessidade de

desenvolvimento de sistemas de qualidade de forma ágil e prática, que facilitam o

trabalho dos desenvolvedores aproveitando seu tempo em focar-se na criatividade

no processo de desenvolvimento, ao invés de configurações e visualização.

Neste contexto, conforme citado no decorrer do trabalho, hoje em dia, existe

uma vasta quantidade de frameworks que atendem às necessidades de

desenvolvimento ágil, e em diversas linguagens. Dentre tais framework o Grails

destaca-se, por além de oferecer um conjunto de ferramentas, que auxiliam na

produção de sistemas para web, o mesmo foi desenvolvido para funcionar sobre a

JVM. Outra característica importante é o fato de o mesmo usar a linguagem de

programação Groovy, que permite ao desenvolvedor ter acesso a todo o poder da

linguagem Java, uma vez que possui total compatibilidade com as bibliotecas e

scripts já existentes em Java. Com isto, pode-se afirmar, que com Grails, programar

passou a ser mais divertido.

Com a implementação do módulo de gerenciamento do processo de criação

de produtos, foi possível verificar a eficiência do framework Grails, o qual mostrou

ser bastante ágil, simples e prático, visto que nenhuma configuração de banco de

dados e XML foram necessárias no decorrer do desenvolvimento. No que diz

respeito ao processo de implementação do layout personalizado, utilizou-se o plug-in

do Twitter, onde o mesmo se comportou de maneira bem homogenia com o

framework Grails, proporcionando uma vantagem significativa na construção e

adaptação do layout do sistema.

Além disso, foi possível verificar algumas vantagens que são proporcionadas

pela linguagem dinâmica Groovy, dentre elas pode-se citar: a facilidade e

simplicidade de implementação da lógica do sistema, onde operações que em Java

poderiam ser mais complexas, em Groovy as mesmas foram reduzidas em uma

linha código, além disso, a sua sintaxe mostra ser bem simples e eficiente.

De forma geral, ao somar a dinamicidade da linguagem Groovy, com a

consistência e a agilidade que o framework Grails oferece, foi possível constatar que

o processo de desenvolvimento de sistema tornou-se mais prazeroso, rápido e

simples.

Page 51: Monografia_FelipeAugusto

51

Como proposta de trabalhos futuros, propõem-se realizar a efetiva

implantação do módulo implementado durante este trabalho, bem como o

treinamento dos usuários, a fim de inserir aos poucos o sistema na rotina de trabalho

da empresa. Além disso, pretende-se finalizar a implementação dos demais módulos

do sistema que já foram analisados.

Page 52: Monografia_FelipeAugusto

52

6. REFERÊNCIAS

(AGILE MANIFESTO, 2001) AGILE MANIFESTO. Manifesto for Agile Software Development. 2001. Disponível em <http://www.agilemanifesto.org>. Acesso em 16 de setembro de 2012. (ANTUNES, 2011) ANTUNES, Adriano Bastos. Introdução ao Framework Grails. Cabo Frio. Universidade Veiga de Almeida – UVA, 2011. (CAKE PHP, 2012) CAKEPHP. Documentation. 2012. Disponível em: <http://cakephp.org/>. Acesso em: 17 de ago. de 2012. (CALAHORRO), CALAHORRO, Nacho Brito. Manual de Desarrollo Web Con Grails: JavaEE, como Siempre Debió Haber Sido. Criative Commons, Espanã. 2009, 167 p. (CARVALHO, 2006) CARVALHO, Marlon. Spring Framework: Introdução. iMasters. Ago. de 2006. Disponível em: <http://www.imasters.com.br/artigo/4497/java/spring_framework_introducao/>. Acessado em: 30 de abr. de2012. (CARVALHO, 2008) CARVALHO, Marlon. Spring Framework: Introdução. Ago. de 2008. Disponível em: <http://imasters.com.br/artigo/4497/spring_framework_introducao>. Acessado em 02/05/2012. (CODIEIGNITER BRASIL, 2012) CODEIGNITER. CodeIgniter Brasil. 2012. Disponível em: <http://codeigniterbrasil.com/>. Acesso em: 17 de ago. de 2012. (DAVIS; RUDOLPH, 2010) DAVIS, Scott; Jason, RUDOLPH. Getting Started With Grails Second Edition: A modern web framework fot the Java Plataform. 2 ed. InfoQ. 2010. 148 p. (DEPA, 2010) DEPA, Departamento de Sistemas e Computação da UFCG. O que são frameworks?. Disponível em: <http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/frame/oque.htm>. Acessado em 17 de ago. de 2012. (DJANGO BRASIL, 2012) DJANGO. Documentação do Django. 2012. Disponível em: <http://www.djangobrasil.org/>. Acesso em: 17 de ago. de 2012. (FAYAD; SCHMIDT, 2007) FAYAD, M. E; SCHMIDT, D. C.. Object-oriented application frameworks. Comm. ACM 40(10), 1997. 32-8. (GRAILS, 2012) GRAILS. The Grails Framework: Reference Documentation. Disponível em: <http://grails.org/doc/latest/>. Acesso em: 06 de fev. de 2012.

Page 53: Monografia_FelipeAugusto

53

(GRAILSBRASIL, 2012) GRAILSBRASIL. 2012. Disponível em: <http://grailsbrasil.com.br>. Acesso em: 05 de mar. de 2012. (GROOVY, 2012) GROOVY. Portuguese Documentation. 2012. Disponível em: <http://groovy.codehaus.org/Portuguese+Home>. Acesso em: 18 de ago. de 2012. (H2, 2012) H2. Database Engine. H2 Database EngineDisponível: <http://www.h2database.com/html/performance.html>.Acessado em 04 de mai. De 2012. (JRUBY, 2012) JRUBY. Documentation. 2012: Disponível em: <http://jruby.org/>. Acesso em: 17 de ago. de 2012. (JAVAFREE.ORG, 2009) JAVAFREE.ORG. Integração: Spring e Hibernate. Ago. de 2009. Disponível em: <http://javafree.uol.com.br/artigo/871470/Integracao-Spring-e-Hibernate.html>. Acessado em: 01 de mai. De 2012. (___, 2009) JAVAFREE.ORG. Inversion Of Control: Containers de Inversão de Controle e o padrão Dependency Injection. Ago. de 2009. Disponível em: <http://javafree.uol.com.br/artigo/871453/Inversion-Of-Control-Containers-de-Inversao-de-Controle-e-o-padrao-Dependency-Injection.html>. Acessado em: 01 de mai. de 2012. (JUN, 2009) JUN, Ricardo. Spring Framework: O que é afinal de contas e para onde ele vai?. Blobal Code: Informação + colaboração + discussão. Set. de 2009. Disponível em: <http://blog.globalcode.com.br/2009/09/spring-framework-o-que-e-afinal-de.html>. Acessado em: 30 de abr. de 2012. (JUNIT, 2012) JUNIT. Resources for Test Driven Development. Disponível em: <http://www.junit.org/>. Acessado em: 04 de mai. de 2012. (MACORATTI, 2010) MACORATTI, José Carlos. Padrões de Projeto: O modelo MVC – Model View Controller. Disponível em < http://www.macoratti.net/vbn_mvc>. Acessado em: 02 de mai. de 2012. (MOREIRA, 2009) MOREIRA, Daniela. Desenvolvimento ágil funciona?, Info Online. São Paulo, jun. de 2009. Disponível em: <http://info.abril.com.br/noticias/ti/desenvolvimento-agil-funciona-30062009-3.shl>. Acessado em: 24 de abr. de 2012. (ROCHER, 2006) ROCHER, Graeme Keith. The Definitive Guide to Grails. Apress. Springer-Verlag New York. 2006. 360 p. (RUBY, 2012) RUBY. Documentação. 2012. Disponível em: <http://www.ruby-lang.org/pt/>. Acesso em: 17 de ago. de 2012. (RUBY ON RAILS, 2012) RUBY ON RAILS Desenvolvimento Web Sem Dor. 2012. Disponível em: <http://rubyonrails.com.br/>. Acesso em: 17 de ag. de 2012.

Page 54: Monografia_FelipeAugusto

54

(SANTOS, 2012) SANTOS, Cleórbete. Desenvolvimento de sistemas em Grails. Disponível em: <http://cleorbete.com/cursos/desenvgrails/>. Acessado em: 25 de set. de 2012. (SOMMERVILLE, 2011) SOMMERVILLE, Ian, Engenharia de Software. 9º Edição, Person Education do Brasil, 2011. (VRAPTOR, 2012) VRAPTOR, Documentation. 2012. Disponível em: <http://vraptor.caelum.com.br/en>. Acesso em: 17 de ago. de 2012. (WALLS; BREIDENBACH, 2005) WALLS, Craig; BREIDENBACH Ryan. Spring In Action. Editora Manning. Greenwich, 2005, 209 p. (WEISSMANN, 2010) WEISSMANN. Henrique Lobo. Grails: um Guia rápido e indireto. Disponível em: <http://www.itexto.net/devkico/?page_id=220>. Acessado em: 5 de mar. de 2012.

Page 55: Monografia_FelipeAugusto

55

7. ANEXO A

7.1. Requisitos funcionais

7.1.1. Requisitos Funcionais

RF1 - Cadastrar Usuário: O cadastro de usuários do sistema deve ser unificado e as

permissões dentro do sistema separadas por perfil de acesso.

RF2 - Cadastro de instituições: Deve-se manter um cadastro com os dados básicos

das instituições no sistema, o mesmo poderá ser usado para futuros contatos.

RF3 - Cadastrar produtos: O sistema deve ser desenvolvido de forma que possa ser

facilmente adaptável a mudanças nos produtos cadastrados, bem como o cadastro

de novos tipos de produtos.

RF4 - Cadastro de comissão: O sistema deve conter o cadastro de comissão, onde

serão vinculados vários clientes e instituições, assim como, vinculados vários

clientes (pessoas) a um produto específico.

RF5 - Cadastrar cursos: É de bastante proveito ter uma base de cadastro de cursos,

para poder vincula-los a instituições de ensino.

RF6 - Cadastrar processos: Para melhor organização no processo de

desenvolvimento dos produtos, deve ser permitido o cadastro de processos para

cada produto, devidamente cadastrado no sistema.

RF7 - Cadastrar movimentação: para cada processo cadastrado, deve-se

possibilitar o cadastro de movimentações do processo específico. Esta ação também

será gerenciada pelo cliente.

RF8 - Gerar relatório: O sistema deve permitir que os funcionários possam gerar

relatórios do sistemas em geral.

RF9 - Listar produtos cadastrados: O sistema deve exibir uma lista dos produtos

cadastrados.

RF10 - Listar Usuários Cadastrados: O sistema deve exibir uma lista com os

usuários cadastrados.

RF11 - Alterar perfil dos Usuários Cadastrados: O sistema deve permitir a

alteração dos perfis dos usuários cadastrados.

Page 56: Monografia_FelipeAugusto

56

7.1.2. Requisitos Não-Funcionais

RNF 1 – Usabilidade – O sistema deverá realizar as tarefas de maneira eficaz,

eficiente e agradável.

RNF 2 – Consistência – O sistema deverá executar as funcionalidades de forma

coerente ao contexto.

RNF 3 – Confiabilidade – O sistema deverá sempre realizar as funcionalidades

requeridas e apresentar um bom desempenho.

RNF 4 – Acessibilidade – O sistema deverá ser acessível a deficientes visuais.

7.2. Caso de uso expandido e Wireframe do Módulo de Gerenciamento do

Processo de Criação de Produtos

7.2.1. Gerenciar Produto

Page 57: Monografia_FelipeAugusto

57

Figura 33 - Tela de ilustração do caso de uso Gerenciar Produto

Caso de Uso: Gerenciar Produto

Ator: Administrador

Finalidade: Permite ao ator Inserir novos produtos, Editar, Excluir

e Listar todos os produtos cadastrados.

Visão Geral:

O ator poderá Listar Todos os produtos cadastrado ou

efetuar uma busca de produtos com um filtro de

pesquisa. Também poderá editar ou excluir (apenas

produtos que não houver processos), bem como

visualizar seus dados cadastrais, processos e

movimentações.

Pré–Condições:

Pós–Condições: É criada uma instância do produto no sistema e a

relação do mesmo com Cliente.

Ação do Ator Resposta do Sistema

Fluxo 1

Fluxo 2

Fluxo 3 Fluxo 4

Page 58: Monografia_FelipeAugusto

58

Sequencia Típica de Evento

1. O ator seleciona Gerenciar Produto. 2. O sistema realiza uma consulta de

produtos cadastrados.

3. O sistema apresenta o tela de

gerencia.

Fluxo 1

4. O ator seleciona a opção cadastrar

novo produto.

5. O sistema apresenta o formulário

de Cadastro

6. O ator preenche os dados do

formulário e confirma a ação.

7. O sistema exibe o resultado de

sucesso.

Fluxo 2

8. O ator, na listagem de produtos,

seleciona a opção editar.

9. O sistema apresenta o formulário

preenchido com os dados do produto.

10. O ator altera os dados desejados e

escolhe a ação Editar.

11. O sistema exibe o resultado de

sucesso.

Fluxo 3

12. O ator, na listagem de produtos,

seleciona a opção excluir.

13. O sistema apresenta a mensagem

de confirmação.

14. O ator confirma a opção. 15. O sistema apresenta o resultado

da operação.

Fluxo 4

16. O ator, na listagem de produtos,

seleciona a opção visualizar.

17. O sistema apresenta a página

Visualizar Produto.

Sequências Alternativa.

Linha 7 O usuário não informa os dados corretamente. O sistema exibe

uma mensagem de erro correspondente

Linha 11 O usuário não informa os dados corretamente. O sistema exibe

uma mensagem de erro correspondente

Linha 14 O ator, na mensagem de confirmação, não confirma a ação. O

sistema não realiza nenhuma ação.

7.2.2. Visualizar Produto

Page 59: Monografia_FelipeAugusto

59

Figura 34 - Tela de ilustração do caso de uso Visualizar Produto

Caso de Uso: Visualizar Produto

Ator: Administrador

Finalidade: Visualizar dados do produto, listar e inserir processos e

movimentações.

Page 60: Monografia_FelipeAugusto

60

Visão Geral: Tem como finalidades visualizar os dados do produto,

listar e inserir processos e suas movimentações.

Pré–Condições: Ter acessado a opção visualizar do caso de uso

Gerenciar Produto.

Pós–Condições:

Sequência Típica de Eventos

Ação do Ator Resposta do Sistema

1. O sistema apresenta os dados de

cadastro do produto bem como os

Casos de Uso Inserir processo e Listar

Processos.

Sequências Alternativa.

7.2.3. Listar Processo

Page 61: Monografia_FelipeAugusto

61

Figura 35 - Tela de ilustração do caso de uso Listar Processo

Caso de Uso: Listar Processo

Ator: Administrador

Finalidade: Listar processos cadastrados.

Visão Geral: Permite ao ator listar todos os processos cadastrados

de um determinado produto.

Page 62: Monografia_FelipeAugusto

62

Pré–Condições: O ator ter acessado a o caso de uso Visualizar

Produto.

Pós–Condições:

Sequência Típica de Eventos

Ação do Ator Resposta do Sistema

1. O ator seleciona Processo no caso

de uso Visualizar Produto.

2. O sistema exibe a lista de todos os

processos cadastrados.

Sequências Alternativas

Linha 2 Se não houver registros, o sistema informa uma mensagem

correspondente.

7.2.4. Inserir Processo

Page 63: Monografia_FelipeAugusto

63

Figura 36 - Tela de ilustração do caso de uso Inserir Processo

Caso de Uso: Inserir Processo

Ator: Administrador

Finalidade: Inserir novo processo.

Visão Geral: Permite ao ator inserir um novo processo a um

determinado produto.

Page 64: Monografia_FelipeAugusto

64

Pré–Condições: O ator ter acessado a o caso de uso Visualizar

Produto.

Pós–Condições: É criada uma instância do processo e vinculada ao

produto.

Sequência Típica de Eventos

Ação do Ator Resposta do Sistema

1. O ator seleciona a opção Inserir

Processo.

2. O sistema apresenta o formulário

de Cadastro

3. O ator preenche os dados do

formulário e confirma a ação.

4. O sistema exibe o resultado de

sucesso.

Sequências Alternativas

Linha 3 O ator seleciona a opção limpar. O sistema limpa os campos do

formulário.

7.2.5. Visualizar Processo

Page 65: Monografia_FelipeAugusto

65

Figura 37 - Tela de ilustração do caso de uso Visualizar Processo

Caso de Uso: Visualizar Processo

Ator: Administrador

Finalidade: Visualizar movimentações vinculadas ao processo.

Visão Geral: Permite ao ator, visualizar todas as movimentações

vinculadas a um determinado processo.

Page 66: Monografia_FelipeAugusto

66

Pré–Condições: O ator ter acessado o caso de uso Listar Processos.

Pós–Condições:

São apresentadas todas as movimentações vinculadas

a tal processo, bem como o caso de uso Inserir

Movimentação.

Sequência Típica de Eventos

Ação do Ator Resposta do Sistema

1. O ator seleciona um dos

processos listados.

2. O sistema apresenta a lista de

todas as movimentações vinculadas a

tal processo.

Sequências Alternativas

7.2.6. Excluir Processo

Page 67: Monografia_FelipeAugusto

67

Figura 38 - Tela de ilustração do caso de uso Excluir Processo

Caso de Uso: Excluir Processo

Ator: Administrador

Finalidade: Excluir um processos cadastrado.

Page 68: Monografia_FelipeAugusto

68

Visão Geral: Permite ao ator, excluir um determinado processo caso

o mesmo não haja movimentações.

Pré–Condições: O ator ter acessado o caso de uso Visualizar

Processo.

Pós–Condições: É apagada a instancia do processo.

Sequência Típica de Eventos

Ação do Ator Resposta do Sistema

1. O ator solicita a exclusão do

processo.

2. O sistema apresenta a mensagem

de confirmação.

3. O ator confirma a opção. 4. O sistema apresenta o resultado de

sucesso.

Sequências Alternativas

Linha 3 O ator, na mensagem de confirmação, não confirma a ação. O

sistema não realiza nenhuma ação.

7.2.7. Inserir Movimentação

Page 69: Monografia_FelipeAugusto

69

Figura 39 - Tela de ilustração do caso de uso Inserir Movimentação

Caso de Uso: Inserir Movimentação

Ator: Administrador

Finalidade: Inserir uma movimentação e vincula-la a um

determinado processo..

Visão Geral: Permite ao ator, o cadastro de uma nova

movimentação para um determinado processo.

Page 70: Monografia_FelipeAugusto

70

Pré–Condições: O ator ter acessado a o caso de uso Visualizar

Processo.

Pós–Condições: É criada uma instância da movimentação e vinculada a

um determinado processo.

Sequência Típica de Eventos

Ação do Ator Resposta do Sistema

1. O ator seleciona a opção visualizar

processo.

2. O sistema apresenta a opção

Inserir Movimentação.

3. O ator seleciona a opção Inserir

movimentação.

4. O sistema apresenta o formulário

de cadastro.

5. O ator preenche os dados do

formulário e confirma a ação.

6. O sistema exibe o resultado de

sucesso.

Sequências Alternativas

Linha 5 O ator seleciona a opção limpar. O sistema limpa os campos do

formulário.

Linha 6 Se houver erros na inserção dos dados obrigatórios, o sistema

informa uma mensagem correspondente.

7.2.8. Visualizar Movimentação

Page 71: Monografia_FelipeAugusto

71

Figura 40 - Tela de ilustração do caso de uso Visualizar Movimentação

Caso de Uso: Visualizar Movimentação

Ator: Administrador

Finalidade: Visualizar dados de cadastro.

Visão Geral: Permite ao ator, visualizar os dados de cadastro da

movimentação

Page 72: Monografia_FelipeAugusto

72

Pré–Condições: O ator ter acessado o caso de uso Visualizar

Processo.

Pós–Condições:

Sequência Típica de Eventos

Ação do Ator Resposta do Sistema

1. O ator seleciona a movimentação

desejada.

2. O sistema apresenta os dados de

cadastro de uma determinada

movimentação.

Sequências Alternativas

Linha 2 Se não houver registros o sistema informa uma mensagem

correspondente.

7.3. Diagrama de Sequências e Contratos

7.3.1. Visualizar Produto

Page 73: Monografia_FelipeAugusto

73

Figura 41 - Diagrama de Sequência do requisito Visualizar Produto

7.3.2. Inserir Movimentação

Page 74: Monografia_FelipeAugusto

74

Figura 42 - Diagrama de Sequência do requisito Inserir movimentação