Skip to main content

Documento de Arquitetura de Software

VersãoDataModificaçãoMotivoAutor(es)
1.001/03/2022Criação do documento-Igor Paiva, Renan Cristyan, Rhuan Queiroz, Thiago Lopes
2.013/03/2022Atualização na arquitetura proposta e adição de diagramas de pacotesAtualizar a arquitetura em relação ao MVP e trazer uma visão mais clara da estrutura de cada serviçoIgor Paiva, Renan Cristyan, Rhuan Queiroz, Thiago Lopes

1. Introdução​

1.1 Propósito​

Este documento visa apresentar e descrever a arquitetura do MeasureSoftGram considerando o MVP da LI realizada.

1.2 Escopo​

O escopo deste documento é entendido como o escopo do MeasureSoftGram e seus componentes. Sendo eles: Core e CLI (MVP).

1.3 Definições Acrônimos e Abreviações​

AcrônimoForma extendida
RESTRepresentational State Transfer
CLICommand Line Interface
HTTPHypertext Transfer Protocol

1.4 Referências​

Documento de arquitetura de Software. UFPE. Disponível em: https://www.cin.ufpe.br/~gta/rup-vc/core.informal_resources/guidances/examples/resources/ex_sad.htm. Acesso em: 24/04/2021

Documento de arquitetura de Software. UFPE. Disponível em: https://www.cin.ufpe.br/~gta/rup-vc/extend.formal_resources/guidances/examples/resources/sadoc_v1.htm. Acesso em: 24/04/2021

Artefatos do MeasureSoftGram. Disponível em: https://fga-eps-mds.github.io/2021-2-MeasureSoftGram-Doc/. Acesso em: 24/04/2021

Visões Arquiteturais. Disponível em: https://www.dimap.ufrn.br/~thais/Arquitetura20081/Visoes4+1eDocumentacao.pdf. Acesso em: 27/04/2021

Kruchten’s 4 + 1 views of Software Design. Disponível em: https://medium.com/the-mighty-programmer/kruchtens-views-of-software-design-e9088398c592. Acesso em: 27/04/2021

1.5 Visão Geral​

Este documento é divido em seções, cada qual com seu próposito:

TópicoDescrição
Representação ArquiteturalContém por meio de diagramas o padrão arquitetural do sistema
Objetivos Arquiteturais e RestriçõesDescreve os requisitos do software e objetivos que impactam na arquitetura, além das restrições
Visão LógicaDescreve as partes importantes do domínio modelo, assim como sua decomposição em subsistemas, pacotes, classes e classes de utilidade
Visão de ProcessoDescreve a decomposição do sistema em processos
Visão de ImplantaçãoDescreve as configurações físicas em que o software roda e é implantado, assim como, o processo de implantação adotado
Visão de ImplementaçãoDescreve de forma geral a estrutura de implementação do software, a decomposição do software em camadas e subsistemas
Visão de DadosDescreve como a camada de persistência vai persistir os dados, e como eles são modelados
Tamanho e PerfomanceDescreve o tamanho do software e seu impacto em relação à arquitetura, assim como os objetivos de performance
QualidadeDescreve como a arquitetura impacta e contribuí para os atributos de qualidade

2. Representação Arquitetural​

Representação arquitetural

2.1 Core​

O Core é o serviço responsável por abstrair a lógica do modelo matemático do software.

2.2 Service​

O Service é o serviço responsável por conter e manipular os dados do software: métricas, metas de configuração, análises realizadas, etc. Utiliza o padrão de camadas MVC para a construção e organização do serviço.

2.3 CLI​

O CLI é uma interface de linha de comando para o software.

2.4 Front-end​

O front-end é uma das interfaces com o usuário, juntamente com o CLI. Neste caso, o front-end é a interface gráfica do software.

3. Objetivos Arquiteturais e Restrições​

  • A arquitetura do software compreende que o software deve ser executado em rede local, sem a necessidade de conexão com a internet.
  • A conexão com a internet é necessária para a obtenção do software e instalação, mas não para a sua execução.
  • Os serviços devem ser executados via docker, sem a necessidade de instalação.

4. Visão Lógica​

4.1 Desenho de Pacotes Arquiteturalmente Significantes​

4.1.1 Core​

Diagrama de Pacotes Core

core​

Pacote que contém arquivos referentes à lógica principal (modelo matemático) do software.

resources​

Contém arquivos referentes ao domínio controller (MVC) do software. Recebe esse nome pelo fato de o Flask utilizar o termo resource que é análogo a controller.

utils​

Contém arquivos com lógicas utilitárias para as outras camadas do software.

tests​

Contém arquivos referentes aos testes do software.

unit​

Contém arquivos referentes aos testes unitários do software.

integration​

Contém arquivos referentes aos testes de integração do software.

4.1.2 Service​

Diagrama de Pacotes API

model​

Contém arquivos referentes ao domínio modelo (MVC) do software.

resources​

Contém arquivos referentes ao domínio controller (MVC) do software, recebe esse nome pelo fato de o Flask utilizar o termo resource que é análogo a controller.

utils​

Contém arquivos com lógicas utilitárias para as outras camadas do software.

tests​

Contém arquivos referentes aos testes do software.

unit​

Contém arquivos referentes aos testes unitários do software.

integration​

Contém arquivos referentes aos testes de integração do software.

6. Visão de Processo​

6.1 Fluxo de dados​

Os dados fluem sempre do CLI para o Service, do Service para o Core, e vice-versa. Do Service, os dados (tanto do CLI, quanto do Core) fluem e podem ser persistidos no banco de dados.

7. Visão de Implantação​

Dado que o sistema é compreendido para ser executado em rede local, o software deve ser instalado em um ambiente local, sem a necessidade de conexão com a internet. Os nós de serviço (Core e Service) e o componente de CLI já estarão configurados previamente com as portas necessárias para a conexão das partes.

De modo semelhante, a imagem Docker do Service deve conter o banco de dados MongoDB. Os serviços deverão ser instalados em um ambiente Docker, via script de instalação, e deverão ser executados via script de execução.

O CLI deverá ser instalado via Python PyPI, sendo a sua execução como pacote Python.

8. Visão de Implementação​

8.1 Service​

8.1 Camadas​

Este serviço utilizará o microframework Flask.

8.1.1 Controller​

Esta é a camada que ficará responsável por receber as requisições dos clientes, e reagirá baseada nos verbos HTTP (GET, HEAD, POST, PUT, PATCH, DELETE, CONNECT, OPTIONS e TRACE).

8.1.2 Model​

Esta camada carrega consigo o modelo de domínio, e por obedecer ao padrão Active Record, tem a capacidade de abstrair as tabelas da camada de persistência. Também tem a responsabilidade de abstrair os relacionamentos entre as mesmas.

8.1.3 View​

A view desse serviço é a especificação REST em formato JSON, que será utilizada para a comunicação com o cliente.

8.2 Core​

Inicialmente a base de código do modelo matemático está contida num notebook Python, conforme o desenvolvimento for progredindo o modelo matemático será implementado em um módulo Python na aplicação, prevê-se que o notebook deixe de existir em algum momento.

8.2.1 Camadas​

Esta aplicação utiliza o microframework Flask, e por não haver uma camada de dados a ser implementada, a aplicação não utiliza o padrão MVC, embora utilize uma organização em camadas, muito semelhante. Sendo assim, se comporta como uma abstração REST para o modelo matemático.

8.3 CLI​

8.3.1 Argparse​

O pacote Python argparse deverá ser utilizado para a construção do CLI, seus comandos, seus parâmetros e seus argumentos. Sendo também o pacote Python inquirer para a construção de formulários de escolha.

8.4 Metodologia de Desenvolvimento​

As metodologias adotadas serão Agile, Scrum e XP (programação em pares e integração contínua). Sendo que no mesmo contexto será utilizado o framework DevSecOps pela equipe de infraestrutura, mas que também se aplica à equipe de desenvolvimento.

8.5 Padrões de Desenvolvimento​

A ferramenta utilizada para versionamento será o GitHub, não há padronização para Editor de Texto ou IDE, mas os repositórios de subsistemas deverão estar configurados com ferramentas de análise estática de código. Prevê assim uma melhor eficiência e padronização dos códigos fonte da equipe. Estas análises serão efetuadas automaticamente, por meio da ferramenta de integração contínua chamada GitHub Actions.

Os testes devem ser realizados ao longo do desenvolvimento, e também será utilizado o SonarCloud para análise estática de qualidade.

LinguagemEstilo de código
PythonPEP8

8.6 Documentação de Endpoints​

Os endpoints do Back-end API deverão ser documentados utilizando a ferramenta Swagger, facilitando assim a integração da equipe, que no caso podem se diferir, diminuindo o tempo gasto para inclusão de novas funcionalidades e novos membros na equipe.

9. Visão de Dados​

Por estar em uso um banco de dados NoSQL, o banco de dados MongoDB, utilizado pelo Service, a visão de dados se estrutura num formato de documentos, como JSON, e suas collections, de formam análoga a tabelas.