SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Growing Object
Oriented
Software Guided
By Tests.
Introdução
       Uma leve introdução de como testes
podem criar aplicações confiáveis e ainda sim com
design fácil de ser alterado e expandido e o porque
da necessidade de ser escrever o teste antes.
TDD - Presentation

   Testes feitos antes do código em si.

   Confiabilidade e flexibilidade.

Usado especialmente em agile software,
práticas XP e Scrum projects.
TDD - Learning

 Desenvolvimento de software como
 aprendizado.



“Antecipar as alterações não antecipáveis
(To antecipate unantecipated changes)”
TDD - Benefits
   Ideia clara do próximo passo.

Escrever componentes pouco
acoplados.

Detectar erros quando “frescos” na
mente.
TDD - Benefits


   Fazer apenas o necessário.

   Deploy contínuo.

   Lógica separada do design do código
“Never write new functionality
   without a failing test”.
TDD - Refactoring


   Pensar apenas no local da alteração e agir
    somente nesse local.

   Confusão entre conceitos com refactoring
    com redesign.
Qualidade interna e
      externa
Níves de testes
    Acceptance: O sistema está em completo
    funcionamento?

   Integration: O código funciona contra um
    código que não se pode alterar?

   Unit: Nossos objetos fazem a coisa certa?
    Eles estão funcionando?
Ciclo de feedback interno e
           externo

             Write a              Make
  Write a    failing               the
              unit                test
  failing     test                pass
acceptance
   test



                       Refactor
Extenal quality
Amount of feedback




                                          Internal quality
               unit   integration   end-to-end
TDD com objetos


   Diferenciar os papéis, as responsabilidades e
    os colaboradores.

   Algumas técnicas como CRC cards podem
    ser usadas para reprensentar os papéis.
Coupling and cohesion
   Acomplamento

      Alto
          acoplamento: Quando altera-se um
      objetos e há necessidade de alterar outros.

      Baixoacoplamento: Quando altera-se
      objetos e consequentemente, com pouca ou
      sem necessidades de alterar outros.
Coupling and cohesion
   Coesão

       Em OO é quando uma classe tem um
        propósito bem claro e definido.
TDD – web of objects

   Em geral, um objeto deve ter apenas uma
    ligação com o seu “vizinho”.

   Siga as “mensagens”: em Java por
    exemplo, para identificar-se os papéis do
    sistema usa-se o conceito de interfaces.

   Pode-se usar CRC cards para tentar definir
    as funcionalidades de um sistema.
CRC card
                Game Engine
Displays game state   Renderer
Updates game state    Animator


Resolves collisions   Collision Detector
TDD with objects


   Tell, don’t ask.
       Métodos que ao invés de “perguntarem”
        para a classe, simplesmente “dizem” o que
        a classe deve fazer.
Ao invés de usar isso

((EditaSaveCustomizer) master.getModelisable()
   .getDockablePanel()
      .getCustomizer())
       .getSaveItem().setEnabled(Boolean.FALSE));


                    Use isso

master.allowSavingOfCustomisations();
TDD with objects


   But sometimes ask.
       Algumas vezes é necessário perguntar a
        classe o que fazer.
Ao invés de usar isso

public void reserveSeats(ReservationRequest request) {
   for(Carriage carriage : carriages) {
        if (carriage.getSeats().getPercenReserved() <
             this.percentReservedBarrier) {
        ....
   }
}
Use isso

public void reserveSeats(ReservationRequest request) {
   for(Carriage carriage : carriages) {
        if (carriage.hasSeatsAvailableWithin(
             this.percentReservedBarrier)) {
        ....
   }
}
Unit-test and collaborators
TDD - TOOLS


 Junit4
 Jmock2
 Hamcrest Matchers
Conclusão
O livro Growing Object-Oriented Software, Guided
by tests inicialmente mostra uma pequena
introdução sobre como crescer de forma
“incremental” usando testes e as principais
ferramentas do mercado.
Referências
   Livro Growing Object-Oriented Software, Guide By Tests by
    Steve Freeman and Nat Pryce. October 2009.
   All of ilustrations inside this presentation had taken from the
    book above mentioned.

   CRC model from
    http://www.agilemodeling.com/artifacts/crcModel.htm.
   Law of Demeter from
    http://en.wikipedia.org/wiki/Law_of_Demeter.

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
TDD em 220V
TDD em 220VTDD em 220V
TDD em 220V
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
TDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do TesteTDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do Teste
 
Uml
UmlUml
Uml
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
J unit
J unitJ unit
J unit
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
JUnit
JUnitJUnit
JUnit
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefes
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 

Semelhante a Growing oos guided_by_tests entire

Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011Marcos Paulo Souza Damasceno
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareGabriel Felipe Soares
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testesCarlos Santana
 
ALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test ManagerALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test ManagerAlan Carlos
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
O que faz (ou não) um tester no mundo ágil
O que faz (ou não) um tester no mundo ágilO que faz (ou não) um tester no mundo ágil
O que faz (ou não) um tester no mundo ágilSamanta Cicilia
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...Toni Esteves
 
XP Programming
XP ProgrammingXP Programming
XP ProgrammingCJR, UnB
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 

Semelhante a Growing oos guided_by_tests entire (20)

Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testes
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
ALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test ManagerALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test Manager
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
O que faz (ou não) um tester no mundo ágil
O que faz (ou não) um tester no mundo ágilO que faz (ou não) um tester no mundo ágil
O que faz (ou não) um tester no mundo ágil
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
XP Programming
XP ProgrammingXP Programming
XP Programming
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 

Growing oos guided_by_tests entire

  • 2. Introdução Uma leve introdução de como testes podem criar aplicações confiáveis e ainda sim com design fácil de ser alterado e expandido e o porque da necessidade de ser escrever o teste antes.
  • 3. TDD - Presentation  Testes feitos antes do código em si.  Confiabilidade e flexibilidade. Usado especialmente em agile software, práticas XP e Scrum projects.
  • 4. TDD - Learning Desenvolvimento de software como aprendizado. “Antecipar as alterações não antecipáveis (To antecipate unantecipated changes)”
  • 5. TDD - Benefits  Ideia clara do próximo passo. Escrever componentes pouco acoplados. Detectar erros quando “frescos” na mente.
  • 6. TDD - Benefits  Fazer apenas o necessário.  Deploy contínuo.  Lógica separada do design do código
  • 7. “Never write new functionality without a failing test”.
  • 8. TDD - Refactoring  Pensar apenas no local da alteração e agir somente nesse local.  Confusão entre conceitos com refactoring com redesign.
  • 10. Níves de testes  Acceptance: O sistema está em completo funcionamento?  Integration: O código funciona contra um código que não se pode alterar?  Unit: Nossos objetos fazem a coisa certa? Eles estão funcionando?
  • 11. Ciclo de feedback interno e externo Write a Make Write a failing the unit test failing test pass acceptance test Refactor
  • 12. Extenal quality Amount of feedback Internal quality unit integration end-to-end
  • 13. TDD com objetos  Diferenciar os papéis, as responsabilidades e os colaboradores.  Algumas técnicas como CRC cards podem ser usadas para reprensentar os papéis.
  • 14. Coupling and cohesion  Acomplamento  Alto acoplamento: Quando altera-se um objetos e há necessidade de alterar outros.  Baixoacoplamento: Quando altera-se objetos e consequentemente, com pouca ou sem necessidades de alterar outros.
  • 15. Coupling and cohesion  Coesão  Em OO é quando uma classe tem um propósito bem claro e definido.
  • 16. TDD – web of objects  Em geral, um objeto deve ter apenas uma ligação com o seu “vizinho”.  Siga as “mensagens”: em Java por exemplo, para identificar-se os papéis do sistema usa-se o conceito de interfaces.  Pode-se usar CRC cards para tentar definir as funcionalidades de um sistema.
  • 17. CRC card Game Engine Displays game state Renderer Updates game state Animator Resolves collisions Collision Detector
  • 18. TDD with objects  Tell, don’t ask.  Métodos que ao invés de “perguntarem” para a classe, simplesmente “dizem” o que a classe deve fazer.
  • 19. Ao invés de usar isso ((EditaSaveCustomizer) master.getModelisable() .getDockablePanel() .getCustomizer()) .getSaveItem().setEnabled(Boolean.FALSE)); Use isso master.allowSavingOfCustomisations();
  • 20. TDD with objects  But sometimes ask.  Algumas vezes é necessário perguntar a classe o que fazer.
  • 21. Ao invés de usar isso public void reserveSeats(ReservationRequest request) { for(Carriage carriage : carriages) { if (carriage.getSeats().getPercenReserved() < this.percentReservedBarrier) { .... } }
  • 22. Use isso public void reserveSeats(ReservationRequest request) { for(Carriage carriage : carriages) { if (carriage.hasSeatsAvailableWithin( this.percentReservedBarrier)) { .... } }
  • 24. TDD - TOOLS  Junit4  Jmock2  Hamcrest Matchers
  • 25. Conclusão O livro Growing Object-Oriented Software, Guided by tests inicialmente mostra uma pequena introdução sobre como crescer de forma “incremental” usando testes e as principais ferramentas do mercado.
  • 26. Referências  Livro Growing Object-Oriented Software, Guide By Tests by Steve Freeman and Nat Pryce. October 2009.  All of ilustrations inside this presentation had taken from the book above mentioned.  CRC model from http://www.agilemodeling.com/artifacts/crcModel.htm.  Law of Demeter from http://en.wikipedia.org/wiki/Law_of_Demeter.