Este documento fornece uma introdução sobre os palestrantes e os tópicos que serão abordados no workshop "Do Zero à Produção". Resume os seguintes pontos essenciais:
1) Apresenta os palestrantes Camila Souza, Danilo Pinotti e Fernanda Larocca e suas experiências;
2) Lista os principais tópicos que serão discutidos, incluindo planejamento, desenvolvimento e deploy;
3) Explica brevemente que as melhores práticas de Scrum serão adotadas, como sprints,
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)
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.
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.
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.
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