ddd + bdd + tdd - rf 2015

71
@bregaida [email protected]

Upload: eduardo-bregaida

Post on 14-Aug-2015

531 views

Category:

Technology


6 download

TRANSCRIPT

Page 2: DDD + BDD + TDD - RF 2015
Page 3: DDD + BDD + TDD - RF 2015

BDD

Page 4: DDD + BDD + TDD - RF 2015
Page 5: DDD + BDD + TDD - RF 2015
Page 6: DDD + BDD + TDD - RF 2015

Mas o que é DDD?

Page 7: DDD + BDD + TDD - RF 2015

• DDD?

Page 8: DDD + BDD + TDD - RF 2015

• DDD? • DDD?

Page 9: DDD + BDD + TDD - RF 2015

• DDD? • DDD?

• DDD?

Page 10: DDD + BDD + TDD - RF 2015

• DDD? • DDD?

• DDD? • DDD?

Page 11: DDD + BDD + TDD - RF 2015

• DDD? • DDD?

• DDD? • DDD?

Page 12: DDD + BDD + TDD - RF 2015

Havia um grande local cheio de aeronaves de um ricaço que morreu.James, seu sobrinho, herdou este local e decidiu que queria abrir um negócio.

Uma loja de aeronaves.E para isso era necessário um sistema...

Page 13: DDD + BDD + TDD - RF 2015

E aí Bregaida, beleza?

Estou precisando de sua ajuda mais uma vez,

preciso de um sistema para minha loja de

aeronaves.

Page 14: DDD + BDD + TDD - RF 2015

Domain-Driven Design

Page 15: DDD + BDD + TDD - RF 2015

Domain-Driven Design

Page 16: DDD + BDD + TDD - RF 2015

Teremos Tupis, Cherokees, Aeroboeiros,

Paulistinhas e outras aeronaves, com diferentes capacidades e potências.

Page 17: DDD + BDD + TDD - RF 2015

?

Page 18: DDD + BDD + TDD - RF 2015

Hum...Então se eu fizer

CapacidadeTO estender de AbstractAeronave, acho

que vai dar certo

Page 19: DDD + BDD + TDD - RF 2015

?

Page 20: DDD + BDD + TDD - RF 2015

Domain

Negócio Complexo

Problema Real

Pessoas

Linguagem de Negócio

Page 21: DDD + BDD + TDD - RF 2015

ConversaSobre o domínio

Para criar um sistema

Page 22: DDD + BDD + TDD - RF 2015

ConversaSobre o domínio

Para criar um sistema

Precisamos falar a mesma língua!

Page 23: DDD + BDD + TDD - RF 2015

Língua Ubíqua(Ubiquitous Language)

Page 24: DDD + BDD + TDD - RF 2015

Temos hangares aqui no nosso espaço, com

vários aviões diferentes...

Page 25: DDD + BDD + TDD - RF 2015

Nosso cliente chegará no Hangar e usará o sistema para encontrar os melhores

aviões para sua necessidade.

Page 26: DDD + BDD + TDD - RF 2015

Por exemplo, temos aviões de diferentes cores

e capacidades.

Page 27: DDD + BDD + TDD - RF 2015

Normalmente o cliente também pode

escolher pela empresa fabricante (Embraer,

Piper, Aviat, etc)

Page 28: DDD + BDD + TDD - RF 2015

Aviao

-Cor-Capacidade- Fabricante

Cor

-Nome

Capacidade

(Potência, Quantidade Passageiros)

Fabricante

(Piper, Embraer, Aviate, Boeing, etc)

Page 29: DDD + BDD + TDD - RF 2015

Isso mesmo e nossos aviões possuem um nome

e um prefixo que é sua identificação no Brasil.

Page 30: DDD + BDD + TDD - RF 2015

Aviao

-id-Nome-Cor

-Capacidade- Fabricante

Cor

-Nome

Capacidade

(Potência, Quantidade Passageiros)

Fabricante

(Airbus, Embraer, Piper, Boeing, etc)

Page 31: DDD + BDD + TDD - RF 2015

Exatamente, mas nosso cliente vai mesmo

querer pesquisar por Fabricante e nome da

aeronave.

Page 32: DDD + BDD + TDD - RF 2015

Aviao

-Prefixo-Nome-Cor

-Capacidade- Fabricante

Cor

-Nome

Capacidade

(Potência, Quantidade Passageiros)

Repositório de aviões

buscarPorNome buscarPorFabricante

Fabricante

(Airbus, Embraer, Piper, Boeing, etc)

Page 33: DDD + BDD + TDD - RF 2015

Aliás outra busca que quero é dado um avião quero saber quais os aviões com mesma

potência.

Page 34: DDD + BDD + TDD - RF 2015

Creio que com esse nosso repositório fica mais

fácil de saber, né?

Page 35: DDD + BDD + TDD - RF 2015

Aviao

-Prefixo-Nome-Cor

-Capacidade- Fabricante

-AviõesComMesmaPotência

Cor

-Nome

Capacidade

(Potência, Quantidade Passageiros)

Repositório de aviões

buscarPorNome buscarPorFabricante

Fabricante

(Airbus, Embraer, Piper, Boeing, etc)

Page 36: DDD + BDD + TDD - RF 2015
Page 37: DDD + BDD + TDD - RF 2015

public class Aviao {

private Long id;private String nome;

private Fabricante fabricante;private Cor cor;private Capacidade capacidade;

}

Page 38: DDD + BDD + TDD - RF 2015

public class Fabricante {

private String nome;

//getters & setters}

public class Cor {

private String nome;

//getters & setters}

public class Capacidade {

private String potencia;private String quantidadePassageiro;

//getters & setters}

Page 39: DDD + BDD + TDD - RF 2015

Repositório... BD? DAO?

O que nosso cliente quer?

Page 40: DDD + BDD + TDD - RF 2015

public interface AviaoRepository {

List<Aviao> getTodosAvioes();List<Aviao> getAvioesPorNome(String nome);List<Aviao> getAvioesPorFabricante(Fabricante fabricante);List<Aviao> getAvioesPorCapacidade(Capacidade capacidade);Aviao getAviaoPorId(Long id);

}

Page 41: DDD + BDD + TDD - RF 2015

Como implementar o Repositório?

Page 42: DDD + BDD + TDD - RF 2015
Page 43: DDD + BDD + TDD - RF 2015
Page 44: DDD + BDD + TDD - RF 2015

Poxa é isso mesmo que eu queria, está ficando

muito bom, porém esqueci que quero hangarar juntas

as aeronaves com a mesma potência.

Page 45: DDD + BDD + TDD - RF 2015

Model

Código

Page 46: DDD + BDD + TDD - RF 2015

Model

Código

Page 47: DDD + BDD + TDD - RF 2015

public class Aviao {

//Códigos anteriores... public boolean possuemMesmaPotencia(Aviao outroAviao){

return this.capacidade.getPotencia().equals(outroAviao.getPotencia());}

}

Page 48: DDD + BDD + TDD - RF 2015

Domain-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!

Page 49: DDD + BDD + TDD - RF 2015

Não importa a tecnologia. O que importa é o domain.

Page 50: DDD + BDD + TDD - RF 2015

http://image.slidesharecdn.com/bddextent20111029-111113010328-phpapp01/95/behavior-driven-development-pros-and-cons-5-728.jpg?cb=1321171622

Page 51: DDD + BDD + TDD - RF 2015

Mas o que é BDD?

Page 52: DDD + BDD + TDD - RF 2015

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.

Page 53: DDD + BDD + TDD - RF 2015

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 …

Page 54: DDD + BDD + TDD - RF 2015

• Narrativa/Estória: Busca Por Aeronaves

• Para meu sistema de vendas de aeronaves

• Eu, como cliente

• Desejo poder realizar buscas por nome das Aeronaves

Exemplo

Page 55: DDD + BDD + TDD - RF 2015

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 …

Page 56: DDD + BDD + TDD - RF 2015

Exemplo• Cenário I: Busca Aeronaves por nome

• Dado que meu cliente digite o nome da Aeronave

• Quando clicar no botão buscar

• Então o sistema deverá retornar todas as aeronaves disponíveis com aquele nome.

Page 57: DDD + BDD + TDD - RF 2015
Page 58: DDD + BDD + TDD - RF 2015

TDD

Page 59: DDD + BDD + TDD - RF 2015

Mas o que é TDD?

Page 60: DDD + BDD + TDD - RF 2015

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.

Page 61: DDD + BDD + TDD - RF 2015

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).

Page 62: DDD + BDD + TDD - RF 2015
Page 63: DDD + BDD + TDD - RF 2015
Page 64: DDD + BDD + TDD - RF 2015

BDD + TDD

Page 65: DDD + BDD + TDD - RF 2015
Page 66: DDD + BDD + TDD - RF 2015
Page 67: DDD + BDD + TDD - RF 2015

Ferramentas• ASSpec

• BDoc

• BDD para Python

• Behat - PHP

• Bumblebee - Extrai documentação de testes escritos com JUnit.

• beanSpec - Java

• Calabash - Permite rodar testes em aplicativos móveis para Android e iOS

• CppSpec - C++

• cfSpec - ColdFusion

• CSpec - C

• dSpec - Delphi

• Concordion - Ferramenta de testes automatizados em Java para fazer BDD usando textos em HTML para descrever comportamentos.

• Cucumber - (Java, .NET, Ruby, Flex ou qualquer aplicação web através do Watir ou Selenium)

• easyb - Groovy/Java

• EasySpec - Groovy, usável em Java

• GSpec - Groovy

• Instinct - Java

• JavaStubs - Java - Framework de BDD com suporte a Mock e Method Stubbing

• JBee - Java

• JBehave - Java

E muitas outras…https://pt.wikipedia.org/wiki/Behavior_Driven_Development#Ferramentas

Page 68: DDD + BDD + TDD - RF 2015

Referências• https://en.wikipedia.org/wiki/Behavior-driven_development

• http://eduardopires.net.br/2012/06/ddd-tdd-bdd/

• http://sobrecodigo.com/wp-content/uploads/2011/03/tdd_bdd.png

• http://www.princiweb.com.br/blog/programacao/tdd/tdd-ddd-e-bdd-praticas-de-desenvolvimento.html

• http://www.hascode.com/2011/05/oh-jbehave-baby-behaviour-driven-development-using-jbehave/

• http://arnauld.github.io/incubation/jbehave-get-started/bdd-cycle-around-tdd-cycles.png

• https://anoopjshetty.files.wordpress.com/2012/03/bdd.png

• https://pt.wikipedia.org/wiki/Behavior_Driven_Development#Ferramentas

• http://www.ianbicking.org/

• http://docs.behat.org/en/v2.5/

• http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/

• http://pt.slideshare.net/engenhariadesoftwareagil/ddd-domain-driven-design-5139191

• http://pt.slideshare.net/rponte/entendendo-domaindriven-design?related=1

• http://pt.slideshare.net/giovanni.bassi/programando-com-prazer-com-ddd?related=2

• http://pt.slideshare.net/eduardo.bregaida/ddd-linguagem?related=3

• http://www.infoq.com/br/domain-driven-design

• http://martinfowler.com/tags/domain%20driven%20design.html

• http://www.methodsandtools.com/archive/archive.php?id=97

Page 69: DDD + BDD + TDD - RF 2015

Referências II• http://www.infoq.com/br/news/2014/09/dddx-evans-challenging

• https://skillsmatter.com/conferences/1776-ddd-exchange-2014

• https://en.wikipedia.org/wiki/Domain-driven_design

• http://martinfowler.com/bliki/UbiquitousLanguage.html

• http://www.buscape.com.br/domain-driven-design-atacando-as-complexidades-no-coracao-do-software-2-ed-2011-eric-evans-8576085046.html#precos

• http://javawora.blogspot.com.br/2012/05/tdd-test-driven-development.html

• https://pt.wikipedia.org/wiki/Test_Driven_Development

• http://www.devmedia.com.br/test-driven-development-tdd-simples-e-pratico/18533

• http://tdd.caelum.com.br/

• http://tableless.com.br/tdd-por-que-usar/

• http://blog.thiagobelem.net/aprendendo-tdd-ou-desenvolvimento-orientado-a-testes/

• http://www.casadocodigo.com.br/products/livro-tdd

• http://agiledata.org/essays/tdd.html

• http://www.desenvolvimentoagil.com.br/xp/praticas/tdd/

• http://imasters.com.br/artigo/24242/desenvolvimento/principios-de-test-driven-development-tdd/

• http://www.johnidouglas.com.br/wp-content/uploads/2014/02/tdd-post.png

• http://pt.slideshare.net/IosifItkin/behavior-driven-development-pros-and-cons

• https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTAodyDP0DbiRihtiJcWt_slpWtYj4ynHENiYutmBWyXIA4HUSm

Page 70: DDD + BDD + TDD - RF 2015

Dúvidas?

Page 71: DDD + BDD + TDD - RF 2015

Obrigado!Eduardo Bregaida - @[email protected]

http://javawora.blogspot.com.br