DDD       +       BDD      +     TDD

Eduardo Bregaida

eduardo.bregaida@gmail.com

&

SCRUM

Brian, o dono de um importante Aeroclube da cidade teve uma ideia em um momento de inspiração.

Eu poderia fazer um sistema para meu aeroclube e otimizar meu tempo.

Mas como?

Vou chamar meu amigo Bregaida para resolver isso

Seguinte Bregaida quero um sistema que faça todo gerenciamento do meu Aeroclube

Quero todos os Cadastros

Relatórios, Notas e Faltas e valores pagos...

Pensando...

Pensando...

Classe Aluno

Pensando...

Classe Aluno

Aluno extends Pessoa

 

Pensando...

Classe Aluno

Aluno extends Pessoa

 

Relatorio em IReport

 

Pensando...

Classe Aluno

Aluno extends Pessoa

 

Relatorio em IReport

 

Java com Spring...

Pensando...

Classe Aluno

Aluno extends Pessoa

 

Relatorio em IReport

 

Java com Spring

Maven

Pensando...

Classe Aluno

Aluno extends Pessoa

 

Relatorio em IReport

 

Java com Spring

Maven

JQuery

Pensando...

Classe Aluno

Aluno extends Pessoa

 

Relatorio em IReport

 

Java com Spring

Maven

JQuery

Contas a Pagar e Receber

Pensando...

Classe Aluno

Aluno extends Pessoa

 

Relatorio em IReport

 

Java com Spring

Maven

JQuery

Contas a Pagar e Receber

Você já tem um Web Server ou um Web Container para sua aplicação?

...

Mas que Bodega é essa

que você está falando?

Eu não estou entendendo nada, eu só queria um sisteminha fácil...

Domain-Driven Design

-Driven Design

Domain

Negócio Complexo

Negócio Complexo

Pessoas

Negócio Complexo

Pessoas

Problema Real

Negócio Complexo

Pessoas

Problema Real

Linguagem de Negócio

Negócio Complexo

Pessoas

Domain

Problema Real

Linguagem de Negócio

Conversa

Sobre o                

Para criar um

domínio

sistema

Conversa

Sobre o                

Para criar um

domínio

sistema

Precisamos falar a mesma língua!

Ubíqua

Línguagem

(Ubiquitous Language)

Tenho um curso onde cada aluno é preparado para se tornar um piloto em uma determinada categoria.

 

Um Aluno tem Nome, CPF, RG, Endereço, Telefone, código ANAC que é a identificação deste aluno

 

Ele terá uma Categoria que pode ser:

Piloto Privado ou

Piloto Comercial

 

Poderei buscar o aluno por nome ou por CPF ou ainda pelo código ANAC

 

Com esse repositório parece que ficou mais fácil, dá para saber todos os alunos da mesma categoria?

 

 

Como implementar o repositório?

Nossa esqueci, quero que liste todos alunos de uma categoria.

 

-Driven Design

  • Voltado (driven) totalmente ao problema a ser resolvido (domain)
  • Ubiquitous Language
  • Funciona muito bem com Agile
  • Modelos ricos (não anêmicos)
  • Nomes importam!

Domain

Não importa a tecnologia.

O que importa é o domain.

BDD

O que é BDD?

 

O que é BDD?

• Foca no comportamento do sistema;

 

• Visando desenvolvimento voltado a testes;

 

• Usam uma linguagem comum como visto no DDD;

 

• Beneficia os desenvolvedores e os usuários de negócio;

 

• Comporta vários cenários;

 

• Não apenas o que uma determinada função deve fazer;

 

• Possui aspectos do DDD e conceitos fundamentais do TDD.

Como fazer?

• Narrativa/Estória: (Nome)

• Para ( Valor ao Negócio)

• Eu, como (Papel)

• Desejo poder realizar (Funcionalidade)

• Story: …

• In order to …

• As a …

• I want to …

Exemplo

Narrativa/Estória: Cadastrar Alunos

• Para meu sistema de gerenciamento do Aeroclube

Eu, como funcionário da secretaria

Desejo poder realizar cadastros de novos alunos no sistema

O que mais?

• Cenários: (Nome)

• Dado que (Estado inicial do sistema)

• Quando (Ação a ser realizada)

• Então (O que deve fazer após a ação)

• Scenario: …

• Given a …

• And …

• When …

• Then …

Mais?

Exemplo

• Cenário I: Abrir tela de Cadastro de Aluno

Dado que um funcionário selecione a opção Cadastrar Aluno

Quando clicar no menu

Então deverá ser aberta a tela com os dados para efetuar o cadastro do aluno e os botões Salvar e Cancelar.

O que é TDD ou Test Driven Development?

• É uma técnica de desenvolvimento de software baseada em um ciclo curto de repetições;

 

• Escrevendo seus testes antes de escrever o código de produção;

 

• Ao escrever primeiro os testes:

   • Garantimos uma boa qualidade no código (mínimo de sujeira e códigos esquecidos que nunca serão utilizados);

   • Garantimos o funcionamento do que está sendo implementado;

 

Não precisamos saber tudo de uma vez, conforme eu desenvolvo um teste, crio e implemento as classes que serão utilizadas.

TDD - Test Driven Development

• Escreva um teste que falhe;

Faça-o passar da maneira mais simples possível;

Refatore o código.

• É conhecido como Ciclo Vermelho-Verde-Refatora (Red-Green-Refactor). 

Mas é muito fácil

It's Amazing

Mas como vou saber o andamento do meu sistema?

Com SCRUM

Mais Coisa???

Mais Coisa???

O Manifesto

Mais Coisa???

Indivíduos e interações mais que processos e ferramentas

Mais Coisa???

Software em funcionamento mais que documentação abrangente

Mais Coisa???

Colaboração com o cliente mais que negociação de contratos

Mais Coisa???

Responder a mudanças mais que seguir um plano

Mais Coisa???

Mais Coisa???

Exercício:

Como as empresas contratam?

Existem dois tipos de Processos:

Processos Definidos

Processos Empíricos

Processos Definidos

São aqueles que determinam o que deve ser feito, quando e como

 

Quem já trabalhou com o “início e fim do projeto” sabe que a utilização de um processo definido não garante o sucesso.

Processos Empíricos

São aqueles que não se conheçam todas as variáveis de entrada para que possa estabelecer um processo repetível.
 

O Scrum, parte do princípio que nem todas as características do produto são conhecidas na análise e que provavelmente os requisitos mudarão com o passar do tempo.
 

Exemplo do dia a dia

É como dirigir um carro, nunca se traça um destino em que a chegada é em linha reta, sempre há pequenas correções até seu destino.

Conclusão

Processos empíricos baseados em inspeção e adaptação devem ser utilizados sempre que os processos definidos não forem adequados devido a complexidade do projeto.

O que é SCRUM?

Processo de desenvolvimento iterativo e incremental que pode ser aplicado a qualquer produto ou no gerenciamento de qualquer atividade complexa;


Criado por Jeff Sutherland e Ken Schwaber na década de 90;

O P.O.

O Scrum Master

O Time

Papéis no SCRUM

Product Owner (P.O.)

• Responsável por garantir o Retorno sobre o Investimento (ROI)

 

• Conhece as necessidades do que precisa ser feito

 

• Define os itens do Product Backlog

 

• Prioriza os itens na Sprint Planning Meeting

Scrum Master

• Garante o uso da Metodologia

 

• É um líder e um facilitador

 

• Precisa tirar da frente qualquer impedimento

Time

Função do SCRUM Team é ser auto-organiza

 

Define as metas dos Sprints

 

Produz com qualidade e valor para o P.O.

Fases do Scrum

  •  Product Backlog
  •  
  • Sprint Pre-Planning 
  •  
  • Sprint Planning Meeting
  •   Planning Poker
  •  
  • Daily Scrum
  •  
  • Sprint Review Meeting
  •  
  • Sprint Retrospective

Product Backlog

  • • Lista com as funcionalidades para o produto
  •  
  • • O conteúdo é definido pelo P. O.
  •  
  • • Não necessita estar completo
  •  
  • • Com o tempo o Product Backlog cresce ou diminui dependendo do que o P.O. necessita;

Sprint Pre-Planning

  • Reunião com o P.O., Scrum Master e Scrum Team
  •  
  • P.O. descreve as funcionalidades
  •  
  • A equipe questiona e tira dúvidas
  •  
  • Se necessário haverá um refinamento da(s) história(s)
  •  
  • Pontua as histórias, quebra as tasks, estima as tasks que estiverem entendidas

 

  •  

Sprint Planning Meeting

  • Reunião com o P.O., Scrum Master e Scrum Team
  •  
  • P.O. descreve as funcionalidades refinadas
  •  
  • A equipe questiona, pontua e quebra as tasks com estimativas
  •  
  • Reavalia as estimativas realizadas na Pre-Planning
  •  
  • No final é gerado o Sprint Backlog
  •  
  • Scrum Team e o P.O. definirão o objetivo

Planning Poker

  • Estimar o esforço das funcionalidades
  • • Números menores mais simples
  • • Números maiores são mais complexos 
  • • Coringas:
  •    • Café - 15 minutos para uma pausa 
  •    • ? - Não foi entendido alguma funcionalidade falada

O Sprint

  • • Funcionalidades escolhidas na Sprint Planning Meeting na Coluna À Fazer 
  •  
  • • É definido um prazo para o Sprint (2 ou 4 semanas
  •  
  • O prazo é mantido até o final do projeto 
  •  
  • • Considera-se finalizado com Sucesso:
  •    • Quando todas as tarefas estiverem na Coluna Finalizado
  •  
  • Finalizado com falha:
  •    • Quando o tempo estourar (2 semanas por exemplo) e/ou funcionalidades mal implementadas e sem qualidade

Quadro KANBAN

  • • No quadro é colocado o andamento do Sprint
  •  
  • • Os Post its são importantes
  •  
  • • Se coloridos facilitam a visualização
  •  
  • • Também serve para saber o que está fazendo
  •  
  • Evitem Softwares para o KANBAN

Daily Scrum

Reunião em Pé de 15 minutos

 

• Deverá ser respondida apenas 3 perguntas:

      • O que você fez ontem?

      • O que você fará hoje?

      • Há algum impedimento no seu caminho?

 

• É uma reunião focada 

 

Não é para resolver problemas

Burndown Chart

 Sprint Review Meeting

• No final de cada Sprint Retrospective é feito um Sprint Review Meeting

 

• É mostrado o que foi alcançado no Sprint

 

• Nesta reunião estará o P.O., Scrum Team e Scrum Master

 

• O mais importante é que o objetivo esteja realizado

 Sprint Retrospective

• Ocorre ao final do Sprint

 

• Utilizado para identificar o que funcionou bem

 

• Também é utilizado para verificar o que poderia ser melhorado

 

• E quais ações serão tomadas para melhorá-lo

WOWWWW

Então a cada 2 semanas terei um pedaço do meu sistema?

E eu ainda vou poder alterar o escopo quando precisar no meu Backlog

E depois que acabar uma Sprint?

Depois começa tudo outra vez até o término do projeto

É a solução PERFEITA para meus problemas

Mais ou menos, temos que tomar alguns cuidados com os problemas mais comuns

Se a sua ideia é:

 

Aumento de produtividade  e lançar softwares com mais frequência

Desenvolvimento ágil não é uma solução

Trabalhar com agilidade é apena um modo diferenciado

Não é o mais rápido, embora tem uma produtividade acima da média

Essa produtividade não deve ser o motivador

Durante o aprendizado normalmente os times demoram em média de 3 a 6 meses para sentir esse ganho de produtividade

E neste tempo serão mais lentos

Também não deve ser usado por ser o mais legal ou a moda

Pois...

Se a motivação for velocidade

pode motiva-pôs a tomar atalhos

Sendo menos rigorosos e isso pode prejudicar a qualidade da entrega

Síndrome do Gótico

Ou

Síndrome do Depressivo

Síndrome do Emo

Ou

Síndrome do Chorão

Síndrome do Melhor do Mundo

Problemas comportamentais

Contrato Errado

Pausa nos problemas para uma Estória

Bacon com Ovos

Chickens no Projeto

Problema                     VS             Impedimento

SCRUMbut

Tantos problemas...

Estou #chateado

Acalme-se Brian, há esperança

A equipe deve estar SEMPRE unida

Garanta PIGs no seu projeto

Livre-se das más influências no Projeto

Incentive o profissional a não desistir

Nunca responda por ele

Faça o profissional vir com um problema e uma solução

Force diálogos entre os membros

Seja Humilde

Ajude seus companheiros

Comemorem o sucesso do Sprint

TODOS ENVOLVIDOS DEVEM PARTICIPAR.

=== NÃO É OPCIONAL ===

Dúvidas?

Eduardo Bregaida

eduardo.bregaida@gmail.com

Obrigado

DDD+BDD+TDD+SCRUM

By Eduardo Bregaida

DDD+BDD+TDD+SCRUM

  • 3,489