DDD + BDD + TDD + Scrum

Post on 15-Jan-2017

220 views 2 download

Transcript of DDD + BDD + TDD + Scrum

DDD + BDD + TDD

Eduardo Bregaida

eduardo.bregaida@sciensa.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 suaaplicação?

...

Mas que Bodega é essaque você está falando?

Eu não estouentendendo nada, eu

só queria umsisteminha fácil...

Domain-Driven Design

-Driven DesignDomain

Negócio Complexo

Negócio Complexo Pessoas

Negócio Complexo

Pessoas

Problema Real

Negócio Complexo

Pessoas

Problema RealLinguagem de Negócio

Negócio Complexo

Pessoas

Domain

Problema RealLinguagem 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íquaLí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 DesignVoltado (driven) totalmente ao problema a ser resolvido (domain)Ubiquitous LanguageFunciona muito bem com AgileModelos 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: 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 ocadastro 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 ciclocurto 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ódigosesquecidos que nunca serão utilizados);

• Garantimos o funcionamento do que está sendo implementado;

• Não precisamos saber tudo de uma vez, conforme eu desenvolvo umteste, 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???

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 autilizaçã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 entradapara que possa estabelecer um processo repetível. O Scrum, parte do princípio que nem todas as características doproduto são conhecidas na análise e que provavelmente osrequisitos mudarão com o passar do tempo.

Exemplo do dia a dia

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

Conclusão

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

O que é SCRUM?

Processo de desenvolvimento iterativo e incremental que pode seraplicado a qualquer produto ou no gerenciamento de qualqueratividade 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-gerenciado

• Define as metas dos Sprints

• Produz com qualidade e valor para o P.O.

Fases do Scrum

• Product Backlog • 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 oudiminui dependendo do que o P.O. necessita;

Sprint Planning Meeting• Reunião com o P.O., Scrum Master e Scrum Team • P.O. descreve as funcionalidades • A equipe questiona • 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 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

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

WOWWWW

Então a cada 2semanas terei um

pedaço do meusistema?

E eu ainda vou poder alterar

o escopo quando precisar

no meu Backlog

E depois que acabar uma

Sprint?

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

É a solução PERFEITA para

meus problemas

Mais ou menos, temos quetomar alguns cuidadoscom os problemas mais

comuns

Síndrome do GóticoOu

Síndrome do Depressivo

Síndrome do EmoOu

Síndrome do Chorão

Síndrome do Melhor do Mundo

Contrato Errado

Pausa nos problemas para uma EstóriaBacon com Ovos

Chickens no Projeto

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ãodesistir

Nunca responda por ele

Faça o profissional vir com umproblema 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?

Obrigado

Eduardo Bregaida

eduardo.bregaida@sciensa.com