Definição das Tecnologias e Metodologias de Software
Principais Técnologias
No Backend:
-
Python 3: A linguagem será utilizada para programar todo o backend, por possuir as bibliotecas que oferecem os meios de realizar os requisitos elicitados.
-
Flask: O Flask é um micro-framework para Python, focado em desenvolvimento Web, que será usado para construir as APIs do backend da aplicação. Além de vigorar sob a licença BSD, que permite uso livre desde que seja mantida a menção ao copyright do framework, o Flask é de fácil uso e aprendizado, por prover apenas o necessário para finalidade a qual ele se propõe. Por fim, as formas de deploy para produção utilizando este micro-framework também são simples e podem ser baratas dependendo da aplicação, já que o framework em sí é leve.
-
Gunicorn: Com o flask já é incluído um Web server que consegue executar as aplicações, no entanto, este é feito apenas para uso em ambientes de desenvolvimento, e não é apropriado para ser utilizado em produção. Isso porque ele não oferece segurança, estabilidade, ou um gerenciamento de recursos bom o suficiente para tal, além de não atender multiplas requisições ao mesmo tempo. Para resolver esse problema, será utilizado o Gunicorn, que é um servidor HTTP em python para aplicações WSGI que oferece um bom desempenho, resolve todos os problemas mencionados, e é de fácil configuração.
-
Docker: Docker é uma tecnologia que fornece uma camada adicional de abstração e automação de virtualização acima do sistema operacional. Será utilizado para facilitar o processo de desenvolvimento e evitar problemas que normalmente são causados por ambientes de desenvolvimento configurados de formas diferentes. Além de facilitar o deploy e garantir que os requerimentos necessários para o funcionamento da aplicação sejam corretamente providos.
-
PostgreSQL: Sistema de gerenciamento de banco de dados relacional que será utilizado para gerenciar os dados que forem guardados. Foi escolhido pela sua eficiência e pelo quão amplamente é suportado.
-
anaStruct: Biblioteca para linguagem Python dedicada a análise de estruturas bidimensionais. Será utilizada para gerar programacionalmente os diagramas estruturais, de esforços, momento fletor, e quaisquer outros produtos da aplicação dos conhecimentos de MecSol no experimento proposto.
-
OpenCV: Biblioteca para linguagem Python que será utilizada para o processamento de imagens, por seu extenso ferramental de manipulação de imagem.
-
Zbar : Biblioteca para linguagem Python que será utilizada para a leitura dos QRcodes envolvidos no processo.
Para a aplicação mobile:
-
Java: Linguagem de programação que será utilizada para o desenvolvimento do aplicativo destinado a dispositivos Android.
-
Android Studio: Ambiente de desenvolvimento integrado que será utilizado para desenvolver o aplicativo utilizando Java.
Política de branches e ambientes da pipeline
Aqui será descrito como funcionará as branches do projeto.
Branch master - Possuí o código correspondente ao ambiente de produção, que é o que vigora na aplicação em si. Os códigos são mandados para master apenas após serem devidamente testados e validados nos estágios anteriores, tanto singularmente quanto como conjunto. A atualização do ambiente de produção é feita por releases, a cada conjunto significativo de mudanças.
Branch develop - Develop é a branch com um nível inferior de estabilidade, para a qual são mandadas as features após elas terem sido implementadas, testadas e revisadas singularmente. Ela vai sendo atualizada conforme as features vão sendo implementadas e é nela que se tem a primeira oportunidade de testar o sistema como conjunto de suas funcionalidades. A execução do código nessa branch irá constituir também o ambiente de homologação, pelo qual a aplicação poderá ser testada pelos clientes e/ou usuários em busca de validar suas funções.
Branches feature - Essas são as branches nas quais as features são desenvolvidas individualmente, elas são criadas a partir da develop com o nome começando com feature/, exemplo: feature/reconhecimento-de-imagem, e, ao final, são agregadas novamente na branch de origem via pull-request.
Branches documentation - Essas são as branches nas quais são criados os documentos do projeto, elas são criadas a partir da develop com o nome começando com documentation/, exemplo: documentation/arquitetura, e, ao final, são agregadas novamente na branch de origem via pull-request.
Arquitetura do software
Introdução
A arquitetura escolhida para o projeto foi a orientada a microsserviços. Essa abordagem foi preferida porque facilita o desenvolvimento e a evolução do software cuja lógica seja mais modularizada, com partes diferentes do sistema fazendo tarefas específicas, autônomas, e que podem ser produzidas de forma separada por times diferentes como se fossem projetos singulares. Dessa forma, cada microsserviço tem seu papel e comunica-se com os outros, no caso deste projeto, através do protocolo HTTP.
Diagrama da arquitetura
-
Calculus API: microsserviço responsável por gerenciar os diagramas e cálculos resultantes do experimento, podendo retorna-los de duas origens diferentes dependendo da requisição, a partir do banco de dados ou a partir de um novo processo de análises e cálculos. Quando a segunda opção entre em vigor, o microsserviço gera os novos resultados a partir de informações recebidas pela requisição, que deverão descrever as variáveis envolvidas, tais como os pesos, apoios e a barra.
-
Image Processing API: microsserviço responsável por, a partir de uma imagem da bancada de experimentos que será provida pelo microcontrolador com o módulo câmera, identificar e retornar quando requisitado as informações relativas aos pesos, apoios e a barra, retiradas dos QRcodes e da diagramação através das técnicas de visão computacional.
-
Aplicativo mobile: Aplicativo pelo qual o usuário irá interagir digitalmente com o sistema, tanto para requisitar a geração de novos diagramas e cálculos quanto para ver os mesmos.