Menu

Metodologia de Desenvolvimento de Software da Defensoria Pública de Minas Gerais

Documento de Arquitetura

1 – INTRODUÇÃO

1.1 – VISÃO GERAL

O “Documento Arquitetural de Software da DPMG” possui como finalidade definir os conceitos a serem aplicados no processo de desenvolvimento de sistemas da instituição. Reunir todas as informações necessárias para concluir as atividades demandadas, através de uma visão macroscópica em termos de componentes que interagem entre si.

1.2 – ESCOPO

Estão contemplados neste documento informações de tecnologias de desenvolvimento (backend e frontend) e também tecnologias de implantação dos produtos finais (configuração e mudança) através de um fluxo já pré-definido de entregas condizentes à testes e produção, obrigatoriamente através de controle de versões (repositórios) para facilitar a rastreabilidade.

É também escopo deste documento, a orientação aos colaboradores sobre os padrões de desenvolvimento definidos pela DPMG além das suas respectivas definições de projetos. Serão descritas as camadas que compõe a arquitetura da instituição, requisitos de desempenho e segurança da informação.

A definição de bancos de dados utilizados nos projetos será explicada no decorrer deste documento, assim como os servidores de aplicação dos mesmos. Serão relatadas ferramentas de monitoramento de aplicações e servidores, com o intuito de ajudar na análise de erros e prever possíveis “problemas” futuros agindo de forma antecipada.

2 – REPRESENTAÇÃO DA ARQUITETURA

2.1 – BACKEND

2.1.1 – JAVA

Baseado na escalabilidade necessária para melhor funcionamento dos sistemas da DPMG, de forma integrada, foi definido a utilização do JAVA e toda sua stack para implementações de aplicações robustas.

Java é uma linguagem de programação e plataforma computacional lançada pela pela Sun Microsystems em 1995. Existem muitas aplicações cujo funcionamento estão condicionados à presença do Java instalado. Java é uma linguagem gratuita, está entre as linguagens mundialmente mais usadas e atualmente é mantida pela Oracle.

Principais características do Java:

  • Suporte à orientação a objetos;
  • Portabilidade;
  • Segurança;
  • Linguagem Simples;
  • Alta Performance;
  • Dinamismo;
  • Interpretada (o compilador pode executar os bytecodes do Java diretamente em qualquer máquina);
  • Distribuído;
  • Independente de plataforma;
  • Tipada (detecta os tipos de variáveis quando declaradas).

Os sistemas comunicam entre si através de “cliente-servidor”, onde as aplicações frontends (cliente) realizam requisições na API Gateway (servidor) para manipulações e consultas de dados. As API’s são responsáveis por receber as request de microsserviços, validar o acesso aos endpoints via permissão do usuário, manipular o dado e retornar a informação solicitada via response.

Os microsserviços possuem definições a serem seguidas, como por exemplo a implementação de rollbacks em todos os métodos que utilize transação. Também deverão ser serviços simples e objetivos. Todos os endpoints devem ser documentados através do Swagger e com o SCSDP corretamente configurado.

2.2 – FRONTEND

Sempre com o pensamento de utilização de tecnologias atuais do mercado, foi definido o framework Vue.js (versão 2 e 3) para as implementações referentes ao Frontend dos sistemas. Vue possui uma comunidade nova, porém já bem extensa e colaborativa, facilitando assim o desenvolvimento das soluções.

Vue JS é um framework progressivo utilizado para a construção de interfaces de usuário. O framework Vue foi projetado desde o início para ser adotável incrementalmente. A biblioteca principal é direcionada exclusivamente na camada visual (view layer), sendo fácil adotar e integrar com outras bibliotecas ou projetos existentes. Por outro lado, Vue também é capaz de dar poder a sofisticadas Single-Page Applications quando usado em conjunto com ferramentas modernas e bibliotecas de apoio.

O framework Vue também oferece suporte à linguagem typescript que é um sistema de tipagem estática e pode ajudar a prevenir muitos erros potenciais em tempo de execução, especialmente conforme as aplicações vão crescendo.

O Vue possui como principais características:

  • Utiliza abordagem de DOM virtual;
  • Provêm componentes visuais reativos e combináveis;
  • Mantem foco na biblioteca principal, com preocupações como roteamento e gerenciamento de estado global tratada por biblioteca companheira;
  • Desempenho de execução de renderização/atualização com árvores de componentes bem simples;
  • Vue, diferente de algumas novas tecnologias como React, constrói os componentes com base em tecnologias clássicas (como HTML e CSS);
  • Grande escalabilidade possuindo soluções de roteamento robustas;
  • A complexidade do Vue é bem menor, se comparada a outras tecnologias como AngularJs;
  • Vue é bem flexível e modular.

A linguagem padrão definida pela DPMG para o frontend é o TypeScript, por motivo de tornar mais fácil a identificação de erros no código deixando assim a manutenalibidade futura mais simples. Por ser uma linguagem que permite a tipagem das variáveis, é possível perceber falhas durante o processo de desenvolvimento. O TypeScript não interfere na transpilação do código a ser lido por todas versões de browser, como geralmente é feito com o Babel em aplicações JavaScript.

Para versões do Vue 3 foi adotado o método de Composition API. Utilizamos pre-processador Sass mais especificamente Scss para facilitar e melhorar sintaxe CSS, a ideia é manter a lógica do CSS (seletores, regras etc), mas de uma maneira mais organizada, intuitiva e com trechos de código facilmente reutilizáveis.

O Quasar foi o framework de componentes e sistema de grid escolhido para criação das telas dos sistemas vue versões 2, visto que oferece uma vasta gama de opções já disponíveis em seu catálogo, além de ser nativo do Vue, ele também é baseado no Material Design e seus ícones.

As telas devem ser padronizadas de acordo com sistemas anteriores, ou com aceitação do demandante, obedecendo as regras definidas na paleta de cor da Defensoria Pública de Minas Gerais. Os sistemas devem ser gerenciados pelo roteador nativo que se integra na instância do Vue. As rotas obrigatoriamente precisam estar corretamente configuradas com o SCSDP.

O desenvolvimento conta também com a opção de controles de estados utilizando o Vuex, deixando centralizado o armazenamento dos estados para todos as telas do sistema. Para Versões do Vue 3 foi escolhido o Pinia por indicação da documentação do próprio vuex (https://vuex.vuejs.org/)

2.3 – MOBILE

A linguagem para o desenvolvimento de aplicações mobile é Dart, pelo fato da DPMG ter escolhido o Flutter, que é um kit de ferramentas de UI da Google para criação de aplicativos nativamente compilados para Android e iOS a partir de uma única base de código, tornando assim a manutenção mais eficaz e produtiva.

“Flutter é um kit de ferramentas do Google para construir aplicações lindas, nativamente compiladas para mobile, web, desktop a partir de um único código-base.”(FLUTTER, 2021)

Em mais detalhes o Flutter é um framework desenvolvido pelo Google na linguagem Dart para a criação de aplicativos multiplataforma, web, mobile e desktop. Diferentemente de outras soluções, como Ionic e React Native, o Flutter não é executado em uma WebView (Ionic) e nem utiliza componentes nativos através de uma “ponte” (DEVMEDIA, 2021). Ao invés disso gera código verdadeiramente nativo, tanto para Android quanto para iOS.

O Dart é uma linguagem de cliente otimizada (Dart VM) utilizada para o desenvolvimento de aplicações rápidas em qualquer plataforma. Seu objetivo é oferecer uma linguagem de programação mais produtiva para o desenvolvimento multiplataforma, associado à uma plataforma de execução flexível para frameworks de aplicação. A tecnologia de compilação do Dart possibilita a execução do código em diferentes meios:

Plataforma Nativa

Para aplicações direcionadas para dispositivos mobile e desktop, o Dart inclue tanto a Dart VM com compilação just-in-time (JIT) e um compilador ahead-of-time (AOT) para geração do código de máquina.

Plataforma Web

Para aplicações direcionadas para a web, o Dart inclui tanto o compilador development time (dartdevc) e o compilador production time (dart2js). Ambos os compiladores traduzem o Dart em JavaScript.

Um dos principais diferenciais do Flutter é a rapidez de desenvolvimento, visto que possui um rico conjunto de widgets totalmente personalizáveis e de fácil utilização através da sua arquitetura em camadas, resultando em uma renderização rápida.

2.4 – PROJETOS WORDPRESS

Introdução 

A escolha do WordPress como plataforma baseia-se na sua facilidade de uso, rapidez de desenvolvimento e flexibilidade na gestão de conteúdos. 

WordPress 

O WordPress é uma ferramenta gratuita e open-source, desenvolvida em PHP, amplamente utilizada para criação de blogs e portais. Suas principais vantagens incluem: 

  • Desenvolvimento Ágil: Possibilita um desenvolvimento rápido e eficiente. 
  • Gestão Flexível: Permite a gestão de conteúdos a qualquer momento e de qualquer lugar. 
  • Comunidade Ativa: Conta com uma grande comunidade de desenvolvedores e suporte. 

PHP 

PHP (Hypertext Preprocessor) é uma linguagem de script open-source, altamente adequada para o desenvolvimento web e embutível em HTML. Suas principais características incluem: 

  • Velocidade e Robustez 
  • Orientação a Objetos 
  • Portabilidade 
  • Tipagem Dinâmica 
  • Sintaxe Similar ao C/C++ e Perl 
  • Código Aberto 

Definição de Objetivos 

Facilitar a Gestão de Conteúdos 

Utilizar o WordPress para facilitar a gestão de conteúdos, permitindo a publicação de notícias, artigos e outras pautas da instituição. 

Desenvolvimento Ágil 

Aproveitar as capacidades do WordPress para permitir um desenvolvimento rápido e flexível, possibilitando a gestão de conteúdos a qualquer momento e lugar. 

Estrutura 

Padrões de Desenvolvimento de Temas 

A estrutura do portal deve ser compatível com a criação de temas para WordPress, seguindo rigorosamente os padrões estabelecidos. Isso inclui: 

  • Estrutura de Diretórios: Seguir a organização padrão de diretórios (e.g., wp-content/themes/seu-tema). 
  • Arquivos Necessários: Incluir os arquivos essenciais como style.css, index.php, functions.php, e outros templates padrão.
  • Suporte a Funcionalidades: Implementar suporte para funcionalidades padrão de temas como menus de navegação, widgets, thumbnails de posts, e custom headers. 
  • Codificação Padrão: Utilizar as melhores práticas de codificação recomendadas pela documentação oficial do WordPress. 

Documentação 

Requisitos Funcionais e Não-Funcionais 

Documentar todos os requisitos funcionais e não-funcionais do projeto para garantir clareza no escopo e expectativas. 

Especificações Técnicas 

Elaborar especificações técnicas detalhadas, incluindo: 

  • Arquitetura do Sistema 
  • Fluxos de Dados 
  • Integração com outros Sistemas e Microserviços 

Manuais de Usuário 

Criar manuais de usuário para administradores e gestores de conteúdo, explicando o uso eficiente das funcionalidades do WordPress. 

Tecnologias Utilizadas no Frontend 

Utilização de JavaScript Vanilla para consumir APIs REST, garantindo simplicidade e eficiência na comunicação com microserviços. 

Plugins 

Segurança e Compatibilidade 

Plugins de terceiros não são utilizados para evitar problemas de segurança e incompatibilidades futuras. 

Análise e Possibilidades 

Caso algum plugin seja necessário, deve-se abrir um chamado interno detalhando a necessidade e os benefícios esperados para solicitar um plugin específico.  

Todos os chamados são analisados pela equipe de desenvolvimento para avaliar a viabilidade técnica e a segurança antes da aprovação. 

Desenvolvimento de Plugins 

O plugin será desenvolvido, seguindo padrões de codificação, segurança e integração com o sistema existente. 

Documentação e Testes 

Cada plugin deve ser bem documentado e passar por testes rigorosos para garantir funcionalidade e integração sem problemas com outros componentes do sistema. 

Arquitetura e Integração com Microserviços 

Cada serviço é responsável por uma funcionalidade específica, facilitando a escalabilidade e manutenção do sistema. 

APIs

Utilizar APIs REST em JSON para comunicação entre os microserviços, frontend e backend, garantindo interação eficiente e flexível.

Arquivos

Utilizar servidor de arquivos ( file server ) para fazer uploads e downloads através da API.

Autenticação e Autorização 

Implementar mecanismos robustos de autenticação e autorização para proteger a comunicação entre os serviços e garantir a segurança dos dados. 

Segurança

Utilizar a segurança do sistema *Gerais para liberar acesso a administração e autenticar envio dos arquivos ao file server.

Manutenção e Suporte 

Atualizações Regulares 

Manter todos os componentes do sistema atualizados, incluindo WordPress, plugins e dependências de microserviços. 

Sistema de Suporte Interno 

Estabelecer um sistema de suporte interno para resolver rapidamente quaisquer problemas, garantindo a continuidade e eficiência das operações. 

Monitoramento Contínuo 

Implementar ferramentas de monitoramento para acompanhar a performance do sistema e identificar possíveis problemas em tempo real, permitindo uma resposta rápida e eficaz. 

2.5 – TESTES

Os testes automatizados buscam garantir a qualidade e padrão das aplicações, seguindo as regras de negócio e os protótipos determinados. Para tanto, o Selenium Java foi escolhido para tal finalidade por possuir uma vasta quantidade de recursos que permitem automações robustas.

O Selenium Java é uma ferramenta utilizada no java que permite acessar e navegar por páginas web de forma automatizada, parametrizada e que permite verificar existência e funcionalidade de elementos nas páginas.

Um grande diferencial do Selenium Java é a possibilidade de integração com o Jenkins via maven, além de executar os testes em paralelo, reduzindo consideravelmente o tempo de execução.

3 – PADRÕES DE DESENVOLVIMENTO

3.1 – CAMADAS NO BACKEND

3.1.1 – JAVA

Baseado em organização dos códigos para garantir melhor leitura e manutenção de serviços, foi definido uma arquitetura de forma que seus módulos possuam baixo acoplamento entre si e de fácil compreensão, permitindo um desenvolvimento ágil. 

A arquitetura base é composta por 1 projeto “pai” que agrupa 4 projetos “filhos”. Estes 4 projetos são definidos como módulos, e eles são separados em: Dependencies, Migration, Persistence e Service. Em casos específicos em que o projeto tenha automações, poderá ser incluído os módulos Job e Shared. 

O Módulo de Dependencies tem como objetivo gerenciar as bibliotecas que os demais módulos poderão utilizar.

O Módulo Migration é responsável pela gestão dos scripts de banco de dados que deverão ser executados para o correto funcionamento do módulo Persistence. Os scripts são organizados em pasta de estrutura e pasta de dados. Os dados devem ser separados por ambiente (Desenvolvimento, Homologação e Produção).

O Módulo Persistence é responsável pelas classes Java de mapeamento objeto relacional das tabelas e seus relacionamentos. Por fim, e não menos importante, existe o módulo Service, que contém todo o fluxo de desenvolvimento das regras de negócio da aplicação. É neste módulo que devem ser criados as Controllers (para serviços REST), os DTOs (para objetos JSON), os EJB’s (para codificações das regras de negócio), os DAOs (para persistir ou buscar no banco de dados).

O Módulo Job possibilita o agendamento de tarefas, as quais serão executadas em horários pré-definidos.

O Módulo Shared tem como objetivo evitar que o Módulo Job tenha que fazer uma integração para acessar a serviços remotos dentro do projeto.

3.2 – PACOTES NO FRONTEND

Os projetos Frontend’s da instituição DPMG deve seguir o Style Guide do Vue.Js por default. Sendo isso, eles devem ter separações dos seus arquivos por objetivo em diretórios: models, utils, controllers, router, service,  store e views. Vale ressaltar que é possível, e recomendado, a criação de subdiretórios para organização da feature.

Todos os arquivos referentes à algum POJO ou Model devem ficar na pasta de models, assim como todos os arquivos para consumo de API via serviços devem ficar na pasta controllers/services. Tudo que for útil para várias telas devem estar na pasta de utils. O arquivo de definições do Vuetify/Quasar fica na pasta de controllers/plugins, assim como a configuração de outros plugins, caso tenha. As rotas devem ser definidas e configuradas no arquivo base (index.ts) do diretório router, separados por suas hooks.

O Vuex/Pinia possui uma pasta separada, com o nome de store, em que é organizado em pastas distintas por módulos. As telas informadas nas rotas devem estar na pasta de views e caso alguma parte da tela seja utilizada em vários lugares, deve ser criado um componente genérico com funcionamento independente. O arquivo deste componente deve estar no diretório: views/components.

Obedecendo os princípios recomendados pelo Style Guide do Vue.js, as definições de nomes de variáveis, classes e arquivos de extensão .vue devem seguir o padrão de CamelCase/SnackCase. Importante ressaltar que nomes de classes e de arquivos devem ser iniciados com letra maiúscula.

Para o Vue.js v3.* e utilizamos para criação de formulários o vee-validate em conjunto com Pinia sendo suas regras definidas utilizando o Yup.

3.3 – PACOTES NO MOBILE

Para trabalhar com aplicativos, devemos ter em mente alguns princípios de Clean Code para melhorar a qualidade do seu código, como por exemplo: obedecer ao padrão de desenvolvimento (Design Pattern) e seguir a estrutura do projeto (arquitetura). Com isso a instituição definiu separações dos arquivos em pacotes apesar de que a flexibilidade é a marca registrada do Flutter.

A organização do projeto se dá a partir da pasta lib, que geralmente terá apenas o arquivo main (executa o projeto com as propriedades de um determinado ambiente) e uma pasta de src (source), nela teremos os demais arquivos Dart.

No desenvolvimento de aplicativos adotamos a estrutura de pastas usando o padrão BLoC. Os BLoC’s são criados para separar regras de negócio da interface de usuário, algo recomendado em diversas tecnologias, baseado em fluxos que podem ser observados de qualquer tela e parte do seu código

Ainda sobre a organização de pastas do projeto, deve ser separado por features (funcionalidades) em que dentro de cada uma fique todos os seus respectivos arquivos codificados, dentro de diretórios: services, models e screens (onde ficam as screen, os blocs, as actions, os states e os listeners). As telas são compostas por screens que acionam states (o layout em si).

O state da tela faz utilização do BLoC da feature, que consequentemente trabalha em conjunto com as actions e seus respectivos states e listeners para realizar uma ação final.

4 – DEFINIÇÕES DE PROJETOS

Neste tópico abordaremos padrões definidos pela instituição DPMG que devem ser seguidos no decorrer das implementações das aplicações demandadas, sejam elas no backend, frontend ou mobile. É importante ressaltar a necessidade disso para tornar mais eficiente a sustentação dos códigos produzidos, além de garantir maior segurança para os servidores da Defensoria Pública de Minas Gerais.

4.1 – TECNOLOGIAS UTILIZADAS

4.1.1 – BACKEND
4.1.1.1 – JAVA
  • Os projetos devem ser no mínimo Java 17 ou superior;
  • É obrigatório que a criação dos projetos sejam através do archtype disponibilizado pela DPMG;
  • Todos os projetos devem possuir as dependências: dpmg-commons e scsdp-commons;
  • O arquivo de configuração do maven (settings.xml) deve ter o apontamento para o Nexus interno da DPMG para realização dos downloads.
4.1.1.2 – COMANDOS BÁSICOS

Para criar o projeto: Execute o comando na pasta onde deseja criar o projeto.

mvn archetype:generate -DarchetypeGroupId=br.def.mg.defensoria – DarchetypeArtifactId=archetype-backend -DarchetypeVersion=2.1.9 -Dprojeto=nome-projeto

Ps: Caso o settings do Maven não esteja na pasta padrão deverá adicionar o seguinte atributo-s /diretorio/arquivoSettings.xml

Ao gerar esse comando será gerado um projeto maven multi-modules com a camada de persistência e serviço, um módulo de dependências também será gerado com as dependências mais utilizadas nos projetos.

4.1.1.3 – CONFIGURAÇÃO DO PROJETO

O projeto gerado será montado com a seguinte Stack de tecnologias:

  • Java 17 ou superior
  • JPA
  • EclipseLink
  • Apache Commons 3.1
  • Jakarta JAX-RS
  • Jakarta EJB
  • Swagger
  • JUnit 5
  • Lombook
  • Integração com SCSDP
  • JACOCO
  • Surefire reports
4.1.1.4 – DEPENDÊNCIAS ENTRE PROJETOS
  • dpmg-commons
  • scsdp-commons

As configurações de charset e encode já serão realizadas. O pacote de todos os modulos já definidos por padrão com o seguinte valor: br.def.mg.defensoria.nomeProjeto O groupId é definido pelo padrão da defensoria:br.def.mg.defensoria

Observação: O pacote default gerado deve ser alterado caso o nome do projeto seja composto, alterando para nome.projeto não é possível automatizar essa parte trocando “-” por “.”

4.1.2 – DPMG API UTIL

Classe utilitária utilizada para a realização de requisições HTTP.

4.1.2.1- DEPENDÊNCIAS
img

Para a realização de requisições do tipo GET retornando um objeto Java:

img

Onde:

img
4.1.2.2 – EXEMPLOS
4.1.2.2.1 – REQUISIÇÕES TIPO GET
img

Para adicionar query parâmetro:

img

Para ignorar a resposta:

img
4.1.2.2.2 – REQUISIÇÕES TIPO POST
img

Onde:

img

Para retornar uma resposta do tipo text/plain :

img
4.1.2.2.3 – REQUISIÇÕES TIPO PUT
img

Onde:

img
4.1.2.2.4 – REQUISIÇÕES TIPO DELETE
img

Onde:

img
4.1.2.2.5 – PARA ADICIONAR TOKEN NA REQUISIÇÃO
img

Onde:

img
4.1.3 – FRONTEND
  • Os projetos novos de devem ser com Vue.js (versão 3.x);
  • Obrigatoriamente o framework de componentes deve ser o Vuetify para versões 2.x e Quasar para versões 3.x, com exceções para situações que não possua suporte e seja aprovado pelo líder técnico da DPMG;
  • Para gerenciamento de estados, deve ser optar pela utilização da lib nativa do Vue.js: Vuex para versões 2.x e para versões 3.x utilizamos o Pinia;
  • Toda as rotas devem ser controladas através da lib nativa do Vue.js: RouterVue;
  • Todas as rotas obrigatoriamente precisam estar configuradas com o plugin de segurança da DPMG;
  • O TypeScript é a linguagem obrigatória para os projetos frontend;
  • Parte de tela que serão utilizadas em mais de um lugar, deve se tornar um componente independente, para tornar a manutenibilidade mais eficaz;
  • É importante que os layouts, botões, fontes e ícones estejam de acordo com a paleta de Cor da DPMG;
4.1.4 – MOBILE
  • Os projetos mobiles devem ser com Flutter (v. atual 3.0.5);
  • A linguagem para desenvolvimento Flutter é o Dart (v. atual 2.17.6);
  • O ambiente deve possuir o JDK 8, para a execução do SDK;
  • A versão do Android SDK deve ser 32.1.0-rc1;
  • As bibliotecas utilizadas no padrão/estrutura BLoC são 8.0.1;
  • O banco local atualmente é o SQFLITE na versão 1.3.2+1.

É importante que os layouts, botões, fontes e ícones estejam de acordo com a Paleta de Cor da DPMG.

img

Partes de telas que serão utilizadas em mais de um lugar, deverão ser componentizadas, para tornar a manutenibilidade mais eficaz.

4.2 – PLUGIN DE SEGURANÇA

4.2.1 – BACKEND
4.2.1.2 – JAVA

Conforme mencionado no item 4.1.1 todos os microsserviços dos projetos obrigatoriamente devem estar com seus acessos configurados através de perfis do SCSDP. Para isso, o projeto tem que possuir a dependência do SCSDP e assim conseguir realizar interceptações das requisições.

4.2.2 – FRONTEND

Assim como no backend, é necessário também realizar a configuração no frontend para realizar interceptações das requisições nas rotas, impedindo assim o acesso indevido às funcionalidades dos projetos.

5 – FLUXO DE ENTREGAS (AMBIENTES DE DEV, TST, HML, PROD)

5.1 – PADRÃO DE CRIAÇÃO DE BRANCHs

  1. A versão da aplicação deverá conter 3 posições, exemplo: versão frontend “1.0.0”; 
  1.  A primeira posição, diz respeito a evolução arquitetural e deve ser incrementada sempre que evoluirmos arquiteturalmente a aplicação, exemplo: evoluir o painel de senha de VUE2 para VUE3, versão frontend “2.0.0”; 
  1.  A segunda posição, diz respeito as melhorias. Deve ser incrementada sempre que uma melhoria for realizada, exemplo: chamar a senha do assistido através de áudio no painel de senha, versão frontend “2.1.0”; 
  1.  A terceira posição, diz respeito as correções de defeitos. Deve ser incrementada sempre que um defeito for corrigido, exemplo: o painel de senha está anunciando senhas que não estão cadastradas no painel de senha, versão frontend “2.1.1”; 
  1. Criar as branchs seguindo o padrão: 
    5.1. Branch de evolução arquitetural deve seguir o padrão de nome “ARQ/ #NúmeroIssue – Descrição da evolução arquitetural”;  
    5.2. Branch de melhoria deve seguir o padrão de nome “FEA/ #NúmeroIssue – Descrição da melhoria”;  
    5.3. Branch de correção de defeito deve seguir o padrão de nome “FIX/ #NúmeroIssue – Descrição da correção”.

5.2 – FLUXO DE INÍCIO DE DESENVOLVIMENTO

Para iniciar uma evolução arquitetural, melhoria e/ou correção, o desenvolvedor deve criar uma branch a partir da branch “dev” conforme padrão citado no item 5.1. Após a conclusão, o código deve ser disponibilizado na branch “dev”. Com isso, automaticamente será disparado uma execução de deploy no ambiente de desenvolvimento. 

5.3 – FLUXO DE LIBERAÇÃO PARA O AMBIENTE DE TESTE

Após conclusão do deploy no ambiente de desenvolvimento deve ser realizada uma validação básica do produto entregue. Não havendo erros/falhas o desenvolvedor em questão pode promover as alterações para o ambiente de teste “tst” através de MR (Merge Request). Além disso o código deve atender as regras do SonarQube. 

Quando é encontrada alguma falha na entrega realizada, o testador registra uma issue e a atribui ao desenvolvedor responsável pela entrega. Para realizar a correção, o desenvolvedor deve criar uma branch a partir da branch “dev”, conforme o padrão citado no item 5.1. Após a correção, o fluxo retorna ao passo 5.3. 

5.4 – FLUXO DE LIBERAÇÃO PARA O AMBIENTE DE HOMOLOGAÇÃO 

Após a validação em ambiente de teste, o líder técnico da DDSP deve promover as alterações para o ambiente de homologação, com o objetivo de realizar a homologação do produto com a área demandante. 

5.5 – FLUXO DE ENTREGA PARA PRODUÇÃO

Após homologação com a área demandante (cliente), as alterações (evolução arquitetura, melhorias ou correções) seguem para o processo de delivery em ambiente de produção através do líder técnico da DDSP. 

5.6 – FLUXO DE HOTFIX

Quando é identificado a necessidade de uma correção imediata diretamente em ambiente de produção, deve-se obrigatoriamente criar uma branch de hotfix a partir da branch “prod” onde será executada a correção. Após a conclusão, deve-se disponibilizar na branch “prod” a correção através de MR. A branch deve seguir o padrão de criação definido no item 5.1.

6 – CONFIGURAÇÕES

Neste tópico iremos abordar ferramentas e configurações dos projetos, ensinando o colaborador a instalar e utilizar conforme necessidade da demanda. Os prints de exemplos contidos aqui podem vir a ser diferente da versão da ferramenta utilizada pelo profissional no futuro.

6.1 – FERRAMENTAS DE DESENVOLVIMENTO

6.1.1 – BACKEND, FRONTEND E MOBILE
6.1.1.1 – INTELLIJ IDEA COMMUNITY (2021.1, Build: 211.6693.111)

IntelliJ IDEA é um ambiente de desenvolvimento integrado (IDE) para linguagens JVM, desenvolvida para maximizar a produtividade do desenvolvimento. Ele faz a rotina e as tarefas repetitivas para você, fornecendo uma inteligente complementação de código, análise estática de código, refatoramentos, permitindo ao desenvolvedor manter o foco apenas no lado importante do desenvolvimento de software. IntelliJ IDEA foi desenvolvido como um IDE para linguagens JVM, mas diversos plugins pode extende-la para proporcionar uma experiência poliglota.

Linguagens JVM suportadas: Java, Kotlin, Scala, Groovy

Outras linguagens: Python, Ruby, PHP, SQL, Go, JavaScript, TypeScript, CoffeeScript, Thymeleaf, JSON, Markdown, HTML e XHTML, XML e XSL, XPath e XSLT, Velocity e FreeMarker, StyleSheet (CSS, Less, Sass), Dart, Erlang.

O Intellij é a IDE preferencial para codificação dos projetos (backend, frontend e mobile). Para utilização, o desenvolvedor deve acessar o site oficial do fabricante: (Jetbrains) https://www.jetbrains.com/idea/download/#section=windows. E realizar o download conforme o seu sistema operacional. (No exemplo abaixo foi utilizado o Windows)

img

Após concluir o download da ferramenta, localize o arquivo e o execute. Nos passos da instalação deve ser definido o diretório da instalação e na sequência clique em “Next”:

img

O processo de instalação desta ferramenta não possui nenhuma diferença das demais instalações convencionais. Após a conclusão da instalação clique para iniciar o programa e em seguida clique em “Finish”:

img

No fluxo de inicialização selecione o termo de aceite, e clique em “Continue”:

img

Com a ferramenta já em execução, deve-se realizar o login com a finalidade de ativar a licença fornecida pela instituição DPMG:

img

Com a ferramenta ativada, inicia-se a configuração global. Para isso, clique em “Customize” e em seguida “All Settings

img

É necessário que a ferramenta esteja com o Copyright devidamente configurado, para isso, no campo de busca, localize a aba de “Copyright Profiles” e clique no ícone de Importar:

img

Localize no computador o arquivo de profile do Copyright fornecido pela instituição DPMG:

img

Se a tela estiver igual a evidência abaixo, significa que tudo ocorreu corretamente com a importação do profile de Copyright, clique em “Apply”:

img

Para padronizar os atalhos de desenvolvimento mundialmente utilizados, deve-se a encontrar a aba de “Keymap” e suas opções:

img

Selecione a opção Eclipse:

img

Se a tela estiver igual a evidência abaixo, significa que os principais atalhos de desenvolvimento durante utilização da ferramenta seguirá o padrão da IDE Eclipse, clique em “Apply”:

img

Para realizar download das dependências dos projetos que serão utilizados na ferramenta, é necessário que seja realizado o apontamento para o repositório Nexus da DPMG. Para isso, localize a aba “Maven”, localize a opção “User settings file”, clique em “Override” e em seguida no ícone, ao lado, de uma pasta:

img

Localize na sua máquina o arquivo “settings.xml” fornecido pela instituição DPMG, que conterá os apontamentos necessários:

img

Com a opção de “Override” selecionada, e com o arquivo devidamente informado, clique em “Apply”:

img

Por fim, devemos realizar instalações de plugins úteis pra auxiliar o desenvolvimento, para isso localize a aba “Plugins”:

img

Faça a instalação dos seguintes plugins: Flutter, Dart e Vue.js:

img
img
img

Após a instalação do último plugin, clique em “OK”:

img

Com isso, a ferramenta Intellij estará devidamente configurada, e pode-se dar início à abertura do seu projeto Maven, clicando em “Projects” e em seguida, clicando em “Open”:

img
6.1.2 – OUTRAS IDEs
6.1.2.1 – VISUAL STUDIO CODE – VSCODE (v1.5.5+)

Visual Studio Code é um editor de código-fonte, leve porém poderoso, disponível para Windows, Linux e MacOS. Ele vem com suporte integrado para JavaScript, TypeScript e Node.js e tem um rico ecossistema de extensões para outras linguagens (como C ++, C #, Java, Python, PHP, Go) e tempos de execução (como .NET e Unity).

No Visual Studio Code, temos suporte para quase todas as principais linguagens de programação, como por exemplo, JavaScript, TypeScript, CSS e HTML, mas mais extensões de linguagem rica podem ser encontradas no VS Code Marketplace.

6.1.2.2 – ECLIPSE IDE FOR JAVA EE DEVELOPERS (Eclipse IDE 2021-03 R Packages v14.19+)

A plataforma Eclipse é fornecida com um ambiente de desenvolvimento integrado (IDE) Java completo. O conjunto de ferramentas de desenvolvimento Java (JDT) permite aos usuários escrever, compilar, testar, depurar e editar programas escritos na linguagem de programação Java, consequentemente contribuindo com a visualização, edição e ações específicas do Java para o ambiente de trabalho.

**Principais Ferramentas: **

  • Plataforma de ferramentas de dados;
  • Provedor de equipe Eclipse Git;
  • Eclipse Java Development Tools;
  • Eclipse Java EE Developer Tools;
  • Ferramentas de desenvolvimento de JavaScript;
  • Integração Maven para Eclipse;
  • Lista de Tarefas Mylyn;
  • Ambiente de desenvolvimento de plug-in Eclipse;
  • Explorador de sistema remoto;
  • Editores e ferramentas do Eclipse XML.
6.1.2.3 – XCODE (v12.4+)

O Xcode consiste em um conjunto de ferramentas que os desenvolvedores usam para construir aplicativos para as plataformas Apple. Usa-se o Xcode para gerenciar todo o fluxo de trabalho de desenvolvimento – desde a criação do seu aplicativo até o teste, a otimização e o envio para a App Store. Ele pode iniciar suas ferramentas de desenvolvimento ou você pode iniciá-las independentemente do menu Xcode.

Principais ferramentas:

  • Simulador para fazer prototipagem rápida e testar seu aplicativo em um ambiente simulado quando um dispositivo real não estiver disponível. O simulador fornece ambientes para dispositivos iPhone, iPad, Apple Watch e Apple TV com diferentes configurações, arquivos e versões de sistema operacional;
  • Instrumentos para criar um perfil e analisar seu aplicativo, melhorar o desempenho e encontrar problemas de memória. Instrumentos coleta dados e apresenta os resultados usando diferentes ferramentas chamadas instrumentos;
  • Create ML para criar e treinar modelos de aprendizado de máquina personalizados para seu aplicativo;
  • Reality Composer para construir composições 3D e experiências de realidade aumentada (AR).

6.2 – CLIENTE DE BANCO DE DADOS (DB)

6.2.1 – DBEAVER (v21.0.3+)

Dbeaver é uma ferramenta de Banco de Dados gratuita, opensource, para desenvolvedores e administradores de banco de dados. A ferramenta é escrita em Java e baseada na plataforma Eclipse.

Principais características:

  • Usabilidade é o objetivo principal deste projeto. A IU do programa é cuidadosamente projetada e implementada;
  • É gratuito e de código aberto;
  • É multiplataforma;
  • É baseado em framework de código aberto e permite a escrita de várias extensões (plugins);
  • Suporta qualquer banco de dados com driver JDBC;
  • Ele pode lidar com qualquer fonte de dados externa que pode ou não ter um driver JDBC;
  • Há um conjunto de plug-ins para diferentes bancos de dados e diferentes utilitários de gerenciamento de banco de dados (por exemplo, ERD, transferência de dados, comparação, exportação / importação de dados, geração de dados simulados, etc);
  • Possui um grande número de recursos.

6.3 – BANCO DE DADOS

6.3.1 – SQL
6.3.1.1 – MYSQL (v5.5.34)

O MySQL foi criado na Suécia por suecos e um finlandês: David Axmark, Allan Larsson e Michael “Monty” Widenius, que têm trabalhado juntos desde a década de 1980. Hoje seu desenvolvimento e manutenção empregam aproximadamente 400 profissionais no mundo inteiro, e mais de mil contribuem testando o software, integrando-o a outros produtos, e escrevendo a respeito dele.

O sucesso do MySQL deve-se em grande medida à fácil integração com o PHP incluído, quase que obrigatoriamente, nos pacotes de hospedagem de sites da Internet oferecidos atualmente. Sem entrar muito nos méritos técnicos, os principais processos e características que acontecem em um ambiente MySQL são os mesmos.

  • O MySQL cria um banco de dados para armazenamento e manipulação de dados, definindo a relação de cada tabela;
  • Clientes podem fazer solicitações digitando comandos SQL específicos no MySQL;
  • A aplicação do servidor responde com a informação solicitada fazendo aparecer no cliente;
  • Flexibilidade e facilidade de uso;
  • Alto Desempenho e Segurança.
6.3.1.2 – POSTGRESSQL (12.2/ 13.1)

PostgreSQL é um sistema de gerenciador de banco de dados objeto relacional (SGBD), desenvolvido como um projeto open-source. O PostgreSQL foi o pioneiro em muitos conceitos que só se tornaram disponíveis em alguns sistemas de banco de dados comerciais muito mais tarde.

O PostgreSQL foi projetado para rodar em plataformas semelhantes ao Unix. No entanto, o PostgreSQL também foi projetado para ser portátil, para que pudesse ser executado em várias plataformas, como Mac OS X, Solaris e Windows. É fácil de manter devido a sua estabilidade. Portanto, se você desenvolver aplicações baseados no PostgreSQL, o custo de desenvolvimento será baixo em comparação com outros sistemas de gerenciamento de banco de dados.

O PostgreSQL é um descendente de código aberto do código original desenvolvido em Berkeley e suporta uma grande parte do padrão SQL e oferece muitas características modernas, como é o caso de chaves estrangeiras, functions, triggers, Views, integridades transacionais, data types, funções agregadas, operadores, dentre muitos outros. Ele consiste em um processo de servidor que lê e grava os arquivos de banco de dados reais, e um conjunto de programas cliente que se comunicam com o servidor. O mais comumente utilizado é o comando psql, que permite ao usuário executar consultas SQL e visualizar os seus resultados.

**O PostgreSQL oferece muitos recursos: **

  • Consultas complexas;
  • Chaves estrangeiras (Foreign keys);
  • Triggers;
  • Views atualizáveis;
  • Integridade transacional;
  • Controle de simultaneidade multiversão.

De várias maneiras, o usuário ainda pode customizar adicionando novos:

  • Tipos de dados;
  • Funções;
  • Operadores;
  • Funções agregadas;
  • Métodos de índice.
6.3.2 – NOSQL

Banco de dados NoSQL (“not only SQL”) são não tabulares e armazenam dados de forma diferente das tabelas relacionais, bancos de dados NoSQL vem com uma variedade de tipos baseada no seu modelo de dados. Os principais tipos são documentos, chave-valor, coluna ampla e grafo. Eles provêm esquemas flexíveis e escalam facilmente com grandes porções de dados e altas cargas de usuários.

6.3.2.1 – MONGODB (v.4.4.2)

MongoDB é o banco de dados orientado a documentos, projetado para o desenvolvimento de aplicações modernas, está disponível como software para download e também na forma de um banco de dados como serviço (DBaaS) totalmente gerenciado. A grande característica de Banco de Dados Orientados a Documentos é possuir todas as informações relevantes em um único documento, ser livre de esquemas, possuir identificadores únicos universais (UUID), possibilitar a consulta de documentos pelo uso de métodos avançados de agrupamento e filtragem (MapReduce) e também permitir redundância e inconsistência.

Um registro no MongoDB é um documento, que é uma estrutura de dados composta de pares campo e valor. Documentos MongoDB são similares a objetos JSON. Os valores dos campos podem incluir outros documentos, arrays e arrays de documentos.

img

Características:

  • Alto desempenho;
  • Não possui esquemas;
  • Multiplataforma.
6.3.2.2 – APACHE CASSANDRA (3.4.4)

Apache Cassandra é um banco de dados distribuído NoSQL de código aberto confiável por milhares de empresas para escalabilidade e alta disponibilidade sem comprometer o desempenho. A escalabilidade linear e a tolerância a falhas comprovada em hardware comum ou infraestrutura em nuvem tornam-no a plataforma perfeita para dados de missão crítica.

O Cassandra foi inicialmente desenvolvido pelo Facebook para ser utilizado na busca da caixa de entrada de mensagens. Seu modelo de distribuição do sistema é baseado no Dynamo (desenvolvido pela Amazon) enquanto a forma de organização dos dados é baseado no BigTable (desenvolvido pelo Google).

O Dynamo surgiu a partir da necessidade de um banco de dados simples, altamente escalável e confiável para lidar com grandes demandas de leitura/escrita.

O Big Table também surgiu como uma solução altamente escalável e distribuída, o desafio era armazenar o volume imenso de dados de indexação de todas as páginas web mapeadas pelo Google que é utilizado para alimentar a busca.

Características:

  • Compatível com todas as distribuições de Linux e com Mac OS;
  • Alto desempenho em leitura e escrita;
  • Estrutura de dados muito mais flexível em comparação ao MySql;
  • Grande elasticidade: pode-se alocar um número maior de servidores e quando não for mais necessário, basta removê-los da estrutura e economizar na infraestrutura;
  • Os valores são armazenados e indexados por meio de uma chave.
6.3.2.3 – REDIS (6.2.3)

O Redis é um armazenamento de estrutura de dados de chave-valor de código aberto e na memória. O Redis oferece um conjunto de estruturas versáteis de dados na memória que permite a fácil criação de várias aplicações personalizadas.

É o armazenamento de chave-valor mais conhecido atualmente. Ele tem a licença BSD, é escrito em código C otimizado e é compatível com várias linguagens de desenvolvimento. Redis é um acrônimo de REmote DIctionary Server (servidor de dicionário remoto).

Por conta da sua velocidade e facilidade de uso, o Redis é uma escolha em alta demanda para aplicações web e móveis, como também de jogos, tecnologia de anúncios e IoT, que exigem o melhor desempenho do mercado. A AWS oferece compatibilidade com o Redis por meio de um serviço de banco de dados gerenciado e otimizado chamado Amazon ElastiCache for Redis, além de permitir que os clientes executem o Redis autogerenciado no AWS EC2.

Os benefícios proporcionados pelo Redis são:

  • Desempenho muito rápido. Todos os dados do Redis residem na memória principal do seu servidor, em contraste com a maioria dos sistemas de gerenciamento de banco de dados que armazenam dados em disco ou SSDs;
  • Estrutura de dados na memória. O Redis permite que os usuários armazenem chaves que fazem o mapeamento para vários tipos de dados;
  • Versatilidade e facilidade de uso. O Redis é disponibilizado com várias ferramentas que tornam o desenvolvimento e as operações mais rápidas e fáceis, inclusive o PUB/SUB para publicar mensagens nos canais que são entregues para os assinantes;
  • Replicação e persistência. O Redis emprega uma arquitetura no estilo mestre/subordinado e é compatível com a replicação assíncrona em que os dados podem ser replicados para vários servidores subordinados. Isso pode disponibilizar desempenho de leitura melhorado;
  • Compatibilidade com sua linguagem de desenvolvimento preferencial. Mais de cem clientes de código aberto estão disponíveis para os desenvolvedores do Redis.

Casos de uso do Redis:

  • Armazenamento em cache. O Redis inserido na “frente” de outro banco de dados cria um cache na memória com excelente desempenho para diminuir a latência de acesso, aumentar o throughput e facilitar a descarga de um banco de dados relacional ou NoSQL;
  • O Redis é altamente indicado para tarefas de gerenciamento de sessões;
  • Classificações em tempo real. Ao usar a estrutura de dados Sorted Set do Redis, os elementos são mantidos em uma lista, classificada de acordo com suas pontuações em tempo real;
  • Limite de taxa. O Redis pode calcular e, quando necessário, acelerar a taxa dos eventos, mas principalmente limitar o número de acessos/requisições;
  • Filas. A estrutura de dados Redis List facilita implementar uma fila leve e persistente;
  • Chat e sistemas de mensagens. O Redis seja compatível com salas de chat de alto desempenho, streams de comentários em tempo real e intercomunicações do servidor.

6.4 – FERRAMENTAS DE MIGRAÇÃO DE DADOS

6.4.1 – FLYWAY (v7.8.2)

Flyway é uma ferramenta de migração de banco de dados de código aberto. Favorece fortemente a simplicidade e a convenção sobre a configuração.

É baseado em apenas 7 comandos básicos:

  1. Migrar;
  2. Limpar;
  3. Informações;
  4. Validar;
  5. Desfazer;
  6. Linha de Base;
  7. Reparar.

Migrar

Migrar o esquema para a versão mais recente. O Flyway criará a tabela de histórico de esquema automaticamente se ela não existir.

img

Ela é a peça central do fluxo de trabalho do Flyway. Ele fará a varredura no sistema de arquivos ou no caminho de classe em busca de migrações disponíveis. Ele os comparará com as migrações que foram aplicadas ao banco de dados. Se alguma diferença for encontrada, ele migrará o banco de dados para fechar a lacuna.

A migração deve ser executado preferencialmente na inicialização do aplicativo para evitar incompatibilidades entre o banco de dados e as expectativas do código.

Limpar

Descarta todos os objetos nos esquemas configurados.

img

O Clean é uma grande ajuda no desenvolvimento e teste. Ele efetivamente proporcionará a você um novo começo, limpando completamente seus esquemas configurados. Todos os objetos (tabelas, visualizações, procedimentos, …) serão eliminados.

Não use contra seu banco de dados de produção!

Informações

Imprime os detalhes e informações de status sobre todas as migrações.

As informações permitem que você saiba onde você está. Você verá rapidamente quais migrações já foram aplicadas, quais outras ainda estão pendentes, quando foram executadas e se foram bem-sucedidas ou não.

Validar

Valida as migrações aplicadas em relação às disponíveis.

img

Validar ajuda a verificar se as migrações aplicadas ao banco de dados correspondem às disponíveis localmente. Isso é muito útil para detectar alterações acidentais que podem impedir que você recrie o esquema de forma confiável.

Validar funciona armazenando uma soma de verificação (CRC32 para migrações SQL) quando uma migração é executada. O mecanismo de validação verifica se a migração localmente ainda possui a mesma soma de verificação que a migração já executada no banco de dados.

Desfazer

Desfaz a migração com versão aplicada mais recentemente.

img

Se o alvo for especificado, o Flyway tentará desfazer as migrações com a versão na ordem em que foram aplicadas até atingir uma com uma versão abaixo do destino. Se o grupo estiver ativo, o Flyway tentará desfazer todas essas migrações em uma única transação. Se não houver migração com versão para desfazer, chamar desfazer não terá efeito.

Linha de base

Limita um banco de dados existente, excluindo todas as migrações até a incluisão da linha de base.

img

A linha de base é para apresentar o Flyway aos bancos de dados existentes, definindo a linha de base deles em uma versão específica. Isso fará com que o Migrate ignore todas as migrações até a inclusão da versão de linha de base. As migrações mais recentes serão aplicadas normalmente.

Reparar

Repara a tabela de histórico do esquema.

img

Reparar é uma ferramenta para corrigir problemas com a tabela de histórico do esquema.

Os principais usos são:

  • Remover entradas de migração com falha (apenas para bancos de dados que não suportam transações DDL);
  • Realinha as verificações, descrições e tipos das migrações aplicadas com aquelas das migrações disponíveis;
  • Marca todas as migrações ausentes como excluídas.

6.5 – FERRAMENTA DE ALTA DISPONIBILIDADE POSTGRES

6.5.1 – PATRONI
6.5.1.1 SERVIÇOS NECESSÁRIOS
  • HAPROXY : Utilizado como balanceador;
  • ETCD : Banco de dados chave-valor distribuído;
  • PATRONI : Template em python para configuração de banco de dados (PostgreSQL) com alta disponibilidade. Esse serviço abstrai Configurações e estratégias de replicação nativas do PostgreSQL;
  • POSTGRESQL : B6.5.1.2 DIAGRAMA ARQUITETURA Banco de dados relacional.
6.5.1.2 DIAGRAMA ARQUITETURA
6.5.1.3 PASSOS PARA CONFIGURAÇÃO

Pode-se instalar todos os serviços necessários para manter o banco de dados com alta disponibilidade em uma única VM, mas isso não é uma boa prática já que a ideia é reduzir a dependência de uma só máquina caso essa tenha algum problema e precise ser reiniciada ou desligada.

O ideal é instalar cada serviço necessário em um VM específica (seguindo a arquitetura de servidores da DPMG).

Com base na arquitetura da DPMG, será seguido os seguintes passos:

  1. Instalação HAPROXY E ETCD;
  2. Instalação nós PATRONI/POSTGRESQL.

Atualmente são ofertadas 4 VMs para disponibilização dessa infraestrutura com banco de dados. Partindo dessa premissa vamos para um caso real, segue VMs e seus respectivos serviços que serão necessários instalar e configurar:

  • 10.100.246.126 -> HAPROXY E ETCD;
  • 10.100.246.127 -> 1º NÓ PATRONI;
  • 10.100.246.128 -> 2º NÓ PATRONI;
  • 10.100.246.129 -> 3º NÓ PATRONI.

Antes de realizar a configuração dos serviços, realize as seguintes configurações:

Faça login na VM e execute o comando:

sudo su

Para alternar para o usuário sudo execute o seguinte para editar o arquivo:

vim /etc/environment**

Edite o arquivo acima e o deixe de acordo com o conteúdo abaixo:

export http_proxy=http://10.100.246.125:3128
export https_proxy=http://10.100.246.125:3128
export ftp_proxy=ftp://10.100.246.125:3128
export no_proxy=localhost,127.0.0.1,10.100.246.*

Para entrar no modo de edição digite:

 'i'

Movimente o cursor por meio das setas do teclado. Para sair do modo de edição pressione:

 'ESC'

Para salvar e sair digite o comando:

:wq

Vá para home:

cd ~

Clone o projeto server:

git clone http://gitlab.defensoria.mg.def.br/dpmg-ddsp-infra/server.git

Entre na pasta correspondente de acordo com a VM:

server/patroni/prod/'X'   -> sendo X o número da VM

Dê permissão para o script:

chmod 777 script.sh

execute o comando:

./
6.5.2 CONFIGURAÇÃO ETCD

VM: 10.100.246.126

Crie o arquivo com o nome ‘etcd’ sem extensão e com as seguintes configurações. Obs.: substitua os valores referentes ao ip da máquina para a máquina em que será instalado o ETCD.

ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_NAME="etcd0"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380,http://0.0.0.0:7001"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.100.246.126:2380, http://localhost:2380"
ETCD_INITIAL_CLUSTER="etcd0=http://10.100.246.126:2380,etcd0=http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.100.246.126:2379"
ETCD_INITIAL_CLUSTER_TOKEN="cluster_etcd_10.100.246.126"

Na mesma pasta onde foi criado o arquivo etcd. Execute o seguinte script para instalação e configuração do etcd:

#!/bin/bash
apt-get install etcd -y
systemctl stop etcd
cp etcd /etc/default/etcd
systemctl start etcd
6.5.3 CONFIGURAÇÃO HAPROXY

VM: 10.100.246.126

Crie o arquivo com o nome ‘haproxy.cfg’ com o seguinte conteúdo:


yaml
global
    maxconn 100

defaults
    log global
    mode tcp
    retries 2
    timeout client 30m
    timeout connect 4s
    timeout server 30m
    timeout check 5s

listen stats
    mode http
    bind *:9000
    stats enable
    stats uri /

listen postgres
    bind *:5060
    option httpchk
    http-check expect status 200
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server 10.100.246.127:4433 10.100.246.127:4433 maxconn 100 check port 8008
    server 10.100.246.128:4434 10.100.246.128:4434 maxconn 100 check port 8008
    server 10.100.246.129:4435 10.100.246.129:4435 maxconn 100 check port 8008

Na mesma pasta onde foi criado o arquivo ‘haproxy.cfg’. Execute o seguinte script para instalação e configuração do haproxy:

#!/bin/bash
apt-get install haproxy -y
systemctl stop haproxy
cp haproxy.cfg /etc/haproxy/haproxy.cfg
systemctl start haproxy
6.5.4 CONFIGURAÇÃO 1º NÓ PATRONI

VM: 10.100.246.127

Crie o arquivo de configuração ‘patroni.yml’ :

scope: geralpessoa
name: pg0

restapi:
  listen: 0.0.0.0:8008
  connect_address: 127.0.0.1:8008

etcd:
  host: 10.100.246.126:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      luse_slots: true
      parameters:
        wal_level: replica
        hot_standby: "on"
        wal_keep_size: 8
        max_wal_senders: 5
        max_replication_slots: 5
        checkpoint_timeout: 30

  initdb:
  - encoding: UTF8
  - data-checksums  

  pg_hba:
  - host all postgres all md5
  - host replication replicator all md5
  - host all all 0.0.0.0/0 md5
  - host replication replicator 0.0.0.0/0 md5
  - host all postgres 0.0.0.0/0 md5 

  users:
    postgres:
      password: senhabd
      options:
        - createrole
        - createdb
    replicator:
      password: senhabd
      options:
        - replication

postgresql:
  listen: 0.0.0.0:4433
  connect_address: 10.100.246.127:4433
  data_dir: /data/postgresql
  #config_dir: /var/lib/postgresql/data
  bin_dir: /usr/lib/postgresql/13/bin
  authentication:
    replication:
      username: replicator
      password: senhabd
    superuser:
      username: postgres
      password: senhabd
  parameters:
    unix_socket_directories: '.'
    port: 4433

Crie o arquivo de configuração patroni.service :

[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple

User=postgres
Group=postgres

ExecStart=/usr/local/bin/patroni /data/patroni/patroni.yml

KillMode=process

TimeoutSec=30

Restart=no

[Install]
WantedBy=default.targ

Crie o arquivo ‘environment’ :

export http_proxy=http://10.100.246.125:3128
export https_proxy=http://10.100.246.125:3128
export ftp_proxy=ftp://10.100.246.125:3128
export no_proxy=localhost,127.0.0.1,10.100.246.*

Execute o seguinte script:


#atualização proxy
cp environment /etc/environment

#instalação postgresql 13
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-13 postgresql-doc-13
systemctl stop postgresql


#instalação PATRONI
sudo apt-get update -y
apt-get install python3 python3-pip -y
pip3 install --upgrade setuptools
pip3 install psycopg2-binary 
pip3 install patroni 
pip3 install python-etcd 
mkdir /data/patroni -p 
chown postgres:postgres /data/patroni 
chmod -R 700 /data/patroni

mkdir -p /data/postgresql
chown postgres:postgres /data/postgresql
chmod -R 700 /data/postgresql

#copiando arquivos de configuração PATRONI
cp patroni.yml /data/patroni/patroni.yml

#copiando startup script PATRONI
cp patroni.service /etc/systemd/system/patroni.service

systemctl enable patroni
systemctl start patroni

6.5.5 CONFIGURAÇÃO 2º NÓ PATRONI

VM: 10.100.246.128

Crie o arquivo de configuração ‘patroni.yml’ :

scope: geralpessoa
name: pg1

restapi:
  listen: 0.0.0.0:8008
  connect_address: 127.0.0.1:8008

etcd:
  host: 10.100.246.126:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      luse_slots: true
      parameters:
        wal_level: replica
        hot_standby: "on"
        wal_keep_size: 8
        max_wal_senders: 5
        max_replication_slots: 5
        checkpoint_timeout: 30

  initdb:
  - encoding: UTF8
  - data-checksums  

  pg_hba:
  - host all postgres all md5
  - host replication replicator all md5
  - host all all 0.0.0.0/0 md5
  - host replication replicator 0.0.0.0/0 md5
  - host all postgres 0.0.0.0/0 md5 

  users:
    postgres:
      password: senhabd
      options:
        - createrole
        - createdb
    replicator:
      password: senhabd
      options:
        - replication

postgresql:
  listen: 0.0.0.0:4434
  connect_address: 10.100.246.128:4434
  data_dir: /data/postgresql
  #config_dir: /var/lib/postgresql/data
  bin_dir: /usr/lib/postgresql/13/bin
  authentication:
    replication:
      username: replicator
      password: senhabd
    superuser:
      username: postgres
      password: senhabd
  parameters:
    unix_socket_directories: '.'
    port: 4434

Crie o arquivo de configuração patroni.service :

[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple

User=postgres
Group=postgres

ExecStart=/usr/local/bin/patroni /data/patroni/patroni.yml

KillMode=process

TimeoutSec=30

Restart=no

[Install]
WantedBy=default.targ

Crie o arquivo ‘environment’ :

export http_proxy=http://10.100.246.125:3128
export https_proxy=http://10.100.246.125:3128
export ftp_proxy=ftp://10.100.246.125:3128
export no_proxy=localhost,127.0.0.1,10.100.246.*

Execute o seguinte script:


#!/bin/bash

#atualização proxy
cp environment /etc/environment

#instalação postgresql 13
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-13 postgresql-doc-13
systemctl stop postgresql


#instalação PATRONI
sudo apt-get update -y
apt-get install python3 python3-pip -y
pip3 install --upgrade setuptools
pip3 install psycopg2-binary 
pip3 install patroni 
pip3 install python-etcd 
mkdir /data/patroni -p 
chown postgres:postgres /data/patroni 
chmod -R 700 /data/patroni

mkdir -p /data/postgresql
chown postgres:postgres /data/postgresql
chmod -R 700 /data/postgresql

#copiando arquivos de configuração PATRONI
cp patroni.yml /data/patroni/patroni.yml

#copiando startup script PATRONI
cp patroni.service /etc/systemd/system/patroni.service

systemctl enable patroni
systemctl start patroni
6.5.6 CONFIGURAÇÃO 3º NÓ PATRONI

VM: 10.100.246.129

Crie o arquivo de configuração ‘patroni.yml’ :

scope: geralpessoa
name: pg2

restapi:
  listen: 0.0.0.0:8008
  connect_address: 127.0.0.1:8008

etcd:
  host: 10.100.246.126:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      luse_slots: true
      parameters:
        wal_level: replica
        hot_standby: "on"
        wal_keep_size: 8
        max_wal_senders: 5
        max_replication_slots: 5
        checkpoint_timeout: 30

  initdb:
  - encoding: UTF8
  - data-checksums  

  pg_hba:
  - host all postgres all md5
  - host replication replicator all md5
  - host all all 0.0.0.0/0 md5
  - host replication replicator 0.0.0.0/0 md5
  - host all postgres 0.0.0.0/0 md5 

  users:
    postgres:
      password: senhabd
      options:
        - createrole
        - createdb
    replicator:
      password: senhabd
      options:
        - replication

postgresql:
  listen: 0.0.0.0:4435
  connect_address: 10.100.246.129:4435
  data_dir: /data/postgresql
  #config_dir: /var/lib/postgresql/data
  bin_dir: /usr/lib/postgresql/13/bin
  authentication:
    replication:
      username: replicator
      password: senhabd
    superuser:
      username: postgres
      password: senhabd
  parameters:
    unix_socket_directories: '.'
    port: 4435

Crie o arquivo de configuração patroni.service :

[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple

User=postgres
Group=postgres

ExecStart=/usr/local/bin/patroni /data/patroni/patroni.yml

KillMode=process

TimeoutSec=30

Restart=no

[Install]
WantedBy=default.targ

Crie o arquivo ‘environment’ :

export http_proxy=http://10.100.246.125:3128
export https_proxy=http://10.100.246.125:3128
export ftp_proxy=ftp://10.100.246.125:3128
export no_proxy=localhost,127.0.0.1,10.100.246.*

Execute o seguinte script:


#!/bin/bash

#atualização proxy
cp environment /etc/environment

#instalação postgresql 13
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-13 postgresql-doc-13
systemctl stop postgresql


#instalação PATRONI
sudo apt-get update -y
apt-get install python3 python3-pip -y
pip3 install --upgrade setuptools
pip3 install psycopg2-binary 
pip3 install patroni 
pip3 install python-etcd 
mkdir /data/patroni -p 
chown postgres:postgres /data/patroni 
chmod -R 700 /data/patroni

mkdir -p /data/postgresql
chown postgres:postgres /data/postgresql
chmod -R 700 /data/postgresql

#copiando arquivos de configuração PATRONI
cp patroni.yml /data/patroni/patroni.yml

#copiando startup script PATRONI
cp patroni.service /etc/systemd/system/patroni.service

systemctl enable patroni
systemctl start patroni
6.5.7 LOGS PATRONI (patroni.yml)

Para mais informações:

https://patroni.readthedocs.io/en/latest/SETTINGS.html

Quando um dos nós do PATRONI é o PRIMÁRIO, ou seja, é o utilizado atualmente é exibido o seguinte log em seu console:

Jul 21 17:21:17 vm-spp-db121 patroni[1630876]: 2021-07-21 17:21:17,977 INFO: Lock owner: pg2; I am pg2
Jul 21 17:21:17 vm-spp-db121 patroni[1630876]: 2021-07-21 17:21:17,980 INFO: no action.  i am the leader with the lock

Quando um dos nós para e volta, por exemplo, ao reiniciar a VM e já existe um nó PRIMÁRIO é exibido o seguinte log:

Jul 21 17:20:55 vm-spp-db119 patroni[2072298]: 2021-07-21 17:20:55,245 INFO: establishing a new patroni connection to the postgres cluster
Jul 21 17:20:55 vm-spp-db119 patroni[2072298]: 2021-07-21 17:20:55,293 INFO: no action.  i am a secondary and i am following a leader
6.5.8 COMANDOS ÚTEIS
  • Para verificar o STATUS do serviço do PATRONI: systemctl status patroni
  • Para FINALIZAR o serviço do PATRONI: systemctl stop patroni
  • Para INICIAR o serviço do PATRONI: systemctl start patroni

6.6 – SERVIÇOS

6.6.1 – NEXUS OSS(v3.29.2-02)

Nexus Repository OSS é um repositório de código aberto que suporta vários formatos de artefatos incluindo Docker, Java e NPM. Com a ferramenta de integração Nexus os pipelines do seu conjunto de ferramentas podem publicar e recuperar suas aplicações versionadas e suas dependências, usando repositórios centrais que são acessíveis por outros ambientes.

**Benefícios: **

  • Centralização: proporciona ao seu time uma única fonte confiável para cada componente usado;
  • Armazenamento: otimiza o desempenho do processo de build e confiabilidade a realizar cache de proxies de repositórios remotos;
  • Adaptação: oferece uma cobertura para todos os pacotes, tipos e formatos;
  • Escala: instala uma quantidade ilimitada de servidores para uma quantidade ilimitada de usuários.

**Suporte a todas as ferramentas populares de build: **

  • Armazena e distribui Maven/Java, npm, NuGet, Helm, Docker, P2, OBR, APT, GO, R, Conan components e outros;
  • Gerencia componentes do desenvolvimento à entrega;
  • Impressionante suporte para o ecossistema Java Virtual Machine (JVM), incluindo Gradle, Ant, Maven, e Ivy;
  • Compatível com todas as ferramentas populares como Eclipse, IntelliJ, Hudson, Jenkins, Puppet, Chef, Docker, e outros.
6.6.2 – WILDFLY (v21.0.2. Final)

O WildFly, que antes se chamava JBoss AS (JBoss Application Server), é um servidor de aplicações open source, escrito em Java, baseado nos padrões definidos pela especificação Java EE e mantido pela comunidade e pela empresa Red Hat (DEVMEDIA, 2020).

Atualmente trabalha-se com a versão WildFly 21 que possui suporte para a especificação Java EE 8 + Jakarta EE 8. É utilizado para prover os serviços backend atráves de APIs rest. Possui integração com Apache ActiveMQ.

6.6.3 – APACHE CAMEL(3.7.4)

O Apache Camel é uma estrutura de integração de código aberto versátil baseada em padrões de integração mais conhecidas.

O Camel permite definir regras de roteamento e mediação em uma variedade de linguagens específicas de domínio, incluindo uma API Fluent baseada em Java, arquivos de configuração Spring ou Blueprint XML. Possibilitando assim o preenchimento inteligente das regras de roteamento em sua IDE, seja em um editor Java ou XML.

Em um alto nível, Camel consiste em um CamelContext que contém uma coleção de instâncias de Component. Um Component é essencialmente uma fábrica de instâncias de Endpoint. Você pode configurar explicitamente as instâncias do Component em código Java ou um contêiner IoC como Spring, ou eles podem ser descobertos automaticamente usando URIs.

img
6.6.3.1 – WILDFLY CAMEL

O WildFly Camel fornece a integração do Apache Camel com o WildFly Application Server.

O subsistema WildFly-Camel permite adicionar Camel Routes como parte da configuração do WildFly. As rotas podem ser implantadas como parte de aplicativos JavaEE. Os componentes JavaEE podem acessar a API Camel Core e várias APIs de componentes Camel. Possibilitando que a solução de integração corporativa possa ser arquitetada como uma combinação das funcionalidades JavaEE e Camel.

6.6.4 – NGINX (1.20.0)

O NGINX é um famoso software de servidor web de código aberto. Em sua versão inicial, funcionava para a veiculação da Web HTTP. Hoje, no entanto, também serve como proxy reverso, balanceador de carga HTTP e proxy de e-mail para IMAP, POP3 e SMTP. O projeto, criado em 2002, tinha como expectativa responder ao problema C10k — o desafio de gerenciar dez mil conexões ao mesmo tempo.

Hoje, há ainda mais conexões com as quais os servidores da Web precisam lidar. Por esse motivo, o Nginx oferece uma arquitetura baseada no fluxo de tarefas. Esse recurso o torna um dos servidores mais confiáveis em termos de velocidade e escalabilidade. Devido à sua excelente capacidade de lidar com muitas conexões, vários sites de alto tráfego têm usado o serviço da NGINX. Alguns desses gigantes online são Google, Netflix, Adobe, Cloudflare, WordPress.com e muitos outros.

O NGINX consome menos memória que o Apache, pois lida com requisições Web do tipo “event-based web server” enquanto o Apache é baseado no “process-based server”. É trabalhar com ambos ao mesmo tempo de tal forma que seja possível diminuir o consumo de memória do Apache, passando as requisições Web primeiro no Nginx. Dessa forma, o Apache não precisa servir arquivos estáticos, e pode depender do bom controle de cache feito pelo Nginx.

O Nginx foi projetado desde o início para usar um algoritmo de tratamento de conexão sem bloqueio e orientado a eventos. Ele gera processos de trabalho, nos quais é possível manipular milhares de conexões. Esses processos, por sua vez, implementam um mecanismo de loop rápido, que faz uma verificação contínua e processa eventos.

Cada uma das conexões é colocada no loop de eventos no qual elas existem com outras conexões. Dentro do loop, os eventos são processados de forma assíncrona, permitindo que o trabalho seja tratado de maneira não bloqueante. Quando a conexão é fechada, ela é removida do loop. Esse estilo de processamento de conexão permite que o Nginx seja extremamente eficaz, mesmo com recursos limitados. Como o servidor é de encadeamento único e os processos não são gerados para lidar com cada nova conexão, a memória e o uso da CPU tendem a permanecer relativamente consistentes, mesmo em momentos de carga pesada.

O Nginx foi desenvolvido como forma de disponibilizar um baixo uso de memória, além de uma alta simultaneidade. Ele trabalha de forma que as solicitações sejam tratadas em um único thread. Isso evita que o servidor crie processos para cada solicitação.

6.6.5 – NODE.js(v18.*)

Node.js é um ambiente de execução JavaScript assíncrono orientado a eventos, dessa forma, ele é projetado para desenvolvimento de aplicações escaláveis em rede. A arquitetura Node.js fornece flexibilidade e baixo custo o tornando uma boa alternativa para implementar microsserviços e componentes da arquitetura Servless. Os usuários Node.js não precisam se preocupar com deadlocks de processo e quase nenhuma função no Node.js realiza operações E/S, sendo assim, o processo nunca bloqueia. Como não existem operações bloqueantes, sistemas escaláveis são razoavelmente fáceis de serem desenvolvidos em Node.js.

img

**Utilidades mais comuns: **

  • Aplicações em tempo real;
  • Ambientes escaláveis;
  • Camada de entrada do servidor;
  • Mocks e protótipos;
  • API com NoSql de forma bem intuitiva.
6.6.6 – GitLab Runner

O GitLab Runner é um aplicativo, de código aberto, que funciona com o GitLab CI/CD para
executar tarefas para qual foi designado. O principal objetivo do GitLab Runner é a automatização de
processos

Geralmente é utilizado para:

  • Construção de artefatos dos projetos;
  • Realização de backup para banco de dados;
  • Construção/Reconstrução de ambientes;
  • Monitoramento dos clusters de banco de dados.
6.6.7 – GIT (v.2.8.4+)

O Git é um sistema de controle de versões distribuído, usado principalmente no desenvolvimento de software.

Cada diretório de trabalho do Git é um repositório com um histórico completo e habilidade total de acompanhamento das revisões, não dependente de acesso a uma rede ou a um servidor central.

Configurando sua auditoria no Git
No git existem configurações que permitem definir seu nome de usuário e seu e-mail, que aparecerão 
nos commits do repositório remoto, seja ele um repositório pessoal ou corporativo. 
Sendo assim, é importante que seu nome de usuário e e-mail sejam correspondentes aos que foram 
definidos para sua conta do repositório remoto da DDSP.


A autoria permite saber quem exatamente fez cada commit, e como dito, suas credenciais devem ser as mesmas que as configuradas no repositório remoto. Para manter a organização em sua área de trabalho, separando seus projetos pessoais dos destinados ao trabalho, poderão ser criados gitconfigs individuais.

Criando gitconfig individual

Para isso, é recomendado que seja criada uma pasta destinada apenas aos projetos da DDSP.

Crie uma pasta para os projetos da Defensoria

mkdir ~/Documents/projetos-DDSP/

Crie um arquivo na pasta que foi destinada para o armazenamento dos projetos
No Linux

cd ~/Documents/projetos-DDSP/
touch .gitconfig

No Windows

cd ~/Documents/projetos-DDSP/
ni .gitconfig

No do arquivo “.gitconfig” especifique seu nome de usuário e e-mail que foram utilizados para criar sua conta no [repositório remoto]:

[user]
    name = Seu Nome # Nome que está no endereço de e-mail
    email = seuemail@defensoria.mg.def.br

Inclua as configurações no gitconfig global, no arquivo que está localizado no diretório local do seu usuário (~/.gitconfig)

[includeIf "gitdir:~/Documents/projetos-DDSP/"]
  path = ~/Documents/projetos-DDSP/.gitconfig
6.6.8 – GITLAB COMMUNITY EDITION (v12.10.14)

O GitLab é um gerenciador de repositório de software baseado em GIT, com suporte a Wiki, gerenciamento de tarefas e CI/CD. Ele é software livre, distribuído pela Licença MIT.

6.6.9 – DOCKER (19.03.8)

O Docker é uma plataforma open source que facilita a criação e administração de ambientes isolados. Ele possibilita o empacotamento de uma aplicação ou ambiente dentro de um container, se tornando portátil para qualquer outro host que contenha o Docker instalado (TREINAWEB, 2021).

Então, você consegue criar, implantar, copiar e migrar de um ambiente para outro com maior flexibilidade. A ideia do Docker é subir apenas uma máquina, ao invés de várias. E, nessa única máquina, você pode rodar várias aplicações sem que haja conflitos entre elas (TREINAWEB, 2021).

Como ele funciona?

img

O Docker utiliza o modelo de container para “empacotar” a aplicação que, após ser transformada em imagem Docker, pode ser reproduzida em plataforma de qualquer porte.

Os containers são isolados a nível de disco, memória, processamento e rede. Essa separação permite grande flexibilidade, onde ambientes distintos podem coexistir no mesmo host, sem causar qualquer problema. Vale salientar que o overhead nesse processo é o mínimo necessário, pois cada container normalmente carrega apenas um processo, que é aquele responsável pela entrega do serviço desejado. Em todo caso, esse container também carrega todos os arquivos necessários (configuração, biblioteca e afins) para execução completamente isolada (STACK.DESENVOLVEDOR.EXPERT, 2021).

**Quais são os benefícios do Docker? **

  • Modularidade

Configuração e disponibilização de serviços isoladamente.

  • Camadas e controle de versão de imagens
  • Imagens

As imagens são compostas por várias camadas.

  • Containers

Um container é o local onde estão as modificações da aplicação que está em execução.

  • Implantação rápida

O Dockerfile e o DockerCompose traduzem para uma linguagem em comum a configuração do ambiente para a disponibilização de serviços. A disponibilização é realizada através de poucos comandos.

6.6.10 – PYTHON (3.11.7) – PoOWERSHELL(10.0.1)

Na DPMG atualmente utilizamos o Python na versão 3.11.7 e o Powershell na versão 10.0.1, essas linguagens de programação são utilizadas para realizar manutenções, automações, backup e restore de algumas aplicações, além de ser usadas esporadicamente para realizarmos mudanças em massa nos nomes de arquivos.

img
6.6.11 – ANSIBLE (v2.9.6)

Para gerenciar e padronizar o ambiente de servidores da DPMG atualmente utilizamos o Ansible na versão 2.9.6, ferramenta essa que serve para provisionar configurações em massa e de forma automática em nossos serviços como por exemplo o cluster Patroni, ajustes ou criação de usuários em servidores Linux, renovação de certificados SSL dentre outros.

Fluxo Ansible

img
6.6.12 – KUBERNETS (v1.23.6)

No cenário atual da defensoria trabalhamos com o conceito de micro serviço, esses micros serviços são vários containers que estão configurados em vários servidores distintos. Para realizar a gerencias desse grande número de containers, utilizamos uma ferramenta chamada Kubernets, com ela conseguimos orquestrar de forma menos complexa, ágil e pratica o grande número de containers que utilizamos, desde o deploy da aplicação até o rollback. Atualmente estamos utilizando o Kubernets na versão 1.23.6.

img
6.6.13 – RANCHER (v2.6.5)

Para gerenciar todos os nós do cluster Kubernets utilizamos o gerenciador Rancher. O Rancher é uma ferramenta que tem como objetivo administrar uma infraestrutura em Docker e Kubernets, a versão utilizada do Rancher pela infraestrutura defensoria é a 2.6.5.

img

6.7 – SERVIÇOS DE MONITORAMENTO

6.7.1 – ELK

“ELK” é o acrônimo para três projetos open source: Elasticsearch, Logstash e Kibana.

img
6.7.2 – ELASTICSEARCH (7.12.1)

Elasticsearch é um poderoso motor de busca desenvolvido em cima do Apache Lucene (uma das bibliotecas de busca textual mais importantes do mercado). O Elasticsearch é um mecanismo de análise de dados e busca RESTful distribuído baseado em JSON. Possui integração com as tecnologias Java, .NET (C#), PHP, Python, Apache Groovy, Ruby, entre outras.

6.7.3 – LOGSTASH (v7.9)

O Logstash é um pipeline gratuito e aberto de processamento de dados do lado do servidor que faz a ingestão de dados de inúmeras fontes, transformando-os e enviando-os para o seu “esconderijo” favorito.

Os dados com frequência estão dispersos ou isolados em muitos sistemas e em muitos formatos. O Logstash oferece suporte a uma variedade de entradas que importa eventos de inúmeras fontes comuns, tudo ao mesmo tempo. Faça a análise e gestão descomplicada de logs, métricas, aplicativos web, armazenamentos de dados e vários serviços da AWS, tudo em um fluxo contínuo.

Os pipelines do Logstash geralmente possuem múltipla finalidade e podem se tornar sofisticados, tornando assim imprescindível um sólido entendimento do desempenho dos pipelines, da disponibilidade e dos gargalos. Com os recursos de monitoramento e de visualização do pipeline, você pode observar e estudar facilmente um nó ativo do Logstash ou até mesmo uma implantação total.

À medida que os dados trafegam da fonte ao armazenamento, os filtros do Logstash analisam cada evento, identificam campos nomeados para desenvolver a estrutura e os transformam para convergirem em um formato comum para proporcionar uma análise mais poderosa e com mais valor para os negócios.

O Logstash transforma e prepara dinamicamente os dados, independentemente do formato ou da complexidade:

  • Obtenha a estrutura de dados não estruturados com o grok
  • Decifre coordenadas geográficas de endereços IP
  • Anonimize os dados de PII, exclua os campos sensíveis completamente
  • Facilite o processamento geral, independentemente da fonte, do formato ou do esquema dos dados.

As possibilidades são infinitas com a nossa avançada biblioteca de filtros e o versátil Elastic Common Schema.

6.7.4 – KIBANA (v7.12)

O Kibana é uma aplicação gratuita e aberta de front-end que trabalha com o Elastic Stack, fornecendo recursos de busca e visualização de dados indexados no Elasticsearch. Comumente conhecido como a ferramenta de gráficos para o Elastic Stack (que anteriormente chamava-se ELK Stack após o Elasticsearch, o Logstash e o Kibana), o Kibana também atua como interface do usuário para monitorar, gerenciar e proteger um cluster do Elastic Stack, além de ser o hub centralizado para soluções integradas desenvolvidas no Elastic Stack. Desenvolvido em 2013 a partir da comunidade do Elasticsearch, o Kibana cresceu e se tornou a janela de acesso ao próprio Elastic Stack, oferecendo um portal para usuários e empresas.

Com o Kibana é possível:

  • Pesquisar, observar e proteger as informações. Da descoberta de documentos à análise de logs, e a descoberta de vulnerabilidades de segurança;
  • Visualizar e analisar os dados em gráficos, medidores, mapas, além de combiná-los em um painel. Com o Kibana também é possível pesquisar por insights ocultos;
  • Gerenciar, monitorar e proteger o Elastic Stack. Gerenciar os índices e ingestão de pipelines, monitorar a integridade do cluster do Elastic Stack e controlar quais usuários tem acessos a quais recursos.

Kibana é para administradores, analistas e usuários de negócio. Trabalha com todos os tipos de dados. O núcleo do Kibana fornece os recursos clássicos: histogramas, gráficos de linha, gráficos de pizza, explosão solar e muitos outros. E, evidentemente, você pode buscar por todos os documentos.

6.7.5 – FILEBEAT (7.7.0)

O Filebeat é um log shipper pertencente à família Beats, que chama a atenção pela praticidade de configuração e pela pequena quantidade de recursos de sistema que consome. Na prática ele funciona como um agente de envio de logs para um serviço de coleta de logs qualquer. Como o próprio nome indica, é dedicado ao envio de arquivos de log.

img

Em um pipeline de registro, baseado no ELK, o Filebeat desempenha o papel de agente de registro – instalado na máquina gerando arquivos de registro, acompanhando-os e encaminhando para o Logstash para um processamento mais avançado ou diretamente para o Elasticsearch para indexação. Filebeat, portanto, não é um substituto para o Logstash, mas sim, algo que pode e deve ser usado em conjunto na maioria dos casos.

img

Características:

  • Desenvolvido em Go;
  • Baseado no protocolo Lumberjack;
  • Projetado para ocupar pouco espaço na memória;
  • Lida com grandes volumes de dados;
  • Oferece suporte à criptografia;
  • Lida de forma eficiente com compressão de dados.
6.7.6 – UPTIME (7.9)

O aplicativo Uptime no Kibana possibilita monitorar o status dos endpoints na rede via HTTP/S, TCP, e ICMP mostrando a disponibilidade e o tempo de resposta das aplicações e serviços em tempo real com o objetivo de detectar problemas antes de afetar os usuários. Você pode explorar o status dos endpoints ao longo do tempo, aprofundar em monitores específicos e ter uma visão geral do seu ecossistema em momentos específicos.

[IMG – UPTIME]

6.7.7 – HEARTBEAT (v7.12)

A primeira versão do Heartbeat, lançado inicialmente em versão beta em janeiro de 2017, é um shipper lightweight — bem parecida com o restante dos outros Beats (Metricbeat, Filebeat, Winlogbeat etc.) — mas foi projetado para monitorar o funcionamento.

O Heartbeat executa verificações periódicas para conferir se o endpoint está ativo ou inativo, e relata essas informações, juntamente com outras métricas úteis, ao Elasticsearch. Essas informações são exibidas automaticamente em dashboards pré-criados do Kibana para permitir o monitoramento de tempo de funcionamento completo. O Heartbeat pode operar de dentro ou de fora da rede. Basta ele ter acesso da rede ao endpoint HTTP, TCP ou ICMP desejado. A configuração é tão simples quanto fornecer ao Heartbeat a lista de URLs que se deseja monitorar.

A combinação de dados do Heartbeat com fontes de dados adicionais como Metricbeat, Filebeat e APM pode fornecer informações importantes ao fazer triagem de uma pane. O Heartbeat notificará quando um serviço específico estiver inativo; o Metricbeat e o APM podem apresentar os possíveis suspeitos; podem melhorar significativamente o MTTR e farão com que cada um olhe para o lugar certo, em vez de ficar “apontando o culpado”.

Alertas de detecção de anomalias:

É possível usar os recursos de alertas para obter alertas e notificações sobre uma falha ou uma queda na performance com base nos dados de monitores do Heartbeat. Os recursos de Machine Learning do Elastic Stack também podem ser usados para detectar quaisquer anomalias com base na análise de dados de séries de tempo dos dados do Heartbeat.

6.8 – UTILITÁRIOS

Os utilitários são ferramentas adicionais, e não obrigatórias, utilizadas pela equipe da Defensoria Pública de Minas Gerais para auxiliar em atividades específicas.

6.8.1 – GOOGLE CHROME (v.89 ou superior)

Google Chrome é um navegador livre desenvolvido pela Google, empresa multinacional de serviços online e software dos Estados Unidos.

6.8.2 – FIREFOX BROWSER (v.87 ou superior)

Mozilla Firefox é um navegador livre e multiplataforma desenvolvido pela Mozilla Foundation. Esse utilitário é utilizado para o acesso e desenvolvimento das aplicações WEB dentro da Defensoria Pública de Minas Gerais (DPMG).

6.8.3 – CMDER (v1.3.18)

Cmder (se pronuncia “Commander”) é um pacote de software pré-configurado que provê para o usuário um emulador de terminal e um excelente shell para o Windows. Foi criado justamente pela ausência de um emulador console utilizável no Windows. Ele é baseado no ConEmu com grande revisão de configuração, esquema de cores Monokai, incrível clink para fornecer um prompt do tipo bash usando a linha de leitura do GNU, e um layout de prompt personalizado.

A principal vantagem do Cmder é a portabilidade. Ele é projetado para ser totalmente independente, sem a necessidade de dependências externas, o que o torna um ótimo dispositivos USB ou armazenamento em nuvem. Assim, você pode carregar seu console, aliases e binários (como wget, curl e git) com você em qualquer lugar.

Com o Cmder você terá todas as facilidades de copiar e colar, e também poderá usar os comandos do Prompt de Comando do Windows ou do seu compatível Linux, é isso mesmo! Tudo na mesma janela de comando, portanto, use o que for mais familiar.

6.8.4 – OPENVPN (v11.20.0.0)

OpenVPN é um daemon VPN de código aberto que tem como objetivo ser uma ferramenta VPN universal oferecendo grande flexibilidade na utilização, suporte à segurança SSL / TLS, ponte de ethernet, transporte de túnel TCP ou UDP por proxies ou NAT, suporte para endereços IP dinâmicos e DHCP, escalabilidade para centenas ou milhares de usuários e portabilidade para a maioria das principais plataformas de sistema operacional.

O OpenVPN está estreitamente ligado à biblioteca OpenSSL e possui muito dos recursos de criptografia partindo dela. Também suporta criptografia mais convencional usando uma chave secreta pré compartilhada (modo de chave estática) ou segurança de chave pública (modo SSL / TLS) usando certificados de cliente e servidor. Além de oferecer suporte a túneis TCP / UDP não criptografados.

6.8.5 – MICROSOFT TEAMS (v.89 ou superior)

Microsoft Teams é uma plataforma criada para promover a colaboração e interação em tempo real, permitindo aos usuários conversas individuais, em grupos, reuniões por vídeo chamada, compartilhamento de anexos e anotações e colaboração de conteúdo com os aplicativos Microsoft 365 integrando fluxos de trabalho e aplicativos essenciais para a empresa.

Gerenciamento: é possível gerenciar os dispositivos dos trabalhadores remotos na nuvem com configurações de segurança, aplicativos permitidos e exigir conformidade com a integridade do sistema.

img

Produtos:

  • Chamadas;
  • Videoconferência;
  • Compartilhamento de tela;
  • Eventos virtuais;
  • Sistemas de mensagens instantâneas;
  • Compartilhamento de arquivos;
  • Aplicativos de reunião;
  • Aplicativos de fluxo de trabalho.
6.8.6 – NOTEPAD++ (v.89 ou superior)

O Notepad ++ é um editor de código-fonte gratuito e um substituto do Notepad que suporta vários idiomas. Rodando no Windows, seu uso é regido pela GNU General Public License.

Baseado no poderoso componente de edição Scintilla, o Notepad ++ é escrito em C ++ e usa Win32 API e STL puras, o que garante maior velocidade de execução e menor tamanho do programa. Ao otimizar o máximo de rotinas possíveis sem perder a facilidade de uso, o Notepad ++ está tentando reduzir as emissões mundiais de dióxido de carbono. Ao usar menos energia da CPU, o PC pode desacelerar e reduzir o consumo de energia, resultando em um ambiente mais verde.

Notepad++ suporta as linguagens: C, C++, Java, C#, XML, HTML, PHP, JavaScript, makefile, ASCII art, doxygen, ASP, VB/VBScript, Unix Shell Script, BAT, SQL, Objective-C, CSS, Pascal, Perl, Python, Lua, Tcl, Assembly, Ruby, Lisp, Scheme, Smalltalk, PostScript e VHDL. Além disto, usuários podem definir suas próprias linguagens usando um “sistema de definição de linguagem” integrado, que faz do Notepad++ extensível, para ter realce de sintaxe e compactação de trechos de código.

Ele suporta autocomplemento, busca e substituição com integração de expressões regulares, divisão de tela, zoom, favoritos, etc. Tem suporte para macros e plugins. Um plugin de usuário chamado TextFX, que provê opções de transformação de textos, é incluído por padrão.

6.8.7 – POSTMAN (v.8.3.1+)

“O Postman é um API Client que facilita aos desenvolvedores criar, compartilhar, testar e documentar APIs. Isso é feito, permitindo aos usuários criar e salvar solicitações HTTP e HTTPs simples e complexas, bem como ler suas respostas.

Além da praticidade de ter todos os exemplos e códigos de integração prontos, o POSTMAN é a ferramenta oficial de teste pelas equipes de desenvolvimento e suporte. Dessa maneira ao realizar integrações, caso você possua dúvidas, será mais rápido e simples de confirmar o que pode estar ocorrendo com o seu código.

Outras vantagens do Postman:

  • Ferramenta gratuita. É possível explorar e testar as APIs usando o cliente de desktop e web do Postman. Também é possível usar o CLI do Postman para executar coleções diretamente por linha de comando;
  • Não é necessário instalar EXE – é uma extensão do Google Chrome;
  • Funciona em qualquer plataforma: Windows, MacOS e Linux;
  • Converte JSON em várias linguagens (EX: Python, PHP, RUBY);
  • Sincronização entre diversos aplicativos;
  • Sincroniza código entre equipes (Versão paga)”.
6.8.8 – FILEZILLA (3.54.0-rc1)

Cliente FTP FileZilla funciona de forma independente de plataforma e suporta sistemas operacionais como Microsoft Windows(Vista ou Superior), GNU / Linux, * BSD e Mac OS X. É de fácil utilização, compatível com FTP, FTP SSL/TLS (FTPS) e com protocolo de transferência de arquivos SSH (SFTP), possui suporte a IPv6, a transferência de arquivos grandes maiores que 4GB, consegue gerenciar localmente uma fila grande de transferência, implementa o Drag and Drop, proporciona a configuração do limite de velocidade de transferência, possibilita comparação de diretórios e edição de arquivos online com editores de textos.

6.8.9 – WINSCP (5.17)

O WinSCP é um cliente de FTP, para Windows, que garante transferências seguras sobre SSL, de forma que os arquivos FTP não sejam interceptados por terceiros. A chave do programa é o fato de que ele suporta também SFTP e SCP protocolos por SSH-1 e SSH-2. WinSCP não é o mais fácil cliente de FTP que existe.

Características:

  • Interface gráfica de usuário que não é muito simples e intuitiva;
  • Traduzido para vários idiomas
  • Integração com Windows. É possível arrastar e soltar arquivos, utilizar URL, possuem ícones e listas de atalhos.
  • Todas as operações comuns com arquivos;
  • Suporte SFTP e SCP sobre protocolos SSH, FTP, WebDav e S3.
  • Scripts de arquivos em lote e interface em linha de comando e montagem .NET para tarefas mais avançadas.
  • Sincronização de diretório de várias maneiras semi-automáticas ou totalmente automatizadas;
  • Editor de texto integrado;
  • Compartilha as configurações de site com o PuTTY;
  • Protege as informações do site com uma senha master de forma opcional.
6.8.10 – GITBASH (v.2.31.1)

Git Bash é um utilitário para ambientes do Microsoft Windows que fornece a camada de emulação para a experiência de linha de comando Git, ele possui as operações da experiência Bash padrão. Bash é acrônico para “Bourne Again Shell”. Shells são aplicativos terminais usados como interface em sistemas operacionais por meio de comandos gravados. O Shell é o padrão popular no Linux e no macOS. O Git Bash é o pacote que instala o Bash, alguns utilitários de bash comuns e o Git nos sistemas operacionais Windows.

O git bash faz parte do pacote Git para Windows, é possível baixá-lo e instalá-lo como todos outros aplicativos.

Git GUI

Como usuários Windows comumente esperam uma interface gráfica, Git para Windows também fornece Git GUI, uma poderosa alternativa para o Git BASH, oferecendo uma versão gráfica sobre cada função de linha de comando Git, bem como ferramentas de comparação visual abrangentes.

7 – UI / UX

7.1 – ADOBE PHOTOSHOP

O Photoshop, é o software de imagem digital mais avançado do mundo, usado por fotógrafos, designers, profissionais da web e de vídeo. O aplicativo dá a você máximo poder e controle criativo para manipulação e composição de imagens 2D e 3D, edição de vídeo e análise de imagem.

7.2 – ADOBE ILLUSTRATOR

O Illustrator é uma ferramenta de design capaz de desenvolver ilustrações. Além disso, é possível também editar imagens vetoriais já prontas.

Ela é muito usada na confecção de logos, por exemplo, além de todo aspecto vetorial de sites, campanhas e material impresso. No caso de animações, o ideal é produzir a ilustração no Illustrator e, depois, enviá-la para um outro programa como o After Effects — também da Adobe.

7.3 – AXURE

Axure RP Pro / Team é um software para a criação de protótipos e especificações para sites e aplicativos. Ele oferece posicionamento de arrastar e soltar, redimensionamento e formatação de widgets. Características O Axure RP oferece suporte à prototipagem de aplicativos da Web ricos , mapeando os comportamentos de interface desejados (como exibir ou ocultar um elemento) em resposta a ações como cliques do mouse ou gestos de toque. O Axure RP gera sites HTML para visualização e colaboração em equipe, bem como documentos do Microsoft Word como saída para documentação de produção. O Axure RP também pode se conectar a outras ferramentas e serviços, como Slack e Microsoft Teams, para colaborar. O Axure RP também pode se ajustar automaticamente e mover-se suavemente do macOS para o Windows. Por segurança, os protótipos podem ser enviados com proteções de senha para garantir a divulgação completa. Os usuários criam controles personalizados combinando widgets existentes e atribuindo ações em resposta a eventos como OnClick, OnMouseOver e OnMouseOut ou gestos de toque como beliscar e deslizar. Por exemplo, os painéis de interface podem ter vários estados, cada um sendo ativado clicando em um elemento, como um botão de guia, item da caixa de listagem ou botão de ação.

7.3.1 – COMERCIALIZAÇÃO

Existem três versões: Pro, Team e Enterprise. O produto Pro está disponível gratuitamente para alunos e professores, e com descontos para instituições de ensino. A versão Pro adiciona recursos de documentação, incluindo controle de layout, saída para Microsoft Word e Excel e suporte para projetos de equipe.

8 – REQUISITOS

8.1 – ENTERPRISE ARCHITECTURE – E.A.

Sparx Systems Enterprise Architect é uma ferramenta de modelagem e design visual baseada na OMG UML . A plataforma suporta: o projeto e construção de sistemas de software; modelagem de processos de negócios; e modelagem de domínios baseados na indústria.

8.1.1 – VISÃO GERAL

A modelagem de sistemas usando UML fornece uma base para modelar todos os aspectos da arquitetura organizacional, junto com a capacidade de fornecer uma base para projetar e implementar novos sistemas ou alterar sistemas existentes. Os aspectos que podem ser cobertos por este tipo de modelagem variam desde o layout de arquiteturas organizacionais ou de sistemas, reengenharia de processos de negócios , análise de negócios e arquiteturas orientadas a serviços e modelagem da web, até aplicativos e design de banco de dados e re -engenharia e desenvolvimento de sistemas embarcados. Junto com a modelagem do sistema, o Enterprise Architect cobre os principais aspectos do ciclo de vida de desenvolvimento de aplicativos, desde o gerenciamento de requisitos até as fases de projeto, construção, teste e manutenção, com suporte para rastreabilidade, gerenciamento de projetos e controle de alterações desses processos, bem como, facilidades para o desenvolvimento orientado a modelos de código de aplicação usando uma plataforma de desenvolvimento integrado interno .

A seguir estão os principais padrões suportados:

UML 2.5 SysML 1.5 BPMN 2.0 DMN BMM MARTE 1.2 BPEL SoaML SPEM WSDL XSD DDS ArchiMate 3.0 ArcGIS IFML CMMN Linguagem de marcação de geografia (GML) ODM , OWL e RDF VDML 1.0

8.1.2 – O GERENCIAMENTO DE REQUISITOS

Os recursos comuns de gerenciamento de requisitos suportados pelo Enterprise Architect incluem customização de como os requisitos são documentados, vinculando os requisitos aos detalhes de design e implementação e fornecendo rastreabilidade de requisitos durante as fases de design e construção. Esses requisitos podem estar sujeitos a gerenciamento de mudanças, processamento de fluxo de trabalho, comparação de linha de base e auditoria.

8.1.3 – MODELAGEM DE NEGÓCIOS E ANÁLISE

O Enterprise Architect oferece suporte a vários métodos de modelagem de processos de negócios usando UML como a linguagem de modelagem básica. As linguagens principais para modelagem e análise de negócios incluem BPMN , BMM e VDML , junto com vários perfis históricos.

O Enterprise Architect suporta a simulação de: Modelos BPMN usando BPSim Definições de regras de negócios usando modelos DMN . BPMN pode ser integrado com modelos DMN para simulação. Isso inclui a capacidade de gerar código executável a partir dessas regras de negócios. A modelagem de negócios pode ser combinada com a análise de lacunas para visualizar lacunas potenciais nas soluções propostas.

8.1.4 – SIMULAÇÃO

A simulação de modelo é compatível com diagramas comportamentais, incluindo: máquinas de estado, interação (diagramas de sequência) e diagramas de atividades. Para máquinas de estado e diagramas de atividades, o fluxo de execução é definido usando gatilhos, guardas e efeitos. A simulação suporta reexecuções com alteração dos eventos disparados e suporta a visualização de variáveis, a pilha de chamadas e a configuração de marcadores de depuração. A simulação pode interagir com telas de interface de usuário emuladas contendo campos de IU comuns. Plots gráficos da simulação podem ser gerados. Também há suporte para geração de código executável a partir de State Machines tanto para simulação, quanto para uso em aplicativos. Modelos BPMN (usando BPSim) podem ser simulados criando resultados tabulados para análise. O BPSim também suporta simulações baseadas em probabilidade de Monte Carlo. A simulação SysML é suportada para modelos IBD e Paramétricos usando Open Modelica ou Matlab (usando Simulink e Simscape). Fórmulas matemáticas nos diagramas de bloco interno e modelos paramétricos do SysML podem ser simuladas para gráficos de plotagem usados ​​na análise. A simulação também é compatível com DMN ( modelo de decisão e notação ). A simulação envolve a geração de código utilizável em aplicativos e suporta a interação entre modelos DMN e modelos BPMN usando BPSim.

8.1.5 – DESENVOLVIMENTO DE SISTEMAS

Em linha com os princípios de design orientado por modelo, o Enterprise Architect suporta transformações MDA de estruturas de classe PIM em estruturas de classe PSM , engenharia de código para dez linguagens de software e várias linguagens de sistemas HDL incorporados ( Ada , VHDL e Verilog ). Ele também oferece suporte à geração de código a partir de modelos comportamentais. As linguagens suportadas incluem ActionScript , C , C # e C ++ , Delphi . Java , PHP , Python , Visual Basic e Visual Basic .NET De acordo com os princípios de desenvolvimento orientados por modelo, o Enterprise Architect fornece um ambiente de desenvolvimento integrado que suporta edição de código (com destaque de sintaxe e Intellisense ), para construção, depuração e teste de código, tudo dentro do modelo. Compiladores e interpretadores suportados: Microsoft Windows Native C, C ++, Visual Basic, família .NET (C #, VB); Compiladores Java, PHP e GNU para C ++, C e Ada ( GCC e GDB ). Inclui recursos para importar projetos MS Visual Studio e Eclipse .

8.1.6 – WIREFRAMING

A modelagem em wireframe oferece suporte ao uso de modelos para modelar a aparência dos diálogos apresentados aos usuários ao interagir com um aplicativo. Os diálogos de dispositivos suportados incluem: Diálogos de tela, páginas da Web, telefones e tablets Android, Apple e Windows 8.1.

8.1.7 – GERENCIAMENTO DE TESTE

Para teste baseado em código, há suporte para ambos os testes xUnit (isso envolve a transformação MDA de classes em classes NUnit ou Junit com a capacidade de gerar testes de unidade a partir do modelo e registrar automaticamente os resultados em relação às classes testadas) e teste de ponto de teste (um teste de código baseado em modelo. É paralelo aos contratos de teste definidos em ‘Design by Contract’ e é executado usando definições de depuração. Ambos os métodos suportam as definições de teste e os resultados do teste sendo registrados em classes relacionadas no modelo.

8.1.8 – ANÁLISE DE EXECUÇÃO VISUAL

Integrado com o código de construção e depuração, o Enterprise Architect permite ao desenvolvedor realizar análises abstratas do software usando criação de perfil e geração de diagramas de sequência: a geração de diagramas de sequência fornece um meio de analisar o fluxo de processo geral e resolver inconsistências, e o Profiling resume, por thread e rotina, a eficiência geral do código.

8.1.9 – ENGENHARIA DE SISTEMAS

A engenharia de sistema é suportada com modelagem SysML 1.4, que pode ser acoplada à geração de código executável. O SysML oferece suporte à modelagem desde a definição de requisitos e composição do sistema usando blocos e peças SysML até a simulação de modelo paramétrico. A geração de código executável suporta linguagens de sistema HDL embutidas ( Ada , VHDL e Verilog ), ou pode ser acoplada à geração de código comportamental das linguagens de código padrão definidas acima.

8.1.10 – MODELAGEM DE DADOS

O Enterprise Architect suporta modelagem de dados do nível conceitual para o físico, engenharia direta e reversa de esquemas de banco de dados, e transformação MDA do DBMS lógico (independente da plataforma) para o físico (dependente da plataforma). Os tipos de diagrama suportados incluem: notação DDL, notação ERD , notação IDEF1X , notação de Engenharia da Informação. DBMSs com suporte incluem: DB2 , Firebird / InterBase, MS Access 97, 2000, 2003, 2007, 2013, MS SQL Server , todas as edições de 2005, incluindo Express e Azure, MySQL , MariaDB , SQLite , Oracle from 9i (todas as edições), PostgreSQL , ArcGIS , Informix , Ingres , Sybase Adaptive Server Anywhere (Sybase ASA) e Sybase Adaptive Server Enterprise (Sybase ASE).

8.1.11 – PROJETOS E GERENCIAMENTO DE MUDANÇAS

Os recursos de suporte ao gerenciamento de projetos incluem: Alocação e rastreamento de recursos usando gráficos de Gantt , diagramas Kanban, registro de eventos usando calendários modelo, script de fluxo de trabalho para definir processos de fluxo de trabalho, segurança e métricas de modelo. Os principais recursos de suporte ao gerenciamento de mudanças são: auditoria, diferença e fusão de linha de base e controle de versão. A interface de controle de versão suporta os principais aplicativos de controle de versão: Subversion , CVS , Team Foundation Server e interface SCC para qualquer sistema de controle de versão compatível com SCC.

8.1.12 – INTEGRAÇÃO COM OUTRAS FERRAMENTAS

Os recursos que oferecem suporte à integração com outras ferramentas incluem: XMI Import / Export: Suporta as especificações XMI 1.1, 1.2 e 2.1 (e importação de arquivos .emx e Rhapsody), Open Services for Lifecycle Collaboration (OSLC), CSV Import / Export, ArchiMate Open Importação / Exportação do Formato do Exchange. O Pro Cloud Server Integration suporta a integração de dados de fornecedores externos, incluindo Application Lifecycle Management, Jazz (DOORS, Rhapsody DM, Team Concert CCM e QM), Jira, Confluence, TFS, Wrike, ServiceNow, Autodesk, Bugzilla, Salesforce e SharePoint. O Data Miner fornece um meio de extrair dados de uma variedade de fontes de dados externas, incluindo: bancos de dados (ODBC, ADO, OLEDB, JET), arquivos de texto (XML, JSON, texto simples), Excel (xls, CSV) e arquivos online ou URLs. A interface de automação – oferece suporte a uma API abrangente para uso com qualquer linguagem baseada em COM (e Java). Isso oferece suporte à definição de scripts internos, bem como acessibilidade para escrever suplementos externos. Também há suporte para suplementos orientados a eventos baseados em modelo usando Javascript. Entre os suplementos disponíveis estão interfaces para Microsoft Office e DOORS, junto com suplementos de terceiros.

Baixar Página em PDF