SlideShare uma empresa Scribd logo
1 de 83
Baixar para ler offline
Por: Camila Souza
Danilo Pinotti
Fernanda Larocca
Do Zero à Produção
Introdução
Danilo Pinotti
- danilopinotti.com.br
- github.com/danilopinotti
Arquiteto de Software (PUC MINAS, 2022)
Tecnólogo em Sistemas para Internet (UTFPR, 2017)
Desenvolvedor Sênior na empresa Let’s Sistemas
(Atualmente)
Co-fundador e Desenvolvedor Web/IoT na Trigy
(Atualmente)
Camila Souza
- github.com/camilaesouza
Tecnólogo em Sistemas para Internet (UTFPR, Em
andamento)
Desenvolvedor Sênior na empresa Let’s Sistemas
(Atualmente)
Fernanda Larocca
- github.com/fernandalarocca
Técnologo em Análise e Desenvolvimento de
Sistemas (UniGuairacá, Em andamento)
Estagiária de Desenvolvimento Back-end na
empresa Let’s Sistemas (Atualmente)
Tópicos
Planejamento
- Primeiro contato com o Cliente
- Entrevista com o Cliente
- Planejamento
- Definição das tarefas e metodologia de trabalho
- Documentação e Diagramas
Desenvolvimento
- Configuração das ferramentas (IDE, DBeaver,
repositórios, JIRA, Git, Git Flow, etc)
- Definição das tecnologias e arquitetura do projeto
- Configuração do ambiente de desenvolvimento
(Docker, NPM, NGROK, etc)
- Modelagem dos dados/banco de dados
- Implementação do sistema junto com seus
respectivos testes
Tópicos
Deploy
- O que é?
- Definição dos ambientes
- Opções de CSP (cloud)
- Serviços e Ferramentas
- Processo de deploy
- Validação com o Cliente
- Entrega contínua
- Fluxo de entrega
Tópicos
- (D) Introdução
- (F) Primeiro contato com o Cliente
- (F) Entrevista com o Cliente
- (F) Planejamento
- (F) Definição das tarefas e metodologia de
trabalho (Scrum)
- (F) Documentação e Diagramas
- (C) Configuração das ferramentas (IDE, DBeaver,
repositórios, JIRA, Git, Git Flow, etc)
- (C) Definição das tecnologias e arquitetura do
projeto
- (C) Configuração do ambiente de
desenvolvimento (Docker, NPM, NGROK, etc)
- (C) Modelagem dos dados/banco
- (C) Implementação do sistema junto com seus
respectivos testes
- (D) Definição do ambiente de produção (AWS?
Digital Ocean?)
- (D) Configuração do ambiente de produção
- (D) Deploy
- (D) Validação com Cliente
- (D) Fluxo de entrega (repetição)
Primeiro contato
com o Cliente
Estabelecendo a Comunicação Inicial;
Compreendendo as Necessidades;
Construindo Relacionamento;
Estabelecendo a Comunicação Inicial
Inicialmente, entre em contato com o cliente de forma profissional e cordial.
Isso pode incluir enviar um e-mail introdutório, fazer uma ligação telefônica
para marcar uma reunião ou até mesmo visitar o cliente pessoalmente,
dependendo da natureza do projeto e da localização do cliente.
Construindo Relacionamento
Construir um relacionamento de confiança envolve ser profissional,
responder prontamente às comunicações do cliente e demonstrar empatia.
Mostre ao cliente que você está comprometido em entender e atender às
suas necessidades.
Compreendendo as Necessidades
Durante o primeiro contato, concentre-se em ouvir atentamente o cliente.
Faça perguntas abertas para entender o problema que o software deve
resolver, as metas do projeto e as expectativas.
Anote todas as informações relevantes.
Entrevista com o
Cliente
Conduzindo Entrevistas Eficientes;
Exploração de Requisitos;
Conduzindo Entrevistas Eficientes
Planeje a entrevista com antecedência.
Prepare uma lista de perguntas relevantes e mantenha a entrevista focada
nos objetivos do projeto.
Certifique-se de que todas as partes interessadas estejam presentes ou
sejam representadas.
Exploração de Requisitos
Durante a entrevista, aprofunde-se nos requisitos do projeto.
Pergunte sobre os recursos desejados, os problemas a serem resolvidos, as
restrições de tempo e orçamento, e quaisquer requisitos regulatórios ou de
segurança que possam ser aplicáveis.
Essa parte é de extrema importância porque, muitas vezes, nem mesmo o
cliente sabe exatamente o que ele deseja no projeto.
Planejamento
Estabelecendo Objetivos;
Alocação de Recursos;
Cronograma de Sequência de Tarefas;
Estabelecendo Objetivos
Uma solução que tem tudo a ver com metas é a metodologia SMART,
publicada George Doran em seu artigo “Há uma Maneira Inteligente de
Escrever Metas e Objetivos da Administração”.
A proposta é fazer com que o usuário escolha metas específicas,
mensuráveis, atingíveis, realistas, e acima de tudo, realizáveis.
Para isso, ao escolher as atividades, deve-se levar em consideração o
tamanho de toda a demanda, o seu tempo de execução, seu grau de
importância e se ela é alcançável no tempo estabelecido.
Alocação de Recursos
Identifique as pessoas, equipamentos, ferramentas e recursos de
software necessários para o projeto.
Isso inclui definir a equipe, hardware, software e quaisquer outros
ativos necessários.
Cronograma de Sequência de Tarefas
Crie um cronograma que inclua todas as atividades do projeto, atribuindo
datas de início e término a cada tarefa.
Estabeleça marcos importantes e identifique quais tarefas precisam ser
concluídas antes de outras.
Definição das Tarefas e
Metodologia de Trabalho
Principais Metodologias de Trabalho;
Desmembramento de Tarefas;
Adoção do Scrum;
Ferramentas Scrum;
Principais Metodologias de Trabalho
Kanban: Ele usa quadros Kanban para visualizar o trabalho em progresso e
limitar o trabalho em andamento. O objetivo é maximizar a eficiência,
minimizar o desperdício e melhorar a capacidade de resposta às mudanças.
Extreme Programming (XP): É uma metodologia que enfatiza a qualidade do
software, a comunicação eficaz e a entrega rápida. Ele inclui práticas como
desenvolvimento orientado a testes (TDD), integração contínua, programação
em pares e design simples.
Scrum: Ele se baseia em ciclos de desenvolvimento chamados "sprints" e
enfatiza a colaboração, transparência e adaptação contínua.
Desmembramento de Tarefas
Divida o projeto em tarefas menores e mais gerenciáveis, chamadas de
"histórias de usuário" no Scrum.
Cada história de usuário deve ser independente e entregável.
Adoção do Scrum: O que é
O Scrum é uma metodologia de trabalho ágil que é amplamente usada no
desenvolvimento de software, mas também pode ser aplicada em muitos
outros contextos.
Ele se baseia em princípios de transparência, inspeção e adaptação para
gerenciar projetos complexos.
O Scrum é projetado para ser flexível e adaptável, permitindo que as equipes
respondam a mudanças rapidamente.
Adoção do Scrum: Principais Conceitos
Sprint: Uma Sprint é um período de tempo fixo (geralmente 2 a 4 semanas)
durante o qual a equipe trabalha para entregar um incremento potencialmente
entregável do produto.
Daily: Uma reunião diária curta, na qual a equipe se reúne para compartilhar o
progresso, discutir obstáculos e planejar as atividades para o dia. Deve durar
no máximo 15 minutos.
Product Owner: Ele é o líder ou gerente do projeto, ou seja, é o responsável
pelo objetivo final do produto.
Adoção do Scrum: Principais Conceitos
Scrum Master: A sua função é garantir que todas as práticas ágeis sejam
seguidas no decorrer do processo, seguindo as recomendações para uma
execução de qualidade.
História de Usuário: São uma maneira de capturar os requisitos do cliente ou
do usuário de forma simples e eficaz. Elas são geralmente escritas na
perspectiva do usuário e descrevem uma funcionalidade desejada.
Stakeholders: Stakeholders são indivíduos, grupos ou entidades que têm
interesse, influência ou afetação em um projeto, organização ou iniciativa.
Ferramentas Scrum - Jira
Desenvolvedor: Atlassian.
Diferenças: O Jira é altamente configurável e é
mais adequado para equipes de
desenvolvimento que desejam uma ferramenta
abrangente para gerenciar projetos complexos.
No entanto, sua interface e configuração podem
ser complexas para equipes menores ou
projetos simples.
Ferramentas Scrum - Jira
Ferramentas Scrum - Youtrack
Desenvolvedor: JetBrains.
Diferenças: O YouTrack é altamente
configurável e flexível, sem ser tão complexo
quanto o Jira. É uma boa opção para equipes
que desejam um equilíbrio entre
funcionalidade avançada e usabilidade.
Ferramentas Scrum - Youtrack
Ferramentas Scrum - Trello
Desenvolvedor: Atlassian.
Diferenças: O Trello é mais simples e não é
tão personalizável quanto o Jira e o
YouTrack. Ele é mais adequado para equipes
que não precisam de recursos avançados de
gerenciamento de projetos.
Ferramentas Scrum - Trello
Documentação e
Diagramas
Documentação;
Diagramas UML;
Ferramentas de Diagramas UML;
Mantenha a Documentação Atualizada;
Documentação
Crie documentos que descrevam em detalhes todo o processo de
desenvolvimento do projeto.
Isso pode incluir descrições de funcionalidades, requisitos de desempenho,
requisitos de segurança e critérios de aceitação.
Diagramas UML
O que é UML?
Uma linguagem de modelagem gráfica amplamente utilizada na engenharia
de software para representar visualmente a estrutura de sistemas complexos.
Para que serve?
Facilitar a comunicação entre os membros da equipe de desenvolvimento,
documentar sistemas, analisar sistemas existentes e projetar novos
sistemas. Os diagramas UML fornecem uma representação visual das
diferentes partes de um sistema e como elas se relacionam.
Diagrama de Casos de Uso
O objetivo do diagrama de caso de
uso em UML é demonstrar as
diferentes maneiras que o usuário
pode interagir com um sistema.
Diagrama de Classes
Diagramas de classes estão entre os
tipos mais úteis de diagramas UML
pois mapeiam de forma clara a
estrutura de um determinado
sistema ao modelar suas classes,
seus atributos, operações e relações
entre objetos.
Diagrama de Sequência
Um diagrama de sequência é uma
espécie de diagrama de interação,
pois descreve como, e em qual
ordem, um grupo de objetos trabalha
em conjunto.
Ferramentas de Diagramas UML - Dia
O Dia é uma ferramenta open source
amplamente utilizada para criar diagramas
UML.
Sua facilidade de uso, suporte a uma
variedade de elementos UML e capacidade
de personalização o tornam uma escolha
popular para os profissionais da área.
Ferramentas de Diagramas UML - Draw.io
Sua acessibilidade, recursos de colaboração
e ampla gama de opções de exportação o
tornam uma escolha popular para
profissionais de diversas áreas que precisam
criar e compartilhar diagramas visualmente
atraentes.
Além disso, sua natureza de código aberto e
gratuita o torna uma opção acessível para
muitos usuários.
Ferramentas de Diagramas UML - Astah
O Astah é uma ferramenta robusta e
altamente versátil que é amplamente
utilizada em engenharia de software e
desenvolvimento de sistemas.
Ele oferece uma variedade de recursos para
modelagem, análise, documentação e
colaboração, tornando-se uma escolha
popular para equipes de desenvolvimento de
software.
Ferramentas de Diagramas UML - PlantUML
O PlantUML é uma escolha popular para
desenvolvedores que desejam criar
diagramas UML de maneira rápida e eficiente
usando uma sintaxe de texto simples.
Sua natureza de código aberto, suporte a
diversos tipos de diagramas e facilidade de
integração com editores de texto o tornam
uma ferramenta versátil e acessível para
modelagem UML.
Mantenha a Documentação Atualizada
Ao decorrer do projeto, é necessário tratar a documentação como um recurso
vivo, portanto, ela deve ser atualizada conforme as etapas do
desenvolvimento são cumpridas.
Desenvolvimento
Configuração das ferramentas
O primeiro passo para seguir com a codificação e o sistema, é a configuração
das ferramentas.
Essa etapa engloba diferentes passos a passos, e é importante ser bem
definida para preparar um ambiente de programação eficaz.
IDE
(Ambiente de Desenvolvimento Integrado)
Tem um impacto sobre o desenvolvimento do código, cada IDE oferece
recursos diferentes que podem auxiliar para diferentes casos na
programação.
Banco de Dados
A escolha da ferramenta para a administração do banco de dados certa
vai facilitar para a modelagem, interação e consultas no banco.
Sistemas de Controle de Versão
Permite criação de várias instâncias do código, o que facilita ao se
trabalhar em equipe, ajudando para que cada pessoa trabalhe sua
parte de forma individual.
Git Flow
(Fluxo de desenvolvimento)
Ajuda a manter um ciclo de desenvolvimento estruturado, com
recursos como branches de feature, release e hotfix.
https://docs.cronapp.io/display/CRON2/Fluxo+de+trabalho+Git+flow
Repositórios e Gerenciamento de Código
Armazenamento do código-fonte. Ter o seu projeto em um repositório,
ajuda também para a colaboração do projeto e o controle de
versionamento dele.
Gerenciamento de Projetos
Crucial para que os objetivos do sistema sejam alcançados, como
também ajudam a manter o prazo e a qualidade de um sistema.
Definição das Tecnologias e Arquitetura do projeto
Etapa onde será definido o escopo inicial do sistema.
Nessa fase é importante ter paciência, analisar e validar os requisitos,
para que o seu sistema entregue o esperado.
Seleção de Tecnologias
Para o desenvolvimento do sistema, você precisa escolher com quais
tecnologias você irá trabalhar, e para cada problema ou projeto, pode ser
diferente, é crucial analisar e validar o uso.
- Linguagem de programação para web;
- Linguagem de programação para mobile;
- Influência na latência do sistema.
Arquitetura do Sistema
Como o sistema será estruturado, nessa etapa leva-se em conta os
requisito e uma análise cuidadosa.
- Estruturas monolíticas;
- Micro serviços;
- Arquitetura serverless.
Banco de Dados
Escolher o banco de dados correto com base nos requisitos é crucial
para o sucesso de um projeto.
Cada banco de dados tem suas próprias características, como
desempenho, escalabilidade, segurança e capacidade de
gerenciamento de dados.
Configuração do ambiente de desenvolvimento
A configuração do ambiente de desenvolvimento desempenha um papel
crítico na produtividade dos desenvolvedores e na consistência do processo
de desenvolvimento.
- Versionamentos das ferramentas;
- Utilização do docker.
Modelagem dos dados/banco de dados
A modelagem de dados e do banco de dados desempenha um papel
fundamental no desenvolvimento de um sistema, uma vez que define como
os dados são organizados, armazenados e acessados.
Modelagem dos dados/banco
Modelagem Conceitual
- Primeiro passo importante para entender e definir o escopo e a estrutura geral
de um banco de dados;
- Realizada por meio de diagramas de entidade-relacionamento (ER).
Modelagem Lógica
- Envolve a tradução dos conceitos e entidades da modelagem conceitual em
uma estrutura mais detalhada e precisa;
- Definição das tabelas, seus campos e as chaves primárias e estrangeiras.
Modelagem Física
- Etapa final no projeto de banco de dados;
- Implementação e escolha de tipos de dados, criação de índices, definição de
chaves estrangeiras, alocação de espaço no disco e otimização de consultas
Exemplo de modelagem de dados
Implementação do sistema junto com seus respectivos
testes
A implementação do sistema e seus testes desempenham um papel crítico
no processo de desenvolvimento, uma vez que transformam o design em
código funcional e garantem a qualidade e a confiabilidade do sistema.
Desenvolvimento de Código
Com base nos requisitos, definição do projeto e gerenciamento das
atividades, será feito o desenvolvimento do código, é nessa etapa, onde tudo
“ganha vida”.
- Definição de padrões de codificação;
Testes do Sistema
Os testes do sistema são fundamentais na garantia da qualidade e
confiabilidade do software.
- Identificação e correção de falhas;
- Economização de tempo;
Testes
https://allanacastenharo.medium.com/pir%C3%
A2mide-de-testes-3db39e4e8b42
Base - Testes de Unidade
- Teste de qualquer unidade individual
do do código.
Meio - Testes de Integração
- Têm como objetivo testar um conjunto
de unidades interagindo entre si.
Topo - Testes de Ponta a Ponta
- Têm como objetivo principal simular o
comportamento de um usuário final em
nossa aplicação.
Deploy
No que diz respeito a software e desenvolvimento web significa enviar
mudanças ou atualizações de um ambiente de implantação para outro,
podendo ser o principal (produção) ou algum intermediário.
- Desenvolvimento -> Homologação;
- Homologação -> Produção;
- etc.
Estratégias
- Rolling
- Blue-Green
- Canary
Deploy ou Deployment: O que é?
Quais ambientes o sistema precisa?
Local e Desenvolvimento
- Ambiente que está sempre atualizado com o código de desenvolvimento.
Normalmente instável.
Deploy: Definição dos ambientes
Homologação / Testes / Staging
- Ambiente onde outros membros da equipe conseguem acesso para
poderem realizar testes e validações das funcionalidades desenvolvidas.
- Este ambiente também pode ser utilizado para homologação de alguma
integração, logo, ocasionalmente, terceiros também têm acesso.
- Busca estabilidade
Deploy: Definição dos ambientes
Produção
- Ambiente de produção, onde, de fato, o sistema será utilizado pelos
usuários reais.
- Estável
- Maior esforço na configuração da infra-estrutura
- Disponibilidade
- Escalabilidade Horizontal ou Vertical
- Consistência
- Segurança
- Backup
Deploy: Definição dos ambientes
Load Balancer
https://medium.com/must-know-computer-science/system-design-load-balancing-1c2e7675fc27
Deploy: Estratégia Rolling
Características Principais:
- Mais simples de ser adotada
- Subir atualização serviço por serviço
- Versão antiga só é totalmente desligada
quando toda a migração foi concluída
Vantagens:
- Mais simples de ser feito
- Não há muito aumento no custo
operacional
Desvantagens:
- Mais suscetível à instabilidades
Deploy: Estratégia Blue-Green
Características Principais:
- Um ambiente inteiro novo é configurado e
testado.
- Ao final dos testes, o Load Balancer deixa de
apontar para o ambiente antigo (blue) e passa
a apontar para o ambiente novo (green).
Vantagens:
- Praticamente zero downtime
- Testes em ambiente de produção, antes de
efetivamente começar a ser utilizado pelos
usuários
Desvantagens:
- Custo
Deploy: Estratégia Canary
Características Principais:
- Mais complexa
- Testar versões ao poucos em produção
com os usuários reais
- Feature-flag
- Liberar funcionalidades para uma
porcentagem de usuários
- Ex: usuários com mais de 30 anos,
ou somente usuários com mais de
um ano de cadastro na plataforma
- Ao final, todos os usuários recebem a
atualização.
- Amazon Web Services(AWS)
- Google Cloud Platform (GCP)
- Microsoft Azure
- Oracle Cloud Infrastructure (OCI)
- Digital Ocean
- Heroku
- Linode
- etc
Deploy: Opções de Cloud (CSP)
- Execução dos testes automatizados, todos precisam passar;
- Definição da versão (Semantic Versioning);
- Criação da build localmente e/ou no repositório de código
- Upload para os servidores seguindo a estratégia adequada
- Validação interna e com o cliente
Deploy: Processo de deploy
Deploy: Entrega Contínua
https://www.iprog.it/blog/libreria-framework/introduzione-al-continuous-delivery/
O principal objetivo da validação é assegurar que o sistema em questão
atenda todas as características de sua especificação, identificando se estão
de acordo com as necessidades do cliente.
A validação é importante ao final de cada deploy, pois, quanto mais o
desenvolvimento se estende, mais caro será corrigir requisitos não
atendidos.
Deploy: Validação com o Cliente
Ferramentas
- Terraform: Provisionamento de infra-estrutura utilizando código (IaC)
- Terragrunt: Facilita gerenciamento de vários projetos utilizando Terraform
- Ansible: Automação de tarefas em TI
- Termius: Terminal com funcionalidades extras para facilitar gerenciamento de
servidores
Serviços
- Cloudflare: “Canivete suiço” de serviços voltados à ambientes cloud, como
Proxy, DNS, Roteamento, otimização, etc.
- Forge: Gerenciamento de servidores em nuvem
Deploy: Serviços e Ferramentas
Telemetria
- New Relic
- Open Telemetry
- Zabbix
- Prometheus + Grafana
Gerenciamento de Erros
- Sentry
- Bugsnag
- Etc
Extra: Monitoramento
Extra: Semantic Versioning
https://semver.org/
Conclusão
Dúvidas?
Referências
- https://www.altus.com.br/post/151/a-importancia-da-validacao-no-desenvolvimento-de-
produtos
- https://www.alura.com.br/artigos/git-flow-o-que-e-como-quando-utilizar
- https://blog.onedaytesting.com.br/piramide-de-teses/
- https://dayvsonlima.medium.com/entenda-de-uma-vez-por-todas-o-que-s%C3%A3o-teste
s-unit%C3%A1rios-para-que-servem-e-como-faz%C3%AA-los-2a6f645bab3
- https://www.ibm.com/br-pt/topics/data-modeling
- https://kenzie.com.br/blog/ide/
- https://kenzie.com.br/blog/testes-automatizados
- https://rockcontent.com/br/blog/banco-de-dados/
- https://tableless.com.br/tipos-de-deploy/
- https://medium.com/must-know-computer-science/system-design-load-balancing-1c2e7
675fc27
- https://www.iprog.it/blog/libreria-framework/introduzione-al-continuous-delivery/
- https://www.lucidchart.com/blog/pt/tipos-de-diagramas-UML
- https://www.logiquesistemas.com.br/blog/desenvolvimento-de-software-6-passos
Referências
- https://metropoleparque.imd.ufrn.br/parque/blog/6350
- https://www.lucidchart.com/pages/pt/diagrama-de-caso-de-uso-uml
- https://www.lucidchart.com/pages/pt/o-que-e-diagrama-de-classe-uml
- https://www.lucidchart.com/pages/pt/o-que-e-diagrama-de-sequencia-uml
- https://plantuml.com
- https://astah.net/pt/
- https://www.drawio.com
- http://dia-installer.de/shapes/UML/index.html.en
Obrigado!
Danilo Pinotti
- danilopinotti.com.br
- github.com/danilopinotti
Camila Souza
- github.com/camilaesouza
Fernanda Larocca
- github.com/fernandalarocca

Mais conteúdo relacionado

Semelhante a Do Zero à Produção

Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de bananaejedelmal
 
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...Luiz Lemos
 
Gestão de Projetos e Ferramentas
Gestão de Projetos e FerramentasGestão de Projetos e Ferramentas
Gestão de Projetos e FerramentasNei Grando
 
Gerenciamento ágil de processos - SCRUM
Gerenciamento ágil de processos - SCRUMGerenciamento ágil de processos - SCRUM
Gerenciamento ágil de processos - SCRUMLucas Vinícius
 
Métodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de SoftwareMétodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de Softwarealexandre_malaquias
 
Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15claudioluciodovallopes
 
Erika questionario pt 1 (Eng Software III).
Erika questionario pt 1 (Eng Software III).Erika questionario pt 1 (Eng Software III).
Erika questionario pt 1 (Eng Software III).Érika Santos
 
Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)Rennan Martini
 
Sharepoint intranet - anatomia de um projeto
Sharepoint intranet - anatomia de um projetoSharepoint intranet - anatomia de um projeto
Sharepoint intranet - anatomia de um projetoJoão Beltrão
 
Scrum uma metodologia ágil paragestão e planejamento de projetos de software
Scrum uma metodologia ágil paragestão e planejamento de projetos de softwareScrum uma metodologia ágil paragestão e planejamento de projetos de software
Scrum uma metodologia ágil paragestão e planejamento de projetos de softwareThiago Reis da Silva
 

Semelhante a Do Zero à Produção (20)

Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008
 
Desenvolvimento Ágil
Desenvolvimento ÁgilDesenvolvimento Ágil
Desenvolvimento Ágil
 
Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
 
Artigo23
Artigo23Artigo23
Artigo23
 
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...
 
Gestão de Projetos e Ferramentas
Gestão de Projetos e FerramentasGestão de Projetos e Ferramentas
Gestão de Projetos e Ferramentas
 
Artigo
ArtigoArtigo
Artigo
 
Gerenciamento ágil de processos - SCRUM
Gerenciamento ágil de processos - SCRUMGerenciamento ágil de processos - SCRUM
Gerenciamento ágil de processos - SCRUM
 
Métodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de SoftwareMétodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de Software
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
Gerenciamento ágil de projetos com scrum
Gerenciamento ágil de projetos com scrumGerenciamento ágil de projetos com scrum
Gerenciamento ágil de projetos com scrum
 
Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15
 
Gerenciamento de projetos de TI
Gerenciamento de projetos de TIGerenciamento de projetos de TI
Gerenciamento de projetos de TI
 
Erika questionario pt 1 (Eng Software III).
Erika questionario pt 1 (Eng Software III).Erika questionario pt 1 (Eng Software III).
Erika questionario pt 1 (Eng Software III).
 
Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)
 
FDD
FDDFDD
FDD
 
Sharepoint intranet - anatomia de um projeto
Sharepoint intranet - anatomia de um projetoSharepoint intranet - anatomia de um projeto
Sharepoint intranet - anatomia de um projeto
 
Scrum uma metodologia ágil paragestão e planejamento de projetos de software
Scrum uma metodologia ágil paragestão e planejamento de projetos de softwareScrum uma metodologia ágil paragestão e planejamento de projetos de software
Scrum uma metodologia ágil paragestão e planejamento de projetos de software
 
Mini aula análise de requisitos
Mini aula análise de requisitosMini aula análise de requisitos
Mini aula análise de requisitos
 
38484931 questionario-es
38484931 questionario-es38484931 questionario-es
38484931 questionario-es
 

Mais de Danilo Pinotti

Site estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfSite estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfDanilo Pinotti
 
Vue 2 - Componentes [2 de 2 - 2020]
Vue 2 - Componentes [2 de 2 - 2020]Vue 2 - Componentes [2 de 2 - 2020]
Vue 2 - Componentes [2 de 2 - 2020]Danilo Pinotti
 
Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]Danilo Pinotti
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Danilo Pinotti
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Danilo Pinotti
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACDanilo Pinotti
 
Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2Danilo Pinotti
 
O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3Danilo Pinotti
 
Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3
Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3
Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3Danilo Pinotti
 
Alguns Helpers do Laravel 5.6
Alguns Helpers do Laravel 5.6Alguns Helpers do Laravel 5.6
Alguns Helpers do Laravel 5.6Danilo Pinotti
 
Deixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDeixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDanilo Pinotti
 

Mais de Danilo Pinotti (12)

Site estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfSite estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdf
 
Vue 2 - Componentes [2 de 2 - 2020]
Vue 2 - Componentes [2 de 2 - 2020]Vue 2 - Componentes [2 de 2 - 2020]
Vue 2 - Componentes [2 de 2 - 2020]
 
Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]
 
Code Review
Code ReviewCode Review
Code Review
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2
 
O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3
 
Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3
Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3
Comunicação entre componentes com Vue 2. Talk Vue Básico 2/3
 
Alguns Helpers do Laravel 5.6
Alguns Helpers do Laravel 5.6Alguns Helpers do Laravel 5.6
Alguns Helpers do Laravel 5.6
 
Deixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDeixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidas
 

Do Zero à Produção

  • 1. Por: Camila Souza Danilo Pinotti Fernanda Larocca Do Zero à Produção
  • 3. Danilo Pinotti - danilopinotti.com.br - github.com/danilopinotti Arquiteto de Software (PUC MINAS, 2022) Tecnólogo em Sistemas para Internet (UTFPR, 2017) Desenvolvedor Sênior na empresa Let’s Sistemas (Atualmente) Co-fundador e Desenvolvedor Web/IoT na Trigy (Atualmente)
  • 4. Camila Souza - github.com/camilaesouza Tecnólogo em Sistemas para Internet (UTFPR, Em andamento) Desenvolvedor Sênior na empresa Let’s Sistemas (Atualmente)
  • 5. Fernanda Larocca - github.com/fernandalarocca Técnologo em Análise e Desenvolvimento de Sistemas (UniGuairacá, Em andamento) Estagiária de Desenvolvimento Back-end na empresa Let’s Sistemas (Atualmente)
  • 6. Tópicos Planejamento - Primeiro contato com o Cliente - Entrevista com o Cliente - Planejamento - Definição das tarefas e metodologia de trabalho - Documentação e Diagramas Desenvolvimento - Configuração das ferramentas (IDE, DBeaver, repositórios, JIRA, Git, Git Flow, etc) - Definição das tecnologias e arquitetura do projeto - Configuração do ambiente de desenvolvimento (Docker, NPM, NGROK, etc) - Modelagem dos dados/banco de dados - Implementação do sistema junto com seus respectivos testes
  • 7. Tópicos Deploy - O que é? - Definição dos ambientes - Opções de CSP (cloud) - Serviços e Ferramentas - Processo de deploy - Validação com o Cliente - Entrega contínua - Fluxo de entrega
  • 8. Tópicos - (D) Introdução - (F) Primeiro contato com o Cliente - (F) Entrevista com o Cliente - (F) Planejamento - (F) Definição das tarefas e metodologia de trabalho (Scrum) - (F) Documentação e Diagramas - (C) Configuração das ferramentas (IDE, DBeaver, repositórios, JIRA, Git, Git Flow, etc) - (C) Definição das tecnologias e arquitetura do projeto - (C) Configuração do ambiente de desenvolvimento (Docker, NPM, NGROK, etc) - (C) Modelagem dos dados/banco - (C) Implementação do sistema junto com seus respectivos testes - (D) Definição do ambiente de produção (AWS? Digital Ocean?) - (D) Configuração do ambiente de produção - (D) Deploy - (D) Validação com Cliente - (D) Fluxo de entrega (repetição)
  • 9. Primeiro contato com o Cliente Estabelecendo a Comunicação Inicial; Compreendendo as Necessidades; Construindo Relacionamento;
  • 10. Estabelecendo a Comunicação Inicial Inicialmente, entre em contato com o cliente de forma profissional e cordial. Isso pode incluir enviar um e-mail introdutório, fazer uma ligação telefônica para marcar uma reunião ou até mesmo visitar o cliente pessoalmente, dependendo da natureza do projeto e da localização do cliente.
  • 11. Construindo Relacionamento Construir um relacionamento de confiança envolve ser profissional, responder prontamente às comunicações do cliente e demonstrar empatia. Mostre ao cliente que você está comprometido em entender e atender às suas necessidades.
  • 12. Compreendendo as Necessidades Durante o primeiro contato, concentre-se em ouvir atentamente o cliente. Faça perguntas abertas para entender o problema que o software deve resolver, as metas do projeto e as expectativas. Anote todas as informações relevantes.
  • 13. Entrevista com o Cliente Conduzindo Entrevistas Eficientes; Exploração de Requisitos;
  • 14. Conduzindo Entrevistas Eficientes Planeje a entrevista com antecedência. Prepare uma lista de perguntas relevantes e mantenha a entrevista focada nos objetivos do projeto. Certifique-se de que todas as partes interessadas estejam presentes ou sejam representadas.
  • 15. Exploração de Requisitos Durante a entrevista, aprofunde-se nos requisitos do projeto. Pergunte sobre os recursos desejados, os problemas a serem resolvidos, as restrições de tempo e orçamento, e quaisquer requisitos regulatórios ou de segurança que possam ser aplicáveis. Essa parte é de extrema importância porque, muitas vezes, nem mesmo o cliente sabe exatamente o que ele deseja no projeto.
  • 16. Planejamento Estabelecendo Objetivos; Alocação de Recursos; Cronograma de Sequência de Tarefas;
  • 17. Estabelecendo Objetivos Uma solução que tem tudo a ver com metas é a metodologia SMART, publicada George Doran em seu artigo “Há uma Maneira Inteligente de Escrever Metas e Objetivos da Administração”. A proposta é fazer com que o usuário escolha metas específicas, mensuráveis, atingíveis, realistas, e acima de tudo, realizáveis. Para isso, ao escolher as atividades, deve-se levar em consideração o tamanho de toda a demanda, o seu tempo de execução, seu grau de importância e se ela é alcançável no tempo estabelecido.
  • 18. Alocação de Recursos Identifique as pessoas, equipamentos, ferramentas e recursos de software necessários para o projeto. Isso inclui definir a equipe, hardware, software e quaisquer outros ativos necessários.
  • 19. Cronograma de Sequência de Tarefas Crie um cronograma que inclua todas as atividades do projeto, atribuindo datas de início e término a cada tarefa. Estabeleça marcos importantes e identifique quais tarefas precisam ser concluídas antes de outras.
  • 20. Definição das Tarefas e Metodologia de Trabalho Principais Metodologias de Trabalho; Desmembramento de Tarefas; Adoção do Scrum; Ferramentas Scrum;
  • 21. Principais Metodologias de Trabalho Kanban: Ele usa quadros Kanban para visualizar o trabalho em progresso e limitar o trabalho em andamento. O objetivo é maximizar a eficiência, minimizar o desperdício e melhorar a capacidade de resposta às mudanças. Extreme Programming (XP): É uma metodologia que enfatiza a qualidade do software, a comunicação eficaz e a entrega rápida. Ele inclui práticas como desenvolvimento orientado a testes (TDD), integração contínua, programação em pares e design simples. Scrum: Ele se baseia em ciclos de desenvolvimento chamados "sprints" e enfatiza a colaboração, transparência e adaptação contínua.
  • 22. Desmembramento de Tarefas Divida o projeto em tarefas menores e mais gerenciáveis, chamadas de "histórias de usuário" no Scrum. Cada história de usuário deve ser independente e entregável.
  • 23. Adoção do Scrum: O que é O Scrum é uma metodologia de trabalho ágil que é amplamente usada no desenvolvimento de software, mas também pode ser aplicada em muitos outros contextos. Ele se baseia em princípios de transparência, inspeção e adaptação para gerenciar projetos complexos. O Scrum é projetado para ser flexível e adaptável, permitindo que as equipes respondam a mudanças rapidamente.
  • 24. Adoção do Scrum: Principais Conceitos Sprint: Uma Sprint é um período de tempo fixo (geralmente 2 a 4 semanas) durante o qual a equipe trabalha para entregar um incremento potencialmente entregável do produto. Daily: Uma reunião diária curta, na qual a equipe se reúne para compartilhar o progresso, discutir obstáculos e planejar as atividades para o dia. Deve durar no máximo 15 minutos. Product Owner: Ele é o líder ou gerente do projeto, ou seja, é o responsável pelo objetivo final do produto.
  • 25. Adoção do Scrum: Principais Conceitos Scrum Master: A sua função é garantir que todas as práticas ágeis sejam seguidas no decorrer do processo, seguindo as recomendações para uma execução de qualidade. História de Usuário: São uma maneira de capturar os requisitos do cliente ou do usuário de forma simples e eficaz. Elas são geralmente escritas na perspectiva do usuário e descrevem uma funcionalidade desejada. Stakeholders: Stakeholders são indivíduos, grupos ou entidades que têm interesse, influência ou afetação em um projeto, organização ou iniciativa.
  • 26. Ferramentas Scrum - Jira Desenvolvedor: Atlassian. Diferenças: O Jira é altamente configurável e é mais adequado para equipes de desenvolvimento que desejam uma ferramenta abrangente para gerenciar projetos complexos. No entanto, sua interface e configuração podem ser complexas para equipes menores ou projetos simples.
  • 28. Ferramentas Scrum - Youtrack Desenvolvedor: JetBrains. Diferenças: O YouTrack é altamente configurável e flexível, sem ser tão complexo quanto o Jira. É uma boa opção para equipes que desejam um equilíbrio entre funcionalidade avançada e usabilidade.
  • 30. Ferramentas Scrum - Trello Desenvolvedor: Atlassian. Diferenças: O Trello é mais simples e não é tão personalizável quanto o Jira e o YouTrack. Ele é mais adequado para equipes que não precisam de recursos avançados de gerenciamento de projetos.
  • 32. Documentação e Diagramas Documentação; Diagramas UML; Ferramentas de Diagramas UML; Mantenha a Documentação Atualizada;
  • 33. Documentação Crie documentos que descrevam em detalhes todo o processo de desenvolvimento do projeto. Isso pode incluir descrições de funcionalidades, requisitos de desempenho, requisitos de segurança e critérios de aceitação.
  • 34. Diagramas UML O que é UML? Uma linguagem de modelagem gráfica amplamente utilizada na engenharia de software para representar visualmente a estrutura de sistemas complexos. Para que serve? Facilitar a comunicação entre os membros da equipe de desenvolvimento, documentar sistemas, analisar sistemas existentes e projetar novos sistemas. Os diagramas UML fornecem uma representação visual das diferentes partes de um sistema e como elas se relacionam.
  • 35. Diagrama de Casos de Uso O objetivo do diagrama de caso de uso em UML é demonstrar as diferentes maneiras que o usuário pode interagir com um sistema.
  • 36. Diagrama de Classes Diagramas de classes estão entre os tipos mais úteis de diagramas UML pois mapeiam de forma clara a estrutura de um determinado sistema ao modelar suas classes, seus atributos, operações e relações entre objetos.
  • 37. Diagrama de Sequência Um diagrama de sequência é uma espécie de diagrama de interação, pois descreve como, e em qual ordem, um grupo de objetos trabalha em conjunto.
  • 38. Ferramentas de Diagramas UML - Dia O Dia é uma ferramenta open source amplamente utilizada para criar diagramas UML. Sua facilidade de uso, suporte a uma variedade de elementos UML e capacidade de personalização o tornam uma escolha popular para os profissionais da área.
  • 39. Ferramentas de Diagramas UML - Draw.io Sua acessibilidade, recursos de colaboração e ampla gama de opções de exportação o tornam uma escolha popular para profissionais de diversas áreas que precisam criar e compartilhar diagramas visualmente atraentes. Além disso, sua natureza de código aberto e gratuita o torna uma opção acessível para muitos usuários.
  • 40. Ferramentas de Diagramas UML - Astah O Astah é uma ferramenta robusta e altamente versátil que é amplamente utilizada em engenharia de software e desenvolvimento de sistemas. Ele oferece uma variedade de recursos para modelagem, análise, documentação e colaboração, tornando-se uma escolha popular para equipes de desenvolvimento de software.
  • 41. Ferramentas de Diagramas UML - PlantUML O PlantUML é uma escolha popular para desenvolvedores que desejam criar diagramas UML de maneira rápida e eficiente usando uma sintaxe de texto simples. Sua natureza de código aberto, suporte a diversos tipos de diagramas e facilidade de integração com editores de texto o tornam uma ferramenta versátil e acessível para modelagem UML.
  • 42. Mantenha a Documentação Atualizada Ao decorrer do projeto, é necessário tratar a documentação como um recurso vivo, portanto, ela deve ser atualizada conforme as etapas do desenvolvimento são cumpridas.
  • 44. Configuração das ferramentas O primeiro passo para seguir com a codificação e o sistema, é a configuração das ferramentas. Essa etapa engloba diferentes passos a passos, e é importante ser bem definida para preparar um ambiente de programação eficaz.
  • 45. IDE (Ambiente de Desenvolvimento Integrado) Tem um impacto sobre o desenvolvimento do código, cada IDE oferece recursos diferentes que podem auxiliar para diferentes casos na programação.
  • 46. Banco de Dados A escolha da ferramenta para a administração do banco de dados certa vai facilitar para a modelagem, interação e consultas no banco.
  • 47. Sistemas de Controle de Versão Permite criação de várias instâncias do código, o que facilita ao se trabalhar em equipe, ajudando para que cada pessoa trabalhe sua parte de forma individual.
  • 48. Git Flow (Fluxo de desenvolvimento) Ajuda a manter um ciclo de desenvolvimento estruturado, com recursos como branches de feature, release e hotfix. https://docs.cronapp.io/display/CRON2/Fluxo+de+trabalho+Git+flow
  • 49. Repositórios e Gerenciamento de Código Armazenamento do código-fonte. Ter o seu projeto em um repositório, ajuda também para a colaboração do projeto e o controle de versionamento dele.
  • 50. Gerenciamento de Projetos Crucial para que os objetivos do sistema sejam alcançados, como também ajudam a manter o prazo e a qualidade de um sistema.
  • 51. Definição das Tecnologias e Arquitetura do projeto Etapa onde será definido o escopo inicial do sistema. Nessa fase é importante ter paciência, analisar e validar os requisitos, para que o seu sistema entregue o esperado.
  • 52. Seleção de Tecnologias Para o desenvolvimento do sistema, você precisa escolher com quais tecnologias você irá trabalhar, e para cada problema ou projeto, pode ser diferente, é crucial analisar e validar o uso. - Linguagem de programação para web; - Linguagem de programação para mobile; - Influência na latência do sistema.
  • 53. Arquitetura do Sistema Como o sistema será estruturado, nessa etapa leva-se em conta os requisito e uma análise cuidadosa. - Estruturas monolíticas; - Micro serviços; - Arquitetura serverless.
  • 54. Banco de Dados Escolher o banco de dados correto com base nos requisitos é crucial para o sucesso de um projeto. Cada banco de dados tem suas próprias características, como desempenho, escalabilidade, segurança e capacidade de gerenciamento de dados.
  • 55. Configuração do ambiente de desenvolvimento A configuração do ambiente de desenvolvimento desempenha um papel crítico na produtividade dos desenvolvedores e na consistência do processo de desenvolvimento. - Versionamentos das ferramentas; - Utilização do docker.
  • 56. Modelagem dos dados/banco de dados A modelagem de dados e do banco de dados desempenha um papel fundamental no desenvolvimento de um sistema, uma vez que define como os dados são organizados, armazenados e acessados.
  • 57. Modelagem dos dados/banco Modelagem Conceitual - Primeiro passo importante para entender e definir o escopo e a estrutura geral de um banco de dados; - Realizada por meio de diagramas de entidade-relacionamento (ER). Modelagem Lógica - Envolve a tradução dos conceitos e entidades da modelagem conceitual em uma estrutura mais detalhada e precisa; - Definição das tabelas, seus campos e as chaves primárias e estrangeiras. Modelagem Física - Etapa final no projeto de banco de dados; - Implementação e escolha de tipos de dados, criação de índices, definição de chaves estrangeiras, alocação de espaço no disco e otimização de consultas
  • 59. Implementação do sistema junto com seus respectivos testes A implementação do sistema e seus testes desempenham um papel crítico no processo de desenvolvimento, uma vez que transformam o design em código funcional e garantem a qualidade e a confiabilidade do sistema.
  • 60. Desenvolvimento de Código Com base nos requisitos, definição do projeto e gerenciamento das atividades, será feito o desenvolvimento do código, é nessa etapa, onde tudo “ganha vida”. - Definição de padrões de codificação;
  • 61. Testes do Sistema Os testes do sistema são fundamentais na garantia da qualidade e confiabilidade do software. - Identificação e correção de falhas; - Economização de tempo;
  • 62. Testes https://allanacastenharo.medium.com/pir%C3% A2mide-de-testes-3db39e4e8b42 Base - Testes de Unidade - Teste de qualquer unidade individual do do código. Meio - Testes de Integração - Têm como objetivo testar um conjunto de unidades interagindo entre si. Topo - Testes de Ponta a Ponta - Têm como objetivo principal simular o comportamento de um usuário final em nossa aplicação.
  • 64. No que diz respeito a software e desenvolvimento web significa enviar mudanças ou atualizações de um ambiente de implantação para outro, podendo ser o principal (produção) ou algum intermediário. - Desenvolvimento -> Homologação; - Homologação -> Produção; - etc. Estratégias - Rolling - Blue-Green - Canary Deploy ou Deployment: O que é?
  • 65. Quais ambientes o sistema precisa? Local e Desenvolvimento - Ambiente que está sempre atualizado com o código de desenvolvimento. Normalmente instável. Deploy: Definição dos ambientes
  • 66. Homologação / Testes / Staging - Ambiente onde outros membros da equipe conseguem acesso para poderem realizar testes e validações das funcionalidades desenvolvidas. - Este ambiente também pode ser utilizado para homologação de alguma integração, logo, ocasionalmente, terceiros também têm acesso. - Busca estabilidade Deploy: Definição dos ambientes
  • 67. Produção - Ambiente de produção, onde, de fato, o sistema será utilizado pelos usuários reais. - Estável - Maior esforço na configuração da infra-estrutura - Disponibilidade - Escalabilidade Horizontal ou Vertical - Consistência - Segurança - Backup Deploy: Definição dos ambientes
  • 69. Deploy: Estratégia Rolling Características Principais: - Mais simples de ser adotada - Subir atualização serviço por serviço - Versão antiga só é totalmente desligada quando toda a migração foi concluída Vantagens: - Mais simples de ser feito - Não há muito aumento no custo operacional Desvantagens: - Mais suscetível à instabilidades
  • 70. Deploy: Estratégia Blue-Green Características Principais: - Um ambiente inteiro novo é configurado e testado. - Ao final dos testes, o Load Balancer deixa de apontar para o ambiente antigo (blue) e passa a apontar para o ambiente novo (green). Vantagens: - Praticamente zero downtime - Testes em ambiente de produção, antes de efetivamente começar a ser utilizado pelos usuários Desvantagens: - Custo
  • 71. Deploy: Estratégia Canary Características Principais: - Mais complexa - Testar versões ao poucos em produção com os usuários reais - Feature-flag - Liberar funcionalidades para uma porcentagem de usuários - Ex: usuários com mais de 30 anos, ou somente usuários com mais de um ano de cadastro na plataforma - Ao final, todos os usuários recebem a atualização.
  • 72. - Amazon Web Services(AWS) - Google Cloud Platform (GCP) - Microsoft Azure - Oracle Cloud Infrastructure (OCI) - Digital Ocean - Heroku - Linode - etc Deploy: Opções de Cloud (CSP)
  • 73. - Execução dos testes automatizados, todos precisam passar; - Definição da versão (Semantic Versioning); - Criação da build localmente e/ou no repositório de código - Upload para os servidores seguindo a estratégia adequada - Validação interna e com o cliente Deploy: Processo de deploy
  • 75. O principal objetivo da validação é assegurar que o sistema em questão atenda todas as características de sua especificação, identificando se estão de acordo com as necessidades do cliente. A validação é importante ao final de cada deploy, pois, quanto mais o desenvolvimento se estende, mais caro será corrigir requisitos não atendidos. Deploy: Validação com o Cliente
  • 76. Ferramentas - Terraform: Provisionamento de infra-estrutura utilizando código (IaC) - Terragrunt: Facilita gerenciamento de vários projetos utilizando Terraform - Ansible: Automação de tarefas em TI - Termius: Terminal com funcionalidades extras para facilitar gerenciamento de servidores Serviços - Cloudflare: “Canivete suiço” de serviços voltados à ambientes cloud, como Proxy, DNS, Roteamento, otimização, etc. - Forge: Gerenciamento de servidores em nuvem Deploy: Serviços e Ferramentas
  • 77. Telemetria - New Relic - Open Telemetry - Zabbix - Prometheus + Grafana Gerenciamento de Erros - Sentry - Bugsnag - Etc Extra: Monitoramento
  • 81. Referências - https://www.altus.com.br/post/151/a-importancia-da-validacao-no-desenvolvimento-de- produtos - https://www.alura.com.br/artigos/git-flow-o-que-e-como-quando-utilizar - https://blog.onedaytesting.com.br/piramide-de-teses/ - https://dayvsonlima.medium.com/entenda-de-uma-vez-por-todas-o-que-s%C3%A3o-teste s-unit%C3%A1rios-para-que-servem-e-como-faz%C3%AA-los-2a6f645bab3 - https://www.ibm.com/br-pt/topics/data-modeling - https://kenzie.com.br/blog/ide/ - https://kenzie.com.br/blog/testes-automatizados - https://rockcontent.com/br/blog/banco-de-dados/ - https://tableless.com.br/tipos-de-deploy/ - https://medium.com/must-know-computer-science/system-design-load-balancing-1c2e7 675fc27 - https://www.iprog.it/blog/libreria-framework/introduzione-al-continuous-delivery/ - https://www.lucidchart.com/blog/pt/tipos-de-diagramas-UML - https://www.logiquesistemas.com.br/blog/desenvolvimento-de-software-6-passos
  • 82. Referências - https://metropoleparque.imd.ufrn.br/parque/blog/6350 - https://www.lucidchart.com/pages/pt/diagrama-de-caso-de-uso-uml - https://www.lucidchart.com/pages/pt/o-que-e-diagrama-de-classe-uml - https://www.lucidchart.com/pages/pt/o-que-e-diagrama-de-sequencia-uml - https://plantuml.com - https://astah.net/pt/ - https://www.drawio.com - http://dia-installer.de/shapes/UML/index.html.en
  • 83. Obrigado! Danilo Pinotti - danilopinotti.com.br - github.com/danilopinotti Camila Souza - github.com/camilaesouza Fernanda Larocca - github.com/fernandalarocca