UNIVERSIDADE DO SUL DE SANTA CATARINA JONATHAN CLEITON ALVES APLICAÇÃO DE GERENCIAMENTO FINANCEIRO FAMILIAR WEB COM INTERFACE MOBILE Unisul 2014 JONATHAN CLEITON ALVES APLICAÇÃO DE GERENCIAMENTO FINANCEIRO FAMILIAR WEB COM INTERFACE MOBILE Trabalho de Conclusão de Curso apresentado ao Curso de Graduação em Ciência da Computação da Universidade do Sul de Santa Catarina, como requisito parcial à obtenção do título de Bacharel em Ciência da Computação. Orientador: Prof. Jean Carlo Rossa Hauck, Dr. Palhoça 2014 JONATHAN CLEITON ALVES APLICAÇÃO DE GERENCIAMENTO FINANCEIRO FAMILIAR WEB COM INTERFACE MOBILE Este Trabalho de Conclusão de Curso foi julgado adequado à obtenção do título de Bacharel em Ciência da Computação e aprovado em sua forma final pelo Curso de Graduação em Ciência da Computação da Universidade do Sul de Santa Catarina. Palhoça, 11 de Junho de 2014. ______________________________________________________ Professor e orientador Jean Carlo Rossa Hauck, Dr. Universidade do Sul de Santa Catarina ______________________________________________________ Prof. Flavio Ceci, Me. Eng. Universidade do Sul de Santa Catarina ______________________________________________________ Prof. Richard Henrique de Souza, Me. Universidade do Sul de Santa Catarina A Deus, que me guiou até aqui. Aos meus pais, que me ensinaram a importância da educação. Aos professores, que me incentivaram e forneceram oportunidades. E a minha esposa, pelo carinho, compreensão e companheirismo. AGRADECIMENTOS A Deus, por não ter me deixado faltar saúde e força nesse momento. Agradeço também aos professores, que me apoiaram e acreditaram em minhas capacidades, as vezes até mais do que eu mesmo acreditei. A minha esposa Diana e meus pais, Anésio e Mara, que me apoiaram e respeitaram o tempo empenhado na realização desta tarefa. Ao meu orientador Jean e a coordenadora Inês, que me acompanharam e não me deixaram prometer mais do que o tempo me permitiria realizar. Às eventualidades, que me permitiram me tornar o que sou hoje. E a todos que, diretamente ou indiretamente, fizeram parte de minha formação, o meu muito obrigado. “É muito melhor lançar-se em busca de conquistas grandiosas, mesmo expondo-se ao fracasso, do que alinhar-se com os pobres de espírito, que nem gozam muito nem sofrem muito, porque vivem numa penumbra cinzenta, onde não conhecem nem vitória, nem derrota.” THEODORE ROOSEVELT RESUMO No contexto computacional atual, a necessidade de se manter as informações online e sempre disponíveis é algo inevitável. Entretanto, nem sempre o usuário possui acesso constante à internet, sendo um grande empecilho para este tipo de arquitetura. Dessa forma, muitas aplicações necessitam disponibilizar uma versão off-line dos dados, para que os usuários não percam o acesso aos seus dados nesses momentos. Com isso, através de um problema real, a gestão financeira familiar, este trabalho apresenta uma solução baseada em REST, com acesso tanto web via um cliente online, quanto off-line, em um cliente Android. Palavras-chave: REST, Android, Webservice. ABSTRACT In current computing context, the need to keep online and always available information is inevitable. However, not always the user has constant access to the internet, being a major impediment to this type of architecture. Thus, many applications need to provide an offline version of the data so that users do not lose access to your data in these moments. With that, through a real problem, family financial management, this paper presents a REST-based solution, with online access via an web client and offline access in an Android client. Keywords: REST, Android, ebservice. LISTA DE ILUSTRAÇÕES Figura 1 – Exemplo de orquestração de serviços em SOA ...................................................... 23 Figura 2 – Exemplo de XML.................................................................................................... 25 Figura 3 – Exemplo de WSDL ................................................................................................. 25 Figura 4 – Exemplo de requisição SOAP ................................................................................. 26 Figura 5 – Exemplo de Comunicação Clientes-Aplicação em REST ...................................... 27 Figura 6 – Exemplo de Modelo Incremental ............................................................................ 32 Figura 7 - Arquitetura da Aplicação ......................................................................................... 37 Figura 8 - Exemplo de Código AngularJS ............................................................................... 40 Figura 9 - Uma visão geral do ICONIX. .................................................................................. 41 Figura 10 - Exemplo de Diagrama de Domínio Detalhado ...................................................... 42 Figura 11 - Exemplo de um diagrama de casos de utilização .................................................. 42 Figura 12 - Objectos usados os diagramas de robustez ............................................................ 43 Figura 13 - Exemplo de um diagrama de sequência................................................................. 43 Figura 14 - Exemplo de um diagrama de classes. .................................................................... 44 Figura 15 - Modelo de Domínio ............................................................................................... 49 Figura 16 - Diagrama de caso de uso ....................................................................................... 50 Figura 17 - Tela de Taxonomia (Centros de Custo) (TEL011) ................................................ 52 Figura 18 - Diagrama de Robustez do UC003 ......................................................................... 53 Figura 19 - UC001 - Diagrama de Sequência de Inserir e Editar Taxonomia.......................... 56 Figura 20 - Diagrama de Sequência UC003 ............................................................................. 58 Figura 21- Arquitetura e Tecnologias ....................................................................................... 65 Figura 22 - Exemplo de Requisição de Login .......................................................................... 66 Figura 23 - Exemplo de Resposta ............................................................................................. 66 Figura 24 - Interface de Login .................................................................................................. 68 Figura 25 – Visão Geral ........................................................................................................... 69 Figura 26 – Configurações ....................................................................................................... 69 Figura 27 – Nova Transferência ............................................................................................... 70 Figura 28 – Tela de Movimentação .......................................................................................... 71 Figura 29 – Relatório Analítico ................................................................................................ 72 Figura 30 – Extrato ................................................................................................................... 72 Figura 31 – Filtros .................................................................................................................... 73 Figura 32 – Retorno Json .......................................................................................................... 74 Figura 33 – Base de Dados do Cliente Mobile ......................................................................... 76 Figura 34 – Tela inicial do Mobile e de Saldos Bancários ....................................................... 76 Figura 35 – Processo de Sincronização .................................................................................... 78 Figura 36 – RestMiddleware .................................................................................................... 79 Figura 37 – Criação da hash de autenticação ........................................................................... 80 Figura 38 – Diagrama de Classe de Beans ............................................................................... 90 Figura 39 – Diagrama de Classe de Models ............................................................................. 91 Figura 40 – Diagrama de Classe de Controllers ....................................................................... 92 Figura 41 – Diagrama de Classe de Aplicação ......................................................................... 93 Figura 42 - Diagrama de Sequencia UC002 ............................................................................. 98 Figura 43 - Diagrama de Sequência UC004 ............................................................................. 99 Figura 44 - Diagrama de Sequência UC005 ........................................................................... 100 Figura 45 - Diagrama de Sequência UC002 ........................................................................... 101 Figura 46 - Diagrama de Sequência UC007 ........................................................................... 102 Figura 47 - Diagrama de Sequência UC008 ........................................................................... 103 Figura 48 - Diagrama de Sequência UC009 ........................................................................... 104 LISTA DE TABELAS E QUADROS Quadro 1 - Quadro de Requisitos ............................................................................................. 48 Quadro 2 - Detalhamento de Caso de Uso 001 ........................................................................ 51 Quadro 3- Resumo dos Casos de Teste .................................................................................... 81 Quadro 4 - Detalhamento de Caso de Uso 002 ........................................................................ 94 Quadro 5 - Detalhamento de Caso de Uso 003 ........................................................................ 94 Quadro 6 - Detalhamento de Caso de Uso 004 ........................................................................ 95 Quadro 7 - Detalhamento de Caso de Uso 005 ........................................................................ 95 Quadro 8 - Detalhamento de Caso de Uso 006 ........................................................................ 96 Quadro 9 - Detalhamento de Caso de Uso 007 ........................................................................ 96 Quadro 10 - Detalhamento de Caso de Uso 008 ...................................................................... 97 Tabela 11 - Detalhamento de Caso de Uso 010........................................................................ 97 Tabela 12 - Detalhamento de Telas ........................................................................................ 105 Quadro 13 - CT001 ................................................................................................................. 106 Quadro 14 - CT002 ................................................................................................................. 106 Quadro 15 - CT003 ................................................................................................................. 107 Quadro 16 - CT004 ................................................................................................................. 107 Quadro 17 - CT005 ................................................................................................................. 107 Quadro 18 - CT006 ................................................................................................................. 108 Quadro 19 - CT007 ................................................................................................................. 108 Quadro 20 - CT008 ................................................................................................................. 108 Quadro 21 - CT009 ................................................................................................................. 109 Quadro 22 - CT010 ................................................................................................................. 109 SUMÁRIO 1 INTRODUÇÃO ............................................................................................................................. 15 1.1 PROBLEMÁTICA .......................................................................................................................16 1.2 OBJETIVOS .................................................................................................................................17 1.2.1 Objetivo Geral ..........................................................................................................................17 1.2.2 Objetivos Específicos ...............................................................................................................17 1.3 JUSTIFICATIVA .........................................................................................................................18 2 FUNDAMENTAÇÃO TEÓRICA ............................................................................................... 19 2.1 ADMINISTRAÇÃO FINANCEIRA ............................................................................................19 2.1.1 Administração Financeira Familiar .......................................................................................19 2.2 CLOUD COMPUTING ................................................................................................................20 2.2.1 Classificações ............................................................................................................................21 2.2.2 Service Oriented Architecture (SOA) ....................................................................................22 2.2.3 Webservices ..............................................................................................................................23 2.2.3.1 Web Services Definition Language (WSDL) ......................................................................... 24 2.2.3.2 Simple Object Access Protocol (SOAP) ................................................................................ 26 2.2.4 REST .........................................................................................................................................26 2.3 DESENVOLVIMENTO MOBILE ...............................................................................................28 2.3.1 Arquitetura ...............................................................................................................................29 2.4 METODOLOGIAS DE DESENVOLVIMENTO ........................................................................30 2.4.1 Ciclo de Vida do Desenvolvimento de Software ....................................................................31 2.4.1.1 Modelo Incremental ............................................................................................................... 31 2.4.2 Fases do Projeto .......................................................................................................................32 3 MÉTODO....................................................................................................................................... 34 3.1 CARACTERIZAÇÃO DO TIPO DE PESQUISA .......................................................................34 3.2 ETAPAS .......................................................................................................................................34 3.3 DELIMITAÇÕES .........................................................................................................................35 4 PLANEJAMENTO ....................................................................................................................... 36 4.1 VISÃO GERAL DA SOLUÇÃO .................................................................................................36 4.1.1 Tecnologias e Ferramentas......................................................................................................37 4.1.1.1 PHP: Slim Framework & RedBean ORM.............................................................................. 38 4.1.1.2 MySQL ................................................................................................................................... 38 4.1.1.3 Apache.................................................................................................................................... 39 4.1.1.4 AngularJS ............................................................................................................................... 39 4.1.1.5 Android & Apache Cordova .................................................................................................. 40 4.1.1.6 NetBeans ................................................................................................................................ 41 4.2 ICONIX: ABORDAGEM PARA MODELAGEM ......................................................................41 4.3 MODELAGEM ............................................................................................................................44 4.3.1 Requisitos..................................................................................................................................44 4.3.1.1 Ferramentas já existentes ....................................................................................................... 45 4.3.1.1.1 Contas Online ......................................................................................................................45 4.3.1.1.2 Meu Dinheiro .......................................................................................................................46 4.3.1.1.3 Organizze .............................................................................................................................46 4.3.1.1.4 Minhas Economias ...............................................................................................................46 4.3.1.2 Descrição do funcionamento do sistema ................................................................................ 47 4.3.1.3 Quadro de Requisitos Funcionais ........................................................................................... 48 4.3.2 Domínio .....................................................................................................................................49 4.3.3 Casos de Uso .............................................................................................................................49 4.3.3.1 4.3.3.2 4.3.4 4.3.5 Detalhamento dos Casos de Uso ............................................................................................ 50 Telas e Interfaces.................................................................................................................... 52 Robustez....................................................................................................................................52 Sequência e Classe....................................................................................................................53 5 DESENVOLVIMENTO DA SOLUÇÃO .................................................................................... 60 5.1 ESCOLHA DAS TECNOLOGIAS ..............................................................................................60 5.1.1 API (Camada de Aplicação) ....................................................................................................60 5.1.2 APP (Camada de Visualização) ..............................................................................................62 5.1.3 Mobile .......................................................................................................................................63 5.2 RESULTADOS OBTIDOS ..........................................................................................................64 5.2.1 API.............................................................................................................................................65 5.2.2 Cliente WEB (APP)..................................................................................................................67 5.2.2.1 Telas ..........................................................................................................................................68 5.2.2.2 Funcionamento WEB...............................................................................................................73 5.2.3 Aplicação Mobile......................................................................................................................74 5.2.3.1 Funcionamento ....................................................................................................................... 75 5.2.3.2 Sincronização ......................................................................................................................... 77 5.2.3.3 Segurança ............................................................................................................................... 79 5.3 AVALIAÇÃO ...............................................................................................................................81 5.3.1 Testes .........................................................................................................................................81 6 CONSIDERAÇÕES FINAIS E TRABALHOS FUTUROS ...................................................... 83 REFERÊNCIAS .................................................................................................................................. 85 APÊNDICES ........................................................................................................................................ 89 APÊNDICE A – DIAGRAMAS DE CLASSE .................................................................................. 90 APÊNDICE B – CASOS DE USO ..................................................................................................... 94 APÊNDICE C – DIAGRAMAS DE SEQUÊNCIA .......................................................................... 98 APÊNDICE D – TELAS ................................................................................................................... 105 APÊNDICE E – CASOS DE TESTE............................................................................................... 106 15 1 INTRODUÇÃO O mercado mobile brasileiro se intensificou nos últimos anos. Segundo um estudo realizado pela WMcCann e Grupo.Mobi (WMCCANNBR, 2011), que teve como base uma pesquisa realizada pelo Instituto Ipsos MediaCT, foi verificado que em 2011, 33% dos brasileiros já possuíam smartphones e 41% dos brasileiros já os utilizavam para acessar a internet. Já em 2013 (IDC, 2013), se constatou que aproximadamente 70% dos smartphones vendidos no mundo utilizam o sistema operacional da Google, o Android, fazendo com que o mesmo torne-se uma ótima opção para desenvolvedores de aplicativos. O novo comportamento do usuário, aliado ao avanço tecnológico e a disponibilização cada vez maior de banda larga móvel, proporcionou um novo cenário para o desenvolvimento de aplicações web, criando uma nova necessidade no modo de se armazenar e processar os dados, sendo quase que fundamental que a informação esteja disponível à mão sempre que for requisitada. Nesse sentido, como meio de resolver os problemas de armazenamento e processamento de dados, surgiu o termo “Cloud Computing” ( em português, computação em nuvem). O conceito da computação na nuvem baseia-se na utilização de computadores e servidores compartilhados, acessados à partir da internet, que fornecem o hardware ou algum tipo de serviço para uma ou mais aplicações, sem a necessidade de instalação de algum programa. Ou, segundo Taurion (2009, p. 2): Computação em Nuvem é um termo para descrever um ambiente de computação baseado em uma imensa rede de servidores, sejam estes virtuais ou físicos. Uma definição simples pode então ser “um conjunto de recursos como capacidade de processamento, armazenamento, conectividade, plataformas, aplicações e serviços disponibilizados na internet”. O resultado é que a nuvem pode ser vista como o estágio mais evoluído do conceito de virtualização, a virtualização do próprio data center. Esse tipo de arquitetura provê uma diminuição nos custos de desenvolvimento e manutenção de aplicações. Mas, para poder usufruir dos benefícios da computação em nuvem, é necessário se repensar a forma de como é realizado o desenvolvimento de uma aplicação. Assim, aplicações construídas com base em webservices tornam-se cada vez mais promissoras para este mercado. Conforme Sampaio (2006, p. 38) “um webservice é um aplicativo Servidor que disponibiliza um ou mais serviços para seus clientes, de maneira fracamente acoplada”. 16 O interesse na utilização de um webservice está na criação de um fornecedor de serviços paralelo, que poderá ser utilizado por qualquer plataforma, seja desktop ou mobile, de modo a diminuir os custos com a produção da aplicação, criando recursos reutilizáveis. Dessa forma, um mesmo fornecedor de serviço pode ser utilizado por diferentes interfaces, que podem ter funções voltadas para diferentes focos ou plataformas. Este trabalho pretende mostrar os benefícios da utilização de uma aplicação neste modelo, através da utilização do padrão REST, uma técnica de engenharia de software surgida em uma tese de doutorado. Essa técnica se baseia em algumas regras para o desenvolvimento de uma aplicação que fornecerá informações e processamento sob demanda para outras aplicações, baseando em requisições (FIELDING, 2000). Para facilitar a exemplificação destes benefícios, a presente monografia apresenta a criação de uma aplicação web para gerenciamento financeiro familiar. Esta escolha utiliza como base o fato de que gastos como a alimentação fora de casa chegam a ocupar mais de 40% das despesas diárias de uma família, como informa o economista Mauro Halfed (G1, 2013). Ainda segundo ele, esse montante é originado de pequenos gastos, que aliado à falta de controle, passam despercebidos e, no fim, geram um montante que prejudica o orçamento. Da mesma forma, pesquisas realizadas pela Fecomercio–SP e pela CNC (2013) mostram que o endividamento dos brasileiros subiu este ano com relação ao ano passado, sendo um dos maiores desde 2011 (NASCIMENTO, 2013). Assim, com a disponibilização de uma ferramenta financeira que esteja ao alcance do usuário no momento em que o mesmo for realizar o gasto, será mais fácil a decisão de gastar ou não. 1.1 PROBLEMÁTICA É no contexto de computação em nuvem e mobilidade que surgem muitos temas para desenvolvimento de aplicações que devem estar sempre disponíveis para o usuário, indiferente do local onde ele esteja. Um destes temas é o gerenciamento financeiro familiar. O gerenciamento financeiro familiar toma como base o controle dos ganhos e dos gastos de uma família. Segundo Cherobim e Espejo (2010), esse controle ainda deve ser categorizado (saúde, vestuário, alimentação, etc), para que através deste controle se torne 17 possível identificar os pontos nos quais o dinheiro está sendo gasto desnecessariamente e efetuar o planejamento econômico da família, além de facilitar a tomada de decisões importantes, como investimentos e empréstimos. A falta deste controle resulta no tão conhecido cenário de se gastar mais do que se recebe, ressaltando o aumento do endividamento divulgado pela CNC (2013). Muitas vezes isto ocorre não por irresponsabilidade do gestor da família, mas simplesmente pela falta de um conhecimento real sobre o quanto se ganha, aliado à falsa sensação de segurança gerada pelos parcelamentos, que se tornam cumulativos. Diante destas informações, é feito o seguinte questionamento: utilizando a computação em nuvem, será possível a criação de uma aplicação de fácil acesso que auxilie no gerenciamento financeiro de uma família? 1.2 OBJETIVOS Aqui são apresentados o objetivo geral e os objetivos específicos desta monografia. 1.2.1 Objetivo Geral Implementar um sistema com requisitos básicos de gerenciamento financeiro familiar utilizando a arquitetura REST, apoiado por um cliente web e um cliente Android. 1.2.2 Objetivos Específicos Os objetivos específicos são: 18 • Realizar o levantamento de experiências relatadas na literatura sobre desenvolvimento REST e Android; • Revisar os aplicativos existentes; • Avaliar quais os principais requisitos básicos necessários para o desenvolvimento de uma aplicação de gerenciamento financeiro familiar; • Desenvolver um webservice, através do padrão REST, que servirá como fornecedor de recursos para as interfaces web e Android; 1.3 • Desenvolver um Cliente web que fará uso do webservice; • Desenvolver um Cliente Android que fará uso do webservice; JUSTIFICATIVA A presente monografia tem como objetivo desenvolver um sistema com requisitos básicos de gerenciamento financeiro familiar utilizando a arquitetura REST, apoiado por um cliente web e um cliente Android. Dessa forma, esta pesquisa torna-se importante para a sociedade, pois, como forma de exemplificar o estudo, o trabalho tem como resultado uma aplicação que será utilizada para a gestão financeira familiar, pois, segundo Alves (2013) é através do um planejamento financeiro que se é possível estabelecer metas de consumo que se adequem a realidade e planejar novas aquisições, tanto de médio quanto de longo prazo, como veículos, imóveis ou investimento em educação. Dessa forma, essa aplicação tenta auxiliar na gestão financeira familiar, fornecendo uma ferramenta que permitirá a análise de suas movimentações financeiras, de forma simplificada. 19 2 FUNDAMENTAÇÃO TEÓRICA Nesta fundamentação teórica são apresentadas as conceituações referentes à administração financeira familiar, utilizadas como introdução para a elaboração dos requisitos da aplicação em questão. Também é abordado o Cloud Computing e o desenvolvimento mobile, termos que ganharam destaque nos últimos cinco anos, e se mostra uma forte tendência brasileira. Afirmação essa, baseada em uma pesquisa da IDC, divulgada em março deste ano (2013), que mostra o aumento exponencial da utilização de smartphones e tablets. 2.1 ADMINISTRAÇÃO FINANCEIRA Para Gitman (2001) é responsabilidade do administrador financeiro a obtenção de recursos para financiar a operação da empresa e verificar a concessão de crédito para clientes, assim como é de sua responsabilidade o planejamento das atividades financeiras e a tomada de decisão das questões financeiras. Gitman (2001) também explica que o orçamento é a chave para o sucesso financeiro, sendo necessário para se saber onde investir e o que realmente dá para se fazer com o dinheiro que se tem. 2.1.1 Administração Financeira Familiar Hoji (2009) afirma que as famílias são como empresas, e a importância da gestão financeira também deve ser refletida no dia a dia das mesmas. É necessária a existência do orçamento familiar, assim como a definição dos objetivos a curto e a longo prazo. Dessa forma, pode-se considerar equilibrada financeiramente a família que consegue administrar suas finanças a ponto de que as receitas (o dinheiro que entra) sejam superiores as despesas (o dinheiro que sai), restando algum saldo positivo que possa ser convertido em investimentos, visto que, assim como nas empresas, o objetivo financeiro 20 familiar também é o de crescimento e lucro, seja ele utilizado depois para a obtenção de algum bem ou a reserva para eventuais emergências e imprevistos. Entretanto, nos últimos anos o governo brasileiro tem incentivado o consumo com base no crédito (NASCIMENTO, 2010), o que para as famílias que não possuem um gerenciamento financeiro organizado pode ser uma grande armadilha. Este crédito e parcelamento de contas escondem o grande vilão de qualquer economia, os juros. O resultado disso é um aumento constante no índice de endividamento brasileiro, como aponta o CNC (2013), visto que os consumidores compram no impulso, deixando de perceber que estarão pagando um valor consideravelmente maior do que se estivessem pagando à vista (NASCIMENTO, 2010). Hoji (2009) menciona a importância de se eleger as reais necessidades de gastos da família, assim como a análise sobre a forma mais vantajosa de se realizar as compras, sempre de olho no orçamento para que não se corra o risco de ter um resultado financeiro negativo. A maneira simples de se manter um controle orçamentário da família é anotar tudo que se recebe e se gasta (HOJI, 2009), simplificadamente. É importante categorizar os gastos e receitas, de modo a distinguir onde estão os “furos” orçamentários, que poderiam ser convertidos em economias. 2.2 CLOUD COMPUTING Quando os primeiros computadores pessoais surgiram, os usuários foram apresentados a um modelo de armazenamento local. Neste modelo, os dados e programas do usuário ficavam somente na máquina em que foram instalados, e o usuário dependia exclusivamente dela para manipular seus arquivos. O compartilhamento de dados era feito de forma manual, ou através de disquetes, cds, pendrives, etc, gerando duplicatas e arquivos dessincronizados. Tendo em vista essa dificuldade, nos ambientes corporativos o cenário se portou diferente, e comumente as aplicações eram instaladas em servidores para serem acessadas pelos computadores ou aparelhos autorizados. Por tratar-se de redes internas, as aplicações 21 não dependiam da utilização da internet para estarem disponíveis. Entretanto, não fossem os backups das máquinas, todos os dados e aplicações estavam restritos àqueles aparelhos. Com o surgimento do mercado mobile, esse panorama teve de ser rediscutido, e o conceito de cloud computing passou a ser bastante comentado, por parecer a solução mais plausível para a disponibilização de aplicações e documentos nos aparelhos portáteis, como tablets e smartphones. De forma geral, descreve-se Cloud Computing como uma grande rede de servidores interligados, virtuais ou físicos, que dividem seus recursos de processamento e armazenamento, para o fornecimento de aplicações ou dados (TAURION, 2009). Com a utilização do Cloud Computing, surgiu também a possibilidade da utilização sob demanda dos recursos, não sendo necessário reservar recursos computacionais que não estão efetivamente sendo utilizados. No início da década de 1960, McCarthy (1989), considerado um dos precursores do Cloud Computing, iniciou uma pesquisa sobre a utilização de um computador por mais de um usuário simultaneamente, fazendo com que um computador não desperdiçasse recursos ociosos, visto que era um equipamento caro na época. Assim, a máquina passou a ser vista apenas como um fornecedor de recursos, e não o objeto principal para o funcionamento da aplicação, permitindo sua reposição sempre que necessária, assim como o aumento ou a diminuição da alocação de recursos dependendo da necessidade de utilização. Como Taurion (2009) exemplifica, pode-se imaginar uma loja virtual que, em épocas como o Natal, atinge os picos das vendas do ano. Neste período, muitas vezes é necessário se triplicar a capacidade de processamento dos servidores. Dessa forma, apoiandose na elasticidade do Cloud Computing, a loja pode alocar mais recursos para esta temporada, e logo após o término dela, voltar a utilizar os recursos anteriores. Isto elimina gastos desnecessários com compra de hardware que depois não seria mais utilizado, assim como facilita o planejamento referente às estruturas de hardware da empresa. 2.2.1 Classificações Segundo Wang et al (2008), a utilização do Cloud Computing é classificada em três modelos: 22 • HaaS (Hardware as a Service): A utilização de recursos de hardware, como processamento e armazenamento, de forma elástica; Ex.: Amazon WS; • SaaS (Software as a Service): É a utilização de softwares dentro da nuvem, onde o fornecedor do software fica responsável por manter o software online, enquanto o cliente tem apenas a necessidade de usá-lo; Ex.: Office 360; • DaaS (Data as a Service): Semelhante ao SaaS, é a informação sobre demanda. Ex: Webservice dos correios, onde retorna os dados dos CEP’s; Wang et al (2008) também comentam sobre o fato de que os serviços feitos na nuvem são quase sempre vinculados à webservices, organizados em uma estrutura conhecida como SOA (Service Oriented Architecture), que pode ser brevemente explicada como “um conjunto de serviços de nuvem” (WANG et al, 2008, p. 5, tradução nossa). 2.2.2 Service Oriented Architecture (SOA) Uma das definições dadas por Lublinsky (2007) para SOA refere-se a um conjunto de princípios e padrões de arquitetura que buscam a modularidade, o encapsulamento, fraco acoplamento, separação de conceitos e reutilização de software, possibilitando um desenvolvimento paralelo de aplicações. Também se apoia na ideia de que este modelo utiliza de webservices, definidos como aplicativos Servidores que disponibilizam um ou mais serviços para seus clientes (Sampaio, 2006), para facilitar sua reutilização. Não diferente para Wang et al (2008), que enxerga a utilização de webservices no Cloud Computing como uma ferramenta de facilitar a integração entre os mais diversos serviços. Em seu artigo é possível identificar como os webservices ganharam uma maior importância com a valorização da nuvem, visto que várias empresas estão perdidas em meio a tantas aplicações que utilizam no seu dia a dia. Muitas vezes, é necessário existir a integração entre esses aplicativos, de modo a automatizar tarefas ou resolver problemas que apenas uma aplicação não foi capaz de resolver. Por isso, Wang et al (2008) a define como um conjunto de webservices que podem ser utilizados num ambiente, tornando assim disponível em várias plataformas distribuídas, 23 além de poder acessá-los através da Internet. Estes webservices são tratados como “os músicos de uma orquestra” e, assim como em uma orquestra, são organizados por um “maestro”, que controla todo o fluxo das requisições realizadas pelo cliente. A Figura 1 exemplifica este fluxo. Na figura, é possível ver que o cliente realiza uma solicitação para o fornecedor de serviços. No fornecedor, há uma camada que é utilizada para coordenar as solicitações e resposta, verificando qual o fluxo que cada chamada deve percorrer. Figura 1 – Exemplo de orquestração de serviços em SOA Fonte: TAURION, 2009 (Com modificações) 2.2.3 Webservices Sampaio (2006) define Webservices como sendo aplicativos Servidores que disponibilizam um ou mais serviços para seus clientes. Kopack (2003, apud Tomé, 2011) completa informando que estes serviços são acessados via web, semelhante um site, que responde ao cliente dependendo da URL acessada e parâmetros enviados. Diferente de qualquer outro serviço web, os webservices respondem ao cliente “através de um documento XML, conhecido como Web Services Description Language ou WSDL” (SAMPAIO, p. 38, 2006). Segundo a W3C (2013), este padrão baseado em XML 24 serve pra descrever o serviço e deve trazer os métodos que o webservice suporta, além de ser também utilizado para validar os métodos de entrada e saída do webservice. Mas qual é a razão de se utilizar webservices? Não é mais possível manter uma Inteface DPL-DPC (disquete pra lá - disquete pra cá) com seus parceiros, fornecedores e clientes. As empresas precisam estar sempre prontas para oferecer novos serviços ou trocar novos tipos de informações, aprender e desaprender novas coisas. (SAMPAIO, 2006, p.1) A comunicação entre sistemas já existentes é sempre uma questão problemática para muitas empresas. Ao se imaginar um cenário onde se tem dois ou mais softwares que precisam passar a se comunicar, alguns pontos devem ser levados em consideração, como linguagem utilizada, banco de dados, infraestrutura, etc. Sampaio (2006) menciona que uma empresa deve possuir uma carteira básica de aplicações imutáveis na empresa. Mas, pode ser que em algum momento, a solução de um software tenha a necessidade de se juntar a solução de outro, de forma a “integrar, juntar pedaços de vários aplicativos (de plataformas diferentes) para oferecer um novo produto ou serviço. E isto tem que ser feito de maneira rápida e prática, sem esperar meses (ou anos) até que um novo sistema seja criado” (SAMPAIO, 2006, p.2). Os webservices possuem três “camadas” básicas (CURBERA et al, 2002): um protocolo de comunicação, a descrição dos serviços e um método de publicação. Este último, servindo para o cadastro do webservice em repositórios de busca, funcionando de modo semelhante a um “catálogo telefônico”, conhecido como UDDI (Universal Description, Discovery and Integration). 2.2.3.1 Web Services Definition Language (WSDL) Ao se utilizar um webservice, o serviço que estiver fazendo a requisição necessita saber quais os métodos e serviços que aquele webservice poderá lhe fornecer, além de saber como chamar determinados serviços e o que esperar deles. A W3C (2004) orienta a utilização do padrão WSDL para descrever um webservice. Esse padrão possui uma sintaxe em XML (eXtensible Markup Language), uma linguagem de marcação desenvolvida também pela W3C (2008), que serve como um meio de 25 troca de informações entre aplicações e serviços na web. É extremamente flexível, o que ajudou sua popularização. Um exemplo pode ser visto na figura 2. Figura 2 – Exemplo de XML Fonte: W3SCHOOLS, 2013 Dentro de um WSDL (figura 3) é informado o protocolo de comunicação que deve ser usado e o conjunto de operações que aquele webservice realiza, com suas chamadas e os atributos necessários para se fazer a chamada e um endereço de rede. Com essas informações, é possível saber onde encontrar o webservice, o que ele faz e como utilizar o mesmo. Figura 3 – Exemplo de WSDL Fonte: CURBERA et al, 2002 26 2.2.3.2 Simple Object Access Protocol (SOAP) SOAP (figura 4) é o protocolo de comunicação mais utilizado por webservices, o qual a W3C (2007) recomenda a utilização por tratar-se de um modelo de desenvolvimento das mensagens cliente-servidor. Possui uma estrutura leve baseada em XML, chamado de envelope, que é dividido em duas partes: cabeçalho (opcional) e corpo (obrigatório). Tanto o cliente quanto o webservice utilizam SOAP em sua comunicação. O cliente gera o SOAP e envia a request (requisição) para o webservice, que irá receber e gerar um SOAP de response (resposta), que enviará novamente ao cliente (W3C, 2007). Figura 4 – Exemplo de requisição SOAP Fonte: W3C, 2007 A comunicação é realizada via uma requisição POST do HTTP, e não é obrigatoriamente necessário o webservice efetuar uma resposta, pois tudo irá depender da requisição efetuada pelo cliente e da estrutura do webservice (W3C, 2007). 2.2.4 REST A W3C (2004) caracteriza o modelo REST (Representational State Transfer) como também sendo um tipo de webservice, embora mais restrito, por não fornecer o WSDL. Resumidamente, o REST é caracterizado como um padrão de desenvolvimento semelhante 27 aos webservices, no qual um serviço é fornecido de forma independente de quem irá chamálo. Diferente dos webservices, os métodos internos desta aplicação são mais genéricos, preocupando-se mais com a manipulação dos dados, enquanto nos webservices os métodos são específicos para a aplicação (FIELDING, 2000). Também diferente dos webservices comuns, no padrão REST todas as requisições devem conter todas as informações necessárias para se compreender o pedido no servidor, pois, por se tratar de uma comunicação “estática”, o servidor não guarda nenhuma informação do cliente, devendo este manter guardada a sessão do usuário, por exemplo (FIELDING, 2000). Dessa forma, múltiplos clientes podem fazer uso do serviço tendo seu próprio tratamento de sessão e dados. Para exemplificar basta imaginar o cenário de uma aplicação REST que é requisitado tanto por uma página web, uma aplicação mobile e uma aplicação desktop. Figura 5 – Exemplo de Comunicação Clientes-Aplicação em REST Fonte: IMASTERS, 2012 28 No exemplo da Figura 5, os clientes fazem a requisição para o servidor, que responde através do padrão JSON (JavaScript Object Notation), um formato mais leve para a comunicação de dados na web e amplamente utilizado por webservices mais modernos (JSON, 2013). Utilizando dessa tecnologia, a integração entre os sistemas se torna mais fácil, pois sua estrutura baseia-se em dois modelos que podem ser escolhidos no momento da leitura dos dados: • Uma coleção de pares nome/valor. Em várias linguagens, isto é caracterizado como um object, record, struct, dicionário, hash table, keyed list, ou arrays associativas. • Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como uma array, vetor, lista ou sequência. Voltando ao exemplo, é visto que os clientes fazem a requisição utilizando os métodos de requisição GET, POST ou DELETE. Estes são alguns dos métodos aceitos por uma requisição HTTP, utilizada na comunicação com o servidor. Dependendo do método da chamada, uma mesma url pode retornar diferentes dados. No exemplo, o método GET seria utilizado para busca. O método POST (algumas vezes utilizado o método PUT no local), para inserção de dados. Já o método DELETE se encarrega de fazer a exclusão do dado. Além disso, cada cliente trata a visualização e apresentação destes dados de modo distinto, visto que a aplicação REST lhe permite manipular os dados da forma que lhe for mais conveniente (FIELDING, 2000). Dessa forma, uma aplicação mobile não precisará exibir todos os dados que uma aplicação desktop exibiria, por exemplo. 2.3 DESENVOLVIMENTO MOBILE Como relatado, a pesquisa realizada pela IDC (2013) relevou o aumento significativo na utilização de smartphones, tablets e notebooks, um mercado antes dominado pelos desktops. Segundo a empresa de consultoria Frost & Sullivan (2011), a média de aparelhos conectados à internet será de cinco por pessoa até 2020. 29 Dentro deste novo cenário, o sistema operacional Android vem ganhando grande destaque por estar sempre presente em aparelhos de baixo e alto custo, dominando uma grande fatia do mercado IDC (2013). O Android é a plataforma open-source criada pelo Google para o desenvolvimento de aplicações para dispositivos móveis. Inclui um sistema operacional baseado no Linux e diversas aplicações, com uma rica interface gráfica, um browser para navegar na internet, integração com o Google Maps, suporte a multimídia, GPS, banco de dados integrado, jogos em 3D e muito mais. A plataforma de desenvolvimento do Android permite desenvolver e integrar aplicações de forma simplificada utilizando a linguagem de programação Java e um ambiente de desenvolvimento de alto nível e produtividade como o Eclipse. (LECHETA, 2013, Sinopse) Baseado em Linux e Open Source1, o Sistema Operacional Android vem sendo considerado o mais utilizado no mundo (IDC, 2013). Foi o primeiro projeto de uma plataforma Open Source Mobile (PEREIRA, 2009), e disponibiliza um kit de desenvolvimento para quem quiser criar aplicações para o sistema, chamado de Android SDK. Este SDK contém todas as bibliotecas necessárias para se desenvolver aplicações para o Android. As aplicações são baseadas em Java, e a própria Google fornece uma IDE especializada para o desenvolvimento de aplicações, através de uma versão do eclipse que vem integrada ao Android SDK. Ao iniciar um projeto com a IDE, a estrutura base da aplicação já é montada. Esta IDE também permite que o aplicativo seja compatível em diversos aparelhos e versões do sistema operacional, diretamente do computador. 2.3.1 Arquitetura De acordo com Pereira (2009), o sistema operacional Android é divido em cinco camadas, cada qual com uma funcionalidade própria. 1 “Especificamente, software livre significa que os usuários têm as quatro liberdades essenciais: (0) para executar o programa, (1) para estudar e mudar o código-fonte do programa, (2) para redistribuir cópias exatas e (3) para distribuir versões modificadas” (GNU, 2011). O sistema operacional Linux é o maior exemplo de software de código livre, e possui diversas distribuições personalizadas pela sua comunidade de desenvolvedores. 30 A camada mais externa é a de aplicativos, onde são encontradas as aplicações, todas desenvolvidas em JAVA, como agenda, calendário, calculadora, jogos, entre outros. Após esta camada, encontra-se a camada de Framework, onde estão os recursos que as aplicações irão utilizar, como as classes de Views, GPS, WI-FI, Bluetooth, entre outros. Esta camada existe para facilitar a incorporação e reutilização destes componentes primitivos do sistema nas aplicações desenvolvidas por terceiros, para que não seja necessário interagir com as camadas mais internas do sistema. Em seguida, existe a camada de Biblioteca (Libraries), que contém as bibliotecas de linguagem, como C e C++, que são utilizadas pelo sistema. Aqui também ficam as camadas multimídia e banco de dados. Para se ter acesso à essas bibliotecas, é necessário utilizar os recursos da camada de Framework. A camada de Runtime é a camada conhecida como “ambiente de execução”. É aqui que cada aplicação fica enquanto estiver em execução, como uma instância da máquina virtual do Android (Dalvik). Esta máquina virtual fica responsável pelo controle da utilização dos recursos do hardware por cada aplicativo, de modo a manter o sistema sempre estável e controlado. Cada aplicação roda paralelamente e, caso necessitem se comunicar, a camada de Framework possui recursos para possibilitar isto. Por último encontra-se o Kernel do sistema Linux, base de todo o Android. Esta camada é responsável pelas operações de mais baixo nível, como gerenciamento de memória, gestão da rede, entre outros. 2.4 METODOLOGIAS DE DESENVOLVIMENTO Segundo Conte (2005), o desenvolvimento de software para web segue os mesmos princípios que a engenharia de software convencional. Seu foco está em como desenvolver uma aplicação correta e completa, de acordo com os requisitos do usuário. O diferencial está no fato de que esta deve ser desenvolvida no contexto de um projeto que deve considerar a infra-estrutura Web para sua execução e disponibilização (CONTE, 2005, p.107). Além disso, para Fraternalli e Paolini (1998, apud Conte, 2005), o desenvolvimento de um software para web deve considerar algumas particularidades. 31 Estrutural (conceitual): define a organização das informações a serem tratadas pela aplicação e os seus relacionamentos; [...] Navegacional: representa como as informações serão acessadas através da aplicação, e; [...] Apresentação: descreve como as informações e o acesso a essas serão apresentados ao usuário da aplicação (CONTE, 2005, p.107). Seguindo estes preceitos, é cabível de se utilizar o ciclo de vida comum para o desenvolvimento de um software web, descrito a seguir. 2.4.1 Ciclo de Vida do Desenvolvimento de Software O desenvolvimento de um software, seja ele desktop, web ou mobile, consiste de algumas pequenas etapas, também conhecidas como Ciclo de Vida. Para Pressman (2006), a utilização deste ciclo visa a criação de aplicações com qualidade, além de tentar diminuir os custos com a produção, eliminando erros causados pela falta de validações reais do produto final. Ele ainda afirma que os modelos de ciclo de vida colocam ordem no desenvolvimento de software, eliminando o caos e organizando uma estrutura para o desenvolvimento. A escolha de um ciclo de vida irá depender de alguns fatores como tempo disponível, custo, equipe, dentre outros. Assim, não existe um modelo ideal, sendo necessário um estudo para verificar qual o mais compatível com o projeto. A seguir é apresentado o Modelo Incremental, baseado no estudo de Pressman (2006) e Sommerville (2003). 2.4.1.1 Modelo Incremental Este baseia-se na divisão do projeto em pequenos ciclos, todos possuindo um resultado executável. Cada ciclo é chamado de iteração, e possui quatro tarefas: Análise (Refinamento dos requisitos), Projeto (refinamento do projeto arquitetural, projeto de baixo nível), Implementação (codificação e testes) e Transição para produto (documentação, instalação, ...). 32 Figura 6 – Exemplo de Modelo Incremental Fonte: PRESSMAN, 2006 Neste modelo as alterações de escopo são suportadas, pois o término de cada iteração gera uma versão do produto, e não o produto inteiro, a chamada “Entrega Incremental”. 2.4.2 Fases do Projeto Indiferente do modelo adotado para o desenvolvimento, tanto Pressman (2006) quanto Sommerville (2003) citam 3 fases do processo de desenvolvimento de software. Definição: É nesta fase inicial que é definido “o que” será feito. É o início do planejamento do projeto e da Análise dos requisitos. Pode ser considerada a fase mais importante do projeto, pois a má concepção do projeto pode culminar na falha das duas fases seguintes. Sommerville (2003) descreve alguns passos para essa definição dos requisitos do software. Resumidamente, é o estudo da viabilidade, seguido das especificações de requisitos, a validação de requisitos, e a documentação dos requisitos. São estes quatro passos que permitem a procedência do planejamento das atividades e dos ciclos de desenvolvimento, como cronograma, estimativa de custos e a própria organização do projeto. 33 Desenvolvimento: Este é o momento em que, com os requisitos definidos e o projeto planejado, é possível iniciar a geração do código e a realização dos testes, até chegar ao resultado final, o produto. Neste momento, se a primeira fase não foi bem realizada, irão começar a surgir as primeiras falhas e incoerências no projeto, resultando em retrabalho posterior. Manutenção: Com o produto finalizado, é comum o surgimento de modificações póstumas conforme novas necessidades venham a surgir. 34 3 MÉTODO Neste capítulo são revisados os métodos e procedimentos utilizados para a elaboração do presente trabalho. Gil (2002) define a pesquisa como um procedimento racional e sistemático e que seu objetivo é proporcionar respostas aos problemas expostos. Dessa forma, a pesquisa deve ser realizada quando se é necessário obter informações para resolver um problema, seja esta informação inexistente ou desordenada. 3.1 CARACTERIZAÇÃO DO TIPO DE PESQUISA A pesquisa realizada neste trabalho, segundo sua natureza, é considerada por Silva e Menezes (2005) como sendo uma Pesquisa Aplicada, pois tem um direcionamento à uma solução de um problema especifico. Ainda segundo Silva e Menezes (2005), quanto à abordagem do problema, a pesquisa realizada neste trabalho é caracterizada como pesquisa qualitativa, pois não requer o uso de métodos e estatísticas, e possui na interpretação dos fenômenos a base para a pesquisa. Por seus objetivos, Silva e Menezes (2005) caracteriza a pesquisa deste trabalho como exploratória, pois visa ganhar uma maior familiaridade com o problema, tendo o intuito de torná-lo claro ou a buscar soluções. E, do ponto de vista de procedimentos técnicos, é caracterizada como pesquisa bibliográfica, pois usa como base material já publicado, como livros, arquivos e outros materiais disponibilizados na internet. 3.2 ETAPAS Para facilitar o alcance do objetivo proposto neste trabalho, ele está dividido em cinco etapas: 35 1. Fundamentação Teórica: nesta etapa a pesquisa bibliográfica é realizada de modo a criar a base para um melhor entendimento do problema; 2. Planejamento: Nesta etapa é realizado o levantamento de requisitos necessários para a aplicação, assim como o estudo das ferramentas que serão utilizados na implementação da aplicação; 3. Modelagem: nessa etapa são apresentados os casos de uso, assim como os diagramas da UML de sequência dos principais casos de uso; 4. Implementação: Nesta etapa é realizado o desenvolvimento da aplicação, com base nas etapas anteriores; 5. Verificação e Validação: nesta etapa é verificado se a solução alcançada atende às expectativas e requerimentos propostos. 3.3 DELIMITAÇÕES O foco deste trabalho é o desenvolvimento de uma aplicação de gerenciamento financeiro familiar, não possuindo em seu escopo funcionalidade de gestão financeira para empresas, tais como notas fiscais entre outros. Da mesma forma, a versão mobile é compatível apenas com o sistema operacional Android. Também não faz parte do escopo deste trabalho questões ligadas à segurança da aplicação, como implantação de certificados HTTPS, ou gestão de usuários. 36 4 PLANEJAMENTO Neste capítulo é dada uma visão geral da solução, com sua arquitetura básica e uma abordagem de quais ferramentas e processos são utilizados para o desenvolvimento da solução. As fases do desenvolvimento do projeto foram feitas seguindo o processo de desenvolvimento de software ICONIX. Neste capitulo são mostrados os principais artefatos gerados pela implementação do ICONIX. Os demais artefatos podem ser encontrados nos Apêndices do trabalho. 4.1 VISÃO GERAL DA SOLUÇÃO A solução proposta neste trabalho tem como objetivo principal facilitar o gerenciamento financeiro de uma família. Dessa forma, é fundamental uma arquitetura que permita que múltiplos usuários façam alterações e cadastros simultâneos à aplicação, estando ou não conectados à internet. Os módulos da aplicação são abordados com maior detalhamento no item 4.3. Entretanto, de modo a exemplificar a arquitetura básica da solução, que servirá como base para o entendimento do funcionamento da mesma, a solução é dividida em três módulos bem definidos, que são representados na Figura 7. No servidor de Aplicação fica toda a lógica da solução, assim como toda a base de dados. Através da autenticação por um usuário e senha, os clientes Android e Web poderão se comunicar com o Servidor de Aplicação para efetuar operações de cadastros, atualizações, remoções e captura de relatórios. A aplicação Android possui apenas a visualização do saldo das contas e cadastro de lançamentos, que poderão ser realizados mesmo com a ausência da internet. A aplicação conterá um banco de dados próprio, que fica responsável por, sempre que requisitado, iniciar uma rotina de sincronização com o servidor. Desta forma, o usuário que estiver em algum local sem internet pode fazer o registro de seus gastos ou ganhos, agilizando o processo do seu gerenciamento. 37 O cliente web consiste de uma interface com pleno acesso aos dados da aplicação. Aqui, é possível cadastrar novos lançamentos, assim como outros itens da aplicação, que são abordados na modelagem. Figura 7 - Arquitetura da Aplicação Fonte: Elaborada pelos autores, 2013 Através desta arquitetura é possível a utilização da solução em qualquer momento, desde que se possua acesso à internet ou se instale a aplicação Android em seu dispositivo mobile. É importante ressaltar que a figura 7 não possui embasamento em nenhuma diagramação, servindo apenas como forma de exemplificar a arquitetura básica do sistema, para uma melhor compreensão. 4.1.1 Tecnologias e Ferramentas Nesta seção abordaremos a linguagem de programação e as tecnologias escolhidas para o desenvolvimento deste trabalho. 38 4.1.1.1 PHP: Slim Framework & RedBean ORM Na criação do Servidor de Aplicação é utilizada a linguagem PHP que, segundo seu site, é definido como: PHP, que significa "PHP: Hypertext Preprocessor", é uma linguagem de programação de ampla utilização, interpretada, que é especialmente interessante para desenvolvimento para a Web e pode ser mesclada dentro do código HTML. A sintaxe da linguagem lembra C, Java e Perl, e é fácil de aprender. O objetivo principal da linguagem é permitir a desenvolvedores escreverem páginas que serão geradas dinamicamente rapidamente, mas você pode fazer muito mais do que isso com PHP. (PHP, 2013) Foi criado por Rasmus Lerdorf em 1995 (PHP, 2013) e é mantido pela organização The PHP Group. Amplamente utilizado e difundido pelos programados, existem diversos frameworks que facilitam sua utilização. Entre eles, o Slim Framework. Segundo o site do autor, o Slim Framework é um micro framework, que auxilia na criação rápida de leves e poderosas aplicações REST e APIs (SLIM, 2013). O framework já possui os módulos necessários para tratamentos de requisições HTTP e seu roteamento, além de facilitar a criação de camadas, como cache e segurança. Junto ao Slim Framework recomenda-se a utilização do ORM RedBean. ORM são ferramentas que auxiliam as operações realizadas com o banco de dados (REDBEAN, 2013). O RedBean é um ORM leve, de fácil configuração, que fornece ao desenvolvedor as operações básicas de CRUD (Create, Read, Update e Delete, ou seja, inserção, leitura, atualização e remoção) dos cadastros do banco de dados, retornando os Beans¸ representações dos objetos tratados dentro da aplicação (REDBEAN, 2013). 4.1.1.2 MySQL MySQL é um SGBD (Sistema de Gerenciamento de Banco de Dados), que utiliza a linguagem SQL, sendo um dos bancos de dados mais populares da atualidade (MySQL, 2013). 39 O PHP é compatível com o SGBD, e comporta todas as funcionalidades necessárias para a aplicação, sendo as principais o gerenciamento de transações, que permitem efetuar alterações nos dados gravados do banco e reverter as mesmas caso algo inesperado ocorra. 4.1.1.3 Apache Segundo o site do Projeto Apache HTTP Server (APACHE, 2013), este projeto é um: (...) esforço para desenvolver e manter um servidor HTTP de código aberto para sistemas operacionais modernos, incluindo UNIX e Windows NT. O objetivo deste projeto é fornecer um servidor seguro, eficiente e extensível que fornece serviços HTTP em sincronia com os padrões HTTP atual. (APACHE, 2013, tradução nossa) Ainda segundo o site, este projeto tem sido muito popular desde abril de 1996, quando surgiu. Ele é estruturado em módulos, o que permite uma maior personalização por parte dos usuários. Sua utilização é muito comum quando trata-se de PHP e MySQL, motivo pelo qual foi escolhido. Além disso, ele trabalha com todos os principais métodos de requisição que serão utilizadas pela aplicação REST. 4.1.1.4 AngularJS Para a criação do cliente WEB, é utilizado AngularJS. Esta é uma tecnologia desenvolvida pela Google, que serve como um framework para a criação de aplicações web. Todo seu funcionamento baseia-se em javascript, e roda no lado do cliente, em seu navegador (ANGULARJS, 2013). Sua arquitetura é baseada em MVC, o que facilita a organização e criação dos códigos e sua estrutura é ideal para a criação de aplicações consumidoras de REST. 40 Figura 8 - Exemplo de Código AngularJS Fonte: AngularJS, 2013 Embora possua uma documentação em estágio muito inicial, tornando difícil encontrar as respostas lá, é muito fácil encontrar os desenvolvedores e evangelistas do framework em grupos de discussão, sempre dispostos a sanar dúvidas e mostrar exemplos funcionais de resolução de problemas. Além disso, a principal vantagem na utilização deste framework está na facilidade de se manipular o HTML da página, sem se criar dezenas de linhas de javascript. 4.1.1.5 Android & Apache Cordova Segundo o site do android (http://www.android.com/), este é o “sistema operacional móvel mais popular do mundo” (ANDROID, 2014). Ele é mantido pela google, e seus aplicativos são desenvolvidos utilizando JAVA. De forma a facilitar o desenvolvimento e compatibilidade em diversos dispositivos, a aplicação mobile irá utilizar o pacote de desenvolvimento “Apache Cordova”, que pode ser encontrado no link https://cordova.apache.org/. Este pacote de desenvolvimento permite que se programe para android utilizando html e javascript, inclusive utilizando angularjs. 41 4.1.1.6 NetBeans O NetBeans é uma IDE gratuita, que trabalha com diversas linguagens de programação e marcação, inclusive o PHP, JavaScript e HTML, utilizadas neste trabalho, e pode ser baixado no site https://netbeans.org/. A aplicação auxilia no desenvolvimento e organização do código, sendo um grande facilitador para os desenvolvedores. 4.2 ICONIX: ABORDAGEM PARA MODELAGEM ICONIX é considerado uma das metodologias de desenvolvimento de software mais práticas e simples da atualidade e, ainda assim, uma ferramenta poderosa. Além disso, é também iterativo e incremental, adequado ao padrão UML (SILVA; VIDEIRA, 2001). É mantido pela empresa ICONIX Software Engineering e seu principal idealizador é Doug Rosemberg. (ICONIXPROCESS, 2013). Os artefatos gerados pelo ICONIX estão representados na figura 9. Figura 9 - Uma visão geral do ICONIX. Fonte: ICONIXPROCESS, 2013 42 O processo toma como base casos de uso, que norteiam as fases da metodologia. O ICONIX é composto pelas seguintes fases: Modelo de Domínio: Silva & Videira (2001), descrevem o Modelo de Domínio (Figura 10) como um “diagrama de classes de alto nível”, que serve para identificar os objetos do mundo real e todas as suas relações, sejam de generalização, associação ou agregação. Figura 10 - Exemplo de Diagrama de Domínio Detalhado Fonte: Silva & Videira, 2001, p.379 Modelo de Caso de Uso: “representam a visão do sistema na perspectiva do seu utilizador” (Silva & Videira, 2001, p.123). Uma exemplificação de seu funcionamento pode ser vista na figura 11. Figura 11 - Exemplo de um diagrama de casos de utilização Fonte: MACORATTI, 2014 43 Análise de Robustez: Inicialmente proposto por Ivar Jacobson, a Análise de Robustez é uma forma de permitir ilustrar graficamente as interações entre os objetos participantes num caso de uso, conforme a figura 12. (Silva & Videira, 2001). Figura 12 - Objectos usados os diagramas de robustez Fonte: Silva & Videira, 2001, p.375 Diagrama de Sequência: “permitem especificar a dinâmica ou o comportamento de um sistema segundo a abordagem orientada por objectos” (Silva & Videira, 2001, p.123). Uma exemplificação de seu funcionamento pode ser vista na figura 13. Figura 13 - Exemplo de um diagrama de sequência Fonte: Silva & Videira, 2001, p.123 44 Diagrama de Classe: “permitem especificar a estrutura estática de um sistema segundo a abordagem orientada por objectos” (Silva & Videira, 2001, p.123). ). Uma exemplificação de seu funcionamento pode ser vista na figura 14. Figura 14 - Exemplo de um diagrama de classes. Fonte: Silva & Videira, 2001, p.123 4.3 MODELAGEM Esta seção contém a modelagem da solução, e sua divisão foi criada tomando como base o ICONIX, descritos na seção anterior. 4.3.1 Requisitos Esta seção aborda os requisitos da solução, assim como os meios pelos quais estes requisitos foram levantados. 45 4.3.1.1 Ferramentas já existentes A análise dos requisitos foi realizada a partir de um estudo das principais ferramentas já existentes no mercado, levantadas a partir de buscas na internet e uma breve pesquisa com pessoas dos círculos sociais dos autores em conversas informais. A partir das características encontradas na utilização de cada ferramenta, assim como na avaliação pessoal dos autores, foram escolhidas as 4 principais aplicações. Essa avaliação se baseou na existência de requisitos mínimos de uma gestão financeira pessoal, tais como cadastro de contas bancárias ou caixas, cadastro de categorias e controle de pagamentos. Também se favoreceu as aplicações que possuíam acesso via web, não sendo necessária a instalação de uma aplicação na máquina cliente, e que possuíssem ao menos uma versão gratuita. 4.3.1.1.1 Contas Online Contas Online é uma aplicação que funciona via web. Seus principais diferencias entre as outras ferramentas é o controle de cartão de crédito e cadastro de marcas, uma forma de agrupar os lançamentos para futuros relatórios. Esta característica é útil, pois é possível visualizar, por exemplo, os custos provenientes de uma reforma realizada na casa ou uma festa de aniversário. Uma outra característica importante é o cadastro de metas, que, de forma facilitada, auxilia o usuário em gerenciar o alcance de suas metas, tais como a compra de algum item ou uma viagem, por exemplo. A aplicação conta também com uma versão mobile, mas que necessita do acesso à internet para seu funcionamento. Nas pesquisas não foi encontrada nenhuma versão mobile off-line. Url: https://www.contasonline.com.br 46 4.3.1.1.2 Meu Dinheiro Esta é uma aplicação que possui os módulos comuns às demais, mas mantem seu diferencial na versão mobile, que funciona de forma off-line. Possui também um controle de pagamentos fixos (como luz, água, aluguel) ou com parcelamento estático, sem variação entre as parcelas. Url: https://www.meudinheiroweb.com.br/ 4.3.1.1.3 Organizze Possui uma interface simples, voltada aos lançamentos rápidos. Seus relatórios são baseados em gráficos, de modo a facilitar a compreensão dos usuários. A aplicação é voltada para quem precisa de uma ferramenta simples, sem muitos recursos, tais como grupos de lançamentos ou maiores detalhamentos. A aplicação não conta com uma versão mobile para Android. Url: https://www.organizze.com.br/pessoal 4.3.1.1.4 Minhas Economias Esta aplicação possui um foco diferente das demais. Aqui, a missão principal do gerenciamento financeiro é o alcance de objetivos, como férias planejadas ou a compra de um carro novo e possui uma interface simples e didática. A versão mobile apresentou uma série de problemas nos testes, principalmente na sincronização dos lançamentos realizados off-line. Url: http://www.minhaseconomias.com.br/ 47 4.3.1.2 Descrição do funcionamento do sistema Esta descrição foi criada com base na análise dos softwares da seção anterior, capturando os itens comuns à todas elas: O projeto permite que um usuário autenticado no cliente WEB, efetue o cadastro de lançamentos, assim como efetuar o cadastro de contas, categorias e centros de custo. Contas são representações de contas bancárias ou caixas, onde são feitas retiradas e entradas de valores. Os saldos das contas poderão vir a se tornar negativos, devido a pagamentos agendados. O usuário poderá realizar transferências de valores entre as contas. Categorias possuem dois níveis: grupo e categoria. O grupo une as categorias por semelhança, tal como “Habitação” poderá agrupar categorias como “Aluguel”, “Luz” e “Água”. Dentro de um lançamento, poderão haver mais de uma categoria, cada qual com seu próprio valor, de modo à poder “diversificar” os itens dispostos dentro de um lançamento (Ex.: Supondo-se uma compra em um supermercado, um mesmo lançamento pode conter itens de alimentação, higiene e limpeza). Assim, na retirada de relatórios, poderá ser realizada uma análise hierárquica das entradas e saídas. Centros de Custo são agrupamentos de lançamentos, que permitem uma análise mais aprofundada dos mesmos, servindo para separar os lançamentos em projetos distintos, como gastos de uma viagem ou com uma festa. Os lançamentos são representações das entradas e saídas do usuário. Seu valor pode ser pago integralmente ou parcelado, em valores distintos sem padrão. Dessa forma, caso um usuário efetue uma compra de R$1.000,00, e tenha dado uma entrada de R$300,00, mais um pagamento de R$150,00 em 15 dias e o restante para 60 dias, o sistema deverá permitir esse controle. O cliente WEB disponibiliza um painel principal, no qual o usuário visualiza um resumo do andamento de suas finanças, através de gráficos simplificados dos totais acumulados das contas, valores das categorias, e um comparativo Receitas X Despesas. Também irá disponibilizar a possibilidade de emissão de um extrato das contas bancárias do sistema e um relatório analítico com o detalhamento das categorias e seus valores. Ao usuário que se autenticar no cliente Android, é possível efetuar lançamentos, assim como realizar consultas nos saldos atuais das contas. Aqui, não é possível efetuar o 48 cadastro de contas, categorias ou centros de custo, visando diminuir a complexidade para a rotina de sincronização entre os sistemas. 4.3.1.3 Quadro de Requisitos Funcionais Abaixo, são encontrados os requisitos que serão utilizados na validação do sistema. Quadro 1 - Quadro de Requisitos Requisito ódigo O sistema deve permitir o cadastro de contas 1 O sistema deve permitir a transferência de valroes entre contas 2 O sistema deve permitir a emissão de um extrato bancário, baseado nos lançamentos 3 cadastrados no sistema O sistema deve permitir o cadastro de Centros de Custo 4 O sistema deve permitir o cadastro de Categorias 5 O sistema deve permitir o cadastro de entidades (Fornecedores/Clientes) 6 O sistema deve permitir o cadastro de Lançamentos 7 Um lançamento pode conter relação com uma entidade 8 Um lançamento pode ser pago a vista ou parcelado 9 Um Lançamento pode conter mais de um item, composto de uma categoria e um centro de 10 custo Um lançamento pode ser uma receita ou uma despesa 11 As parcelas de um Lançamento devem possuir o status de PENDENTE ou PAGO 12 Parcelas pagas não podem ser alteradas 13 14 O sistema deve permitir a emissão de um relatório analitico de categorias, respeitando a hierarquia das mesmas Fonte: dos autores, 2014 49 4.3.2 Domínio Nesta tarefa foi realizado um levantamento superficial e não detalhado dos objetos do problema. Figura 15 - Modelo de Domínio Fonte: Elaboração dos autores, 2013 4.3.3 Casos de Uso A solução propõe a utilização de um único ator, chamado de usuário. A figura a seguir permite uma visão mais precisa das ações que o mesmo poderá efetuar, tanto no ambiente web quando no ambiente Android. 50 Figura 16 - Diagrama de caso de uso Fonte: Elaborada pelos autores, 2013 4.3.3.1 Detalhamento dos Casos de Uso Detalhar um caso de uso é mostrar todas as ações executadas pelo usuário em determinado caso de uso. Com o intuito de explicar o funcionamento da arquitetura da aplicação, será detalhado o caso de uso 001, que representa a gestão das taxonomias. Para fins didáticos, compreende-se como taxonomia (neste trabalho), os artefatos que tem como objetivo categorizar e agrupar determinados registros. Enquadram-se neste sentido, os 51 artefatos Contas, Centros de Custo e Categorias, seguindo todos eles o mesmo fluxo para as operações básicas de Cadastro, Edição, Visualização e Remoção. Quadro 2 - Detalhamento de Caso de Uso 001 CASO DE USO 001: Gerenciar Taxonomias Descrição Gestão dos artefatos de Contas, Centros de Custo e Categorias Ator(es) Usuário Pré-condições O ator está autenticado no cliente WEB e Abriu o menu “Configurações” Fluxo Principal 1. 2. 3. 4. 5. 6. Fluxos Alternativos e exceções O usuário clicou no item referente à taxonomia que deseja gerenciar O sistema abre a janela da nova taxonomia (TEL011); O sistema lista os itens da taxonomia; O usuário realiza uma das ações: O usuário clica em “Fechar”; O sistema fecha a janela; 4.1. O usuário preenche os dados de um novo item e clica em salvar; 4.1.1. O sistema informa que o item foi salvo e recarrega a listagem; 4.2. O usuário escolhe a opção editar de algum item da lista. 4.2.1. O sistema carrega as informações do item no formulário de edição; 4.2.2. O usuário altera os dados e clica em salvar; 4.2.3. O sistema informa que o item foi salvo e recarrega a listagem; 4.3. O usuário escolhe a opção excluir de algum item da lista; 4.3.1. O sistema remove o item; 4.3.2. O sistema informa que o item foi removido e recarrega a listagem; No item 4.1.1 e 4.2.2, caso alguma informação esteja incorreta, o sistema exibe uma mensagem mostrando qual informação está incorreta; No item 4.3.2, caso não seja possível excluir o item, o sistema exibe uma mensagem informando; A qualquer momento o usuário pode abortar a operação ao clicar no botão “cancelar”. Fonte: Elaborada pelos autores, 2013 Os demais detalhamentos dos casos de uso podem ser encontrados nos apêndices B. 52 4.3.3.2 Telas e Interfaces As interfaces de taxonomias seguem um padrão, tanto estético quanto de mecânica, salvo à exceção da tela de Categorias, devido a forma como sua informação é apresentada ao usuário. Como exemplificação, o protótipo de tela do cadastro de centros de custo pode ser considerado o mais genérico, conforme a figura 17. Figura 17 - Tela de Taxonomia (Centros de Custo) (TEL011) Fonte: Elaborada pelos autores, 2013 Uma tabela com as informações de tela pode ser encontrada no apêndice D. 4.3.4 Robustez O fluxo base das requisições realizadas para a aplicação REST pode ser exemplificado pelo diagrama de robustez abaixo, utilizando o caso de uso 003. 53 O fornecedor REST recebe a requisição do usuário através da View da aplicação, e a mesma é tratada dentro do RestMiddleware, uma espécie de camada intermediadora que filtra e trata todas as requisições do usuário, sendo responsável por efetuar a validação da autenticação do usuário e da requisição efetuada, e direcionar para o controlador correto. Figura 18 - Diagrama de Robustez do UC003 Fonte: Elaborada pelos autores, 2013 Na figura 18, após as devidas validações do mediador, a requisição é disparada para o controlador dos Lançamentos, o qual efetua a operação designada. 4.3.5 Sequência e Classe Através do diagrama de sequência é possível verificar quais os métodos são necessários para se realizar a operação. Retornando ao caso de uso 001, onde é visualizada a mecânica básica por trás do sistema, pode ser vista também a interação (como também as facilidades e benefícios) com os frameworks utilizados no desenvolvimento. Entretanto, para 54 se compreender os próximos exemplos, é necessário conhecer a estrutura das classes de beans do sistema, representados no próximo diagrama. Figura 24 - Diagrama de Classe de Beans da Aplicação Fonte: Elaborada pelos autores, 2013 Tendo em mente os relacionamentos, agregações e composição das classes, é possível analisar os diagramas de sequência. Para facilitar a visualização e explicação, o diagrama do UC001 foi dividido em partes. A primeira parte representa a operação básica de listagem das taxonomias. 55 Figura 25 - UC001 - Diagrama de Sequência de Listagem de Taxonomia Fonte: Elaborada pelos autores, 2013 Como visto no diagrama de robustez, o usuário efetua a requisição para o fornecedor REST, que trata o que será realizado dentro do RestMiddleware. Este mediador dirige a requisição para o controller correto, que irá fazer o devido tratamento junto ao model. O model, por sua vez, é gerido diretamente pelo ORM RedBean, que se encarrega de todas as interações com o banco de dados e a geração dos beans, retirando da mão do desenvolvedor esta preocupação. O model gera também uma lista de beans automaticamente, não sendo necessário gerar uma instância de nenhum deles. 56 O próximo diagrama representa de forma mais clara este benefício do ORM, demonstrando os passos realizados pela aplicação para inserir ou atualizar um bean de taxonomia na aplicação. Figura 19 - UC001 - Diagrama de Sequência de Inserir e Editar Taxonomia 57 Fonte: Elaborada pelos autores, 2013 O cadastro de taxonomias é uma operação simples, não possuindo outros beans agregados à eles próprios. Mas, imaginando o cenário de um cadastro de um bean que possui outros beans agregados, como um lançamento, que possui uma lista de itens e uma lista de parcelas, o ORM trata automaticamente destas relações na hora de inserir (ou atualizar o item), como demonstrado no diagrama a seguir, do caso de uso 003. 58 Figura 20 - Diagrama de Sequência UC003 Fonte: Elaborada pelos autores, 2013 Do mesmo modo, na operação de exclusão de um bean, o ORM também se encarrega de verificar os relacionamentos entre eles, mantendo a integridade da base de dados. Imaginando o cenário onde o usuário irá excluir uma conta, o RedBean se encarrega de verificar se esta conta não está utilizada por transferências ou se não foram realizados pagamento nela. 59 Figura 28 - UC001 - Diagrama de Sequência de Exclusão de Taxonomia Fonte: Elaborada pelos autores, 2013 O diagrama de classes completo e os demais diagramas de sequência podem ser encontrados nos apêndices deste trabalho. 60 5 DESENVOLVIMENTO DA SOLUÇÃO Neste capítulo é descrito o processo de desenvolvimento da solução proposta, justificando as ferramentas e tecnologias escolhidas e mostrando quais soluções foram descartadas após a experimentação. Ao final, o resultado alcançado é apresentado e validado com base na tabela de requisitos. 5.1 ESCOLHA DAS TECNOLOGIAS Várias tecnologias foram estudas no processo de escolha das mesmas, de modo a buscar o caminho mais estável e de fácil manutenção para o desenvolvimento da solução. A própria escolha de se utilizar REST na camada de aplicação teve a mesma motivação. As tecnologias e ferramentas escolhidas estão disponíveis no capítulo 4, com suas descrições. Entretanto, até chegar a esta escolha, outras tecnologias foram estudadas e descartadas para esta aplicação, por não se enquadrarem em algum aspecto. A sessão está dividida em 3 pontos de divisão da aplicação: Camada de Aplicação (REST), Camada de Visualização (Cliente) e Aplicação Mobile. Em diversos artigos lidos durante a busca pelas tecnologias ideais, a camada cliente era chamada de APP, enquanto a camada REST era chamada de API. Daqui pra frente, de forma a facilitar o desenvolvimento da narrativa, essa será a conotação utilizada. 5.1.1 API (Camada de Aplicação) A camada de aplicação é onde estão todas as regras do sistema (o REST), assim como o banco de dados. Aqui, o primeiro impedimento encontrado foi o financeiro, pois a 61 princípio pretendia-se utilizar NodeJs com MariaDB no servidor, duas tecnologias em grande ascensão. Em 2013 o Google iniciou a migração de suas bases de dados, antes em MySql para MariaDB, dos mesmos criados do MySql (MEIOBIT, 2013). Ele é OpenSource e com o apoio da Google em seu desenvolvimento, a tendência é que se torne um banco de dados cada vez mais robusto. Já o NodeJS é um interpretador de JavaScript que trabalha no servidor, voltado para aplicações de tempo real. Extremamente simples de ser utilizado, esse interpretador, diferente de outras plataformas como apache, mantém a conexão com o cliente a ponto de poder lhe avisar de eventuais modificações para que o mesmo possa atualizar seus dados, não trabalhando apenas em modo passivo. Entretanto, a utilização de qualquer uma das tecnologias iria precisar de um servidor dedicado ou de conhecimento mais avançados na parte de configuração de servidores. Assim, foi preferível a segunda opção, na qual o autor já possuía grande conhecimento: PHP e MySQL. O fato de ser a segunda opção não é um desmerecimento para as tecnologias, pelo contrário. A escolha inicial pelo NodeJS e MariaDB foi a forma encontrada de se aproveitar o desenvolvimento deste trabalho para aprender novas tecnologias, mas como (à exceção do PHP e MySQL) basicamente todos os demais conteúdos eram inéditos aos autores, essas camadas extras de complexidade poderiam vir a atrapalhar o andamento do trabalho, ficando aqui como uma sugestão de migração para futuros trabalhos. Uma vez definido este aspecto inicial da aplicação com a utilização LAMP (Linux, Apache, MySQL e PHP), a escolha se estendeu à qual ferramenta poderia ser utilizada para o auxílio no desenvolvimento. A princípio pensou-se em utilizar CakePHP (http://cakephp.org/), mas com o andamento da modelagem, foi perceptível que uma ferramenta mais simples e mais leve seria suficiente para todas as demandas da aplicação. Assim, foi escolhido o microframework SlimPHP para esta tarefa. O mesmo possui o básico necessário para a administração de rotas de url em uma aplicação REST, além de trabalhar com interceptadores de requisição, que facilitam as tarefas de autenticação, validação, entre outras. Além disso, por ser um framework extremamente enxuto, o mesmo possui um dos melhores desempenhos em relação à outros (SYSTEMSARCHITECT, 2013). Junto ao framework, foi escolhido um ORM para facilitar as interações com a base de dados. Aqui, o primeiro escolhido foi o Doctrine (http://www.doctrine-project.org/), 62 mas sua complexidade não era necessária para o projeto, pois o ORM aqui serviria apenas como um auxiliar à aplicação. Logo em seguida foram realizados testes com o NotORM (http://www.notorm.com/), mas constantes bugs nos relacionamentos entre as tabelas e a documentação falha fizeram com que o mesmo fosse deixado de lado. Por fim, o escolhido foi o RedBeanORM em sua versão 3.5.8, por sua simplicidade e perfeito funcionamento junto ao SlimPHP. A modelagem do banco de dados se encaixou perfeitamente nos requisitos do ORM, e com sua utilização, tarefas básicas como listagens e CRUDs foram basicamente que finalizadas, com exceção dos casos mais complexos que precisaram de testes mais aprofundados buscando o melhor desempenho. 5.1.2 APP (Camada de Visualização) A camada de visualização, utilizada pelo cliente (navegador do usuário), foi criada como forma de acesso aos dados da API. Aqui, nenhuma regra essencial ao sistema foi aplicada, pois por tratar-se de uma aplicação que roda no navegador do usuário, o mesmo possui acesso ao código, podendo interferir nos dados encaminhados para a API. Dessa forma, buscou-se deixar a camada o mais leve e simples possível, trabalhando-se apenas na forma como os dados são apresentados e realizando validações básicas, que serão replicadas no servidor caso o usuário interfira no funcionamento normal das mesmas. Nesta camada, de início, seria utilizado Bootstrap (http://getbootstrap.com/) junto ao AngularJS. O Bootstrap seria responsável pelo desenvolvimento da interface, e o AngularJS pela interação entre a API e os dados resultantes. Entretanto, a versão do Bootstrap disponível na época não se comportava bem junto ao AngularJS, além de não atender algumas necessidades da interface que seria desenvolvida. Assim, foi descartado o Bootstrap e o CSS e Javascript da aplicação foi desenvolvimento junto ao AngularJS, fazendo uso de algumas libs disponíveis para o JQuery (http://jquery.com/), como o HighCharts (http://www.highcharts.com/) para os gráficos, entre outros. 63 A ideia inicial era manter o suporte a navegadores antigos, entretanto, com o desenvolver da aplicação se percebeu que alguns recursos teriam que ser deixados de lado ao se tentar manter suporte a navegadores desatualizados e, por tratar-se de uma aplicação fechada, essa camada de complexidade poderia ser evitada. Dessa forma, a aplicação passou a seguir os padrões de suporte da google (https://support.google.com/a/answer/33864?hl=en), que funcionam corretamente nas versões atualizadas do Firefox, Chrome, Safaria e IE (sempre nas últimas 2 versões disponíveis). Com essa escolha, foi possível remover uma série de implementações que existiam apenas para suporte de versões antigas do IE, e o APP passou a funcionar com HTML5 e CSS3, simplificando o desenvolvimento e o transformando em uma aplicação mais leve e dinâmica. Além disso, esta aplicação foi desenvolvida apenas para desktops, visto que existe a versão mobile que ficará responsável por trabalhar em tablets e smartphones. 5.1.3 Mobile Este foi um dos maiores desafios percorridos na execução do trabalho, pois era um campo totalmente novo para o autor. O primeiro requisito para a escolha das ferramentas foi a portabilidade. Pensou-se em desenvolver nativamente para Android, mas a aplicação iria precisar, futuramente, ser migrada para outras plataformas, como Ios. Assim, desenvolver nativamente iria dificultar essa migração. Assim, foram realizados vários testes com ferramentas de desenvolvimento para mobile que possibilitassem a portabilidade entre plataformas de forma mais fácil. JQuery Mobile (http://jquerymobile.com/) e Sensha Touch (http://www.sencha.com/products/touch/) foram descartados pois não seguiam as especificações do projeto. Após isso, o escolhido foi o PhoneGap (http://phonegap.com/) que, depois de algumas semanas de pesquisas e testes foi trocado pelo seu sucessor, o Cordova (https://cordova.apache.org/), que é o mesmo PhoneGap, porém mais atualizado e agora pertencente ao Apache, o que resultou em constantes atualizações com melhorias e uma documentação mais completa. 64 Escolhida a parte estrutural do sistema, foram realizados testes com o bootstrap para a parte visual, mas o mesmo parecia ficar muito pesado em dispositivos com pouca memória, então foi alterado para o IOnic (http://ionicframework.com/), que permitiu a utilização de AngularJS no dispositivo, além do HTML5 e CSS3, o que facilitou ainda mais o desenvolvimento da aplicação e permitiu a reutilização de alguns scripts básicos já desenvolvidos. 5.2 RESULTADOS OBTIDOS A parte mais complexa do desenvolvimento da solução, com certeza, foi a modelagem. Embora a ideia inicial da aplicação estive bem presente na mente dos autores, colocar tudo isso no papel e realizar o devido planejamento foi uma tarefa difícil, mas muito interessante. Nesta etapa foi possível remover os pontos de complexidade que poderiam atrapalhar o desenvolvimento da aplicação no tempo disponível da mesma, como o controle de agendamentos e cartão de crédito, e dessa forma o desenvolvimento da solução se tornou mais compatível com o calendário apresentado e o tempo disponível para a realização das tarefas. Também foi nesta etapa que diversos pontos que antes estavam difíceis de entender como seriam realizados, foram organizados e então se tornaram possíveis de realizar, como a própria sincronização entre os dispositivos. E tudo teve seu primeiro passo com simples rascunhos, onde todas as necessidades foram sendo estudadas e anotadas. Pouco a pouco os itens foram se relacionando e os primeiros esboços da modelagem foram desenvolvidos ainda no papel, permitindo o descarte de itens desnecessários, a validação de relacionamento entre objetos, e estudar quais os itens seriam fundamentais para a criação deste trabalho, resultando na escolha da arquitetura e tecnologias demonstradas na figura 21. 65 Figura 21- Arquitetura e Tecnologias Fonte: Elaborada pelos autores, 2013 5.2.1 API Uma vez realizado o filtro dos casos de uso que realmente seriam implementados, e a modelagem básica ter sido realizada, o cronograma da aplicação foi divido em três partes, do mesmo modo que a sessão anterior: API, APP e Mobile. A API seria necessária para todas as demais atividades do trabalho, pois é o ponto fundamental para aplicação. Sem ela, nenhuma das aplicações clientes possui utilidade. Assim, a API foi desenvolvida tendo em mente todas as necessidades que as aplicações poderiam vir a ter. Dessa forma, foi criado um quadro de rotas (urls de requisição do REST) para que pudesse ser realizado o desenvolvimento e os retornos de cada rota foram testados através de uma extensão do navegador Chrome, chamada “Advanced REST cliente” (http://goo.gl/NZBWva), que trabalha de forma simples, emulando um cliente consumidor de REST. Com essa extensão, foi possível testar os envios e recebimentos de cada rota da API, manipulando os cabeçalhos da requisição e os dados enviados dependendo da 66 necessidade. A extensão trabalha muito bem com json, padrão utilizado na comunicação com a API, o que possibilitou o estudo e correção de todos os envios e retornos. A Figura 22 representa um exemplo de requisição de login. Figura 22 - Exemplo de Requisição de Login Fonte: Elaborada pelos autores, 2014 Após a requisição ser enviada, a extensão exibe os detalhes da resposta do servidor, conforme a figura 23: Figura 23 - Exemplo de Resposta Fonte: Elaborada pelos autores, 2014 67 Com essa extensão foi possível identificar as requisições que demoravam mais tempo para trazer seu retorno (ou por terem um gasto maior no processamento ou por terem o retorno muito pesado), assim como testar exceções e erros que poderiam a vir a ocorrer. Esses testes possibilitaram que fosse realizado o tratamento destes problemas antes de iniciar o desenvolvimento de qualquer um dos clientes. 5.2.2 Cliente WEB (APP) Uma vez realizado o desenvolvimento da API, e a mesma já possuindo as rotas bem definidas, iniciou-se o desenvolvimento do cliente web. Nesta etapa do projeto, como já relatado, a primeira dificuldade encontrada foi o Bootstrap. Uma das ideias iniciais seria criar um APP responsivo (que se ajusta a diversas telas) para ganhar tempo no desenvolvimento mobile. Mas com o andamento dos testes, se percebeu que as duas aplicações deveriam ser distintas, pois possuiriam uma arquitetura completamente diferente uma da outra. Assim, junto à escolha de compatibilidade apenas com os navegadores modernos e com a retirada do bootstrap, o desenvolvimento das telas pode ser iniciado. O primeiro passo foi criar o layout a partir dos protótipos, que tiveram que ser modificados diversas vezes para atender a necessidades que vieram a surgir, tanto visuais quanto de usabilidade. O melhor exemplo é a tela de cadastro de lançamento, que era composta por abas e passou a não mais possuir as mesmas e a gestão de categorias, que antes ficava dentro de um modal e agora possui uma página para sua própria gestão. Apenas após ter a interface funcionando nos navegadores desejados, é que a classe de javascript que ficaria responsável pela conexão com a API foi criada. Ali, todos os métodos de contato com a API foram registrados, junto as validações de dados e de mensagens de erro. Com estes detalhes realizados, o AngularJS foi implantado e a cada término de implantação do AngularJS houve uma bateria de testes em cada um dos navegadores, para certificar-se de que o sistema estava dentro do esperado. Neste desenvolvimento a API também foi novamente testada, sendo enviados dados aleatórios com alguns erros propositais para testar a interação entre a API e o cliente 68 web. Alguns erros foram encontrados, como esperava-se naquele momento, sendo corrigidos sempre que detectados. 5.2.2.1 Telas As interfaces foram criadas utilizando-se da filosofia “Less Is More” (Menos é Mais) do minimalismo, junto aos conceitos atuais de design da web e de aplicativos mobiles. Dessa forma, o objetivo foi criar uma interface limpa e de fácil entendimento, de modo a deixar o sistema rápido e auto didático. A interface de login é o exemplo mais claro disso: Figura 24 - Interface de Login Fonte: Elaborada pelos autores, 2014 Uma vez o usuário logado no sistema, ele terá acesso à um painel inicial (Figura 25) com informações básicas como saldos das contas, últimos lançamentos e um gráfico de resultado mensal, comparando as receitas com despesas dos últimos seis meses. A ideia dessa tela veio da necessidade de uma visualização rápida e de fácil entendimento da situação financeira para o gestor familiar. Aqui, além de poder ficar por dentro das últimas atualizações e cadastramentos de atualizações realizadas por outros membros da família, o resumo do saldo das contas e o resumo financeiro poderá alertá-lo de possíveis faltas de dinheiro em uma rápida análise. 69 Figura 25 – Visão Geral Fonte: Elaborada pelos autores, 2014 Nesta tela estão os acessos rápidos aos itens de sistema, como a adição de um novo lançamento, os relatórios e também o menu de configurações (Figura 26), onde encontram-se os acessos a cadastros de Categorias, Centros de Custo, entre outros. As interfaces voltadas para a configuração do sistema estão disponíveis no apêndice D. Figura 26 – Configurações Fonte: Elaborada pelos autores, 2014 A partir dessas configurações é que se torna possível realizar o cadastro de novos lançamentos e transferências. Ambas as interfaces foram construídas para que o usuário não 70 tenha dificuldade em realizar as devidas ações, chegando em um resultado simples, como demonstrado na figura 27, na interface de transferência: Figura 27 – Nova Transferência Fonte: Elaborada pelos autores, 2014 Até mesmo a interface de cadastro de lançamento, que possui diversos campos, pois podem possuir mais de um item ou serem parcelados, foi otimizada de modo a ter uma interface limpa e organizada. Dessa forma, a interface foi dividida em áreas especificas: Informações, itens e parcelas. 71 Figura 28 – Tela de Movimentação Fonte: Elaborada pelos autores, 2014 Essa divisão possibilita que o usuário consiga visualizar as áreas separadamente, gerando conforto no momento de realizar a gestão de algum lançamento. Esta foi a tela que necessitou do maior estudo para ser disponibilizada, passando desde a utilização de abas até a atual tela. Com o cadastro desses lançamentos e transferências, o usuário poderá visualizar essas informações na forma de um relatório analítico ou de um extrato. No primeiro caso, o usuário conseguirá visualizar um detalhamento por categoria e grupo de categoria, dividido por situação (pendente e pago). O relatório sempre corresponde à um mês, que o usuário informa, junto ao regime de período que deseja visualizar, competência (data do lançamento) ou vencimento (vencimento das parcelas). Ao fim do relatório, o usuário pode visualizar o resultado financeiro daquele período. Na figura 26 (recortada para poder exemplificar o relatório), é possível ver a divisão dos itens e a apresentação dos totais. 72 Figura 29 – Relatório Analítico Fonte: Elaborada pelos autores, 2014 Já no segundo caso, o extrato, tem como funcionalidade mostrar o histórico de transações realizadas em uma determinada conta em um determinado período, conforme exemplificado abaixo, na figura 27: Figura 30 – Extrato Fonte: Elaborada pelos autores, 2014 Além desses relatórios, o usuário tem a possibilidade de gerar uma listagem de lançamentos utilizando os critérios que desejar, como descrição, centro de custo, etc. Todos os itens disponíveis dentro de um lançamento são possíveis de se utilizar neste filtro. 73 Figura 31 – Filtros Fonte: Elaborada pelos autores, 2014 Na listagem gerada o usuário poderá editar/excluir os lançamentos ou até mesmo efetuar o pagamento das parcelas. Maiores detalhes do funcionamento do sistema podem ser conferidos no endereço: http://tcc.finnancer.com.br, com o usuário de teste “tcc” e senha “tcc”. 5.2.2.2 Funcionamento WEB Partindo para a parte técnica da solução, toda a aplicação web funciona a partir de requisições para o servidor REST, a API, e com o json resultante de cada uma das solicitações, ela vai se moldando. Isso é importante de ser ressaltado, pois aqui é onde está um dos objetivos da realização deste trabalho. A utilização do servidor com a aplicação REST, juntamente ao AngularJS na interface, permite que a aplicação se molde facilmente, dependendo da necessidade. Como exemplo, pode ser analisado o retorno do servidor ao pesquisar lançamentos realizados a partir de determinados critérios. 74 Figura 32 – Retorno Json Fonte: Elaborada pelos autores, 2014 Este retorno é utilizado em diversos lugares da aplicação, tanto no relatório de lançamentos quanto para a geração dos lançamentos recentes utilizados na tela inicial da aplicação web. E, caso venha a ser necessário alguma outra interface que faça uso da listagem de lançamentos (últimos lançamentos atualizados, por exemplo), não haverá necessidade de se criar um método especifico, pois os métodos genéricos disponíveis no REST possibilitam todas as interações necessárias no sistema. Por ser um único servidor REST centralizando as regras do sistema, qualquer outra aplicação consumidora dessa API poderá utilizar os dados da forma necessária para a aplicação cliente em questão. Este é o ponto mais importante do cliente web, pois permite que grande parte da carga de processamento seja mantida no servidor, e não no cliente, dando maior versatilidade para a manipulação das interfaces. 5.2.3 Aplicação Mobile O grande desafio dessa etapa estava concentrado na configuração do ambiente de trabalho. Configurar o phonegap no Windows foi muito problemático, mesmo com os inúmeros tutoriais encontrados na web. Por alguma razão, sempre parecia faltar alguma dependência para o projeto conseguir rodar sem problemas. Dessa forma, o phonegap foi trocado pelo cordova, que 75 funcionou na primeira tentativa, sem erros. Apenas após ter o ambiente funcionando corretamente é que se iniciou o desenvolvimento das interfaces sem funcionalidades, apenas no esqueleto, seguindo os protótipos. O desenvolvimento das interfaces foi facilitado pela utilização do framework Ionic, que possibilitou a utilização do AngularJS nas interfaces. Com o Cordova foi criada uma versão simplificada da base de dados no dispositivo móvel, que possuía um hardware extremamente fraco, contando com pouco menos de 300mb de memória e uma tela de apenas 3,5 polegadas. A proposta de se utilizar as configurações bem abaixo das necessárias para utilização surgiu como forma de validar o desempenho do software durante o desenvolvimento. Como ele rodava fluentemente em configurações mínimas, em aparelhos com características mais fortes o aplicativo ficava ainda mais rápido. 5.2.3.1 Funcionamento Um dos requisitos básicos da aplicação mobile é a necessidade de se poder utilizar o mesmo sem acesso à internet, para que a tarefa de gestão fique mais prática e possa ser realizada sem essa dependência constante. A internet ficou como requisito apenas para a tarefa de login inicial (após a instalação do aplicativo) e para efetuar a sincronização. Assim, de forma a comportar os dados no próprio aparelho, foi necessário criar uma estrutura de dados diferenciada, conforme exemplificado na figura 33: 76 Figura 33 – Base de Dados do Cliente Mobile Fonte: Elaborada pelos autores, 2014 Com essa estrutura de dados, a aplicação permite que o usuário consulte o saldo de suas contas e seus resultados mensais. Também está liberada uma versão simplificada do cadastro de lançamentos, que ficam armazenados no aparelho até que seja conectado à internet para poder ser realizada a sincronização. Figura 34 – Tela inicial do Mobile e de Saldos Bancários Fonte: Elaborada pelos autores, 2014 77 5.2.3.2 Sincronização Mesmo embora no momento o sistema possua um único usuário, este usuário pode conectar-se de múltiplos dispositivos diferentes simultâneamente. Além disso, toda a aplicação foi construída prevendo a utilização de múltiplos usuários em múltiplos dispositivos. Dessa forma, cada registro do banco de dados da API guarda a data e hora de sua última alteração, de modo a prevenir que alguma alteração seja sobrescrita. Além disso, todas os processos da API que se referem a manipular dados do banco de dados são encapsulados em Transações do banco de dados e, caso algum problema ocorra no decorrer do processo, seja do sistema ou de validação, tudo é restaurado ao ponto inicial, para que não haja perda de dados. Com esta estrutura é possível criar o mecanismo de sincronização entre as plataformas. O cliente web por si só está sempre atualizado, pois ele não armazena dados, apenas consome da API. Entretanto, como a aplicação mobile foi desenvolvida para trabalhar com alguns recursos de modo off-line, este controle é vital para o funcionamento da arquitetura. Assim, um processo simplificado foi criado para realizar essa tarefa, divido em duas etapas. A primeira etapa, ocorrida no primeiro acesso do usuário após a instalação da aplicação no dispositivo, é a responsável pela carga inicial do sistema. Aqui, o usuário precisa estar conectado à internet e deve inserir seus dados de login e senha. Uma vez inserido os dados, a aplicação irá armazenar o login na base de dados do aparelho, e irá iniciar o processo de sincronização com a API, onde os dados essenciais são baixados pela primeira vez, como contas, categorias, centros de custos e os resultados de cada mês até o momento. A partir deste ponto o usuário pode cadastrar novos lançamentos ou consultar seus saldos e resultados. A segunda etapa ocorre quando o usuário solicitar que a aplicação sincronize com o servidor. Aqui, a senha de sua conta é novamente solicitada para que possa ser efetuado o login na API, para se iniciar a sincronização. Neste processo, toda a prioridade está voltada para os lançamentos cadastrados no sistema, que são disparados para o servidor um a um, e excluídos da base temporariamente após a confirmação do cadastro. Finalizado esse processo, o aplicativo irá solicitar para o servidor a listagem atualizada de contas, categorias e centros de custo. Após isso, atualizará os resultados mensais, finalizando a sincronização. Este processo é exemplificado pela figura 32: 78 Figura 35 – Processo de Sincronização Fonte: Elaborada pelos autores, 2014 Com essa dinâmica, o usuário pode trabalhar com a aplicação sem necessitar estar conectado na internet, dando maior flexibilidade para os momentos em que for efetuar novos lançamentos sempre que houver a necessidade. 79 5.2.3.3 Segurança Embora não estivesse no foco do trabalho, uma camada básica de segurança foi adicionada ao sistema, de modo a tratar a autenticação de usuários e evitar o uso indevido dos dados. Para isso, foi utilizado um recurso do Slim Framework chamado de Middleware, que trabalha como um “filtro” da aplicação, verificando todas as requisições e respostas, permitindo que sejam efetuadas diversas verificações, como autenticação e cache. Toda requisição passa por essa camada, que faz o roteamento da aplicação e, principalmente, as validações de segurança. Figura 36 – RestMiddleware Fonte: SITEPOINT, 2013 Toda requisição para o servidor REST deve conter em seu cabeçalho uma chave de autenticação. Ou, no cliente web, um cookie com essa chave. A rota de login é a única rota que não necessita de uma chave de autenticação para se poder acessar, pois, quando um usuário efetua login no servidor REST (no cliente android o usuário e senha estão no código temporariamente), o mesmo ainda não possui essa chave. Assim, ao receber a requisição o servidor verifica as credenciais e monta uma chave válida por apenas 15 minutos. Essa chave deve ser fornecida ao servidor REST em todas as demais requisições, caso contrário o mesmo irá negar a requisição. Nos casos de verificação bem sucedida da chave, a mesma é revalidada por mais 15 minutos. 80 Essas chaves não ficam armazenadas no servidor, mas possuem uma lógica para que a aplicação consiga identificar quem e da onde está partindo a solicitação, para saber se pode ou não responder à ela. Os dados armazenados nessa chave são o ip e host de origem do usuário, id e hash de senha do, microssegundos da requisição, e uma frase chave da aplicação, que é alterada de tempos em tempos desvalidando qualquer requisição permanente. Tanto o id do usuário quanto os microssegundos da requisição possuem suas bases numéricas alteradas. Por fim, desses dados é gerada uma hash com SHA1, e enviado ao requisitante junto ao id e tempo da requisição, conforme exemplificado abaixo, na figura 34: Figura 37 – Criação da hash de autenticação Fonte: Elaborada pelos autores, 2014 Dessa forma, ao receber a hash do cliente, o sistema verifica o tempo da requisição (se ultrapassou o limite permitido) e verifica se a hash é válida, capturando a origem do cliente, o hash de sua senha (a partir de seu id) e as demais informações. Se a hash resultante estiver correta, a aplicação aceita a requisição. Embora esse tipo de autenticação obrigue o usuário a usar sempre a mesma origem para validar a hash, caso o mesmo deixe sua máquina efetuando uma requisição de tempos em tempo, ele ficará autenticado perpetuamente, apenas tendo seu login bloqueado quando a frase segredo da aplicação for alterada. Esta não é a forma mais segura de se autenticar, entretanto, obedece o conceito de RESTfull, que não mantém internamente as informações do usuário autenticado, deixando que o cliente da API tome conta desta tarefa. Como sugestão para trabalhos futuros, além da implantação de um certificado HTTPS para fortalecer a segurança da comunicação, seria interessante um trabalho tratando sobre segurança e autenticação em aplicações REST. 81 5.3 AVALIAÇÃO A avaliação da solução final foi realizada com base na tabela de requisitos apresentada na modelagem da aplicação. Além disso, foram realizados alguns testes de funcionamento após o término do desenvolvimento. 5.3.1 Testes Alinhado a norma IEEE 830 (MATH, 2014), foram desenvolvidos alguns casos de testes para verificar o funcionamento da ferramenta. Os casos de testes usaram como base inicial os casos de usos, detalhando cada um dos itens para manter-se a segurança da funcionalidade. O detalhamento dos casos de testes está no Apêndice E, e um resumo do resultado dos casos de teste pode ser verificado na tabela abaixo: Quadro 3- Resumo dos Casos de Teste Código CT001 CT002 CT003 CT004 CT005 CT006 CT007 CT008 CT009 CT010 Nome Cadastrar Taxonomia Editar Taxonomia Remover Taxonomia Inserir Lançamento Efetuar Transferência Pagar parcela de lançamento Gerar Extrato Gerar Relatório Analítico Inserir Lançamento (Mobile) Sincronizar com o Servidor Bugs Encontrados 10 5 2 36 3 5 8 4 15 5 Bugs Corrigidos 8 4 0 33 3 5 8 4 10 3 Fonte: Elaborada pelos autores, 2014 Grande parte dos problemas encontrados durante a realização dos testes puderam ser corrigidos, com exceção de alguns problemas relacionados a sincronização, que ainda necessitam de um tratamento mais aprimorado. No bug, caso um lançamento seja realizado com algum relacionamento em alguma taxonomia (conta, centro de custo ou categoria) e no momento da sincronização o sistema verificar que aquela taxonomia não existe mais, a 82 mesma não é gravada no banco de dados do servidor, permanecendo no dispositivo do usuário. Para solucionar esse problema é necessária a criação de uma interface onde o usuário pudesse efetuar as devidas alterações em seus cadastros de lançamentos dentro do dispositivo, para então poder novamente efetuar a sincronização. 83 6 CONSIDERAÇÕES FINAIS E TRABALHOS FUTUROS Desde o início a motivação para a escolha dessa aplicação, tanto o tema quanto as tecnologias, foram derivadas da necessidade do autor de possuir uma ferramenta que lhe auxiliasse na gestão financeira pessoal, pois os diversos aplicativos hoje existentes não possuíam todas as ferramentas necessárias. Além desta motivação, existia um grande interesse em seu estudar tecnologias que até então não haviam sido utilizadas pelos autores, como AngularJs, desenvolvimento mobile e a própria arquitetura REST. Desenvolver usando essas tecnologias se mostrou extremamente útil, principalmente no quesito manutenção, que foi muito facilitada pelo ORM e pelo AngularJS. A própria arquitetura do framework utilizado para o desenvolvimento, por sua simplicidade e independência de outras libs, fizeram com que o trabalho de desenvolvimento corresse sem muitas complicações e necessidade de aprender a utilizar diversas outras ferramentas. Para realizar este trabalho, tentou-se abstrair toda a complexidade que poderia vir a ser criada sem necessidade, de forma a se tornar um ótimo projeto para o estudo das tecnologias e métodos. Tentou-se aplicar uma modelagem simplificada, que foi revista a cada novo ciclo de desenvolvimento do modelo incremental, para que se chegasse no resultado obtido. Dessa forma, os objetivos deste trabalho foram atingidos. No entanto, o resultado obtido está apto a receber novas funcionalidades para se tornar uma ferramenta mais completa para o objetivo para o qual foi projetado. Por enquanto, essas funcionalidades ficam aqui como sugestões para trabalhos futuros: • Implementação de Gestão de Cartão de Crédito e Agendamentos; • Gestão de orçamento e metas; • Maior poder de controle na aplicação Mobile; • Portar a aplicação para IOS e demais sistemas operacionais mobile; • Implantação de teste unitários; • Validações de segurança na aplicação; • Cadastro e gestão de usuários; 84 Com a adição destas funcionalidades seria possível iniciar a comercialização da aplicação, que possui todos os requisitos necessários para uma ótima entrada no mercado comparado às soluções pesquisadas durante o processo de análise das ferramentas disponíveis atualmente no mercado. 85 REFERÊNCIAS ALVES, Alessandra Batista de Melo Nóbrega. Planejamento Financeiro Familiar E Orçamento Doméstico. Disponível em: <http://www.sudamerica.edu.br/arquivos_internos/publicacoes/PLANEJAMENTO_FINANC EIRO_FAMILIAR_E_O_ORCAMENTO_DOMESTICO.pdf>. Acesso em: 27 ago. 2013. ANDROID. Meet Android. 2014. Disponível em: < http://www.android.com/>. Acesso em: 29 mar. 2014. APACHE. HTTP server project. 2013. Disponível em: <http://httpd.apache.org/>. Acesso em: 12 nov. 2013. ANGULARJS. Superheroic Javascript MVC Framework. 2013. Disponível em: <http://angularjs.org/>. Acesso em: 09 nov. 2013. CHEROBIM, Ana Paula Mussi Szabo; ESPEJO, Márcia Maria dos Santos Bortolocci. Finanças pessoais: conhecer para enriquecer! São Paulo: Atlas, 2010. CONTE, Tayana; MENDES, Emília; TRAVASSOS, Guilherme Horta. Processos de desenvolvimento para aplicações web: Uma revisão sistemática. In: Proceedings of the 11th Brazilian Symposium on Multimedia and Web (WebMedia 2005). 2005. p. 107-116. Disponível em: <http://lens.cos.ufrj.br:8080/ESEWEB/materials/RSProcessoWeb/2005_10_31_Conte_Web Media_2005_pubform.pdf>. Acesso em: 06 out. 2013. CURBERA, Francisco, et al. "Unraveling the Web services web: an introduction to SOAP, WSDL, and UDDI." Internet Computing, IEEE 6.2 (2002): 86-93. Disponível em: < http://tele1.dee.fct.unl.pt/rit2_2009_2010/teo/soap.tutorial.pdf>. Acesso em: 25 set. 2013. FIELDING, Roy Thomas. Architectural Styles and the Design of Network-based Software Architectures. 2000. Disponível em: <http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm>. Acesso em: 24 ago. 2013. FROST & SULLIVAN. MEGA TRENDS. 2011. Disponível em: <http://frostapac.com/download/megatrends.pdf>. Acesso em: 14 set. 2013. G1. Economista Mauro Halfeld dá dicas sobre orçamento familiar. 2013. Disponível em: <http://g1.globo.com/pr/parana/noticia/2013/06/economista-mauro-halfeld-da-dicassobreorcamento-familiar.html>. Acesso em: 20 ago. 2013. GIL, Antônio Carlos. Como elaborar projetos de pesquisa. 4. ed. São Paulo: Atlas, 2002. GITMAN, Lawrence J. Princípios da administração financeira: Essencial. Porto Alegre: Bookman, 2001. GNU. Filosofia do Projeto GNU. 2011. Disponível em: <http://www.gnu.org/philosophy/philosophy.html>. Acesso em: 06 out. 2013. 86 HOJI, Masakazu. Administração financeira na prática: Guia para educação financeira corporativa e gestão financeira pessoal. São Paulo. Atlas, 2009. IBGE. Pesquisa de Orçamentos Familiares 2008-2009. 2009. Disponível em: <http://www.ibge.gov.br/home/estatistica/populacao/condicaodevida/pof/2008_2009_perfil_d espesas/default.shtm>. Acesso em: 20 ago. 2013. ICONIXPROCESS. Iconix Process, 2013. Disponível em: <http://iconixprocess.com/ >. Acesso em: 08 nov. 2013. IMASTERS. Exemplo de integração REST entre servidor e cliente. 2012. Disponível em: < http://imasters.com.br/desenvolvimento/exemplo-de-integracao-rest-entre-servidor-ecliente/>. Acesso em: 20 ago. 2013. IDC. Android and iOS Combine for 91.1% of the Worldwide Smartphone OS Market in 4Q12 and 87.6% for the Year, According to IDC. 2013. Disponível em: <http://www.idc.com/getdoc.jsp?containerId=prUS23946013>. Acesso em: 24 ago. 2013. JSON. Introdução ao JSON. 2013. Disponível em: < http://json.org/json-pt.html >. Acesso em: 21 set. 2013. LECHETA, Ricardo R. Google Android - Aprenda a Criar Aplicações Para Dispositivos Móveis Com o Android Sdk – NOVATEC, 3ª Ed 2013. LUBLINSKY, B. Defining SOA as an Architectural Style. Estados Unidos: IBM Developers, 2007. Disponível em: < http://www.ibm.com/developerworks/architecture/library/ar-soastyle/>. Acesso em: 21 set. 2013. MACORATTI. Modelando Sistemas em UML - Casos de Uso. 2014. Disponível em: < http://www.macoratti.net/net_uml2.htm/>. Acesso em: 29 mar. 2014. MATH. IEEE Recommended Practice for Software Requirements Specifications. 2014. Disponível em: < http://www.math.uaa.alaska.edu/~afkjm/cs401/IEEE830.pdf >. Acesso em: 22 mai. 2014. MEIOBIT. Google troca base de dados MySQL por MariaDB. 2013. Disponível em: < http://meiobit.com/267380/google-troca-base-dados-mysql-mariadb//>. Acesso em: 03 mai. 2014. MCCARTHY, John. Oral history interview with John McCarthy. 1989. Disponível em: < http://conservancy.umn.edu/handle/107476>. Acesso em: 14 set. 2013. MySQL. The world's most popular open source database. 2013. Disponível em: <http://www.mysql.com/>. Acesso em: 12 nov. 2013. NASCIMENTO, Bárbara. Endividamento das famílias é o maior desde julho de 2011, aponta CNC. 2013. Disponível em: <http://www.correiobraziliense.com.br/app/noticia/economia/2013/04/18/internas_economia, 361149/endividamento-das-familias-e-o-maior-desde-julho-de-2011-aponta-cnc.shtml>. Acesso em: 20 ago. 2013. 87 NASCIMENTO, Tatiana. Crédito fácil atiça desejo de comprar. Diário de Pernambuco. 2010. Disponível em: <http://blogs.diariodepernambuco.com.br/economia/?p=4932>. Acesso em: 21 set. 2013. PEREIRA, Lucio Camilo Oliva, SILVA, Michel Lourenço Da. Android para Desenvolvedores. Rio de Janeiro. Brasport, 2009. PHP. Manual do PHP. 2013. Disponível em: <http://www.php.net/manual/pt_BR/preface.php>. Acesso em: 09 nov. 2013. PRESSMAN, Roger S. Engenharia de software. São Paulo. McGraw-Hill, 2006. RÁDIO APARECIDA. Endividamento das famílias é o maior desde julho de 2011, aponta CNC. 2013. Disponível em: <http://www.a12.com/noticias/noticia.asp?ntc=nivel_de_endividamento_do_brasileiro_cresce u_em_abril.html>. Acesso em: 20 ago. 2013. REDBEAN. RedBeanPHP. 2013. Disponível em: <http://www.redbeanphp.com/>. Acesso em: 09 nov. 2013. SAMPAIO, Cleuton. SOA e Web Services em Java. Rio de Janeiro. Brasport, 2006. SILVA, Edna Lúcia da; MENEZES, Estera Muszkat. Metodologia da pesquisa e elaboração de dissertação. 4 ed. Florianópolis: UFSC, 2005. SILVA, Alberto M. R.; VIDEIRA, Carlos A. E. UML, Metodologias e Ferramentas Case. Lisboa: Centro Atlântico, 2001. Disponível em: < http://www.romeumenezes.com.br/livros/Livro%20%20UML%20Metodologias%20e%20Ferramentas%20CASE.pdf>. Acesso em: 08 nov. 2013. SITEPOINT. Working with Slim Middleware. 2013. Disponível em: <http://www.sitepoint.com/working-with-slim-middleware/> Acesso em: 10 nov. 2013. SLIM. Slim Framework. 2013. Disponível em: < http://www.slimframework.com/>. Acesso em: 09 nov. 2013. SOMMERVILLE, Ian. Engenharia de software. São Paulo. Addison-Wesley, 2003. SYSTEMSARCHITECT. Performance benchmark of popular PHP frameworks. 2013. Disponível em: <http://systemsarchitect.net/performance-benchmark-of-popular-phpframeworks/>. Acesso em: 03 mai. 2013. TAURION, César. Cloud Computing - Computação em Nuvem: transformando o mundo da tecnologia da informação. Rio de Janeiro. Brasport, 2009. TOMÉ, Marcio Sandoval. Integração de sistemas desktop com dispositivos móveis utilizando web services. Trabalho De Diplomação. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ, 2011. Disponível em: < http://repositorio.roca.utfpr.edu.br/jspui/bitstream/1/603/1/MD_COADS_2011_2_08.pdf>. Acesso em: 21 set. 2013. 88 W3C. SOAP. 2007. Disponível em: <http://www.w3.org/TR/soap/>. Acesso em: 29 out. 2013. W3C. Extensible Markup Language (XML) 1.0 (Fifth Edition). 2008. Disponível em: < http://www.w3.org/TR/ws-arch/ >. Acesso em: 24 out. 2013. W3C. Web Services Activity. 2013. Disponível em: < http://www.w3.org/2002/ws/>. Acesso em: 24 out. 2013. W3C. Web Services Architecture. 2004. Disponível em: http://www.w3.org/TR/RECxml/>. Acesso em: 29 out. 2013. W3SCHOOL. XML. 2013. Disponível em: http://www.w3schools.com/xml/xml_tree.asp/>. Acesso em: 05 out. 2013. WANG, Lizhe, et al. "Scientific cloud computing: Early definition and experience." High Performance Computing and Communications, 2008. HPCC'08. 10th IEEE International Conference on. Ieee, 2008. Disponível em: <http://cyberaide.googlecode.com/svn/trunk/papers/08-cloud/vonLaszewski-08-cloud.pdf >. Acesso em: 21 set. 2013. WMCCANNBR. Consumidor Móvel 2011. 2011. Disponível em: <http://goo.gl/nc7xao>. Acesso em: 24 ago. 2013. 89 APÊNDICES 90 APÊNDICE A – Diagramas de Classe Figura 38 – Diagrama de Classe de Beans Fonte: Elaborada pelos autores, 2014 91 Figura 39 – Diagrama de Classe de Models Fonte: Elaborada pelos autores, 2014 92 Figura 40 – Diagrama de Classe de Controllers Fonte: Elaborada pelos autores, 2014 93 Figura 41 – Diagrama de Classe de Aplicação Fonte: Elaborada pelos autores, 2014 94 APÊNDICE B – Casos de Uso Quadro 4 - Detalhamento de Caso de Uso 002 CASO DE USO 002: Login Descrição Efetua login na API rest Ator(es) Usuário Pré-condições O ator está no formulário de login (TEL001) de algum cliente Fluxo Principal 1. 2. 3. 4. Fluxos Alternativos e exceções No item 2, caso algumas informação esteja incorreta: 2.1 – O sistema exibe uma mensagem informando que o usuário ou senha estão incorretos; O usuário informa seus dados de login e senha; O sistema verifica no banco pelo usuário com login igual ao solicitado; O sistema gera a hash com a senha informa e compara com o hash salvo no banco. O sistema retorna o hash de autenticação temporário; Fonte: Elaborada pelos autores, 2013 Quadro 5 - Detalhamento de Caso de Uso 003 CASO DE USO 003: Insere Lançamento Descrição Cadastra um lançamento no sistema Ator(es) Usuário Pré-condições O ator está autenticado no cliente WEB Fluxo Principal 1. 2. 3. 4. 5. 6. 7. 8. Fluxos Alternativos e exceções No item 6, caso algumas informação esteja incorreta: 6.1 – O sistema exibe uma mensagem mostrando qual informação está incorreta; O usuário clica em “Novo Lançamento”; O usuário escolhe a natureza do lançamento; O sistema abre a janela “Modal” de “Novo Lançamento” (TEL002); O usuário informa os dados do lançamento; O usuário clica em “Salvar”; O sistema efetua validação dos dados cadastrados O sistema cadastra os dados no banco O sistema informa que o Lançamento foi salvo e fecha a janela; A qualquer momento o usuário pode abortar a operação ao clicar no botão “cancelar”. Fonte: Elaborada pelos autores, 2013 95 Quadro 6 - Detalhamento de Caso de Uso 004 CASO DE USO 004: Efetua transferência entre contas Descrição Cadastra uma transferência bancária no sistema Ator(es) Usuário Pré-condições O ator está autenticado no cliente WEB Fluxo Principal 1. 2. 3. 4. 5. 6. Fluxos Alternativos e exceções No item 5, caso algumas informação esteja incorreta: 5.1 – O sistema exibe uma mensagem mostrando qual informação está incorreta; O usuário clica em “Novo Lançamento”; O usuário clica em “Transferência”; O sistema abre a janela “Modal” de “Nova Transferência” (TEL003); O usuário informa os dados da transferência; O usuário clica em “Salvar”; O sistema informa que a transferência foi salva e fecha a janela; A qualquer momento o usuário pode abortar a operação ao clicar no botão “cancelar”. Fonte: Elaborada pelos autores, 2013 Quadro 7 - Detalhamento de Caso de Uso 005 CASO DE USO 005: Gera extrato da conta Descrição Lista as movimentações cadastradas em uma conta bancaria dentro do período selecionado Ator(es) Usuário Pré-condições Fluxo Principal O ator está autenticado no cliente WEB e está na tela de solicitação de extrato (TEL004) 1. O usuário escolhe a conta e informa o período no qual desejar ver o extrato; 2. O sistema captura os pagamentos realizados dentro do período, naquela conta; 3. O sistema captura as transferências realizadas dentro do período, naquela conta; 4. O sistema mescla as duas listas, e ordena por data; 5. O sistema exibe a listagem de movimentações; Fonte: Elaborada pelos autores, 2013 96 Quadro 8 - Detalhamento de Caso de Uso 006 CASO DE USO 006: Pagar parcela de lançamento Descrição Efetuar o pagamento de uma parcela de um lançamento em uma conta Ator(es) Usuário Pré-condições Fluxo Principal Fluxos Alternativos e exceções O ator está autenticado no cliente WEB e encontra-se na listagem de lançamentos (TEL005) 1. O usuário seleciona uma parcela; 2. O usuário clica em “Pagar”; 3. O sistema abre a janela “Modal” de “Pagar Parcela” (TEL006); 4. O usuário informa os dados do pagamento; 5. O usuário clica em “Salvar”; 6. O sistema informa que o pagamento foi salvo e fecha a janela; No item 5, caso algumas informação esteja incorreta: 5.1 – O sistema exibe uma mensagem mostrando qual informação está incorreta; A qualquer momento o usuário pode abortar a operação ao clicar no botão “cancelar”. Fonte: Elaborada pelos autores, 2013 Quadro 9 - Detalhamento de Caso de Uso 007 CASO DE USO 007: Gerar Relatório Analítico Descrição Demonstra os valores lançados dentro de cada categoria em determinado mês; Ator(es) Usuário Pré-condições Fluxo Principal Fluxos Alternativos e exceções O ator está autenticado no cliente WEB e está na tela de solicitação de relatório (TEL007) 1. O usuário informa o mês e o tipo de período do qual desejar ver o relatório; 2. O sistema captura os lançamentos realizados dentro do período; 3. O sistema divide os lançamentos em categorias; 4. O sistema agrupa as categorias por grupo e natureza; 5. O sistema soma os valores de cada agrupamento; 6. O sistema exibe o relatório de movimentações; No item 2 e 5, caso o período escolhido pelo usuário seja “Vencimento”, os lançamentos são capturados com base no vencimento de suas parcelas, não na competência, e a soma é realizada com base no percentual do total das parcelas com vencimento para aquele mês. Fonte: Elaborada pelos autores, 2013 97 Quadro 10 - Detalhamento de Caso de Uso 008 CASO DE USO 009: Sincronização Descrição Ação que dispara os eventos de sincronização do dispositivo mobile Ator(es) Usuário Pré-condições O ator está no cliente mobile, na tela de sincronização (TEL008) Fluxo Principal 1. 2. 3. 4. 5. O usuário clica em “Sincronizar”; O usuário fornece os dados de login; O sistema efetua o login na API; O sistema envia os lançamentos para registro na API, um a um. O sistema solicita a listagem das contas, com saldos, para a API, e as grava no banco. 6. O sistema solicita a listagem das contas, com saldos, para a API, e as grava no banco. 7. O sistema solicita a listagem dos centros de custo para a API, e a grava no banco. 8. O sistema solicita a listagem das categorias para a API, e as grava no banco. 9. O sistema solicita os saldos mensais para a API, e grava no banco. 10. O sistema desconecta da API. 11. O sistema informa que a sincronização foi realizada e fecha a janela; Fluxos Alternativos e exceções No item 4, quando a API informa que o cadastro foi realizado: 4.1 – O sistema apaga o lançamento do banco de dados; No item 11, caso ocorra algum problema de sincronização: 11.1 – O sistema informa que não foi possível realizar a sincronização por completo e informa o erro; Fonte: Elaborada pelos autores, 2013 Quadro 11 - Detalhamento de Caso de Uso 010 CASO DE USO 010: Insere Lançamento (Mobile) Descrição Cadastra um lançamento no aplicativo mobile Ator(es) Usuário Pré-condições O ator está no cliente mobile, na tela de saldos (TEL009) Fluxo Principal 12. 13. 14. 15. 16. 17. 18. Fluxos Alternativos e exceções No item 5, caso algumas informação esteja incorreta: 5.1 – O sistema exibe uma mensagem mostrando qual informação está incorreta; O usuário clica em “Novo Lançamento”; O usuário escolhe a natureza do lançamento; O sistema abre a janela “Modal” de “Novo Lançamento”; O usuário informa os dados do lançamento; O usuário clica em “Salvar”; O sistema “serializa” as informações e salva no banco; O sistema informa que o Lançamento foi salvo e fecha a janela; A qualquer momento o usuário pode abortar a operação ao clicar no botão “cancelar”. Fonte: Elaborada pelos autores, 2013 98 APÊNDICE C – Diagramas de Sequência Figura 42 - Diagrama de Sequencia UC002 Fonte: Elaborada pelos autores, 2014 99 Figura 43 - Diagrama de Sequência UC004 Fonte: Elaborada pelos autores, 2014 100 Figura 44 - Diagrama de Sequência UC005 Fonte: Elaborada pelos autores, 2014 101 Figura 45 - Diagrama de Sequência UC002 Fonte: Elaborada pelos autores, 2014 102 Figura 46 - Diagrama de Sequência UC007 Fonte: Elaborada pelos autores, 2014 103 Figura 47 - Diagrama de Sequência UC008 Fonte: Elaborada pelos autores, 2014 104 Figura 48 - Diagrama de Sequência UC009 Fonte: Elaborada pelos autores, 2014 105 APÊNDICE D – Telas Tabela 12 - Detalhamento de Telas TELAS Código TEL001 TEL002 TEL003 TEL004 TEL005 TEL006 TEL007 TEL008 TEL009 TEL010 TEL011 Nome Login Gerenciar Lançamento Nova Transferência Extrato Listagem de Lançamento Pagar Parcela Relatório Analítico Sincronização Relação de Saldos (Mobile) Visão Geral Gerenciar Taxonomia Fonte: Elaborada pelos autores, 2013 106 APÊNDICE E – Casos de Teste Quadro 13 - CT001 CASO DE TESTE 001: Cadastrar Taxonomia Descrição Efetuar o cadastro de uma taxonomia (O processo se repete para Centro de Custo, Conta e Categoria) # Ação Resultado Esperado 01 Clicar sobre o botão “Configuração” 02 Clicar sobre a taxonomia desejada 03 Preencher o formulário com dados válidos 04 Clicar no botão “Adicionar” O sistema deve abrir a janela com as opções de configuração do sistema Será aberta a janela modal da taxonomia, onde todos os itens serão listados Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão cadastrar O sistema irá cadastrar a taxonomia no banco, apagar os dados do formulário e atualizar a listagem de itens. Fonte: Elaborada pelos autores, 2013 Quadro 14 - CT002 CASO DE TESTE 002: Editar Taxonomia Descrição Editar o cadastro de uma taxonomia (O processo se repete para Centro de Custo, Conta e Categoria) # Ação Resultado Esperado 01 Clicar sobre o botão “Configuração” 02 Clicar sobre a taxonomia desejada 03 Clicar no botão editar sobre o item que se deseja atualizar Atualizar o formulário com dados válidos O sistema deve abrir a janela com as opções de configuração do sistema Será aberta a janela modal da taxonomia, onde todos os itens serão listados O sistema irá atualizar o formulário com os dados de edição Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão atualizar O sistema irá atualizar a taxonomia no banco, apagar os dados do formulário e atualizar a listagem de itens. 04 05 Clicar no botão “Adicionar” Fonte: Elaborada pelos autores, 2013 107 Quadro 15 - CT003 CASO DE TESTE 003: Remover Taxonomia # Remover o cadastro de uma taxonomia desde que a mesma não possua registros associados a ela. (O processo se repete para Centro de Custo, Conta e Categoria) Ação Resultado Esperado 01 Clicar sobre o botão “Configuração” 02 Clicar sobre a taxonomia desejada 03 Clicar no botão “Excluir” sobre o item que se deseja remover Confirmar exclusão Descrição 04 O sistema deve abrir a janela com as opções de configuração do sistema Será aberta a janela modal da taxonomia, onde todos os itens serão listados O sistema irá solicitar a confirmação para a exclusão O sistema irá validar se o item possui algum relacionamento. Caso possua, alertará o usuário que não foi possível efetuar a exclusão. Caso não possua, irá avisar o usuário que o item foi removido e irá atualizar a listagem. Fonte: Elaborada pelos autores, 2013 Quadro 16 - CT004 CASO DE TESTE 004: Inserir Lançamento Descrição Efetuar o cadastro de um lançamento # Ação Resultado Esperado 01 Clicar sobre o botão “Novo” 02 Escolher uma natureza 03 Preencher o formulário com dados válidos 04 Clicar no botão “Adicionar” O sistema deve abrir a janela com as opções de natureza de lançamento O sistema irá abrir a janela modal de cadastro de lançamento Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão cadastrar O sistema irá cadastrar o lançamento no sistema e irá fechar a tela de cadastro. Fonte: Elaborada pelos autores, 2013 Quadro 17 - CT005 CASO DE TESTE 005: Efetuar Transferência Descrição Efetuar o cadastro de uma transferência # Ação Resultado Esperado 01 Clicar sobre o botão “Novo” 02 Clicar em “Transferência” 03 Preencher o formulário com dados válidos 04 Clicar no botão “Adicionar” O sistema deve abrir a janela com as opções de cadastro de movimentação O sistema irá abrir a janela modal de cadastro de transferência Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão cadastrar O sistema irá cadastrar a transferência no sistema e irá fechar a tela de cadastro. Fonte: Elaborada pelos autores, 2013 108 Quadro 18 - CT006 CASO DE TESTE 006: Pagar parcela de lançamento Descrição Efetuar o pagamento de uma parcela de lançamento. # Ação Resultado Esperado 01 Clicar sobre o botão “Relatórios” O sistema deve abrir a janela com as opções de relatórios 02 Clicar em “Lançamentos” O sistema irá abrir a janela com os lançamentos 03 Clicar sobre o botão “Pagar” da parcela desejada Preencher o formulário com dados válidos O sistema irá abrir a tela de pagamento 04 05 Clicar no botão “Pagar” Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão cadastrar O sistema irá cadastrar o pagamento no sistema, fechará a tela de cadastro e atualizará a listagem de lançamentos. Fonte: Elaborada pelos autores, 2013 Quadro 19 - CT007 CASO DE TESTE 007: Gerar Extrato Descrição Gerar o Extrato de uma conta cadastrada no sistema # Ação Resultado Esperado 01 Clicar sobre o botão “Relatórios” O sistema deve abrir a janela com as opções de relatórios 02 Clicar em “Extrato” O sistema irá abrir a janela de extrato 03 Preencher o formulário com dados válidos 04 Clicar no botão “Gerar” Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão “Gerar” O sistema irá buscar os lançamentos e transferência dentro do período escolhido e irá listar na tela. Fonte: Elaborada pelos autores, 2013 Quadro 20 - CT008 CASO DE TESTE 008: Gerar Relatório Analítico Descrição Gerar o Relatório Analítico do Mês escolhido # Ação Resultado Esperado 01 Clicar sobre o botão “Relatórios” O sistema deve abrir a janela com as opções de relatórios 02 Clicar em “Analítico” O sistema irá abrir a janela de relatório 03 Preencher o formulário com dados válidos 04 Clicar no botão “Gerar” Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão “Gerar” O sistema irá buscar os lançamentos dentro do período escolhido e irá listar na tela, de forma analítica, agrupado por categoria Fonte: Elaborada pelos autores, 2013 109 Quadro 21 - CT009 CASO DE TESTE 009: Inserir Lançamento (Mobile) Descrição Inserir um lançamento no dispositivo Mobile # Ação Resultado Esperado 01 Clicar sobre o botão “Novo” 02 Escolher uma natureza O sistema deve abrir a janela com as opções de natureza de lançamento O sistema irá abrir a janela de cadastro de lançamento 03 Preencher o formulário com dados válidos 04 Clicar no botão “Adicionar” Caso o usuário não preencha um dado válido, o sistema sinalizará pintando o campo de vermelho e desabilitando o botão cadastrar O sistema irá cadastrar o lançamento no sistema e irá fechar a tela de cadastro. Fonte: Elaborada pelos autores, 2013 Quadro 22 - CT010 CASO DE TESTE 010: Sincronizar Descrição Sincronizar cadastros do dispositivo com o servidor REST # Ação Resultado Esperado 01 Clicar sobre o botão “Configuração” 02 Clicar em “Sincronizar” O sistema deve abrir a janela com as opções de configuração O sistema irá abrir a janela de log de sincronização, efetuando os cadastros no servidor REST e recolhendo as listagens de taxonomia. Após isso, deverá informar o resultado da operação para o usuário. Fonte: Elaborada pelos autores, 2013