revisitando as práticas de engenharia Ágil

188
Revisitando as práticas de engenharia ágil Danilo Sato @dtsato

Upload: danilo-sato

Post on 05-Dec-2014

1.356 views

Category:

Technology


0 download

DESCRIPTION

Slides da minha palestra na QCon SP 2013: Agile virou mainstream: hoje em dia é difícil encontrar um time que não esteja seguindo um processo ágil. No entanto os processos mais comuns focam mais nas práticas gerenciais e não tanto nas práticas de engenharia. Na minha experiência com Métodos Ágeis, a falta de disciplina técnica é um dos principais impedimentos para criar equipes altamente produtivas. Nesta palestra eu pretendo revisitar as práticas de engenharia ágil, desde as originalmente propostas por XP há mais de dez anos atrás - como TDD, refatoração ou programação em par - até ideias mais recentes - como DevOps, infraestrutura como código e pipelines de deployment. Ao invés de focar no "O que?" de cada prática, pretendo tomar uma abordar mais profunda, focando no "Por quê?", nos comportamentos e nos resultados esperados de uma equipe que aplica as práticas com sucesso.

TRANSCRIPT

Page 1: Revisitando as Práticas de Engenharia Ágil

Revisitando as práticas de engenharia ágil

Danilo Sato@dtsato

Page 2: Revisitando as Práticas de Engenharia Ágil

Danilo Sato@dtsato - www.dtsato.com

Desenvolvedor, Arquiteto, Coach, DevOps, Treinador

Page 3: Revisitando as Práticas de Engenharia Ágil

Agile virou mainstream

Page 4: Revisitando as Práticas de Engenharia Ágil

Fonte: VersionOne State of Agile (2012)Referência: http://www.versionone.com/state-of-agile-survey-results/

Page 5: Revisitando as Práticas de Engenharia Ágil

Fonte: VersionOne State of Agile (2012)Referência: http://www.versionone.com/state-of-agile-survey-results/

Scrum + Kanban = 72% ~ 75%

Page 6: Revisitando as Práticas de Engenharia Ágil

Fonte: VersionOne State of Agile (2012)Referência: http://www.versionone.com/state-of-agile-survey-results/

Scrum + Kanban = 72% ~ 75%

4% “Não Sei” ?!

Page 7: Revisitando as Práticas de Engenharia Ágil

Fonte: VersionOne State of Agile (2012)Referência: http://www.versionone.com/state-of-agile-survey-results/

Scrum + Kanban = 72% ~ 75%

XP = 2% ~ 7%

Page 8: Revisitando as Práticas de Engenharia Ágil

Práticas gerenciais

práticas de engenharia

Page 9: Revisitando as Práticas de Engenharia Ágil

Práticas gerenciais

práticas de engenharia

Page 10: Revisitando as Práticas de Engenharia Ágil

Práticas gerenciais

práticas de engenharia

Page 12: Revisitando as Práticas de Engenharia Ágil
Page 13: Revisitando as Práticas de Engenharia Ágil

3 pilares

Page 14: Revisitando as Práticas de Engenharia Ágil

Gerir um negócio sustentável

Page 15: Revisitando as Práticas de Engenharia Ágil

Liderar e promover a excelência de

software e revolucionar a indústria de TI

Gerir um negócio sustentável

Page 16: Revisitando as Práticas de Engenharia Ágil

Liderar e promover a excelência de

software e revolucionar a indústria de TI

Advogar apaixonadamente em favor de justiça social e econômica

Gerir um negócio sustentável

Page 17: Revisitando as Práticas de Engenharia Ágil

falta de práticas de

engenharia é uma barreira

Page 18: Revisitando as Práticas de Engenharia Ágil

não atingimos o potencial de

agile

Page 19: Revisitando as Práticas de Engenharia Ágil

opotencial de

agile

Page 20: Revisitando as Práticas de Engenharia Ágil

opotencial de

agile

Leak!

Vazar!

Page 21: Revisitando as Práticas de Engenharia Ágil

por que falarde práticas?

Page 23: Revisitando as Práticas de Engenharia Ágil

princípios

vs.

práticas

Page 24: Revisitando as Práticas de Engenharia Ágil

princípios

vs.

práticas

Page 25: Revisitando as Práticas de Engenharia Ágil

princípios

vs.

práticas

Page 26: Revisitando as Práticas de Engenharia Ágil
Page 27: Revisitando as Práticas de Engenharia Ágil

Valores + Princípios

Page 28: Revisitando as Práticas de Engenharia Ágil

práticas

Page 29: Revisitando as Práticas de Engenharia Ágil

práticas

“O que você faz quando está sob pressão"

-- Corey Haines

Page 30: Revisitando as Práticas de Engenharia Ágil
Page 31: Revisitando as Práticas de Engenharia Ágil
Page 32: Revisitando as Práticas de Engenharia Ágil

Programação Extrema (XP)

Page 33: Revisitando as Práticas de Engenharia Ágil

Programação Extrema (XP)

Práticas deEngenharia

Page 34: Revisitando as Práticas de Engenharia Ágil

práticas

Page 35: Revisitando as Práticas de Engenharia Ágil

• dependentes

práticas

Page 36: Revisitando as Práticas de Engenharia Ágil

• dependentes• complementares

práticas

Page 37: Revisitando as Práticas de Engenharia Ágil

Entrega contínuacolaboração

testes automatizados design

originadas em XP

Page 38: Revisitando as Práticas de Engenharia Ágil

Entrega contínuacolaboração

testes automatizados design

TDD

testes automatizados

originadas em XP

Page 39: Revisitando as Práticas de Engenharia Ágil

Entrega contínuacolaboração

testes automatizados design

TDD

testes automatizados

design incremental

refatoraçãometáfora

linguagem ubíquaTDD

originadas em XP

Page 40: Revisitando as Práticas de Engenharia Ágil

Entrega contínuacolaboração

testes automatizados design

TDD

testes automatizados

design incremental

refatoraçãometáfora

linguagem ubíquaTDD

propriedade coletiva de código

standards de código

programação pareada

gerenciar dívida técnica

desenvolvimento no trunkoriginadas em XP

Page 41: Revisitando as Práticas de Engenharia Ágil

Entrega contínuacolaboração

testes automatizados design

TDD

testes automatizados

design incremental

refatoraçãometáfora

linguagem ubíquaTDD

desenvolvimento no trunk

integração contínua

pipeline de implantação

implantação automatizada

infraestrutura como código

propriedade coletiva de código

standards de código

programação pareada

gerenciar dívida técnica

desenvolvimento no trunkoriginadas em XP

Page 42: Revisitando as Práticas de Engenharia Ágil

testes automatizados

Page 44: Revisitando as Práticas de Engenharia Ágil

Exploratório

Ponta a Ponta

Aplicação/Componentes

Integração

Unitários

cobertura por

teste / tempo de execução

feedbackrápido

Page 45: Revisitando as Práticas de Engenharia Ágil

Testes Automatizados

Page 46: Revisitando as Práticas de Engenharia Ágil

Testes Automatizados

• Comportamentos:

Page 47: Revisitando as Práticas de Engenharia Ágil

Testes Automatizados

• Comportamentos:

• O time possui uma clara estratégia de testes

Page 48: Revisitando as Práticas de Engenharia Ágil

Testes Automatizados

• Comportamentos:

• O time possui uma clara estratégia de testes

• Testes funcionais seguem user journeys e não por história

Page 49: Revisitando as Práticas de Engenharia Ágil

Testes Automatizados

• Comportamentos:

• O time possui uma clara estratégia de testes

• Testes funcionais seguem user journeys e não por história

• Testes reproduzem bug no nível certo antes de corrigí-lo

Page 50: Revisitando as Práticas de Engenharia Ágil

Testes Automatizados

• Comportamentos:

• O time possui uma clara estratégia de testes

• Testes funcionais seguem user journeys e não por história

• Testes reproduzem bug no nível certo antes de corrigí-lo

• Tempo necessário para realizar testes manuais reduzido

Page 51: Revisitando as Práticas de Engenharia Ágil

Testes Automatizados

• Comportamentos:

• O time possui uma clara estratégia de testes

• Testes funcionais seguem user journeys e não por história

• Testes reproduzem bug no nível certo antes de corrigí-lo

• Tempo necessário para realizar testes manuais reduzido

• Problemas são encontrados rapidamente, perto do momento onde são introduzidos

Page 52: Revisitando as Práticas de Engenharia Ágil

TDD

Page 53: Revisitando as Práticas de Engenharia Ágil

TDD

• Comportamentos:

Page 54: Revisitando as Práticas de Engenharia Ágil

TDD

• Comportamentos:

• Testes atuam como documentação executável do código

Page 55: Revisitando as Práticas de Engenharia Ágil

TDD

• Comportamentos:

• Testes atuam como documentação executável do código

• Bom design OO: comportamento bem encapsulado e clara dependência entre classes

Page 56: Revisitando as Práticas de Engenharia Ágil

TDD

• Comportamentos:

• Testes atuam como documentação executável do código

• Bom design OO: comportamento bem encapsulado e clara dependência entre classes

• Testes unitários executam rapidamente: 1000s em poucos segundos

Page 57: Revisitando as Práticas de Engenharia Ágil

TDD

• Comportamentos:

• Testes atuam como documentação executável do código

• Bom design OO: comportamento bem encapsulado e clara dependência entre classes

• Testes unitários executam rapidamente: 1000s em poucos segundos

• Uso justo de mocks: mocks não duplicam comportamento do código

Page 58: Revisitando as Práticas de Engenharia Ágil

Design

Page 59: Revisitando as Práticas de Engenharia Ágil

Código==Design

Page 60: Revisitando as Práticas de Engenharia Ágil

Código==

Estrutura

Organização

FlexibilidadeTestabilidade

Legibilidade

Coesão

Acoplamento

Dependências

Design

Page 61: Revisitando as Práticas de Engenharia Ágil

BOM reduz ocusto da mudança

Design

Page 62: Revisitando as Práticas de Engenharia Ágil

Design

Page 63: Revisitando as Práticas de Engenharia Ágil

Hipótese da stamina do Design

Page 64: Revisitando as Práticas de Engenharia Ágil

Func

iona

lidad

es

Tempo

Page 65: Revisitando as Práticas de Engenharia Ágil

Func

iona

lidad

es

Tempo

Sem Design

Page 66: Revisitando as Práticas de Engenharia Ágil

Func

iona

lidad

es

Tempo

Bom Design

Sem Design

Page 67: Revisitando as Práticas de Engenharia Ágil

Func

iona

lidad

es

Tempo

Bom Design

Sem DesignOnde o design

se paga

Page 68: Revisitando as Práticas de Engenharia Ágil

ZeroDesign

DesignÁgil

Up-frontDesign

Page 69: Revisitando as Práticas de Engenharia Ágil

Design “ativo”

Page 70: Revisitando as Práticas de Engenharia Ágil

Design “passivo”

Page 71: Revisitando as Práticas de Engenharia Ágil

Design ágil == Design evolutivo

Page 72: Revisitando as Práticas de Engenharia Ágil

Design ágil == Design evolutivo

Page 73: Revisitando as Práticas de Engenharia Ágil

Design Ágil

Page 74: Revisitando as Práticas de Engenharia Ágil

Design Ágil

• Comportamentos:

Page 75: Revisitando as Práticas de Engenharia Ágil

Design Ágil

• Comportamentos:

• Código é fácil de ser testado

Page 76: Revisitando as Práticas de Engenharia Ágil

Design Ágil

• Comportamentos:

• Código é fácil de ser testado

• Quando mudanças são necessárias, refatoração acontece antes para que a mudança seja simples

Page 77: Revisitando as Práticas de Engenharia Ágil

Design Ágil

• Comportamentos:

• Código é fácil de ser testado

• Quando mudanças são necessárias, refatoração acontece antes para que a mudança seja simples

• Time reconhece a diferença entre complexidade essencial e acidental

Page 78: Revisitando as Práticas de Engenharia Ágil

Design Ágil

• Comportamentos:

• Código é fácil de ser testado

• Quando mudanças são necessárias, refatoração acontece antes para que a mudança seja simples

• Time reconhece a diferença entre complexidade essencial e acidental

• Gerenciamento de dívida técnica para reduzir complexidade acidental

Page 79: Revisitando as Práticas de Engenharia Ágil

Refatoração

Page 80: Revisitando as Práticas de Engenharia Ágil

Refatoração

• Comportamentos:

Page 81: Revisitando as Práticas de Engenharia Ágil

Refatoração

• Comportamentos:

• Desenvolvedores familiarizados com refatorações automatizadas na IDE

Page 82: Revisitando as Práticas de Engenharia Ágil

Refatoração

• Comportamentos:

• Desenvolvedores familiarizados com refatorações automatizadas na IDE

• Refatoração acontece quando os testes estão passando

Page 83: Revisitando as Práticas de Engenharia Ágil

Refatoração

• Comportamentos:

• Desenvolvedores familiarizados com refatorações automatizadas na IDE

• Refatoração acontece quando os testes estão passando

• Refatorações são pequenas e incrementais

Page 84: Revisitando as Práticas de Engenharia Ágil

Refatoração

• Comportamentos:

• Desenvolvedores familiarizados com refatorações automatizadas na IDE

• Refatoração acontece quando os testes estão passando

• Refatorações são pequenas e incrementais

• Código de teste também é refatorado

Page 85: Revisitando as Práticas de Engenharia Ágil

Refatoração

• Comportamentos:

• Desenvolvedores familiarizados com refatorações automatizadas na IDE

• Refatoração acontece quando os testes estão passando

• Refatorações são pequenas e incrementais

• Código de teste também é refatorado

• Desenvolvedores sabem dividir refatorações grandes em pedaços menores

Page 86: Revisitando as Práticas de Engenharia Ágil

Linguagem Ubíqua

• Metáfora:

• Nem sempre é necessária

• Difícil de encontrar

• Domain-Driven Design

• Objetivo é melhorar comunicação com especialistas de domínio

Page 88: Revisitando as Práticas de Engenharia Ágil

Linguagem Ubíqua

Page 89: Revisitando as Práticas de Engenharia Ágil

Linguagem Ubíqua

• Comportamentos:

Page 90: Revisitando as Práticas de Engenharia Ágil

Linguagem Ubíqua

• Comportamentos:

• Código de produção e de testes usam terminologia uniforme, alinhada com o domínio

Page 91: Revisitando as Práticas de Engenharia Ágil

Linguagem Ubíqua

• Comportamentos:

• Código de produção e de testes usam terminologia uniforme, alinhada com o domínio

• Conceitos em um domínio possuem sentido claro dentro de um Contexto Delimitado

Page 92: Revisitando as Práticas de Engenharia Ágil

Linguagem Ubíqua

• Comportamentos:

• Código de produção e de testes usam terminologia uniforme, alinhada com o domínio

• Conceitos em um domínio possuem sentido claro dentro de um Contexto Delimitado

• Conceitos são bem entendidos por toda a equipe (desenvolvedores, analistas, QAs, clientes, gerentes, etc.)

Page 93: Revisitando as Práticas de Engenharia Ágil

colaboração

Page 96: Revisitando as Práticas de Engenharia Ágil

Programação Pareada

• Benefícios:

• Foco

• Revisão de código constante

• Resultado é maior que a soma das partes

Page 97: Revisitando as Práticas de Engenharia Ágil

Programação Pareada

Page 98: Revisitando as Práticas de Engenharia Ágil

Programação Pareada

• Comportamentos:

Page 99: Revisitando as Práticas de Engenharia Ágil

Programação Pareada

• Comportamentos:

• Ao parear, papéis de navegador e piloto rotacionam frequentemente

Page 100: Revisitando as Práticas de Engenharia Ágil

Programação Pareada

• Comportamentos:

• Ao parear, papéis de navegador e piloto rotacionam frequentemente

• Ambos desenvolvedores trabalham na mesma máquina: 2 monitores, 2 mouses, 2 teclados

Page 101: Revisitando as Práticas de Engenharia Ágil

Programação Pareada

• Comportamentos:

• Ao parear, papéis de navegador e piloto rotacionam frequentemente

• Ambos desenvolvedores trabalham na mesma máquina: 2 monitores, 2 mouses, 2 teclados

• Pareamento entre papéis também acontece

Page 102: Revisitando as Práticas de Engenharia Ágil

Programação Pareada

• Comportamentos:

• Ao parear, papéis de navegador e piloto rotacionam frequentemente

• Ambos desenvolvedores trabalham na mesma máquina: 2 monitores, 2 mouses, 2 teclados

• Pareamento entre papéis também acontece

• Pareamento oportunista: quando não faz sentido parear, não pareia

Page 103: Revisitando as Práticas de Engenharia Ágil

Standards de Código

Page 104: Revisitando as Práticas de Engenharia Ágil

Standards de Código

• Comportamentos:

Page 105: Revisitando as Práticas de Engenharia Ágil

Standards de Código

• Comportamentos:

• Equipe segue estilo de código comum

Page 106: Revisitando as Práticas de Engenharia Ágil

Standards de Código

• Comportamentos:

• Equipe segue estilo de código comum

• Desenvolvedores criam “TODO”s quando encontram algo que precisa ser investigado

Page 107: Revisitando as Práticas de Engenharia Ágil

Standards de Código

• Comportamentos:

• Equipe segue estilo de código comum

• Desenvolvedores criam “TODO”s quando encontram algo que precisa ser investigado

• “TODO”s são corrigidos constantemente

Page 108: Revisitando as Práticas de Engenharia Ágil

Standards de Código

• Comportamentos:

• Equipe segue estilo de código comum

• Desenvolvedores criam “TODO”s quando encontram algo que precisa ser investigado

• “TODO”s são corrigidos constantemente

• Padrões de estilo da equipe são mais importantes que estilo pessoal

Page 109: Revisitando as Práticas de Engenharia Ágil

Standards de Código

• Comportamentos:

• Equipe segue estilo de código comum

• Desenvolvedores criam “TODO”s quando encontram algo que precisa ser investigado

• “TODO”s são corrigidos constantemente

• Padrões de estilo da equipe são mais importantes que estilo pessoal

• Código de teste também segue padrões de estilo

Page 110: Revisitando as Práticas de Engenharia Ágil

Propriedade Coletivade Código

Page 111: Revisitando as Práticas de Engenharia Ágil

Propriedade Coletivade Código

• Comportamentos:

Page 112: Revisitando as Práticas de Engenharia Ágil

Propriedade Coletivade Código

• Comportamentos:

• Não existe silos de conhecimento na equipe

Page 113: Revisitando as Práticas de Engenharia Ágil

Propriedade Coletivade Código

• Comportamentos:

• Não existe silos de conhecimento na equipe

• Conhecimento do código em modelo “T”: especialização é OK, mas precisa ter conhecimento amplo também

Page 114: Revisitando as Práticas de Engenharia Ágil

Propriedade Coletivade Código

• Comportamentos:

• Não existe silos de conhecimento na equipe

• Conhecimento do código em modelo “T”: especialização é OK, mas precisa ter conhecimento amplo também

• Rotação de pares ajuda a disseminar conhecimento

Page 115: Revisitando as Práticas de Engenharia Ágil

Propriedade Coletivade Código

• Comportamentos:

• Não existe silos de conhecimento na equipe

• Conhecimento do código em modelo “T”: especialização é OK, mas precisa ter conhecimento amplo também

• Rotação de pares ajuda a disseminar conhecimento

• Desenvolvedores consertam o build independente de quem quebrou

Page 116: Revisitando as Práticas de Engenharia Ágil

Propriedade Coletivade Código

• Comportamentos:

• Não existe silos de conhecimento na equipe

• Conhecimento do código em modelo “T”: especialização é OK, mas precisa ter conhecimento amplo também

• Rotação de pares ajuda a disseminar conhecimento

• Desenvolvedores consertam o build independente de quem quebrou

• Desenvolvedores procuram trabalhar em áreas diferentes para aprimorar conhecimento

Page 117: Revisitando as Práticas de Engenharia Ágil

entrega contínua

Page 118: Revisitando as Práticas de Engenharia Ágil

A “Última Milha”

QA + integração

QA centralizado

release + operação

IT operações

cliente

desenvolvimento

análise + design

teste + showcase

iteração 0 1 2 3 4

Time “Ágil”

AGILE 101

Page 119: Revisitando as Práticas de Engenharia Ágil

cliente

time deentrega

fluxo constante de entrega em produção

ENTREGA CONTÍNUA

Page 120: Revisitando as Práticas de Engenharia Ágil

Servidor Central

DesenvolveMáquina Local

Page 121: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Máquina Local

Page 122: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Máquina Local

Page 123: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

pull

Máquina Local

Page 124: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Build

pull

Máquina Local

Page 125: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Build

pull

Máquina Local

Page 126: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Build

pull

Máquina Local

push

Page 127: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Build

pull

Máquina Local

Buildpush

Page 128: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Build

pull

Máquina Local

Buildpush

✔Pronto!

Page 129: Revisitando as Práticas de Engenharia Ágil

Servidor Central

Desenvolve

Build

Build

pull

Máquina Local

Buildpush

✔Pronto!

Page 131: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

Page 132: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

Page 133: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

• Desenvolvedores fazem commit frequentemente, idealmente várias vezes por dia

Page 134: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

• Desenvolvedores fazem commit frequentemente, idealmente várias vezes por dia

• Build roda testes automatizados de diversos níveis

Page 135: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

• Desenvolvedores fazem commit frequentemente, idealmente várias vezes por dia

• Build roda testes automatizados de diversos níveis

• Os builds estão geralmente verdes

Page 136: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

• Desenvolvedores fazem commit frequentemente, idealmente várias vezes por dia

• Build roda testes automatizados de diversos níveis

• Os builds estão geralmente verdes

• Desenvolvedores reagem quando o build quebra

Page 137: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

Page 138: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

Page 139: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

• Desenvolvedores trabalham para reduzir o tempo do build

Page 140: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

• Desenvolvedores trabalham para reduzir o tempo do build

• Desenvolvedores sempre rodam testes antes de fazer commit para minimizar a chance de builds quebrados

Page 141: Revisitando as Práticas de Engenharia Ágil

Integração Contínua

• Comportamentos:

• Desenvolvedores trabalham para reduzir o tempo do build

• Desenvolvedores sempre rodam testes antes de fazer commit para minimizar a chance de builds quebrados

• Desenvolvedores não fazem commit quando o build está quebrado

Page 142: Revisitando as Práticas de Engenharia Ágil

Branch por Funcionalidade

Page 143: Revisitando as Práticas de Engenharia Ágil

Desenvolvimento no Trunk

Page 144: Revisitando as Práticas de Engenharia Ágil

Desenvolvimento no Trunk

Page 145: Revisitando as Práticas de Engenharia Ágil

Desenvolvimento no Trunk

• Comportamentos:

Page 146: Revisitando as Práticas de Engenharia Ágil

Desenvolvimento no Trunk

• Comportamentos:

• Commits que quebram o build são rapidamente consertados ou revertidos

Page 147: Revisitando as Práticas de Engenharia Ágil

Desenvolvimento no Trunk

• Comportamentos:

• Commits que quebram o build são rapidamente consertados ou revertidos

• Uso de branches é limitado: vida curta ou branch para releases

Page 148: Revisitando as Práticas de Engenharia Ágil

Desenvolvimento no Trunk

• Comportamentos:

• Commits que quebram o build são rapidamente consertados ou revertidos

• Uso de branches é limitado: vida curta ou branch para releases

• Desenvolvedores usam “branch por abstração” quando mudanças maiores são necessárias

Page 149: Revisitando as Práticas de Engenharia Ágil

Desenvolvimento no Trunk

• Comportamentos:

• Commits que quebram o build são rapidamente consertados ou revertidos

• Uso de branches é limitado: vida curta ou branch para releases

• Desenvolvedores usam “branch por abstração” quando mudanças maiores são necessárias

• Qualquer commit pode ir para produção

Page 151: Revisitando as Práticas de Engenharia Ágil

ESFORÇO

DOR

Page 152: Revisitando as Práticas de Engenharia Ágil

ESFORÇO

DOR

Page 153: Revisitando as Práticas de Engenharia Ágil

Gerenciar Dívida Técnica

Page 154: Revisitando as Práticas de Engenharia Ágil

Gerenciar Dívida Técnica

• Comportamentos:

Page 155: Revisitando as Práticas de Engenharia Ágil

Gerenciar Dívida Técnica

• Comportamentos:

• Equipe cataloga e estima items relacionados à dívida técnica

Page 156: Revisitando as Práticas de Engenharia Ágil

Gerenciar Dívida Técnica

• Comportamentos:

• Equipe cataloga e estima items relacionados à dívida técnica

• Equipe dedica uma porcentagem de tempo em cada iteração para atacar items de dívida técnica

Page 157: Revisitando as Práticas de Engenharia Ágil

Gerenciar Dívida Técnica

• Comportamentos:

• Equipe cataloga e estima items relacionados à dívida técnica

• Equipe dedica uma porcentagem de tempo em cada iteração para atacar items de dívida técnica

• Dívida relacionada à arquitetura é capturada e priorizada para permitir evolução a longo prazo

Page 158: Revisitando as Práticas de Engenharia Ágil

Gerenciar Dívida Técnica

• Comportamentos:

• Equipe cataloga e estima items relacionados à dívida técnica

• Equipe dedica uma porcentagem de tempo em cada iteração para atacar items de dívida técnica

• Dívida relacionada à arquitetura é capturada e priorizada para permitir evolução a longo prazo

• Decisões sobre escopo levam dívida técnica em consideração

Page 159: Revisitando as Práticas de Engenharia Ágil

Implantação Automatizada

Page 160: Revisitando as Práticas de Engenharia Ágil

Implantação Automatizada

• Comportamentos:

Page 161: Revisitando as Práticas de Engenharia Ágil

Implantação Automatizada

• Comportamentos:

• Equipe procura automatizar passos para deploy

Page 162: Revisitando as Práticas de Engenharia Ágil

Implantação Automatizada

• Comportamentos:

• Equipe procura automatizar passos para deploy

• Script inclui não apenas deploy de código, mas também recursos dependentes: banco de dados, infraestrutura, filas, etc.

Page 163: Revisitando as Práticas de Engenharia Ágil

Implantação Automatizada

• Comportamentos:

• Equipe procura automatizar passos para deploy

• Script inclui não apenas deploy de código, mas também recursos dependentes: banco de dados, infraestrutura, filas, etc.

• É fácil subir ambientes parecidos com produção

Page 164: Revisitando as Práticas de Engenharia Ágil

Infraestrutura como Código

Page 165: Revisitando as Práticas de Engenharia Ágil

Infraestrutura como Código

• Comportamentos:

Page 166: Revisitando as Práticas de Engenharia Ágil

Infraestrutura como Código

• Comportamentos:

• É fácil subir ambientes parecidos com produção

Page 167: Revisitando as Práticas de Engenharia Ágil

Infraestrutura como Código

• Comportamentos:

• É fácil subir ambientes parecidos com produção

• Alterações de infraestrutura não precisam de tickets para equipes externas

Page 168: Revisitando as Práticas de Engenharia Ágil

Infraestrutura como Código

• Comportamentos:

• É fácil subir ambientes parecidos com produção

• Alterações de infraestrutura não precisam de tickets para equipes externas

• Código de infraestrutura é testado e parte da pipeline de entrega

Page 169: Revisitando as Práticas de Engenharia Ágil

Infraestrutura como Código

• Comportamentos:

• É fácil subir ambientes parecidos com produção

• Alterações de infraestrutura não precisam de tickets para equipes externas

• Código de infraestrutura é testado e parte da pipeline de entrega

• Pouco uso de ambientes compartilhados

Page 170: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

Page 171: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

“...(a pipeline de implantação) é a manifestação automatizada

do processo de levar o software do controle de versão para as

mãos dos usuários"

-- Jez Humble

Page 173: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

Serviço B

Serviço C

App A

Testes Unitário

Controle de Versão

Repositório de Artefatos

Testes de Componente

Testes Unitário

Testes de Componente

Testes Unitário

Testes de Componente

Testes de Contrato

Testes de Contrato

Deploy em Dev Smoke

Deploy emIntTeste de

Aplicação Smoke

App E

App F

Serviço D

Testes Unitário

Testes de Componente

Testes Unitário

Testes de Componente

Testes Unitário

Testes de Componente

Testes de Contrato

Deploy em Dev Smoke

Teste de Aplicação

Testes de Contrato

Deploy em Dev Smoke

Deploy emInt Smoke

Deploy emInt

Teste Ponta-a-Ponta

Ambiente de Dev

Deploy emQA Smoke

Testes de Performance UAT

Ambiente de Integração

Ambiente de QA

Deploy emProduction Smoke

COTS

Ambiente de Produção

Deploy emInt

(...)

(…)

Page 174: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

Page 175: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

• Comportamentos:

Page 176: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

• Comportamentos:

• Mudanças em produção podem ser traçadas desde o commit original

Page 177: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

• Comportamentos:

• Mudanças em produção podem ser traçadas desde o commit original

• Pipeline possui diversos estágios para diferentes níveis de teste

Page 178: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

• Comportamentos:

• Mudanças em produção podem ser traçadas desde o commit original

• Pipeline possui diversos estágios para diferentes níveis de teste

• Estágios são otimizados para maximizar feedback rápido

Page 179: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

• Comportamentos:

• Mudanças em produção podem ser traçadas desde o commit original

• Pipeline possui diversos estágios para diferentes níveis de teste

• Estágios são otimizados para maximizar feedback rápido

• Código de infraestrutura integrado com código de produção na pipeline

Page 180: Revisitando as Práticas de Engenharia Ágil

Pipeline de Implantação

• Comportamentos:

• Mudanças em produção podem ser traçadas desde o commit original

• Pipeline possui diversos estágios para diferentes níveis de teste

• Estágios são otimizados para maximizar feedback rápido

• Código de infraestrutura integrado com código de produção na pipeline

• Inclusão de testes pré-release (desempenho, carga, stress, …)

Page 181: Revisitando as Práticas de Engenharia Ágil

Resumindo...

Page 182: Revisitando as Práticas de Engenharia Ágil

práticas de engenharia são essenciais para

ser ágil

Page 183: Revisitando as Práticas de Engenharia Ágil

princípios

vs.

práticas

Page 184: Revisitando as Práticas de Engenharia Ágil

minhas práticas de engenharia

Page 185: Revisitando as Práticas de Engenharia Ágil
Page 186: Revisitando as Práticas de Engenharia Ágil

Entrega contínuacolaboração

testes automatizados design

TDD

testes automatizados

design incremental

refatoraçãometáfora

linguagem ubíquaTDD

desenvolvimento no trunk

integração contínua

pipeline de implantação

implantação automatizada

infraestrutura como código

propriedade coletiva de código

standards de código

programação pareada

gerenciar dívida técnica

desenvolvimento no trunk

Page 187: Revisitando as Práticas de Engenharia Ágil

quais são as suas práticas?

Page 188: Revisitando as Práticas de Engenharia Ágil

Danilo Sato@dtsato - www.dtsato.com

Desenvolvedor, Arquiteto, Coach, DevOps, Treinador

Obrigado!