desenvolvimento de aplicativo de carona solidária ... · figura 7 - gerenciador do firebase crash...
TRANSCRIPT
Relatório Técnico de Desenvolvimento de
Software
Desenvolvimento de Aplicativo de Carona
Solidária – Relatório Parcial
Rafael Henrique Pacheco de Souza
Prof. Dr. Paulo Edson Alves Filho – Orientador
Sorocaba
Dezembro - 2019
Resumo
Este projeto visa elaborar aos estudantes da Fatec Sorocaba um
aplicativo de carona solidária que os auxilie na escolha do transporte diário. A
carona solidária ou compartilhada é elemento constante em cidades
inteligentes, que tem a economia, a tecnologia e ecologia como focos principais
e considera o bem estar das pessoas. A presente proposta engloba a revisão
bibliográfica de ferramentas computacionais e a criação e aprimoramento de
um protótipo que promova a interação entre estudantes. A aplicação será
desenvolvida com ferramentas gratuitas e terá uma interface intuitiva para fácil
uso da comunidade.
Palavras-chave: Carona compartilhada, Fatec Sorocaba, Visual Studio Code,
Flutter, Dart, Android Studio, Firebase.
Sumário
1. Introdução ....................................................................................... 4
2. Escolha das Ferramentas ............................................................... 5
2.1. Firebase ...................................................................................... 7
2.1.1. Ferramentas de desenvolvimento .......................................... 8
a) Firebase Authentication ............................................................... 8
b) The Realtime Database. .............................................................. 9
c) The Cloud Firestore ................................................................... 10
e) Firebase Hosting. ...................................................................... 13
f) Firebase Test Lab ..................................................................... 14
g) Firebase Crash Reporting ......................................................... 14
h) Cloud Functions for Firebase .................................................... 15
2.1.2. Ferramentas para expansão da aplicação ........................... 16
a) Firebase Cloud Messaging. ....................................................... 16
b) Firebase Remote Config ............................................................ 17
c) App Invites and Dynamic Links ................................................. 18
d) Earning with AdMob .................................................................. 18
e) Google Analytics for Firebase ................................................... 18
2.2. Visual Studio Code (VSCode) ................................................... 19
2.2.1. Coloração de sintaxe ............................................................. 19
2.2.2. Correspondência de colchete .... Erro! Indicador não definido.
2.2.3. IntelliSense ................................ Erro! Indicador não definido.
2.3. Flutter ........................................................................................ 20
2.4. Dart............................................................................................ 21
3. Próximas etapas para conclusão do projetoErro! Indicador não
definido.
4. Referências .................................................................................. 31
4
1. INTRODUÇÃO
O projeto pretende elaborar um aplicativo de carona compartilhada, bem
como visa aprofundar os conhecimentos na área de pesquisa acadêmica
relacionada a desenvolvimento de software, especificamente através das
ferramentas Visual Studio Code (IDE – Ambiente de Desenvolvimento
Integrado), Flutter (SDK – kit de desenvolvimento) e o Dart (linguagem de
programação). Uma vez analisadas e descritas essas ferramentas, pretende-
se elaborar um protótipo de sistema informatizado que proporcione aos alunos,
que se deslocam diariamente à instituição, o recurso de carona compartilhada.
Para o desenvolvimento e posterior implementação desse sistema será
pesquisada bibliografia referente às ferramentas citadas e testados modelos
computacionais iniciais, de modo a propiciar aos usuários um recurso com a
menor quantidade de falhas e de grande abrangência à comunidade
acadêmica.
O desenvolvimento do presente projeto toma como referências iniciais
os trabalhos de KELLEY (2007) e MULLER (2009).
5
2. ESCOLHA DAS FERRAMENTAS
Foram pesquisadas ferramentas gratuitas de desenvolvimento mobile
que tivessem fácil integração entre elas e interface intuitiva para
desenvolvimento. Para o desenvolvimento mobile foram necessárias algumas
ferramentas como editor de código-fonte e emulador (aplicação que faz um
sistema computacional simular um outro).
Além disso, foram necessários uma plataforma para armazenar dados,
um kit de desenvolvimento de software (SDK) - um “conjunto de programas da
linha de comando usados para criar, compilar e executar programas” (LEMAY:
2005, p.434) - e sua linguagem de programação.
Com esses recursos, seguimos LEITÃO (1995), que afirma que “uma
linguagem de programação deve ser feita para seres humanos dialogarem
acerca de programas e, só incidentalmente, para computadores os
executarem”.
A escolha do kit de desenvolvimento de software surgiu a partir da
análise do artigo “Estudio comparativo de frameworks multiplataforma para
desarrollo de aplicaciones móviles” (JULIÁN: 2018) no qual são descritas as
funcionalidades de determinadas SDK. A partir dele, optamos pela tecnologia
Flutter, que utiliza a linguagem de programação Dart.
A escolha das outras ferramentas teve como base a necessidade de
comunicação com o Flutter. A ferramenta para armazenar dados do aplicativo é
o Firebase, ferramenta que pertence à mesma empresa fabricante do Flutter.
6
Analisamos dois editores do código fonte: o Android Studio e o Visual
Studio Code. O Android Studio possui diversas configurações de emuladores
de celulares - necessários para testes, bem como a formatação do código
possui diferenciação de funções por cores – o que o torna visualmente intuitivo.
O processamento da ferramenta apresenta bom desempenho, ou seja, não
ocasiona travamentos, desde que seja instalada em um computador que
apresente os requisitos mínimos de hardware (GOOGLE DEVELOPERS:
2019). Por outro lado, o Visual Studio Code também possui diferenciação de
funções do código por cores, entretanto os requisitos de hardware são
menores, característica determinante para que fosse o escolhido para o
desenvolvimento do projeto.
7
2.1. FIREBASE
A Firebase é um conjunto de ferramentas para desenvolvimento de
aplicações móveis que ajuda a expandir, criar e a melhorar o aplicativo.
Fundado por James Tramplin e Andrew Lee, sua origem veio baseada na
ferramenta mais antiga chamado Envolve, desenvolvida por uma Startup que
proporcionava aos desenvolvedores uma API (Interface de Programação de
Aplicações) para a integração da funcionalidade chat nas suas aplicações web.
Após um tempo com a API disponível aos usuários, Tramplin e Lee
perceberam que ela era utilizada na transmissão de dados em tempo real, ou
seja, não eram mensagens transmitidas, mas sim dados para sincronizar
aplicativos ou estados de jogos entre usuários. Assim, os desenvolvedores
resolveram separar o bate-papo da arquitetura em tempo real, criando o
Firebase. Em outubro de 2014, ele foi adquirido pela Google (MATHIOS: 2017).
O Firebase possui ferramentas para armazenar dados, para análise de
acessos, para autenticação de usuários e outras funcionalidades, conforme
citamos abaixo.
8
2.1.1. Ferramentas de desenvolvimento
a) Firebase Authentication: proporciona formas de autenticação
conhecidas, tais como identidades federadas, a federação de
identidades (grupo de organizações relacionadas com diferentes
sistemas de tecnologia da informação). Permitem que as empresas
vinculem identidades do usuário mantidas em dois ou mais sistemas de
gerenciamento de identidades (ORACLE CLOUD SERVICES: 2019),
como Gmail, Twitter, Facebook e contas Microsoft, conforme
demonstrado na Figura 1.
Sua utilização faz-se necessária devido à segurança que a ferramenta
proporciona (certificada com os padrões de privacidade e segurança
segundo Firebase) para armazenar os dados de acesso dos usuários.
Figura 1 - Painel Gerenciamento do Firebase Authentication. Fonte: Firebase (2019)
9
b) The Realtime Database:
É um banco de dados NoSQL hospedado em nuvem, que segunfo
SOUZA (2011), “proporciona serviços de Tecnologia da Informação (TI)
sob demanda com pagamento baseado no uso e acesso de forma
simples e de qualquer local.”
NoSQL significa “Not Only SQL” (não apenas SQL), um termo que
representa os bancos de dados não relacionais, ou sejam, que não
fazem uso primário de tabelas. São usados quando é necessário
manipulação de grande quantidade de dados com rapidez (REIS: 2016).
O Realtime Database fornece sincronização entre dispositivos
conectados e é acessível mesmo quando não há rede disponível através
de memória local. É um banco de dados orientado a eventos. Todo o
código de interação e autenticação com o banco está no cliente, ou seja,
no código junto à aplicação, diferenciando-se muito dos bancos dados
SQL tradicionais em que o código de interação com o banco
normalmente encontra-se no servidor de banco de dados. Sempre que
há mudanças no banco de dados, os eventos devem ser acionados no
código do cliente para que o estado da interface da aplicação seja
atualizado. Um conjunto de regras pode ser criada para a definição de
como os dados serão estruturados e quais usuários terão acesso a
esses dados (MONOREY: 2017). Um modelo do Realtime Database é
ilustrado na Figura 2.
10
Figura 2 - Gerenciador do Realtime Database. Fonte: Firebase (2019)
c) The Cloud Firestore: será utilizado para armazenar os dados dos
usuários, tais como: nome completo, dados de documentos pessoais e
do automóvel utilizado, conforme a figura 3. O recurso é
um banco de dados flexível e escalonável para desenvolvimento de dispositivos móveis, Web e servidores a partir do Firebase e do Google Cloud Platform, podendo visualizar sua estrutura na Figura 3. Como o Firebase Realtime Database, ele mantém seus dados em sincronia em aplicativos cliente por meio de listeners(Um objeto tem vários dependentes que são anexados a ele, quando este objeto muda de estado todos os seus dependentes são avisados)(RONALDO:2014) em tempo real. Além disso, oferece suporte off-line para dispositivos móveis e Web para que você possa criar aplicativos responsivos que funcionem independentemente da latência da rede ou da conectividade com a Internet. (FIREBASE: 2019)
11
Figura 3 - Gerenciador do Cloud Firestore. Fonte: Firebase (2019)
d) Cloud Storage For Firebase:
Além de armazenar dados, o recurso é capaz também de armazenar
arquivos como fotos, vídeos ou arquivos de texto. Ele fornece uma API
simples cujo backup é feito pelo armazenamento em nuvem da Google,
facilmente utilizado pela aplicação através de funções (MONOREY:
2017). Sua tela de gerenciamento é ilustrada conforme Figura 4. Será
empregada para armazenar foto de perfil dos usuários.
12
Figura 4 - Gerenciador do Cloud Storage. Fonte: Firebase (2019)
13
e) Firebase Hosting:
Fornece a hospedagem de arquivos estáticos tais como: HTML, CSS,
JavaScript ou imagens, possibilitando conexão ao domínio pelo
gerenciador da ferramenta, conforme figura 5.
Figura 5 - Gerenciador do Firebase Hosting. Fonte: Firebase (2019)
14
f) Firebase Test Lab: Possui dispositivos para testar as aplicações
conforme a figura 6.
Figura 6 - Painel inicial do Test Lab. Fonte: Firebase (2019)
g) Firebase Crash Reporting: Fornece um rastreamento de todas as falhas
e as guarda no Firebase Console (Gerenciador do Firebase).
15
Figura 7 - Gerenciador do Firebase Crash Reporting. Fonte: Firebase (2019)
h) Cloud Functions for Firebase: Disponibiliza a elaboração de códigos que
são acionados a partir de eventos em elementos do Firebase, como por
exemplo: mudanças no Cloud Firestore que enviam mensagem ao
usuário através Firebase Cloud Messaging. (MONOREY:2017). A figura
8 ilustra seu painel de funções.
Figura 8 - Gerenciador do Cloud Functions. Fonte: Firebase (2019)
16
2.1.2. Ferramentas para expansão da aplicação.
a) Firebase Cloud Messaging: Permite o envio de mensagens ao usuário.
Os dispositivos conectados recebem essas mensagens em menos de
500 ms (MONOREY:2017). Um exemplo de envio de mensagem pode
ser visto na Figura 9.
Figura 9 - Gerenciador do Cloud Messaging. Fonte: Firebase (2019)
17
b) Firebase Remote Config: Serviço em nuvem que permite armazenar
variáveis em um servidor, possibilitando a modificação do
comportamento ou aparência do aplicativo sem precisar de uma
atualização. Por padrão o desconto do aplicativo é 0%, mas em uma
data específica para mudança pode ser programada. No projeto, um
parâmetro foi incluído para visualizar o gerenciamento, conforme figura
10.
Figura 10 – Gerenciador do Firebase Remote Config. Fonte: Firebase (2019)
18
c) App Invites and Dynamic Links: Permite que o usuário escolha diversas
pessoas em uma lista ordenada para enviar o convite de instalação e
uso da aplicação. A tela do recurso é ilustrada na figura 11.
Figura 11 – Página inicial do Gerenciador do Dynamic Links. Fonte: Firebase (2019)
d) Earning with AdMob: recurso para inserção de anúncios em banner,
vídeos ou anúncios nativos no aplicativo, possibilitando também a
análise através de um gráfico gerado pelo próprio Firebase em relação
às propagandas.
e) Google Analytics for Firebase: Identifica qual é o público que mais utiliza
a aplicação, ou o que menos utiliza, podendo ser um indicador para
futuras modificações.
19
2.2. VISUAL STUDIO CODE (VSCODE)
Ferramenta de criação do código para diversas plataformas, tais
como: web, mobile e em nuvem, e adequação para os sistemas
operacionais Windows, Linux e OS X. O VSCode.
Seu ambiente é baseado em pastas, o que facilita o
desenvolvimento e fornece extensão de recursos internos, linguagens
personalizadas, coloração de sintaxe, ferramentas de edição, depuradores
e outras extensões. (DEL SOLE: 2016, p.9). Permite, também, a escrita dos
códigos na linguagem dart para o desenvolvimento de telas e funções da
aplicação.
A coloração de sintaxe torna-se apropriada para as linguagens dos
códigos desenvolvidos. Pode-se, também, definir as próprias regras de realce
de cor quando são adicionadas linguagens de desenvolvimento
personalizadas.
20
2.3. FLUTTER
A Google foi uma das últimas grandes empresas a ingressar no
mercado de desenvolvimento de aplicativos móveis de código aberto. Entre
seus recursos para desenvolvimento está o Flutter, que é um SDK de
aplicativos para dispositivos móveis para criar aplicativos de alta fidelidade
para iOS e Android a partir de uma única base de código, o que proporciona
aos desenvolvedores de aplicativos de alto desempenho que suportam
compilação JIT (Just in Time), e acelera o processo de teste durante a
criação de uma aplicação (JULIÁN: 2018). No projeto proposto, ele é
utilizado para acessar as bibliotecas que contém widgets, que descrevem
como deve ser a visualização das telas, considerando sua configuração e
estado atuais. Quando o estado de um widget é alterado, ele recria sua
descrição, necessária na árvore de renderização subjacente para a
transição de um estado para o próximo. (FLUTTER-DEV: 2019)
21
2.4. DART
A ascensão das páginas web mudaram o panorama de
desenvolvimento de software e os navegadores são plataformas utilizadas
em grande variedade de aplicativos. Os dispositivos móveis, cada vez mais
presentes na vida das pessoas, também impactaram na maneira do
desenvolvimento do software. O Dart fornece uma plataforma destinada a
suportar vários tipos de aplicativos e acesso fácil às instalações que novas
plataformas exigem. Essa linguagem é orientada a objetos, ou seja, todos
os valores que um programa Dart manipula no tempo de execução são
objetos, desde dados elementares, como números, a valores booleanos.
O Dart adota um modelo de objeto uniforme e facilita a tarefa do
implementador de sistema (BRACHA: 2016). O recurso Flutter é escrito em
dart e utiliza essa linguagem para o acesso a suas bibliotecas.
22
23
3. ANÁLISE DE REQUISITOS
3.1. SITUAÇÃO PROPOSTA
O objetivo do projeto foi a elaboração de um aplicativo que
disponibilizasse a comunicação entre alunos interessados em deslocar-se para
e da Faculdade de Tecnologia de Sorocaba como caronistas de alunos com
automóveis. Com as ferramentas descritas acimas, criamos um sistema que
tem as seguintes características listadas abaixo.
3.2. REQUISITOS FUNCIONAIS
3.2.1. Descrição dos Requisitos Funcionais
Tabela 1
id Descrição
RF1 Cadastrar Pessoa
RF2 Cadastrar Carro
RF3 Editar Oferta de Carona
RF4 Anunciar Oferta de Carona
24
3.2.2. Diagrama de Casos de Uso de Alto Nível
Figura 12
3.2.3. Diagrama de Casos de Uso de Baixo Nível
Tabela 2 (Caso 1)
Nome do caso de uso Cadastrar Pessoa
Caso de uso geral
Ator principal Usuário
Ator secundário
Resumo Cria conta de usuário para acessar a aplicação.
Pré-condição
Possuir as seguintes informações válidas: CPF, E-mail, e RA(Registro do Aluno) que seja compatível com o registro da Fatec cursada.
Pós-condição
Ações do ator Ações do sistema
1 - Abre o aplicativo
2 – Acessa Criar Conta
3 – Preenche com os Dados Necessários
4 – Realiza a validação dos dados
25
5 – Cadastra o Usuário no Banco de dados
Tabela 3 (Caso 2)
Nome do caso de uso Cadastrar Carro
Caso de uso geral
Ator principal Usuário
Ator secundário
Resumo Cadastra um carro para poder oferecer carona aos alunos.
Pré-condição Possuir as seguintes informações válidas: CNH; necessário ter um cadastro no aplicativo
Pós-condição
Ações do ator Ações do sistema
1 – Acessar a aba meus carros cadastrados
2 – Clicar em Novo Carro
3 – Preenche os campos conforme necessário
4 – Realiza a validação dos dados
5 – Cadastra o Carro no Banco de dados
Tabela 4 (Caso 3)
Nome do caso de uso Editar Oferta de Carona
Caso de uso geral
Ator principal Usuário
Ator secundário
Resumo Realiza a edição da carona já cadastrada
Pré-condição Possuir uma carona cadastrada
Pós-condição
Ações do ator Ações do sistema
26
1 – Acessa a aba meus anúncios publicados
2 – Clicar na carona desejada
3 – Atualiza os campos conforme a necessidade
4 – Realiza a validação dos dados
5 – Atualiza a carona no Banco de dados
Tabela 5 (Caso 4)
Nome do caso de uso Anunciar Oferta de Carona
Caso de uso geral
Ator principal Usuário
Ator secundário
Resumo Realiza o cadastro de uma carona
Pré-condição Possuir um carro cadastrado
Pós-condição
Ações do ator Ações do sistema
1 – Acessa a aba meus anúncios publicados
2 – Clicar em Nova Carona
3 – Preenche os campos conforme a necessidade
4 – Realiza a validação dos dados
5 – Cadastra a carona no Banco de dados
3.3. REQUISITOS NÃO FUNCIONAIS
3.3.1. Tempo de Resposta
O tempo de resposta da exibição de informações e conclusão de
atualizações, cadastros e exclusões varia de acordo com a quantidade de
27
dados inserida no banco de dados e com a qualidade de taxa de transferência
de informações da conexão de rede. O tempo médio é de 1 a 5 segundos.
3.3.2. Espaço na memória
A quantidade média de memória RAM utilizada é de 160 mb.
3.3.3. Requisitos de Armazenamento
Tamanho do aplicativo no sistema: 123 MB
3.3.4. Configurações mínimas do dispositivo móvel
Tabela 6
Tabela 7
Rede móvel Quad Band (850/900/1800/1900), HSPA+, LTE
Conexões Wi-Fi 802.11 a/b/g/n. Bluetooth 4.0 com A2DP
GPS A-GPS/GLONASS
Processador 1.3 GHz Dual Core, 64 bits, Cyclone Apple A7
GPU PowerVR (Series 6) G6430
RAM 1 GB RAM
Rede móvel Quad Band (850/900/1800/1900), HSPA+, LTE
Conexões 802.11 a/b/g/n/ac, 4.0 com LE/EDR/A2DP, NFC
GPS A-GPS/GLONASS
Processador 1.7 GHz Dual Core, Snapdragon S4 Pro Qualcomm MSM8960
GPU Adreno 320
RAM 2 GB RAM
28
3.4. RESULTADOS E DISCUSSÕES
3.4.1. Telas
Ao inicializar o aplicativo a primeira tela a ser visualizada é a de
entrada do usuário, conforme ilustrada na figura 13. Caso o usuário não possua
uma conta para acessar o aplicativo, é possível realizar seu cadastro na tela
demonstrada na figura 14.
Figura 13 Figura 14
29
Se as informações forem inseridas corretamente, a próxima tela é a de
anúncios publicados de carona (figura 15) feitos por outros usuários. Os
anúncios feitos pelo usuário do sistema são visualizados também, conforme a
tela da figura Figura 16. Há a possibilidade de se criar um novo anúncio através
do botão “Nova Carona”, conforme figura 17.
Figura 15 Figura 16 Figura 17
30
Na aba “Meus Carros Cadastrados”, estão disponíveis as descrições
de carros cadastrados pelo o usuário, conforme ilustra a figura 18. Ao clicar no
botão “Novo Carro”, o usuário será direcionado para a tela que realiza a adição
de um novo item, conforme demonstrado na figura 19.
Figura 18 Figura 19
31
Na última aba do menu, na parte inferior da tela, está localizado um
ícone que direcionará o usuário à visualização dos dados pessoais
cadastrados, conforme ilustrado na figura 20. Para que os dados do usuário
sejam alterados, abre-se uma tela (conforme figura 21).
Figura 20 Figura 21
32
4. SUGESTÕES PARA TRABALHOS FUTUROS
Há funcionalidades interessantes que podem ser incorporadas ao
aplicativo para que a experiência do usuário seja ainda mais agradável e
intuitivo. Uma delas é o emprego de API (Interface de programação de
aplicações) para a busca de endereços disponíveis quando o usuário realiza a
criação de um anúncio e preenche o campo endereço de origem e endereço de
destino.
Outra possível funcionalidade é a do usuário incluir uma foto do seu
carro na tela de meus carros cadastrados, bem como uma implementação
futura interessante ser a do envio de solicitação para preenchimento de vaga
da carona - caso o usuário que publicou a carona aceite a solicitação do
usuário solicitante - e uma vaga daquele anúncio seja subtraída.
As implementações sugeridas visam a facilidade do uso do aplicativo
por parte dos usuários, para que eles consigam encontrar caronas em um
ambiente que as centralize e possibilite a interação entre os usuários para que
outros detalhes sejam combinados.
33
REFERÊNCIAS
BRACHA, G. The Dart Programming Language. Crawfordsville: Pearson Education, 2016.
CLOUD SERVICES, O. Saiba Mais Sobre a Arquitetura para Sign-On Único Federado. Disponível em: <https://docs.oracle.com/pt-br/solutions/fed-sso-options-cloud-customers/index.html#GUID-E61A0BEF-25BC-4DDB-85E6-D5E78BD260A9>. Acesso em: 10 de agosto de 2019.
DEL SOLE, A. Visual Studio Code Succinctly.New York: Syncfusion, 2016.
DEVELOPERS, G. Cloud Firestore. Disponível em: <https://firebase.google.com/docs/firestore/?hl=pt-br>. Acesso em: 18 de julho de 2019.
___________________ Recuperar dados. Disponível em: < https://firebase.google.com/docs/database/admin/retrieve-data?hl=pt-br>. Acesso em: 10 de agosto de 2019.
___________________ Privacidade e segurança no Firebase, 26 de julho de 2019. Disponível em: <https://firebase.google.com/support/privacy?hl=pt-br>. Acesso em: 12 de agosto de 2019.
___________________System Requirements. Disponível em: < https://developer.android.com/studio>. Acesso em: 20 de julho de 2019.
FLUTTER-DEV. Introduction to widgets. Disponível em: < https://flutter.dev/docs/development/ui/widgets-intro>. Acesso em: 15 de agosto de 2019.
LEMAY, L. Aprenda em 21 Dias Java 2. Rio de Janeiro: Elsevier Editora Ltda, 2005.
LEITÃO, A. Liguagem de Programação, 1995. Disponível em: < http://www.dca.fee.unicamp.br/courses/EA072/lisp9596/node2.html>. Acesso em: 20 de julho de 2019.
MACHADO, J. Gerenciamento de Dados em Nuvem: Conceitos, Sistemas e Desafios. Universidade Federal do Ceará, 2011.
MATHIOS, G. Análise de dados no banco de dados do Google em tempo real. Tese (Pós-Graduação). Universidade do Pireu, 2017.
MICROSOFT. Requirements for Visual Studio Code, 9 de abril de 2019. Disponível em: < https://code.visualstudio.com/docs/supporting/requirements>. Acesso em: 20 de julho de 2019.
MONOREY, L. The Definitive Guide to Firebase. New York: Springer+Business Media, 2017.
34
RAFAEL, J. Emulador de Nintendo implementado em Python. Faculdade de Computação - Universidade Federal de Mato Grosso do Sul.
REIS, F. O que são Bancos de Dados NoSQL, 14 de abril de 2018. Disponível em: <http://www.bosontreinamentos.com.br/nosql/bancos-de-dados-o-que-e-nosql/>. Acesso em: 18 de julho de 2019.