DDD + BDD + TDD - RF 2015

2.131 visualizações

Publicada em

Apresentação dos Conceitos de Linguagem Úbiqua, BDD e TDD

Publicada em: Tecnologia
2 comentários
8 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
2.131
No SlideShare
0
A partir de incorporações
0
Número de incorporações
793
Ações
Compartilhamentos
0
Downloads
28
Comentários
2
Gostaram
8
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

DDD + BDD + TDD - RF 2015

  1. 1. @bregaida eduardo.bregaida@reservafacil.tur.br
  2. 2. BDD
  3. 3. 
 Mas o que é DDD?
  4. 4. • DDD?
  5. 5. • DDD? • DDD?
  6. 6. • DDD? • DDD? • DDD?
  7. 7. • DDD? • DDD? • DDD? • DDD?
  8. 8. • DDD? • DDD? • DDD? • DDD?
  9. 9. 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...
  10. 10. E aí Bregaida, beleza? Estou precisando de sua ajuda mais uma vez, preciso de um sistema para minha loja de aeronaves.
  11. 11. Domain-Driven Design
  12. 12. Domain-Driven Design
  13. 13. Teremos Tupis, Cherokees, Aeroboeiros, Paulistinhas e outras aeronaves, com diferentes capacidades e potências.
  14. 14. ?
  15. 15. Hum... Então se eu fizer CapacidadeTO estender de AbstractAeronave, acho que vai dar certo
  16. 16. ?
  17. 17. Domain Negócio Complexo Problema Real Pessoas Linguagem de Negócio
  18. 18. Conversa Sobre o domínio Para criar um sistema
  19. 19. Conversa Sobre o domínio Para criar um sistema Precisamos falar a mesma língua!
  20. 20. Língua Ubíqua (Ubiquitous Language)
  21. 21. Temos hangares aqui no nosso espaço, com vários aviões diferentes...
  22. 22. Nosso cliente chegará no Hangar e usará o sistema para encontrar os melhores aviões para sua necessidade.
  23. 23. Por exemplo, temos aviões de diferentes cores e capacidades.
  24. 24. Normalmente o cliente também pode escolher pela empresa fabricante (Embraer, Piper, Aviat, etc)
  25. 25. Aviao -Cor -Capacidade - Fabricante Cor -Nome Capacidade (Potência, Quantidade Passageiros) Fabricante (Piper, Embraer, Aviate, Boeing, etc)
  26. 26. Isso mesmo e nossos aviões possuem um nome e um prefixo que é sua identificação no Brasil.
  27. 27. Aviao -id -Nome -Cor -Capacidade - Fabricante Cor -Nome Capacidade (Potência, Quantidade Passageiros) Fabricante (Airbus, Embraer, Piper, Boeing, etc)
  28. 28. Exatamente, mas nosso cliente vai mesmo querer pesquisar por Fabricante e nome da aeronave.
  29. 29. 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)
  30. 30. Aliás outra busca que quero é dado um avião quero saber quais os aviões com mesma potência.
  31. 31. Creio que com esse nosso repositório fica mais fácil de saber, né?
  32. 32. 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)
  33. 33. public class Aviao { private Long id; private String nome; private Fabricante fabricante; private Cor cor; private Capacidade capacidade; }
  34. 34. 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 }
  35. 35. Repositório... BD? DAO? O que nosso cliente quer?
  36. 36. 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); }
  37. 37. Como implementar o Repositório?
  38. 38. Poxa é isso mesmo que eu queria, está ficando muito bom, porém esqueci que quero hangarar juntas as aeronaves com a mesma potência.
  39. 39. Model Código
  40. 40. Model Código
  41. 41. public class Aviao { //Códigos anteriores... public boolean possuemMesmaPotencia(Aviao outroAviao){ return this.capacidade.getPotencia().equals(outroAviao.getPotencia()); } }
  42. 42. 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!
  43. 43. Não importa a tecnologia. O que importa é o domain.

  44. 44. http://image.slidesharecdn.com/bddextent20111029-111113010328-phpapp01/95/behavior-driven-development-pros-and-cons-5-728.jpg?cb=1321171622
  45. 45. 
 Mas o que é BDD?
  46. 46. 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.
  47. 47. 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 …
  48. 48. • 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
  49. 49. 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 …
  50. 50. 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.
  51. 51. TDD
  52. 52. 
 Mas o que é TDD?
  53. 53. 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.
  54. 54. 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 CicloVermelho-Verde-Refatora (Red - Green - Refactor).
  55. 55. BDD + TDD
  56. 56. 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
  57. 57. 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
  58. 58. 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
  59. 59. Dúvidas?
  60. 60. Obrigado!Eduardo Bregaida - @bregaida eduardo.bregaida@reservafacil.tur.br http://javawora.blogspot.com.br

×