SlideShare ist ein Scribd-Unternehmen logo
1 von 68
Downloaden Sie, um offline zu lesen
Quem Sou?
10 anos como Dev Java 6 anos como Scrum Master
Atualmente Aspirante a Piloto Comercial de Avião
@bregaida
eduardo.bregaida@gmail.com


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

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


Mas 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 …
• 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
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 …
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.
TDD


Mas o que é TDD?
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 CicloVermelho-Verde-Refatora
(Red - Green - Refactor).
BDD + TDD
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
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
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
Dúvidas?
Eduardo Bregaida - @bregaida
eduardo.bregaida@gmail.com
http://javawora.blogspot.com.br
Obrigado!

Weitere ähnliche Inhalte

Was ist angesagt?

Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-diaCase Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Paulo César M Jeveaux
 
Desenvolvedor no controle utilizando tdd
Desenvolvedor no controle utilizando tddDesenvolvedor no controle utilizando tdd
Desenvolvedor no controle utilizando tdd
Victor Serta
 

Was ist angesagt? (20)

Menos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaMenos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na prática
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 
Desmistificando o kanban
Desmistificando o kanbanDesmistificando o kanban
Desmistificando o kanban
 
Vamos falar de DevOps?
Vamos falar de DevOps?Vamos falar de DevOps?
Vamos falar de DevOps?
 
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-diaCase Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
 
Qualidade de Software em Micro Serviços
Qualidade de Software em Micro ServiçosQualidade de Software em Micro Serviços
Qualidade de Software em Micro Serviços
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Coding Dojo e TDD
Coding Dojo e TDDCoding Dojo e TDD
Coding Dojo e TDD
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
 
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineJavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
 
E so mais um campinho na tela
E so mais um campinho na telaE so mais um campinho na tela
E so mais um campinho na tela
 
Grails
GrailsGrails
Grails
 
Desenvolvedor no controle utilizando tdd
Desenvolvedor no controle utilizando tddDesenvolvedor no controle utilizando tdd
Desenvolvedor no controle utilizando tdd
 
Coding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programandoCoding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programando
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Scrum, Agilismo e Boas Práticas
Scrum, Agilismo e Boas PráticasScrum, Agilismo e Boas Práticas
Scrum, Agilismo e Boas Práticas
 
Introdução de Kanban para Equipes Scrum
Introdução de Kanban para Equipes ScrumIntrodução de Kanban para Equipes Scrum
Introdução de Kanban para Equipes Scrum
 
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
 
Modelo ágil
Modelo ágilModelo ágil
Modelo ágil
 

Ähnlich wie Java+DDD+BDD+TDD=Sucesso Total

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 

Ähnlich wie Java+DDD+BDD+TDD=Sucesso Total (20)

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
DDD manipulando mais que bytes
DDD   manipulando mais que bytesDDD   manipulando mais que bytes
DDD manipulando mais que bytes
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 
Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018
 
Desvendando o Docker
Desvendando o DockerDesvendando o Docker
Desvendando o Docker
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
 
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de Software
 
Introducao XP
Introducao XPIntroducao XP
Introducao XP
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de Programação
 

Mehr von Eduardo Bregaida

Mehr von Eduardo Bregaida (20)

War Room - Bregaida - V1
War Room - Bregaida - V1War Room - Bregaida - V1
War Room - Bregaida - V1
 
Feedbacks - V1
Feedbacks - V1Feedbacks - V1
Feedbacks - V1
 
Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2
 
Treinamento Agile com scrum
Treinamento Agile com scrumTreinamento Agile com scrum
Treinamento Agile com scrum
 
Aviação Civil LT sciensa
Aviação Civil  LT sciensaAviação Civil  LT sciensa
Aviação Civil LT sciensa
 
Management 3.0 - V. Revisada
Management 3.0 - V. RevisadaManagement 3.0 - V. Revisada
Management 3.0 - V. Revisada
 
Aula 15 minutos
Aula 15 minutosAula 15 minutos
Aula 15 minutos
 
DDD - Linguagem Ubíqua
DDD - Linguagem UbíquaDDD - Linguagem Ubíqua
DDD - Linguagem Ubíqua
 
Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão JavaCultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
 
Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágil
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeisFalhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
 
Virus em Hw
Virus em HwVirus em Hw
Virus em Hw
 
JSF & REST
JSF & RESTJSF & REST
JSF & REST
 
Cloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs FinalCloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs Final
 
Metodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr HouseMetodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr House
 
Java E O Mercado De Trabalho
Java E O Mercado De TrabalhoJava E O Mercado De Trabalho
Java E O Mercado De Trabalho
 
Agile SCRUM
Agile SCRUMAgile SCRUM
Agile SCRUM
 

Java+DDD+BDD+TDD=Sucesso Total