Ir para o conteúdo

Arquitetura do projeto

Finalidade

O documento estabelecerá uma visão da arquitetura de software adotada no sistema Visualeasy. Com isso ele tem como finalidade evidenciar com clareza as decisões arquiteturais tomadas no projeto. Disponibilizando as informações essenciais para as pessoas desenvolvedoras e demais envolvidos a respeito da aplicação e das tecnologias que serão utilizadas no desenvolvimento do projeto.

Escopo

Essa documentação foi elaborada sobre a visão de arquitetura de software que será utilizada para a implementação do projeto Visualeasy, para a evidenciar as decisões tomadas. Serão abordados os padrões de arquitetura, os frameworks que serão usados no desenvolvimento do projeto. O objetivo é fornecer visualização gráfica de séries temporais, proporcionando uma melhor visualização dos dados fornecidos à aplicação e permitindo uma tomada de decisão com base na análise dos dados.


Visão Geral

Aqui serão detalhados as características primordiais da arquitetura adotada pela equipe desenvolvedora. Estarão presentes a representação arquitetural, as restrições de arquitetura, visão lógica, de implementação e de dados.

Representação da Arquitetura

Para o desenvolvimento do sistema Visualeasy, foi decidido a utilização de uma arquitetura em microsserviços. Microsserviços são uma abordagem arquitetônica e organizacional do desenvolvimento de software, onde o software consiste em pequenos serviços independentes que se comunicam usando APIs bem definidas. Esses serviços pertencem a pequenas equipes autossuficientes.

As arquiteturas de microsserviços facilitam a escalabilidade e agilizam o desenvolvimento de aplicativos, habilitando a inovação e acelerando o tempo de introdução de novos recursos no mercado.

No sistema Visualeasy foi decidido, a criação de 2 microsserviços, sendo eles:

  • Frontend: Responsável pela visualização de todo o sistema.
  • Controle: Responsável pelo envio e tratamento dos dados de todas as variáveis que serão visualizadas nos gráficos.

Há a possibilidade da adição de mais 1 microsserviço, que ficará como um possível incremento ao projeto, e devido ao tempo insuficiente de duração do projeto, não será implementado. Este microsserviço é:

  • Usuario: Responsável por lidar com a autenticação no sistema e com a criação dos perfis de usuário dentro do sistema.

A utilização de microsserviços traz como benefícios o desacoplamento das funcionalidades do sistema. Portanto, a alteração de um deles ou até mesmo a queda de algum deles, não afetará o resto do sistema, podendo as outras funcionalidades continuarem em execução normalmente.

Para o desenvolvimento dos microsserviços foi utilizado as seguintes tecnologias:


Node JS

node

Para o microsserviço de controle e de autenticação foi utilizado o Node.JS. Node é uma plataforma de aplicação, onde programas são escritos em JS e compilados, otimizados e interpretados pela Máquina Virtual V8, sendo a mesma usada pelo Google para executar JavaScript no navegador Chrome. O resultado deste processo é entregue como código de máquina server-side, tornando o Node muito mais eficiente na sua execução e consumo de recursos. A plataforma Node foi escolhida por ser eficiente na implementação de aplicações em tempo real, que precisam transferir mensagens de um lado para o outro de forma rápida. As mensagens geradas pelo Visualeasy podem demandar um grande volume de dados a cada requisição do sistema.


Next.JS

next

Para o microsserviço responsável pelo front-end foi utilizado o NextJS. O Next.JS é um framework para React que é uma biblioteca javascript. O seu foco é no alto desempenho onde reúne diversas funcionalidades como renderização híbrida e estática de conteúdo. Possui suporte a TypeScript, pre-fetching, sistema de rotas, pacotes de funcionalidades e diversos plugins, o framework será utilizado, como parte front-end do nosso projeto, em que mostrará as telas e apresentará os recursos de gráfico, login dentre outras funcionalidades.


Chart.js

Chart.js

Para a exibição dos gráficos foi escolhida a biblioteca Chart.js. O Chart.js é uma biblioteca em Javascript de código aberto e que é muito utilizada pela comunidade. Essa biblioteca utiliza apenas HTML, CSS, JS e utilizando-se do elemento canvas do HTML5 para gerar gráficos na tela do usuário, o que torna uma ferramenta mais acessível e de fácil aprendizado para implementação no projeto. O Chart.js possui suporte responsivo, legenda para os gráficos, opções de gráficos interativos e modulares, entre outras funcionalidades que abrangem todo o escopo do projeto.


PostgreSQL

postgres

Para banco de dados foi escolhido o PostgreSQL. O PostgreSQL é um Sistema Gerenciador de Banco de Dados Relacional de código aberto que utiliza a linguagem SQL para armazenar seguramente os dados, extensível e possui um vasto ecossistema de ferramentas. É um software projetado para possuir compatibilidade com os principais sistemas operacionais como Linux e Windows. Por essas características esse Banco de Dados tem sido bastante utilizado no contexto geral de negócios, sites e por isso foi o escolhido como a solução de banco de dados do Visualeasy.


Metas e restrições da arquitetura

Metas:

  • Funcionar nos principais browsers utilizados atualmente: Mozilla Firefox, Google Chrome e Microsoft Edge.

  • O código deve ser modularizado, facilitando a manutenção e com baixo acoplamento.

Restrições:

  • Conexão com a Internet;
  • Conexão com a API;
  • Conexão ao Banco de Dados;


Ambiente e Ferramentas de Desenvolvimento

Requisito Ferramenta/Solução Versão Descrição
Linguagem Javascript ES6 Linguagem de programação interpretada e multiparadigma
Framework Node.js 16.16.0 Ambiente de execução Javascript server-side
Framework Next.js 12.2.2 Framework React
Biblioteca Chart.js 3.8.2 Biblioteca Javascript para renderização de gráficos
Base de dados PostgreSQL 14 Sistema Gerenciador de Banco de Dados de código aberto
Virtualização Docker 20.10.17 Plataforma aberta para empacotamento e execução de aplicações em contêineres
Virtualização Docker-compose 3.9 Gerenciamento de contêiner
Biblioteca Jest 28.1.3 Biblioteca de testes


Visão Lógica

Esta sessão apresenta os pacotes de design significativos do ponto de vista da arquitetura para o projeto Visualeasy.

Pacotes Visualeasy (API)

src_controle

Os pacotes mais significativos da API do Visualeasy são detalhados a seguir.

Model

A Model identifica as entidades a serem utilizadas na aplicação de maneira correlacionada com conceitos abstraídos das circunstâncias apresentadas no mundo real. Nessa camada também é implementado a comunicação com o banco de dados.

Controller

Dentro da controller ficam os arquivos responsáveis pela serialização dos dados. Serialização é o processo de conversão de um objeto em um fluxo de bytes para armazenar o objeto ou fluxo na memória, em um banco de dados, ou em um arquivo, ou transmiti-lo por uma conexão de rede, seja em forma binária ou em formato de texto como o JSON. Sua finalidade principal é salvar o estado de um objeto para conseguir recriá-lo quando necessário. Logo, é um método simples e robusto para tornar objetos persistentes.

Routes

Responsável por endereçar a lógica utilizando uma interface de comunicação baseada no protocolo HTTP. Processo realizado através do roteamento que determina como um aplicativo responde a uma solicitação do cliente, que vem através de um URI (caminho) e um método de solicitação HTTP específico (ex: GET, POST). Uma rota pode ter uma ou mais funções que são executadas quando a solicitação corresponde com o endereçamento da rota.

tests

Outro pacote tão importante quanto o da source são os de testes utilizando o jest.js, serão realizadas verificações de unidade e integração para garantir a qualidade do software entregue.


Arquitetura dos Serviços e visão de Implementação

Visão Geral

estrutura

Cada microsserviço é detalhado da seguinte forma:

  • Visualização de dados/gráficos: Front-end do produto composto pelo framework Next.Js, para a construção das telas, campos, validações e botões que o usuário irá interagir. Acompanhando o Next.Js, o Chart.Js é responsável pela visualização dos dados tratados, gerando os gráficos.

  • Core:O Core é composto pelas APIs responsáveis pela autenticação de usuário e pelo controle, coleta de dados e geração de gráficos.

  • Core:A API responsável pela autenticação de usuário, foi prevista na arquitetura. Porém, não foi implementada nesta versão da aplicação.


Visão de Dados

Para a primeira versão da aplicação e para se adequar a questão do tempo disponível para a entrega. A visão de dados faz uma consulta a apenas a tabela "variavels" que possui atributos de acordo com o arquivo .csv disponibilizado pelo cliente para população e testes da aplicação.

tabela_bd

Para atualizações futuras e conforme a necessidade para a implantação no sistema do cliente a estrutura do banco será baseada nesse diagrama lógico de dados.

visualeasy_dld


Qualidade

A norma ISO/IEC 25010 define 8 características de qualidade que todos os software devem ter, de forma a alcançar um nível muito alto de qualidade no software que será entregue. São elas: adequação funcional; eficiência de performance; compatibilidade; usabilidade; confiabilidade; segurança; portabilidade e; capacidade de manutenção.

Os desenvolvedores do presente projeto buscam garantir que todas as características definidas pela ISO 25010 estejam presentes no produto Visualeasy, com atenção em especial à 4 características de qualidade, apresentadas na imagem a seguir, indispensáveis para a qualidade do produto Visualeasy. Cada característica é detalahda nos próximos tópicos.

ISO25010

Adequação Funcional

Essa característica representa o grau em que o produto ou sistema fornece funções que satisfazem as necessidades declaradas e implícitas dos usuários, quando utilizadas sob condições especificadas.

No projeto Visualeasy, as necessidades do usuário foram analisadas e especificadas durante o desenvolvimento do Lean Inception, e por fim, foram listadas em forma de histórias de usuário no Product Backlog.

Usabilidade

Característica de um sistema que pode ser utilizado pelos mais diferentes usuários para atingir diversos objetivos específicos com eficácia, eficiência e satisfação.

A interface do Visualeasy é projetada para ser fácil de operar e controlar, com navegabilidade intuitiva, para garantir que o sistema possa ser utilizado por usuários com a mais ampla gama de características e capacidades.

Portabilidade

Grau de eficácia e eficiência com o qual um sistema pode ser transferido de um hardware, software ou outro ambiente operacional, ou de utilização para outro.

Esta é uma característica indispensável ao produto Visualeasy, visto que um dos objetivos do projeto é que os POs testem, a cada release, as novas funcionalidades implementadas. Sendo assim, o sistema deve ser adaptável a diferentes ambientes.

Capacidade de Manutenção

Esta característica representa o grau de eficácia e eficiência com que um sistema pode ser modificado para o melhorar, corrigir ou adaptar às mudanças de ambiente e/ou requisitos.

Por ser um projeto desenvolvido ao longo de mais de um semestre, por diferentes equipes, o sistema Visualeasy deve possuir elevada capacidade de manutenção, para garantir que outros desenvolvedores possam adicionar novas funcionalidades e melhorias facilmente.


Referências

  • Node.js. About Node.js. Disponível em: Node. Acesso em 20 de Julho de 2022.

  • Docker docs. Docker overview. Disponível em: Docker. Acesso em 21 de Julho de 2022.

  • Postgresql. About Postgresql. Disponível em: Postgres. Acesso em 21 de Julho de 2022.

  • Microsoft Azure. O que é PostgreSQL? Disponível em: Azure. Acesso em 21 de Julho de 2022.

  • Next.js. The React Framework for Production. Disponível em: Next.js. Acesso em 21 de Julho de 2022.

  • nata.house. O que é um bom software? Identifique essas 5 características! Disponível em: Natahouse. Acesso em 21 de Julho de 2022.

  • AWS. O que são microsserviços? Disponível em: AWS Acesso em 21 de Julho de 2022.

  • ISO/IEC 25010. ISO 2500. Disponível em: ISO/IEC 25010. Acesso em 10 de agosto de 2022.

  • Wikipédia. ISO/IEC 25010. Disponível em: Wikipédia - ISO/IEC 25010. Acesso em 10 de agosto de 2022.

  • Chart.js. Chart.js. Disponível em: Chart.js. Acesso em 13 de setembro de 2022.

  • Gigasystems. Criando Gráficos com Chart.js com legenda. Disponível em: Gigasystems. Acesso em 13 de setembro de 2022.

Versionamento

Data Versão Descrição Autor(es)
19/07/2022 1.0 Criação do documento de arquitetura do projeto Bruna Santos,Estevão Reis, Itallo Gravina, Luis Bruno, Damarcones Porto, Bruno Nunes, Marcos Vinicius, Gustavo Moreira, Gabriel Batalha, João Pedro
23/07/2022 1.1 Correções e Adição do documento ao reposítório Marcos Vinicius
25/07/2022 1.2 Revisão ortográfica do documento Gustavo Moreira
01/08/2022 1.3 Adição do tópico Visão de Dados, Visão Lógica-controle Marcos Vinicius
14/08/2022 1.4 Refatora tópico de qualidade Bruna Santos, Damarcones Porto
15/08/2022 1.5 Revisão ortográfica do documento Damarcones Porto
08/09/2022 1.6 Refatora tópico de qualidade Bruna Santos
13/09/2022 1.7 Refatoração do tópico de Representação da arquitetura João Pedro