PG Cocic 2018 1 05
PG Cocic 2018 1 05
PG Cocic 2018 1 05
DOUGLAS JUNQUEIRA
PONTA GROSSA
2018
DOUGLAS JUNQUEIRA
PONTA GROSSA
2018
Ministério da Educação
Universidade Tecnológica Federal do Paraná
Câmpus Ponta Grossa
Diretoria de Graduação e Educação Profissional
Departamento Acadêmico de Informática
Bacharelado em Ciência da Computação
TERMO DE APROVAÇÃO
por
DOUGLAS JUNQUEIRA
Este Trabalho de Conclusão de Curso (TCC) foi apresentado em 14 de Junho de 2018 como
requisito parcial para a obtenção do título de Bacharel em Ciência da Computação. O candidato foi
arguido pela Banca Examinadora composta pelos professores abaixo assinados. Após deliberação,
a Banca Examinadora considerou o trabalho aprovado.
__________________________________
Prof. Dr. Richard Duarte Ribeiro
Orientador(a)
___________________________________
Prof. Dr. Diego Roberto Antunes
Membro titular
___________________________________
Prof. MSc. Rafael dos Passos Canteri
Membro titular
________________________________ _____________________________
Prof(a). Dra. Helyane Bronoski Borges Prof. MSc. Saulo Jorge Beltrão de Queiroz
Responsável pelo Trabalho de Conclusão de Coordenador do curso
Curso
RESUMO
O desenvolvimento de sistemas para web, que sejam escaláveis e eficientes não é apenas uma
tarefa difícil, mas um desafio a medida que a demanda, disponibilidade por funções e recursos
aumenta. Além do desafio de desenvolvimento, existem muitas organizações que ainda atuam
com base em papel e caneta devido ao custo desses sistemas para construção e manutenção.
Assim, este trabalho visa apresentar os conceitos usados no mercado, para o desenvolvimento
de arquiteturas voltadas a web, desde os sistemas clássicos à orientação a eventos, além da cons-
trução desenvolvido em Angular para a aplicação cliente, Node para servidor e SQL Server,
através da licença fornecida, como banco de dados oferecem uma solução poderosa e completa.
Os resultados avaliados não apresentam o cenário ideal, mas demonstram a viabilidade do uso
em redes locais. Através deste trabalho conclui-se que o sistema pode ser usado para atender o
objetivo principal e adicionais previstos no trabalho.
JUNQUEIRA, D. Software development using Angular and Node framework for Social
Assistance. 2018. 65 f. Work of Conclusion Course (Undergraduation in Computer Science) —
Federal University of Technology - Paraná. Ponta Grossa, 2018.
Developing web-based systems that are scalable and efficient is not an easy task but rather a
challenge as demand of access, data availability, and functions increases. In addition to the de-
velopment challenge, there are many organizations that act on pen and paper because of the cost
for construction and maintenance of web systems. Thus, this work aims to present the concepts
used in the market, for the development of web-oriented architectures, from classic methods to
event-driven systems, in addition to the developed in Angular for application client, Node for the
server and SQL Server, through a provided license, as a database offers a powerful and complete
solution, but easy to develop and maintain, as an accessible solution to social assistance orga-
nizations. The results do not represent the ideal scenario, but demonstrate a viability of the use
in local networks. As result, the system can be used to meet the main and additionally provided
objectives of this article.
EV Event-Loop
Node Node.js
SO Sistema Operacional
TI Tecnologia da Informação
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1.2 Objetivos Específicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 JUSTIFICATIVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 ORGANIZAÇÃO DO TRABALHO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 ANÁLISE DE PROJETO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1 LEVANTAMENTO DE REQUISITOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.1 Definição do escopo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.2 Modelo Iterativo e Incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 ARQUITETURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1 CLIENTE E SERVIDOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 MULTICAMADAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3 MICROSERVIÇOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 EFICIÊNCIA E ESCALABILIDADE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5 COMUNICAÇÃO SíNCRONA OU BLOQUEANTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.6 COMUNICAÇÃO ASSíNCRONA OU NÃO-BLOQUEANTE . . . . . . . . . . . . . . . . . . . . . . . 24
3.7 THREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.8 CONCLUSÕES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4 TECNOLOGIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1 SERVIDOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.1 Node. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.2 Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1.2.1 ReactPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.3 Comparação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2 CLIENTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2.1 Angular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2.2 React . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.3 Comparação Angular e React . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3 BANCO DE DADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3.1 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3.2 MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.3.3 Definição SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5 DESENVOLVIMENTO DO SISTEMA E MODELO BÁSICO . . . . . . . . . . . . . . . . . . . . . 38
5.1 SERVIDOR NODE.JS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.1.1 package.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.1.2 Arquivo origem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.4 Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.1.4.1 conectaDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.1.4.2 modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.5 Arquivos Conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1.6 Opções Adicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2 FRONT-END COM ANGULAR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.1 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.2 Diretivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.2.1 Editável . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.2.2 Autoform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.2.2.3 Relação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.2.2.4 Outros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2.3 Serviços JS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2.3.1 Security, Messages e Configurações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2.4 Serviços de configuração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2.5 Controladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.1 TRABALHOS FUTUROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
9
1 INTRODUÇÃO
o gestor municipal são mantidos através da parceria com a Fundação PROAMOR (JOCUM,
2014). As únicas outras formas de entrada de recursos são através da doação para instituição, ou
através da doação das notas fiscais pelo programa Nota Paraná.
A fim de contribuir socialmente e oferecer a possibilidade de empregar um recurso de
TI para a administração da Jocum PG, este trabalho objetiva a construção de um sistema geren-
ciador para as necessidades da organização. A construção busca auxiliar nas diversas atividades
de gerenciamento das informações dos alunos e famílias, além dos profissionais envolvidos. Ini-
cialmente, o propósito é oferecer uma ferramenta para os coordenadores, assistentes sociais e
pedagogos, permitindo aos citados acessar as informações sobre as atividades referentes ao seu
setor e aos projetos da organização.
1.1 OBJETIVOS
1.2 JUSTIFICATIVA
A Jocum PG possui um fluxo médio de 100 alunos atendidos diariamente, somados aos
familiares ou responsáveis e todos os seus funcionários, levando a um grande fluxo de dados.
Estes dados, principalmente referente aos alunos, sofrem alterações e são manipulados para a
geração de relatórios, estatísticas, acompanhamentos e outras funções.
Esta manipulação tornou-se ineficiente, uma vez que a grande quantidade de dados está
11
2 ANÁLISE DE PROJETO
através de um brainstorm para analisar as necessidades dos envolvidos, bem como a importância
de cada funcionalidade. Após esse levantamento, foi realizado um questionário, para expansão
e aprofundamento das ideias previamente levantadas e cobertura de requisitos não previstos.
O questionário foi aplicado também para verificação de requisitos não funcionais, os
quais os usuários não estão familiarizados. O estabelecimento tardio destes requisitos pode le-
var a problemas no decorrer do projeto, considerando principalmente a relação de esforço ou
mesmo viabilidade do projeto (ABDUKALYKOV et al., 2011). Desta forma, o questionário
também buscou estabelecer os requisitos de funcionamento e as opções disponíveis para o de-
senvolvimento do sistema, considerando suas funcionalidades e, os mecanismos de segurança,
de desempenho e de hardware necessários.
A partir da entrevista completa, foram mapeadas as funcionalidades do sistema. A Fi-
gura 1 apresenta o resultado do mapeamento de todos os requisitos solicitados ou desejáveis, sob
uma análise estrutural do sistema. Na Figura 1 o sistema é divido nos formatos de cadastros, pro-
cessos envolvidos e relatórios gerados pelo sistema, sendo enumeradas apenas as informações
levantadas na entrevista.
Figura 1 – Diagrama dos requisitos funcionais.
Segundo Kerzner e Kerzner (2017), existem diversas causas para a falha de um projeto.
Entre elas deve ser citado a falha em definir os recursos disponíveis, como capital, tempo e
conhecimento. Desta forma, uma das preocupações deste projeto é o compromisso em entregar
um sistema computacional com base sólida para o uso inicial, já com as funcionalidades mínimas
instaladas, e as funções desejadas a serem adicionadas posteriormente.
Desta forma, após o mapeamento inicial das funcionalidades, foi realizada uma nova
entrevista com os principais interessados, para definição das limitações do projeto a serem en-
tregues ao final do trabalho. A partir desta, foi estabelecido que o projeto será construído em
ciclos.
Cada ciclo definido através do nível de importância das funções mapeadas e o tempo
previsto para que cada ciclo fosse finalizado. Após a escolha do formato de entrega e definição
das prioridades de cada requisito funcional, foi possível definir qual modelo de desenvolvimento
seria adequado a este trabalho.
3 ARQUITETURAS
3.2 MULTICAMADAS
Este cenário, também conhecido como N-camadas, é mais utilizado por grandes em-
presas, ou empresas que oferecem sistemas com grande número de usuários. Através do uso das
N-camadas, como na Figura 3, pode-se dedicar o processamento dos dados, separadamente, de
acordo com o serviço acionado, reduzindo tempo de espera, uma vez que há menos disputa por
recursos comuns de hardware, tais como acesso a rede, de memória, o processamento.
Desta forma, é possível também aumentar o processamento para as camadas que mais
são usadas, e reduzir o processamento das camadas com menor uso.
3.3 MICROSERVIÇOS
2012).
A Figura 6 mostra um exemplo do carregamento de uma página web com a comunica-
ção síncrona. Pode-se observar que entre cada click existe um tempo de aguardo, no qual não
são processadas outras informações até o recebimento de uma resposta.
3.7 THREADS
Threads são abstrações de atividades, que podem ser executadas em paralelo (exemplo
Figura 8), e são controladas através do sistema operacional (S.O.). A execução de múltiplas delas
resulta na execução de um processo, a qual tem sua criação ou destruição sob controle do S.O.
(COULOURIS et al., 2013). A opção de executar múltiplas threads está disponível na maioria
dos S.O. modernos, embora existam autores, como Cordeiro (2006), que defendem o uso apenas
para situações que exigam simultaneidade.
3.8 CONCLUSÕES
deve ser capaz de atender à demanda e, também, que sejam adicionados novos recursos em
qualquer ponto da vida útil do sistema (CHIEU; MOHINDRA; KARVE, 2011).
Sistemas que não permitem essa expansão ou são ineficientes estão fadados a terem
uma curta vida útil, causando um desperdício de recursos por parte do desenvolvimento e dos
usuários. Nenhum dos métodos oferece uma solução perfeita, sendo uma tendência optar pelo
arquitetura de eventos, uma vez que as possibilidades futuras são mais amplas.
27
4 TECNOLOGIAS
Este capítulo dedica-se a apresentar tecnologias que foram aplicadas a este trabalho.
Inicialmente, analisando algumas das tecnologias que atendem o paradigma de orientação a
eventos. São analisadas também as dependências, como bibliotecas e outros recursos, mais usa-
das por elas. Em seguida, é abordado uma comparação entre opções para o lado cliente, que deve
ser responsivo, segundo requisito. Após, apresenta-se uma comparação entre dois dos bancos de
dados mais usados comercialmente e suas características para definir a escolha mais adequada.
4.1 SERVIDOR
A partir desta arquitetura, foi apresentado também uma visão sobre frameworks dis-
poníveis e que podem ser implantados usando a arquitetura escolhida. Entre os inúmeros fra-
meworks, observa-se que mais de 50% são desenvolvidas em JavaScript ou PHP (HOTFRA-
MEWORKS, 2018). Desta forma, foram avaliados características dos frameworks Node (javas-
cript) e Laravel (PHP) para o servidor.
4.1.1 Node
∙ Uso de uma mesma linguagem para servidor e cliente, favorecendo reuso de código
para algumas funções.
∙ Troca de mensagens no formato JavaScript Object Notation (JSON), deixando a
comunicação mais organizada.
∙ Possibilidade de uso como bancos de dados NoSQL, uma vez que alguns desses
bancos armazenam diretamente mensagens JSON.
∙ O interpretador é atualizado junto ao padrão ECMAScript, garantindo que o Node.js
seja capaz de acompanhar a evolução da linguagem, oferecendo aos desenvolvedores
melhores opções.
∙ O interpretador é considerado rápido, com seu desempenho definido através dos
princípios de acesso rápido a propriedade, geração de código dinâmico e coleta de
lixo eficiente.
4.1.2 Laravel
Douglas e Marabesi (2017) citam que este framework permite a execução de ações,
como configuração de ambiente, ações com a própria aplicação, ou ainda controle de rotas,
através de uma interface de comando. Essa interface, chamada Artisan CLI, permite também
a definição de arquivos como migrations e models. Esses arquivos são fundamentais para o
Laravel, uma vez que o migrations é o modelo usado pelo framework para definir as regras de
construção do banco de dados através do PHP.
Em adição, para a comunicação com banco de dados, o Laravel possui por padrão o
Eloquent, o qual aplica o Design Pattern ActiveRecord, em que cada tabela de banco de dados
é representada no código através de uma classe Model, utilizada para interagir com essa tabela.
Os Models, permitem a consulta de dados em suas tabelas, bem como, operações de inserção,
atualização e exclusão (DOUGLAS; MARABESI, 2017).
O PHP não oferece suporte nativo a programação assíncrona, mas há algumas bibli-
otecas que implementam recursos assíncronos, como o ReactPHP (ALEY, 2017). As bibliote-
cas, que oferecem os recursos assíncronos, são limitadas, quando comparadas ao Node.js. Esta
limitação se dá principalmente devido ao código arbitrário que exige recursos multitarefa ou
multithreading para gerenciamento dos serviços.
31
4.1.2.1 ReactPHP
4.1.3 Comparação
4.2 CLIENTE
A escolha do Node.js como servidor, contribui para a escolha do lado cliente, não ofe-
recendo uma escolha fixa, mas com características que possam contribuir tanto em funcionali-
dade quanto no desenvolvimento do projeto. Desta forma, os frameworks escolhidos para o lado
cliente, além de amplamente empregados, usam JavaScript como linguagem base de desenvol-
vimento e podem ser facilmente conectadas ao Node.js
Os frameworks escolhidos para comparação foram, como mencionados anteriormente,
o Angular e React.
4.2.1 Angular
4.2.2 React
React é uma biblioteca JavaScript desenvolvida pelo Facebook, a qual é utilizada para
renderizar views (por exemplo, páginas HTML) dinamicamente, baseado em algum estado, o
qual está muitas vezes em forma de dados. React então atualiza essas views geradas, sempre que
o estado original mudar(EdgeCoders) (REACT, 2018).
Essas alterações serão refletidas em algum lugar, por exemplo, com a recriação do
HTML para o Modelo de Objeto de Documentos (DOM) do navegador. Com React, não é pre-
ciso se preocupar em como refletir as mudanças de estado, pois o React simplesmente irá reagir
às mudanças e atualizar as views necessárias. Além disso, o React também conta com modos
de melhorar estruturas como laços e condicionais, desde que seguido algumas de suas regras
34
(FEDOSEJEV, 2015).
Diferente do Angular que oferece os componentes necessários para quase todas as ope-
rações de uma aplicação do lado cliente, o React se preocupa apenas com a view, trabalhando
com o conceito de componente que recebe propriedades, gerencia estados e apresenta um re-
torno virtual do DOM. A forma como o React trabalha com esses componentes é estruturando
a representação do HTML em objetos.
Um dos problemas que o React buscou resolver é a comunicação bidirecional, que pode
tornar-se complexa para depuração. Isso ocorre, porque algumas alterações tem efeito cascata
por todo o código, problema que tente a ocorrer com o aumento de complexidade e tamanho
das funções. Assim, o React pode ser uma solução adequada para fluxos mais complexos ou que
exigem muitos passos. (FEDOSEJEV, 2015)
O React utiliza dois conceitos principais, ele é declarativo e baseado em componentes.
A parte declarativa refere-se a capacidade de projetar views independentes para cada estado da
aplicação, sendo essas renderizadas e atualizadas de forma única. Já para o uso de componen-
tes, cada componente tem seu gerenciamento de estados que por fim resultaram no conjunto
estruturado das views (CECHINEL et al., 2017).
Com essas duas características e uso do React é possível reutilizar um único compo-
nente em múltiplos lugares, com diferentes estados e propriedades, e cada componente pode
conter outros componentes. Todos os componentes no React possuem um estado que muda com
o passar do tempo, e o React toma conta de atualizar as views dos componentes quando seus
estados mudarem.
O React se destaca pela agilidade de atualizar o conteúdo dentro de uma view, sendo
muito utilizado por sites que têm conteúdos dinâmicos em constante mudança e que utilizam
muitos dados, como, por exemplo, o Instagram e Facebook. Outro ponto é que por se tratar
de uma biblioteca, é possível utilizá-lo como componente de visualização de outras estruturas,
como por exemplo o Angular.
O Angular, por outro lado, é considerado um framework completo. Ele contém tudo
que é necessário para o desenvolvimento de um aplicativo client-side, com uma estrutura geral
criada para aplicativos CRUD (Create, Read, Update, Delete).
Devido ao projeto não utilizar de páginas com conteúdos em constante mudança e que
utilizam muitos dados, e ao fato de Angular ser um framework completo para o desenvolvi-
mento front-end, com destaque para a criação de aplicativos com muitas páginas semelhantes
envolvendo grande parte do projeto, optou-se pelo uso do Angular como ferramenta de desen-
volvimento client-side. Para o desenvolvimento foi usada a versão 1.7.0 do Angular, uma vez
35
que foi encontrado maior número de materiais de apoio e conhecimento para a mesma.
Para a definição entre os inúmeros bancos de dados do mercado, foram comparados dois
dos mais usados no mercado de sistemas, sendo cada um único entre si, devido as características.
O Microsoft SQL Server é um banco relacional, enquanto o MongoDB é não relacional.
O modelo relacional pode ser visto de três aspectos, a estrutura, integridade e manipu-
lação dos dados (SILBERSCHATZ; KORTH; SUNDARSHAN, 2016). Que são descritos por
Elmasri e Navathe (2005) como uma relação de valores, a qual define o modelo. Essa relação
é construído por tuplas, que são as linhas, os atributos, que são representados pelas colunas e a
tabela em si representa a relação.
A Figura 11 demonstra 3 conceitos aplicados ao modelo relacional. Cada atributo é
definido por um tipo (string, inteiro, ...), como apresentado na parte 1 da Figura 11. A parte
2 demonstra o acesso aos dados via comandos SQL, que permitem operações complexas entre
relações diferentes, ou simples acesso a algum dado, como esse exemplo. A parte 3 é a apresen-
tação dos dados, no qual cada tupla representa, neste caso, um usuário diferente.
4.3.2 MongoDB
5.1.1 package.json
comandos de acesso, ou mesmo definir o ponto de início do servidor. Uma das vantagens de
usar um sistema Node, é o grande número de bibliotecas que podem ser utilizadas para tratar
funções comuns.
Para este projeto foram adicionadas várias dependências, como Express. A estrutura
dessa biblioteca é simples, e tem o objetivo o desenvolvimento flexível da estrutura da aplica-
ção. O Express oferece também recursos como roteamento de Localizador Padrão de Recursos
(URL), controle de sessão, gerenciamento de requisições, que são amplamente usados no lado
servidor (VLADUTU, 2014).
As bibliotecas adicionais tem funções menos abrangentes, sendo aplicadas para co-
municação com banco de dados (MS SQL), para realizar tratamento do corpo das requisições
(cookie e body-parser). Para este projeto também foram adicionadas as bibliotecas grunt que
são destinadas a proteger o código fonte.
O arquivo origem (app.js) representa o ponto inicial do servidor. No app.js são definidas
as regras as quais o servidor irá operar, sendo elas as configurações de execução ou conexões
com bancos de dados e definição das rotas e outros acessos do sistema.
Para a organização do sistema, foi definido que cada chamada tratada pelo servidor,
será tratada por uma rota específica. A rota é definida por qual o estado principal solicitante. A
Figura 14 apresenta um exemplo de como a chamada "localhost/usuario", seria tratada pela rota
login, definida no arquivo de origem.
Desta forma, pode-se concentrar rotas de inserção, alteração ou exclusão em uma rota
única, mas limitada a um propósito específico. Além da facilidade em localizar a rota acionada,
pode-se facilmente adicionar ou retirar novas rotas, sem impactar o funcionamento das demais.
5.1.3 Rotas
5.1.4 Modelos
dados. Embora a maioria dos modelos opere deste modo, como na Figura 16, existem ainda dois
modelos especiais, o conectaDB e o modelo.
5.1.4.1 conectaDB
5.1.4.2 modelo
Observa-se que devem ser especificados os campos "recurso"e "acoes". O recurso cor-
responde ao nome pela qual será referenciado o recurso dentro do servidor. As ações, serão
definidas pelas chamadas REST. Não é obrigatório a definição de todos os recursos para que
sejam executados.
5.2.1 Templates
5.2.2 Diretivas
As diretivas para o Angular, são extensões da linguagem HTML. Essa extensões tem o
objetivo de oferecer novos elementos. Alterando recursos já existentes ou criando novos. Desta
forma, é possível usar diretivas para manipular o DOM, associar funções JavaScript a eventos
ou adicionar novos HTMLs. Neste projeto, foram adicionados alguns recursos para criação de
telas a partir de arquivos de configuração.
5.2.2.1 Editável
partir da diretiva respeitarão suas regras, tornando o sistema visualmente consistente. O segundo
ponto é a capacidade de criar qualquer campo definido por ela, em qualquer tela do sistema,
chamando uma única tag e definindo seus parâmetros, inclusive o uso da mesma em outras
diretivas, como a autoform.
Todos os campos são construídos a partir de diversas opções, que podem ser definidas
segundo uso. A Figura 20 apresenta exemplos dos usos desta diretiva, sendo um campo texto
e outro tipo senha. Segundo as configurações, esses campos estarão sempre habilitados para
edição, tem um título especificado no campo, tem eventos tratados por funções específicas, e é
identificado qual variável e qual é o controlador responsável por esta informação.
Figura 21 – Exemplo de tela de acesso, com a Figura 21(a) representando o estado padrão e a
Figura 21(b) representando as alterações dinâmicas.
(a) (b)
5.2.2.2 Autoform
Desta forma, com um único arquivo de configuração, e uma chamada como da Figura
25, é possível construir duas telas. A primeira com a relação do serviço chamado e outra para
os campos e detalhes individuais, usada para inserção, edição e exclusão de dados.
50
5.2.2.3 Relação
5.2.2.4 Outros
5.2.3 Serviços JS
Serviços para o Angular são funções temporárias, que são injetadas dentro de contro-
ladores. Eles têm o objetivo de organizar e partilhar funções dentro do projeto. Os serviços tem
duas características: instanciamento apenas quando algum componente requisita e são execuções
únicas (Singleton), passando apenas a referência para o componente requisitante.
Existem alguns serviços gerais, que são utilidades para controles de variáveis do sis-
tema, como segurança e mensagens de alerta na Figura 27. O serviço Messages tem o intuito
de apresentar alertas gerais e informações de confirmação ou erro na tela. Assim, o tratamento
para apresentação de mensagens é comum para todo o sistema.
5.2.5 Controladores
tos o estado raíz, e o estados filho "detalhe"com outras duas possibilidades, "inclusao"e "edicao".
Os nomes dos estados com informações específicas foram padronizados no sistema,
sendo "detalhe"ou "detalhe.(edicao ou inclusao)"de acordo com a situação da página. Isso per-
mite aplicar propriedades de manipulação específicas, por exemplo bloqueando o campo nome
do usuário durante a edição.
Para fins de estruturação, cada view do projeto possui o próprio controlador, que está
descrito em arquivos separados ou junto ao arquivo com controlador do estado raiz. Essa or-
ganização permite uma leitura mais rápida e facilita na manutenção do código, uma vez que
controladores de views complexas podem exigir lógicas extensas.
54
A Figura 29 retrata a construção básica de um controlador. Definido por seu nome, inje-
ção de dependências e a função que o define. Para o sistema, foi adotado o padrão de armazenar
as informações em um objeto chamado "cadastro".
As configurações destinam-se a armazenar questões de funcionamento da view, como
permissões de acesso ao recurso em particular. O registro é responsável pelo armazenamento
do dados referentes a uma entidade, no caso, um usuário. O array relação é responsável por
armazenar a relação completa de uma busca, armazenando neste exemplo todos os usuários,
que, posteriormente, serão listados através da diretiva Relação.
São ainda partes importantes do cadastro os "combos", que armazenam os valores de
cada campo tipo select da view usuário. Alguns combos são construídos em tela, enquanto outros
são acessados do banco, como lista de nome de usuários para busca. Essa medida foi adotada
para que telas com muitas alterações e itens possam ser relacionados e modificados pelo pró-
prio usuário, mas não totalmente para que telas com poucas opções não necessitem a chamada
adicional ao banco para opções fixas.
55
6 RESULTADOS
∙ Tempo de resposta, medindo tempo total para realizar operações do sistema, essa
medida pode ser entendida como a influência no nível de frustração do usuário com
a demora para a resposta de sua ação.
∙ Escalabilidade, que é a medida de como o acréscimo de recursos, neste caso hard-
ware, afeta o desempenho da aplicação.
∙ Latência, que representa o tempo mínimo requerido para obter qualquer forma de
resposta.
Para os testes de tempo de resposta, a medição foi realizada com uso da plataforma
JMeter (FOUNDATION, 2018). Configurando o ambiente de testes, foram realizadas as requi-
sições para uma quantidade de usuários entre 1 e 1000, acessando simultaneamente diversas
páginas diferentes do sistema.
Além do teste com quantidade de usuários, os resultados foram calculados com leituras
de três máquinas diferentes. A máquina 1, possui um processador i7 4510U até 2.6 GHz (2
núcleos), 16GB RAM DDR3 1600MHz. A máquina 2, possui um processador i3-2100 até 3.1
GHz (2 núcleos), 8GB RAM 1866MHz. A máquina 3, possui um processador Celeron N3060
até 1.6 GHz (2 núcleos), 4GB RAM DDR3 1600MHz.
Além do teste do tempo de resposta, também foi avaliada a quantidade de requisições
que retornaram resposta válida ou inválida. O servidor foi alocado primeiramente na máquina 1 e
em seguida na máquina 3. Não foram realizados testes com o servidor distribuído paralelamente
devido ao tempo para construção do cenário e avaliação dos resultados.
A Figura 30 apresenta o resultado do tempo de resposta para o servidor na máquina 3.
A partir dos testes foi possível verificar que o tempo mínimo para a resposta não sofre grande
variação, conforme o aumento de carga, mantendo-se em até 20ms. Outra observação é que o
tempo para resposta das primeiras 400 requisições permaneceu muito próximo dos tempos para
50 e 200 requisições, mas representando um aumento de até 50% de tempo máximo de 50 para
400 requisições.
56
Em todos os testes, realizados a partir dos três pontos da rede, foi possível observar
pouca variação dos tempos máximos e mínimos. A máquina com menor tempo, foi a que estava
executando o servidor, enquanto as demais apresentaram uma variação, para mais alto, de menos
de 10% do tempo dos testes executados no servidor.
Para testar o possível resultado de um aumento de capacidade de hardware, o servidor
foi transferido para a máquina 1. Desta forma, além de verificar resultado de escalabilidade,
pode-se analisar o comportamento do sistema com a variação de ambiente. A Figura 31 mostra
o tempo de resposta para os mesmos testes aplicados com o sistema na máquina 3.
É possível notar que todos as medidas de tempo sofreram uma redução. Para o caso
de maior carga (1000), a redução do tempo máximo apresentada foi de 37,8%. Foi observado
também que em nenhum dos testes realizados, o tempo para qualquer requisição foi superior a
800ms.
Os resultados apontaram que em alguns testes foi possível reduzir metade do tempo
máximo gasto na máquina 3. Tais resultados puderam ser observados para 200 e 400 requisições,
onde o tempo máximo não ultrapassou a marca de 100ms.
58
Além das reduções do tempo de resposta, foi possível observar a queda dos tempos de
latência, como apresentado na Figura 33. Embora apresente redução, a variação foi menor. Nos
testes de 1000 requisições, foi possível observar uma queda de 16% aproximadamente.
Para os demais testes, o tempo máximo de latência teve alterações menores de 10%. Os
testes de 600 requisições simultâneas apresentaram um tempo máximo de 166ms contra 92ms e
56ms de 400 e 200 requisições respectivamente.
7 CONCLUSÃO
O passo seguinte para o projeto é a modelagem dos ciclos adicionais, expandindo a ca-
pacidade de atendimento e funcionalidade do sistema. Desta forma, atendendo completamente
os requisitos da organização Jocum e outras. Também é interessante construir a comunicação
com banco MongoDB, uma vez que soluções entre Node.js e MongoDB tendem a oferecer me-
lhor rendimento a um menor custo.
Por fim, por meio dos resultados obtidos e apresentados no capítulo 6, foi possível
concluir e afirmar a viabilidade do uso do sistema Angular, Node.js e SQL Server, através da
construção de um sistema web completo para uma organização de assistência social. Apesar
da complexidade das estruturas, como a comunicação entre servidor e banco ou a definição
das diretivas e serviços do Angula, a solução apresentou um resultado consistente e aplicável a
opções além das quais foi destinada inicialmente.
Também são considerados abordar e avaliar as limitações deste trabalho. Para isso é
sugerido aplicação de testes em um servidor destinado a aplicações web, aplicar o sistema na
Jocum PG e avaliar a usabilidade do sistema desenvolvido e desenvolver paralelamente recursos
da aplicação usando e não usando a base proposta para avaliar o ganho em tempo de desenvol-
vimento.
62
REFERÊNCIAS
ACEMOGLU, D.; ROBINSON, J. A. Why nations fail: The origins of power, prosperity,
and poverty. [S.l.]: Broadway Business, 2013.
ALEY, R. Managing business logic with functions. In: Pro Functional PHP Programming.
[S.l.]: Springer, 2017. p. 147–163.
ALI, N.; LAI, R. A method of software requirements specification and validation for global
software development. Requirements Engineering, Springer, v. 22, n. 2, p. 191–214, 2017.
ANWAR, N. Architecting scalable web application with scalable cloud platform. Metropolia
Ammattikorkeakoulu, 2018.
BEZERRA, E. Princípios de Análise e Projeto de Sistema com UML. [S.l.]: Elsevier Brasil,
2017. v. 3.
CECHINEL, A. et al. Avaliação do framework angular e das bibliotecas react e knockout para
o desenvolvimento do frontend de aplicações web. Florianópolis, SC, 2017.
CHODOROW, K. MongoDB: The Definitive Guide: Powerful and Scalable Data Storage.
[S.l.]: "O’Reilly Media, Inc.", 2013.
DABEK, F. et al. Event-driven programming for robust software. In: ACM. Proceedings of the
10th workshop on ACM SIGOPS European workshop. [S.l.], 2002. p. 186–189.
HOTFRAMEWORKS. Find your new favorite web framework. 2018. Disponível em:
<https://hotframeworks.com/>. Acesso em: 03 de Março de 2018.
IBGE. As entidades de assistência social privadas sem fins lucrativos no Brasil, 2014-2015:
unidades de prestação de serviços socioassistenciais. Rio de Janeiro: Instituto Brasileiro de
Geografia e Estatística - IBGE, 2015. ISBN 978-85-240-4360-4.
LEE, C.; CLERKIN, R. M. The adoption of outcome measurement in human service nonprofits.
Journal of Public and Nonprofit Affairs, v. 3, n. 2, p. 111–134, 2017.
LEE, R. L.; BLOUIN, M. C. Exploring the factors associated with online financial and
performance disclosure in nonprofits. Journal of the Southern Association for Information
Systems, Michigan Publishing, University of Michigan Library, v. 3, n. 1, 2015.
OZGUR, C. et al. A comparative study of network modeling using a relational database (ie
oracle, mysql, sqlserver hadoop) vs. neo4j. In: 2017 Annual Meeting of Midwest Decision
Sciences Institute Meeting,(MWDSI) April. [S.l.: s.n.], 2017. p. 156–165.
PEREIRA, C. R. Aplicações web real-time com Node. js. [S.l.]: Editora Casa do Código,
2014.
REACT. React. 2018. Disponível em: <https://reactjs.org/>. Acesso em: 28 de Abril de 2018.
SESHADRI, S.; GREEN, B. Desenvolvendo com angularjs. Novatec Editora, Sao Paulo, SP,
2014.
SKVORC, B. Best php frameworks for 2014. Sitepoint, 2013. Disponível em: <http:
//www.sitepoint.com/best-php-frameworks-2014/>. Acesso em: 28 de Abril de 2018.
STUBBS, J.; MOREIRA, W.; DOOLEY, R. Distributed systems of microservices using docker
and serfnode. In: IEEE. Science Gateways (IWSG), 2015 7th International Workshop on.
[S.l.], 2015. p. 34–39.
TEIXEIRA, P. Professional Node. js: Building Javascript based scalable software. [S.l.]:
John Wiley & Sons, 2012.
65
TILKOV, S.; VINOSKI, S. Node. js: Using javascript to build high-performance network
programs. IEEE Internet Computing, IEEE, v. 14, n. 6, p. 80–83, 2010.
WILSON, J. Node.js 8 the Right Way: Practical, Server-side Javascript that Scales. [S.l.]:
Pragmatic Bookshelf, 2018.