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

Do Zero à Produção

  • 1.
    Por: Camila Souza DaniloPinotti Fernanda Larocca Do Zero à Produção
  • 2.
  • 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ólogoem Sistemas para Internet (UTFPR, Em andamento) Desenvolvedor Sênior na empresa Let’s Sistemas (Atualmente)
  • 5.
    Fernanda Larocca - github.com/fernandalarocca Técnologoem 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 contatocom 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 oCliente Estabelecendo a Comunicação Inicial; Compreendendo as Necessidades; Construindo Relacionamento;
  • 10.
    Estabelecendo a ComunicaçãoInicial 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 umrelacionamento 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 Duranteo 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 ConduzindoEntrevistas Eficientes; Exploração de Requisitos;
  • 14.
    Conduzindo Entrevistas Eficientes Planejea 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 Durantea 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 deRecursos; Cronograma de Sequência de Tarefas;
  • 17.
    Estabelecendo Objetivos Uma soluçãoque 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 Identifiqueas 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ênciade 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 Tarefase Metodologia de Trabalho Principais Metodologias de Trabalho; Desmembramento de Tarefas; Adoção do Scrum; Ferramentas Scrum;
  • 21.
    Principais Metodologias deTrabalho 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 Dividao 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.
  • 27.
  • 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.
  • 29.
  • 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.
  • 31.
  • 32.
    Documentação e Diagramas Documentação; Diagramas UML; Ferramentasde Diagramas UML; Mantenha a Documentação Atualizada;
  • 33.
    Documentação Crie documentos quedescrevam 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 Casosde 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 Diagramasde 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 Umdiagrama 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 DiagramasUML - 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 DiagramasUML - 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 DiagramasUML - 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 DiagramasUML - 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çãoAtualizada 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.
  • 43.
  • 44.
    Configuração das ferramentas Oprimeiro 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 DesenvolvimentoIntegrado) 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 Aescolha 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 Controlede 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 dedesenvolvimento) 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 Gerenciamentode 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 Crucialpara 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 Tecnologiase 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 Parao 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 Comoo 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 Escolhero 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 ambientede 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/bancode 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 ModelagemConceitual - 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
  • 58.
  • 59.
    Implementação do sistemajunto 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 Combase 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 Ostestes 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 - Testesde 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.
  • 63.
  • 64.
    No que dizrespeito 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 osistema 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 deproduçã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
  • 68.
  • 69.
    Deploy: Estratégia Rolling CaracterísticasPrincipais: - 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ísticasPrincipais: - 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ísticasPrincipais: - 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 WebServices(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 dostestes 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
  • 74.
  • 75.
    O principal objetivoda 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: Provisionamentode 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
  • 78.
  • 79.
  • 80.
  • 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