UNIVERSIDADE ESTADUAL DA ZONA OESTE COLEGIADO DE COMPUTAÇÃO E MATEMÁTICA APLICADA CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO DIARIUM: APLICAÇÃO WEB VOLTADA PARA O REGISTRO DE ATIVIDADES DIÁRIAS por Jeferson Farias Calazans Profa. Dra. Dilza de Mattos Szwarcman Orientadora Rio de Janeiro (RJ), Julho de 2014 UNIVERSIDADE ESTADUAL DA ZONA OESTE COLEGIADO DE COMPUTAÇÃO E MATEMÁTICA APLICADA CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO DIARIUM: APLICAÇÃO WEB VOLTADA PARA O REGISTRO DE ATIVIDADES DIÁRIAS por Jeferson Farias Calazans 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: Profa. Dra. Dilza de Mattos Szwarcman Rio de Janeiro (RJ), Julho de 2014 DIARIUM: APLICAÇÃO WEB VOLTADA PARA O REGISTRO DE ATIVIDADES DIÁRIAS Elaborado por Jeferson Farias Calazans Aluno do Curso Ciência da Computação da UEZO Este trabalho de Graduação foi analisado e aprovado com Grau: .............................................. Rio de Janeiro, _______ de ______________ de 2014 Rio de Janeiro (RJ), Julho de 2014 Calazans, Jeferson Farias Diarium: Aplicação Web voltada para o registro de atividades diárias / Jeferson Farias Calazans. – Rio de Janeiro, 2014. 51f. Trabalho de conclusão de curso – Centro Universitário Estadual da Zona Oeste, Curso de Bacharelado em Ciência da Computação. Orientadora: Profa. Dra. Dilza de Mattos Szwarcman Dedico este trabalho a meus queridos pais, Heitor e Lúcia, e à Michele, minha amada, por todo carinho e amor. AGRADECIMENTOS Aos meus pais, Heitor Calazans Júnior e Lúcia Silva Farias Calazans, pelo cuidado, orientação, paciência e apoio durante toda minha formação. À Michele Piezente, minha amada, por seu apoio, carinho, dedicação e paciência desde sempre e durante toda a produção deste trabalho. A minha orientadora Dilza de Mattos Szwarcman, por ter acreditado e colaborado para a conclusão deste trabalho e também por sua atenção, dedicação, amizade e companheirismo. Agradeço também a todas as pessoas que de certa forma me influenciaram e me fizeram chegar até aqui. "Inteligência é a habilidade de evitar fazer o trabalho e, mesmo assim conseguir ter o trabalho realizado” Linus Torvalds LISTA DE ABREVIATURAS MVC Model-View-Controller, arquitetura de software HTML Hypertext Markup Language, linguagem para marcação de texto CSS Cascade StyleSheet, linguagem para estilização MVP Minimum Viable Product MTV Model-Template-View PHP Hypertext Preprocessor, linguagem de programação HTTP Hypertext Transfer Protocol, protocolo de comunicação IIS Internet Information Server URL Uniform Resource Locator URI Uniform Resource Identifier LISTA DE FIGURAS Figura 1 – Explicação do funcionamento de um sistema web..........................................4 Figura 2 – Simulação de uma solicitação e resposta.........................................................6 Figura 3 – Demonstrativo de métodos HTTP em um sistema web...................................7 Figura 4 – Mostrando em destaque códigos de resposta HTTP em uma aplicação Django...............................................................................................................................8 Figura 5 – Arquitetura MVC.............................................................................................8 Figura 6 – Comparativo de ambiente de informação não planejado e planejado............10 Figura 7 – Site da empresa StarBucks utilizando Responsive Web Design....................11 Figura 8 – Flat Design aplicado no Windows 8..............................................................12 Figura 9 – Arquitetura cliente-servidor...........................................................................15 Figura 10 – Kanban.........................................................................................................16 Figura 11 – Arquitetura de uma aplicação Django..........................................................17 Figura 12 – Arquitetura do sistema Diarium...................................................................19 Figura 13 – Diagrama de Classes do Sistema..................................................................20 Figura 14 – Diagrama de Caso de Uso............................................................................21 Figura 15 – Model que representa o mapeamento da tabela Evento...............................23 Figura 16 – Template utilizado na tela de autenticação do sistema Diarium..................24 Figura 17 – View utilizada na tela de visualização do Evento do sistema Diarium........25 Figura 18 - Representação módulo Calendarium............................................................26 Figura 19 – Tela de cadastro no sistema..........................................................................27 Figura 20 – Tela de autenticação do sistema...................................................................27 Figura 21 – Tela de recuperar senha no sistema..............................................................28 Figura 22 – Tela inicial do sistema..................................................................................28 Figura 23 – Tela de visualização do perfil e estatísticas do usuário................................29 Figura 24 – Tela de editar perfil do usuário....................................................................29 Figura 25 – Tela de editar email do usuário....................................................................30 Figura 26 – Tela de editar senha do usuário....................................................................30 Figura 27 – Tela de adicionar evento..............................................................................31 Figura 28 – Tela de visualizar e editar evento.................................................................31 Figura 29 – Tela de buscar evento...................................................................................32 Figura 30 – Tela de favoritos...........................................................................................32 Figura 31 – Tela de calendário........................................................................................33 LISTA DE TABELAS Tabela 1 – Tabela lógica baseada na entidade Usuário...................................................22 Tabela 2 – Tabela lógica baseada na entidade Evento....................................................22 Tabela 3 – Tabela lógica baseada na entidade Tag ........................................................23 Tabela 4 – Tabela lógica baseada no relacionamento entre as entidades Evento e Tag .........................................................................................................................................23 RESUMO A Internet evoluiu muito desde a sua criação, em especial no aspecto social com a formação de comunidades virtuais. Há, atualmente, diversas redes sociais onde muitas informações são compartilhadas. Naturalmente, tal evolução impulsionou o aspecto tecnológico, trazendo novas abordagens para o desenvolvimento de sistemas web, onde a interface com dispositivos móveis é tomada como requisito essencial. Além disso, tais tecnologias buscam prover alta rapidez de desenvolvimento, além de facilidade de extensão e manutenção. Nesse contexto, este trabalho se dedica à investigação de tecnologias atuais para o desenvolvimento web e à aplicação integrada de várias delas na construção do sistema Diarium, que tem como finalidade auxiliar os usuários no registro e organização de atividades e compromissos do dia-a-dia, podendo ser acessado a partir de computadores ou de dispositivos móveis. Tal aplicação teve como motivação o fato que, na maioria das redes sociais atuais, o usuário fica sem a opção de manter registros de acontecimentos de interesse de forma inteiramente privada. Palavras-chave: sistemas web, organização de atividades, diário, agenda. ABSTRACT The Internet has evolved greatly since its inception, particularly in the social aspect, with the formation of several virtual communities. There are currently many different social networks where information is shared. Naturally, this development has boosted the technological aspect, bringing new approaches for the development of web systems, where the interface with mobile devices is taken as an essential requirement. Furthermore, such technologies seek to provide high speed of development, and ease of extension and maintenance. In this context, this work is devoted to the investigation of current technologies for web development and integrated application of several of them in the construction of Diarium a system that aims to aid users in recording and organizing activities and appointments for the day-to-day and that can be accessed from computers or mobile devices. This application was motivated by the fact that, in most of today's social networks, the user is left with no option of keeping records of events of interest in an entirely private way. Keywords: web systems, organizing activities, journal, schedule. SUMÁRIO CAPÍTULO 1 INTRODUÇÃO......................................................................................1 1.1 APRESENTAÇÃO......................................................................................................1 1.2 OBJETIVOS................................................................................................................2 1.3 JUSTIFICATIVA........................................................................................................3 CAPÍTULO 2 FUNDAMENTAÇÃO TEÓRICA.........................................................4 2.1 SISTEMAS WEB........................................................................................................4 2.2 SERVIDORES WEB...................................................................................................5 2.3 PROTOCOLO HTTP..................................................................................................5 2.4 ARQUITETURA MVC...............................................................................................8 2.5 FRAMEWORKS WEB...............................................................................................9 2.6 ARQUITETURA DA INFORMAÇÃO....................................................................10 2.7 RESPONSIVE WEB DESIGN.................................................................................11 2.8 FLAT DESIGN..........................................................................................................11 2.9 METODOLOGIAS ÁGEIS DE DESENVOLVIMENTO........................................12 2.10 CONTROLE DE VERSÃO.................................................................................14 CAPÍTULO 3 O SISTEMA DIARIUM.......................................................................15 3.1 TECNOLOGIAS UTILIZADAS..............................................................................15 3.1.1 KANBAN............................................................................................................15 3.1.2 GIT.......................................................................................................................16 3.1.3 PYTHON.............................................................................................................16 3.1.4 DJANGO.............................................................................................................16 3.1.5 POSTGRESQL....................................................................................................17 3.1.6 HTML5................................................................................................................17 3.1.7 CSS e CSS3.........................................................................................................17 3.1.8 JAVASCRIPT.....................................................................................................18 3.2 ARQUITETURA.......................................................................................................19 3.3 MODELAGEM.........................................................................................................19 3.3.1 ATORES DO SISTEMA.....................................................................................19 3.3.2 DIAGRAMA DE CLASSES...............................................................................20 3.3.3 DIAGRAMA DE CASO DE USO......................................................................21 3.3.3.1 CRIA PERFIL.....................................................................................................21 3.3.3.2 CRIA TAG..........................................................................................................21 3.3.3.3 CRIA EVENTO...................................................................................................21 3.3.3.4 BUSCA EVENTO...............................................................................................21 3.3.3.5 ESCOLHE EVENTO FAVORITO.....................................................................22 3.3.3.6 GERENCIA USUÁRIO......................................................................................22 3.3.4 MODELO LÓGICO............................................................................................22 3.4 IMPLEMENTAÇÃO.................................................................................................23 3.4.1 MODEL – TEMPLATE – VIEW........................................................................23 3.4.2 CALENDARIUM................................................................................................26 3.4.3 TELAS.................................................................................................................27 3.4.3.1 CADASTRO NO SISTEMA...............................................................................27 3.4.3.2 AUTENTICAÇÃO NO SISTEMA.....................................................................27 3.4.3.3 RECUPERAR SENHA NO SISTEMA..............................................................28 3.4.3.4 TELA INICIAL...................................................................................................28 3.4.3.5 VISUALIZAÇÃO DO PERFIL E ESTATÍSTICAS..........................................29 3.4.3.6 EDITAR PERFIL DO USUÁRIO.......................................................................29 3.4.3.7 EDITAR EMAIL DO USUÁRIO.......................................................................30 3.4.3.8 EDITAR SENHA DO USUÁRIO.......................................................................30 3.4.3.9 ADICIONAR EVENTO......................................................................................30 3.4.3.10 VISUALIZAR E EDITAR EVENTO......................................................31 3.4.3.11 BUSCAR EVENTO.................................................................................32 3.4.3.12 FAVORITOS...........................................................................................32 3.4.3.13 CALENDÁRIO........................................................................................33 CAPÍTULO 4 CONCLUSÃO.......................................................................................34 REFERÊNCIAS BIBLIOGRÁFICAS........................................................................35 SITES...............................................................................................................................35 CAPÍTULO 1 INTRODUÇÃO 1.1 APRESENTAÇÃO A Internet está presente no dia a dia da maioria das pessoas, tornando-se bastante utilizada para o entretenimento, convívio social, como fonte de informação e na resolução de diversos problemas. Dentro de uma visão mais ampla, pode-se verificar que, com o passar dos anos foram surgindo diversos dispositivos que permitem às pessoas utilizarem a Internet de forma convencional, não ficando restrito o seu uso apenas aos computadores. Acompanhando essa escalada, surgiram diversas redes sociais que transformaram a maneira como as pessoas se comunicam e interagem na Internet. Elas tem se revelado uma maneira mais simples e rápida de transmitir informações e estabelecer relacionamentos. Porém, nem todos os fatos ou atividades precisam ser expostos publicamente nas redes sociais e, se atendo a essa questão, o presente projeto se propõe a construir um diário virtual, denominado Diarium, que é tomado como base para o estudo e investigação de tecnologias modernas para desenvolvimento de sistemas web. Em especial, pretende-se investigar a arquitetura Model View Control (MVC), muito bem aceita pela comunidade de cientistas da computação e que tem impulsionado a construção de diversos Frameworks. O sistema Diarium foi idealizado para auxiliar o usuário a recuperar sua privacidade na Internet, utilizando um sistema para registros de atividades e compromissos do dia-a-dia de forma inteiramente privada. 1 1.2 OBJETIVOS Este trabalho de conclusão de curso tem por objetivo a criação de um sistema web que possa ser acessado através de dispositivos móveis ou computadores convencionais. Todo o trabalho está baseado na utilização de tecnologias de programação e metodologias de desenvolvimento atuais. 2 1.3 JUSTIFICATIVA Existem duas questões determinantes para a escolha do referido tema para o trabalho de conclusão de curso. Primeiramente, há um interesse muito grande do autor em aprofundar o seu conhecimento das práticas atuais de desenvolvimento de software voltado para ambientes web. Essa área profissional mostra-se bastante promissora para aqueles que possuem domínio sobre ela. Além disso, embora haja no mercado atual diversos sistemas web que visam o compartilhamento de informações, observa-se claramente a carência de aplicativos que foquem na privacidade dos registros do usuário. 3 CAPÍTULO 2 FUNDAMENTAÇÃO TEÓRICA O sistema proposto neste trabalho emprega tecnologias computacionais atuais, reconhecidamente vantajosas em especial por se basearem em modelos técnicos bem estabelecidos, tal como a arquitetura Model View Control (MVC). Além disso, o projeto emprega metodologias de desenvolvimento que seguem os preceitos mais atuais da Engenharia de Computação. As seções que se seguem descrevem a fundamentação teórica do trabalho 2.1 SISTEMAS WEB Sistemas web são sistemas disponíveis na Internet ou em uma rede corporativa, de acesso restrito ou público a diversos usuários, por meio de um navegador, em um computador pessoal, notebook, tablet ou smartphone (Figura 1). A Internet foi um fator fundamental para o rápido crescimento do uso de sistemas web. Antes, o processamento de informações era feito no âmbito dos computadores pessoais ou de redes corporativas. Atualmente, a Internet permite a implantação de sistemas de acesso compartilhado, em tempo real, e ainda com compartilhamento de dados, podendo ser consultados de qualquer lugar do mundo e a qualquer hora. Figura 1 – Explicação do funcionamento de um sistema web 4 2.2 SERVIDORES WEB Servidores Web são programas de computador que tem por responsabilidade aceitar de clientes remotos, geralmente os navegadores, e servi-los com respostas, que geralmente são páginas web, tais como documentos HTML (Hypertext Markup Language) com objetos embutidos (imagens, vídeos, etc). Para se hospedar um site ou um sistema web, é necessário um Servidor Web. A seguir apresenta-se uma breve descrição sobre os principais servidores web utilizados atualmente: Apache: é o servidor web mais utilizado no mundo. O Apache oferece uma variedade de recursos, e é suportado pelas principais linguagens de programação (Python, Ruby, PHP, etc). IIS: é o servidor web da Microsoft. Ele é parte integrante do Windows Server, apesar de não ser habilitado por padrão em uma instalação normal do Windows. Como principal característica desse servidor, está a integração com as tecnologias criadas pela Microsoft. Nginx: é um servidor web rápido, leve, e com inúmeras possibilidades de configuração para melhor desempenho. Ele também pode ser utilizado como um servidor proxy reverso, bem como um servidor proxy de email. 2.3 PROTOCOLO HTTP O HTTP (Hypertext Transfer Protocol) é um protocolo de comunicação em rede, na camada de aplicação do Modelo OSI, utilizado em sistemas hipermídia distribuídos para permitir a transmissão de informações entre clientes e servidores. A comunicação é baseada em requisições (requests) e respostas (responses) (Figura 2). 5 Figura 2 – Simulação de uma solicitação e resposta O protocolo HTTP define oito tipos de requisição ou métodos. A seguir está a lista com as descrições dos mesmos. GET: solicita ao servidor um recurso identificado por uma URI (Uniform Resource Identifier). É o método padrão, porque é a forma como o navegador chama o servidor quando se digita uma URL (Uniform Resource Locator). POST: Os parâmetros de solicitação são codificados no corpo da mensagem. Seu uso mais frequente é na submissão de formulários. HEAD: similar ao método GET, o servidor apenas retoma a linha de resposta e os cabeçalhos de resposta. PUT: esse método permite o envio de arquivos para o servidor web. DELETE: permite a exclusão de documentos dentro do servidor web. OPTIONS: recupera os métodos HTTP que o servidor web aceita. TRACE: permite depurar as requisições, devolvendo o cabeçalho de um documento. CONNECT: serve para usar com um proxy que possa se tornar um túnel TCP/IP transparente. 6 Figura 3 – Demonstrativo de métodos HTTP em um sistema web Na Figura 3 pode-se visualizar exemplos do uso de métodos HTTP em um sistema web. O conteúdo de uma requisição HTTP inclui o tipo de método, a página que será acessada e parâmetros do formulário. Em contrapartida, o conteúdo de uma resposta inclui o código de status (informando se a solicitação foi realizada com sucesso ou não), o tipo de conteúdo (HTML, figuras, textos, etc.) e o conteúdo propriamente dito. Uma resposta HTTP é composta de duas partes: o cabeçalho e o corpo. A informação do cabeçalho informa o protocolo que está sendo usado no navegador, o tipo de conteúdo que está incluído no corpo e se ocorreu ou não erro na solicitação. A linha inicial de uma resposta HTTP indica ao cliente se sua requisição foi bem sucedida ou não. Essa situação é fornecida através de um código de retorno e uma frase explicativa. A seguir está a lista dos mais encontrados: 200: informa que a confirmação da requisição foi respondida com sucesso. 304 (NOT MODIFIED): informa que os recursos que não foram modificados desde a última vez que foi feito uma solicitação. 401 (UNAUTHORIZED): informa que o cliente não tem acesso autorizado para acessar a área requisitada. 403 (FORBIDDEN): informa que o acesso à área requisitada falhou. 404 (NOT FOUND): informa que o quer que tenha sido solicitado não foi encontrado. 505 (SERVER ERROR): informa que ocorreu um erro no servidor ao cumprir uma requisição válida. 7 Figura 4 – Mostrando em destaque códigos de resposta HTTP em uma aplicação Django Na Figura 4 pode-se visualizar exemplos de respostas HTTP em uma aplicação web. 2.4 ARQUITETURA MVC A Arquitetura MVC é um padrão de desenvolvimento de software que separa as representações internas dos dados (e as suas regras de negócio) da forma como eles são apresentados ao usuário, ou seja da interface com a qual ele interage. Para isso, o padrão MVC divide a aplicação nas três partes apresentadas na Figura 5: Modelo (Model), Visão (View) e Controlador (Controller). Originalmente desenvolvida para computação pessoal, a Arquitetura MVC tornou-se amplamente difundida como uma arquitetura padrão para o desenvolvimento de sistemas web. Figura 5 - Arquitetura MVC O Controlador interpreta as requisições do usuário, mapeando-as em comandos que são enviados para o Modelo e para a Visão para efetuar a ação desejada. O Modelo por sua vez, é responsável pela gerência dos dados, além de responder a perguntas sobre o 8 estado corrente dos mesmos e também a solicitações de mudanças desse estado. O Modelo é, em geral, a principal estrutura da arquitetura MVC, normalmente concentrando as regras de negócio e modelos de solução do problema que se está tentando resolver. Já a Visão é responsável por apresentar as informações para o usuário através de uma interface. Ela fica totalmente separada da lógica do sistema, recebendo as instruções do Controlador e as informações do Modelo para então exibi-las. Além disso, a Visão também se comunica de volta com o Modelo e com o Controlador para reportar alterações no seu estado. 2.5 FRAMEWORKS WEB Diversas linguagens de programação são hoje utilizadas para o desenvolvimento de sistemas web. Muitas delas foram impulsionadas pela criação de Frameworks Web que facilitam o desenvolvimento dessas aplicações. Os Frameworks Web utilizam a Arquitetura MVC como padrão para o desenvolvimento de sistemas web. Alguns deles utilizam algumas variações dessa arquitetura, porém, mantendo funcionamento semelhante. Abaixo, segue uma lista das principais linguagens utilizadas atualmente e seus respectivos Frameworks Web: Python é uma linguagem de programação de alto nível, interpretada, que tem como característica suportar diferentes paradigmas, tais como: imperativo, o funcional e o orientado a objetos. Para o desenvolvimento web em Python, há disponível o Framework Django. Hoje bem aceito, ele foi lançado no ano de 2005 e utiliza o padrão MTV (Model-Template-View). Ruby é uma linguagem de programação interpretada multiparadigma de tipagem dinâmica e forte. Ela suporta programação funcional, orientada a objetos, imperativa e reflexiva. Nesse caso, o framework web mais utilizado é o Ruby on Rails que foi criado no ano de 2004 e foi o precursor no uso da arquitetura MVC para desenvolvimento de sistemas web. PHP é uma linguagem de programação interpretada, usada originalmente para desenvolvimento de aplicações atuantes no lado do servidor, capaz de gerar conteúdo dinâmico na web. O framework web em PHP mais utilizado é o Zend Framework, lançado no ano de 2005. Desenvolvido com o objetivo de 9 simplificar o desenvolvimento web, ele promove as melhores práticas na comunidade de desenvolvedores PHP e a utilização do padrão MVC. 2.6 ARQUITETURA DA INFORMAÇÃO A área de Arquitetura da Informação tem a preocupação de organizar a informação para torná-la clara e compreensível a quem a observa (Figura 6). Figura 6 – Comparativo de ambiente de informação não planejado e planejado O papel da Arquitetura da Informação em sistemas web é organizar toda a informação daquele ambiente, estruturando e distribuindo as áreas, principais e secundárias, para que as informações possam ser encontradas com facilidade. Para isso, são utilizados variadas técnicas de design centradas no usuário, como: testes de usabilidade, pesquisas, criação de personas e fluxogramas. Teste de usabilidade tem por objetivo verificar a facilidade que o sistema web ou site possui de ser claramente compreendido e manipulado pelo usuário. A criação de personas serve como forma de entender e enxergar melhor um usuário, pode ser uma descrição mais simples ou detalhada, com o intuito de personificar um usuário fictício dentro do público alvo. Já os fluxogramas são fundamentais para o olhar realista do projeto, pois além de compreender os caminhos ainda permite encontrar fluxos mais objetivos para a visualização de determinadas seções ou telas. 10 2.7 RESPONSIVE WEB DESIGN Responsive Web Design é um conceito da área de Comunicação Visual, que prega que a informação deve estar acessível de forma confortável para qualquer que seja o meio de acesso (de desktops e notebooks a tablets e smartphones). Com base nesse conceito, foram criadas soluções técnicas para garantir que os elementos de interface dos sistemas web se adaptem automaticamente à largura de tela do dispositivo no qual ele está sendo visualizado (Figura 7). Figura 7 – Site da empresa StarBucks utilizando Responsive Web Design 2.8 FLAT DESIGN Flat Design ou design plano é a nova tendência para criação das interfaces digitais. Com filosofia simplista e minimalista esse estilo é focado na usabilidade e centrado nos usuários. O Flat Design baseia-se na eliminação dos elementos desnecessários, buscando uma interface mais intuitiva e fácil de utilizar. Atualmente, esse é um conceito de design largamente utilizado em conjunto com o Responsive Web Design. As principais características do Flat Design são: 11 Utilização de cores sólidas; Tipografia nítida; Contraste bem definido; Espaços em branco exagerados. Figura 8 – Flat Design aplicado no Windows 8 2.9 METODOLOGIAS ÁGEIS DE DESENVOLVIMENTO Metodologias Ágeis são largamente adotadas atualmente, pois fornecem uma estrutura conceitual para reger projetos de software que prioriza a velocidade de desenvolvimento, mantendo, porém, o alto nível de qualidade. Elas são baseadas no Manifesto Ágil, que estabelece os doze princípios listados a seguir. A maior prioridade é satisfazer o cliente, através da entrega adiantada e contínua de software de valor. Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis se adequam a mudanças, para que o cliente possa tirar vantagens competitivas. Entregar software funcionando com frequência, na escala de semanas até meses. Pessoas relacionadas a negócios e desenvolvedores devem trabalhar em conjunto e diariamente, durante todo o curso do projeto. 12 Construir projetos ao redor de indivíduos motivados, dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho. O método mais eficiente e eficaz de transmitir informações para um time de desenvolvimento, ou entre membros da equipe, é através de uma conversa cara a cara. Software funcional é a medida primária de progresso. Processos ágeis promovem um ambiente sustentável. Os patrocinadores, desenvolvedores e usuários, devem ser capazes de manter indefinidamente, passos constantes. Contínua atenção à excelência técnica e ao bom design; aumenta a agilidade. Simplicidade é a arte de maximizar a quantidade de trabalho que não precisou ser feito. As melhores arquiteturas, requisitos e designs emergem de times autoorganizáveis. Em intervalos regulares, o time reflete em como ficar mais efetivo, então, se ajusta e otimiza seu comportamento de acordo. Scrum, Extreme Programming (XP) e Kanban são exemplos de métodos ágeis. Cada um deles traz uma abordagem diferente que inclui diversos valores, práticas e reuniões. O Scrum, por exemplo, traz uma abordagem mais voltada para gestão, com foco maior nas reuniões, no planejamento e na melhoria contínua. No XP, o enfoque maior são as práticas técnicas. Já o Kanban difere da maioria dos métodos ágeis, pois não possui interações. Ao invés disso, desacopla o planejamento, a priorização, o desenvolvimento e a entrega, de forma que cada uma dessas atividades possa ter sua própria cadência para melhor se ajustar à realidade e necessidade que o processo demanda. As Metodologias Ágeis permitem a aplicação do conceito de Minimum Viable Product (MVP), que determina primeiro cobrir, através de uma pesquisa, o que o mercado não oferece, para depois desenvolver as funcionalidades essenciais para o lançamento do sistema, e só então programar mais funcionalidades para o sistema, baseadas no feedback dos usuários. 13 2.10 CONTROLE DE VERSÃO Um sistema de Controle de Versão registra as mudanças feitas em um arquivo ou conjunto de arquivos ao longo do tempo de forma que versões específicas possam ser recuperadas. A utilização de sistemas de controle de versão foi impulsionada pela expansão da aplicabilidade de metodologias ágeis para desenvolvimento de software. Tais sistemas são, também, muito comuns no desenvolvimento de software livre. Em diversos aspectos, a utilização de um sistema de versão, se mostra muito útil, tanto para projetos pessoais, pequenos, como para grandes projetos comerciais. Segue abaixo a descrição de três controladores muito utilizados atualmente. Subversion (SVN): é um sistema de controle de versão open source, multiplataforma, desenvolvido pela Apache Software Foundation. Mercurial: é uma ferramenta multiplataforma de controle de versão distribuído sob licença open source para desenvolvedores de software. Git: é um sistema open source de controle de versão desenvolvido pelo criador do kernel do Linux, Linus Torvalds. 14 CAPÍTULO 3 O SISTEMA DIARIUM O sistema Diarium segue o conceito de arquitetura cliente-servidor, comumente adotado nos aplicativos web, podendo ter, como clientes, aplicativos comuns de navegação na Internet, instalados em computadores ou em dispositivos móveis (Figura 9). Figura 9 –Arquitetura cliente-servidor 3.1 TECNOLOGIAS UTILIZADAS Em um projeto como este, uma questão muito importante é a escolha das tecnologias de programação e das metodologias a serem empregadas para o desenvolvimento. Tomouse como base um conjunto de tecnologias open-source, de grande aceitação na comunidade de cientistas da computação, com extensa documentação, bem exemplificadas e com pequenas chances de serem descontinuadas. 3.1.1 KANBAN O uso do Kanban foi de grande valia para o desenvolvimento deste trabalho, pois no Kanban o processo é um fluxo contínuo e não é preciso que todo o trabalho planejado esteja concluído para que uma entrega seja realizada. Isso fez com que o desenvolvimento da documentação ocorresse em paralelo com o do projeto em si (Figura 10). 15 Figura 10 – Kanban 3.1.2 GIT No desenvolvimento deste trabalho de conclusão de curso, utilizou-se o sistema Git para gerenciamento de versões de código fonte. Tal sistema adota um modelo distribuído de controle de versão que favorece a maior velocidade de desenvolvimento. O uso desse sistema foi fundamental para uma melhor organização do código fonte. 3.1.3 PYTHON A linguagem de programação utilizada é o Python, uma linguagem de alto nível e código fonte livre e de uso geral, criada com o objetivo de permitir os programadores desenvolverem código de alta qualidade e fácil de manter. 3.1.4 DJANGO Em consonância com a escolha da linguagem, o framework utilizado é o Django, um framework para desenvolvimento de sistemas web, escrito em Python e de código livre que utiliza o padrão MTV (Model – Template – View) visto na Figura 11. Um dos elementos mais importantes do Django é seu sistema de templates. Ele possui uma forma peculiar de trabalhar que facilita a criação de páginas HTML. Um template pode conter variáveis, que são substituídas por valores quando o modelo é avaliado, e tags, que controlam a lógica do modelo. 16 Figura 11 – Arquitetura de uma aplicação Django 3.1.5 POSTGRESQL O sistema de gerenciamento de banco de dados escolhido é o PostgreSQL, um software desenvolvido como projeto de código livre e que utiliza o modelo relacional de base de dados. É atualmente um dos bancos de dados mais populares do mundo. 3.1.6 HTML5 A linguagem para estruturação e apresentação de conteúdo para web escolhida será HTML5, quinta versão da linguagem HTML que é utilizada para criação de páginas web. Essa nova versão traz importantes mudanças quanto ao papel do HTML no mundo web, através de novas funcionalidades como semântica e acessibilidade. 3.1.7 CSS e CSS3 Para definir estilos das páginas web do projeto são utilizadas, de forma conjunta, CSS e CSS3. CSS foi criado para prover a separação entre o formato e o conteúdo do documento HTML. Sua mais nova versão, CSS3, define estilos para páginas web com 17 efeitos de transição, imagem, entre outros, que dão um novo estilo às aplicações web em todos os aspectos de design do layout. 3.1.8 JAVASCRIPT Para a criação de scripts a serem executados no lado cliente a linguagem utilizada é o JavaScript, uma linguagem de programação interpretada. Ela foi implementada originalmente como parte dos navegadores web para que scripts pudessem ser executados do lado cliente e, dessa forma, erros de entrada de dados pudessem ser tratados localmente sem a necessidade do acesso ao servidor. A linguagem evoluiu para permitir comunicação assíncrona com o servidor e carregamento parcial de páginas. 18 3.2 ARQUITETURA Figura 12 – Arquitetura de uma aplicação Django A Figura 11 ilustra o funcionamento do sistema Diarium, baseado na arquitetura MTV (Model – Template – View) do Django. 3.3 MODELAGEM 3.3.1 ATORES DO SISTEMA Usuário: representa qualquer usuário da base de dados que pode criar, editar ou excluir um evento no sistema. Administrador: usuário com privilégios responsável pela atualização e manutenção do sistema. 19 3.3.2 DIAGRAMA DE CLASSES Figura 13 – Diagrama de Classes do Sistema 20 3.3.3 DIAGRAMA DE CASO DE USO Figura 14 – Diagrama de Caso de Uso 3.3.3.1 CRIA PERFIL Este caso de uso permite ao usuário do sistema criar um perfil para ter acesso ao sistema. 3.3.3.2 CRIA TAG Este caso de uso permite ao usuário do sistema criar, editar ou excluir as tags que serão inseridas em seus eventos. 3.3.3.3 CRIA EVENTO Este caso de uso permite ao usuário do sistema criar, editar ou excluir seus eventos. 3.3.3.4 BUSCA EVENTO Este caso de uso permite ao usuário do sistema fazer buscas por seus eventos. 21 3.3.3.5 ESCOLHE EVENTO FAVORITO Este caso de uso permite o usuário do sistema escolher seus eventos favoritos. 3.3.3.6 GERENCIA USUÁRIO Este caso de uso permite ao administrador do sistema gerenciar os usuários cadastrados. 3.4 MODELO LÓGICO Usuário Variável ID Nome Sobrenome Data_nascimento Sexo Email Senha Foto Tags_ids Eventos_ids Tipo Inteiro Texto Texto Data Texto Texto Texto Texto Array Chave Primária - Null N N N N N N N N N Descrição ID do usuário Nome do usuário Sobrenome do usuário Data de nascimento do usuário Sexo do usuário Email do usuário Senha do usuário Foto do usuário Sequência com IDs de tags criadas pelo usuário Array N Sequência com IDs dos eventos criados pelo usuário Tabela 1 - Tabela lógica baseada na entidade Usuário Evento Variável ID Usuário Título Data Conteúdo Foto Favorito Tipo Inteiro Inteiro Chave Primária Estrangeira Usuário(ID) - Null N N Descrição ID do evento ID do usuário que criou o evento Texto N Título do evento Data N Data em que ocorreu o evento Texto N Conteúdo do evento Texto N Foto do evento Booleano N Verifica se o evento foi favoritado Tabela 2 - Tabela lógica baseada na entidade Evento 22 Tag Variável ID Usuário Nome Tipo Inteiro Inteiro Chave Null Descrição Primária N ID da tag Estrangeira N ID do usuário que criou o Usuário(ID) evento Texto N Nome da tag Tabela 3 - Tabela lógica baseada na entidade Tag EventoTag Variável ID Evento Tipo Inteiro Inteiro Chave Null Descrição Primária N ID da tabela Estrangeira N ID do evento relacionado com Usuário(ID) a tag Tag Inteiro Estrangeira N ID da tag relacionada com a Usuário(ID) evento Tabela 4 - Tabela lógica baseada no relacionamento entre as entidades Evento e Tag 3.5 IMPLEMENTAÇÃO 3.4.1 MODEL – TEMPLATE – VIEW Um objeto modelo consiste nos dados da aplicação, regras de negócio, lógica e funções. Ele contém os campos e comportamentos essenciais das entidades do sistema. Geralmente, cada modelo corresponde a uma tabela no banco de dados. Cada modelo é uma classe Python e cada atributo do modelo representa uma coluna da respectiva tabela no banco de dados. Figura 15 – Model que representa o mapeamento da tabela Evento 23 Na Figura 15 pode-se visualizar a definição do modelo Event que possui alguns atributos (title, body, author, etc.). Cada um desses atributos corresponde a um campo da tabela Evento no banco de dados. Abaixo segue o template da tela de autenticação do sistema Diarium. Figura 16 – Template da tela de autenticação do sistema Diarium 24 A View recebe uma requisição HTTP e retorna uma resposta HTTP. Essa resposta pode ser um documento HTML, um redirecionamento, uma imagem, etc. Seu funcionamento é o mesmo de um Controller da arquitetura MVC. A View ilustrada na Figura 17 mostra o funcionamento da tela de visualização do Evento do sistema Diarium. Figura 17 – View da tela de visualização do Evento do sistema Diarium 25 3.4.2 CALENDARIUM Python possui uma extensa biblioteca padrão. Ela é disponibilizada na instalação da linguagem e contém um grande número de módulos úteis. No desenvolvimento do sistema Diarium foi preciso entender o módulo HTMLCalendar1 da biblioteca calendar2 que resultou na criação do módulo Calendarium, que contém métodos a mais utilizados no sistema. A figura 18 representa o módulo Calendarium. Figuras 18 – Representação módulo Calendarium 1 < https://docs.python.org/2/library/calendar.html#calendar.HTMLCalendar> Acessado em 2 de julho de 2014 2 < https://docs.python.org/2/library/calendar.html#calendar.HTMLCalendar> Acessado em 2 de julho de 2014 26 3.4.3 TELAS 3.4.3.1 CADASTRO NO SISTEMA Para ter acesso ao sistema é preciso preencher um cadastro para a criação de um usuário. Figura 19 – Tela de cadastro no sistema 3.4.3.2 AUTENTICAÇÃO NO SISTEMA Antes de entrar no sistema, o usuário deverá informar o seu nome de usuário e a sua senha, para que sejam validados e permitido ou vetado o acesso. Figura 20 – Tela de autenticação do sistema 27 3.4.3.3 RECUPERAR SENHA NO SISTEMA Caso o usuário tenha esquecido sua senha, ele pode recuperá-la acessando a tela de recuperar senha. Figura 21 – Tela de recuperar senha no sistema 3.4.3.4 TELA INICIAL Após a validação dos dados de login, o usuário é redirecionado à tela inicial do sistema. Nessa tela são exibidos todos os eventos cadastrados pelo usuário no mês corrente. Figura 22 – Tela inicial do sistema 28 3.4.3.5 VISUALIZAÇÃO DO PERFIL E ESTATÍSTICAS Ao clicar no nome de usuário disposto no menu lateral à esquerda, o usuário é redirecionado para a tela de visualização do perfil que apresenta algumas estatísticas. Figura 23 – Tela de visualização do perfil e estatísticas do usuário 3.4.3.6 EDITAR PERFIL DO USUÁRIO Ao clicar no item Editar na tela de visualização do perfil e estatísticas, o usuário será redirecionado para a tela de editar perfil do usuário. Figura 24 – Tela de editar perfil do usuário 29 3.4.3.7 EDITAR EMAIL DO USUÁRIO Ao clicar no item Editar Senha na tela de editar perfil, o usuário será redirecionado para a tela de editar email do usuário. Figura 25 – Tela de editar email do usuário 3.4.3.8 EDITAR SENHA DO USUÁRIO Ao clicar no item Editar Email na tela de editar perfil, o usuário será redirecionado para a tela de editar senha do usuário. Figura 26 – Tela de editar senha do usuário 3.4.3.9 ADICIONAR EVENTO Ao clicar em adicionar evento no menu lateral à esquerda, o usuário é redirecionado para a tela de adicionar evento. Nessa tela o usuário pode registrar sua atividade, marcá30 la como favorito, adicionar tags para melhor organização dos eventos e uma imagem que registra o momento. Figura 27 – Tela de adicionar evento 3.4.3.10 VISUALIZAR E EDITAR EVENTO Ao clicar sobre um evento na tela inicial do sistema o usuário é redirecionado para a visualização do mesmo. Nessa tela o usuário poderá adicionar mais informações ao registro, marcar ou desmarcar como favorito, adicionar e remover tags, além de cadastrar ou remover a uma imagem que registra o momento. Figura 28 – Tela de visualizar e editar evento 31 3.4.3.11 BUSCAR EVENTO Ao digitar um texto no campo de busca que se encontra no menu lateral à esquerda ou clicar em um das tags presentes nos eventos da tela inicial, o usuário será redirecionado para tela de busca que mostrará o resultado da busca efetuada pelo usuário. Figura 29 – Tela de buscar evento 3.4.3.12 FAVORITOS Ao clicar em favoritos no menu lateral à esquerda, o usuário será redirecionado para a tela que lista todos os eventos marcados como favorito pelo usuário. Figura 30 – Tela de favoritos 32 3.4.3.13 CALENDÁRIO Ao clicar em calendário no menu lateral à esquerda, o usuário será redirecionado para tela de calendário que mostra o ano corrente e destaca na cor cinza os dias dos meses que possuem eventos cadastrados e em verde o dia atual. Ao clicar no nome de um determinado mês, o usuário será redirecionado para a visualização dos eventos no desse mês. Caso o usuário clique em um dia de um mês qualquer, ele será redirecionamento para tela de criação de um evento naquele dia. Figura 31 – Tela de calendário 33 CAPÍTULO 4 CONCLUSÃO Esse trabalho de conclusão de curso apresentou o desenvolvimento do sistema Diarium. Através dele foi possível alcançar o objetivo de criar um sistema web que auxiliasse o usuário no registro e organização de atividades e compromissos do dia-a-dia, podendo ser acessado a partir de computadores ou dispositivos móveis. Apesar do sistema já estar maduro o suficiente para ser lançado, ele ainda não está completo. Faltam-lhe alguns ajustes no layout que, se implementados, poderiam tornálo uma ferramenta ainda melhor. Portanto, o desenvolvimento do sistema Diarium não cessará com o término deste trabalho. Seguindo os preceitos de metodologia ágil, esse sistema terá como premissa o desenvolvimento e crescimento contínuo, ou seja, adicionar mais funcionalidades ao sistema conforme as necessidades dos usuários. 34 REFERÊNCIAS BIBLIOGRÁFICAS Boeg, Jesper. Kanban em 10 passos. InfoQ, 2012. Fried, Jason - David Hansson, Heinemeier - Linderman, Matthew. Getting Real: The Smarter, Faster, Easier Way to Build a Successful Web Application. 37signals, 2009. Gomes, André Faria. Agile: Desenvolvimento de software com entregas frequentes e foco no valor de negócio. Casa do Código, 2013. Greenfeld, Daniel - Roy, Audrey M. Two Scoops of Django: Best Practices For Django 1.5. CreateSpace Independent Publishing Platform, 2013. Lopes, Sérgio. A Web Mobile: Programe para um mundo de muitos dispositivos. Casa do Código, 2013. Mazza, Lucas. HTML5 e CSS3: Domine a web do futuro. Casa do Código, 2013. Zemel, Tárcio. Web Design Responsivo: Páginas adaptáveis para todos os dispositivos. Casa do Código, 2013. SITES: Django, "Documentação". Disponível em: <https://docs.djangoproject.com/en/1.6/> Acesso em: 26.jun.2014 Entendendo um pouco mais sobre o protocolo HTTP. Disponível em: <http://simplesideias.com.br/entendendo-um-pouco-mais-sobre-oprotocolo-http Acesso em: 26.jun.2014 Git, "Documentação". Disponível em: <http://git-scm.com/documentation> Acesso em: 26.jun.2014 35 Introdução a Arquitetura MVC. Disponível em: <http://developer.nokia.com/community/wiki/Arquitetura_MVC__Model-View-Controller> Acesso em: 26.jun.2014 Manifesto para desenvolvimento ágil de software. Disponível em: <http://manifestoagil.com.br/> Acesso em: 26.jun.2014 O que é Arquitetura de Informação? Disponível em: <http://chocoladesign.com/o-que-e-arquitetura-de-informacao> Acesso em: 26.jun.2014 O que é flat design? Disponível em: < http://gizmodo.uol.com.br/o-que-e-flat-design/> Acesso em: 26.jun.2014 Porque usar um Framework? Disponível em: <http://blog.glaucocustodio.com/2012/07/31/porque-usar-umframework/> Acesso em: 26.jun.2014 Python, site oficial. Disponível em: <https://www.python.org/> Acesso em: 26.jun.2014 36