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...
TDD - Presentation

   Testes feitos antes do código em si.

   Confiabilidade e flexibilidade.

Usado especialmente em...
TDD - Learning

 Desenvolvimento de software como
 aprendizado.



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

Escrever componentes pouco
acoplados.

Detectar erros quando “frescos”...
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 ...
Qualidade interna e
      externa
Níves de testes
    Acceptance: O sistema está em completo
    funcionamento?

   Integration: O código funciona contra ...
Ciclo de feedback interno e
           externo

             Write a              Make
  Write a    failing               ...
Extenal quality
Amount of feedback




                                          Internal quality
               unit   in...
TDD com objetos


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

   Algumas técnicas como CRC c...
Coupling and cohesion
   Acomplamento

      Alto
          acoplamento: Quando altera-se um
      objetos e há necessid...
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...
CRC card
                Game Engine
Displays game state   Renderer
Updates game state    Animator


Resolves collisions  ...
TDD with objects


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

((EditaSaveCustomizer) master.getModelisable()
   .getDockablePanel()
      .getCustomizer())
     ...
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) {
    ...
Use isso

public void reserveSeats(ReservationRequest request) {
   for(Carriage carriage : carriages) {
        if (carri...
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 ...
Referências
   Livro Growing Object-Oriented Software, Guide By Tests by
    Steve Freeman and Nat Pryce. October 2009.
...
Upcoming SlideShare
Loading in …5
×

Growing oos guided_by_tests entire

406 views

Published on

  • Be the first to comment

  • Be the first to like this

Growing oos guided_by_tests entire

  1. 1. Growing Object Oriented Software Guided By Tests.
  2. 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. 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. 4. TDD - Learning Desenvolvimento de software como aprendizado. “Antecipar as alterações não antecipáveis (To antecipate unantecipated changes)”
  5. 5. TDD - Benefits  Ideia clara do próximo passo. Escrever componentes pouco acoplados. Detectar erros quando “frescos” na mente.
  6. 6. TDD - Benefits  Fazer apenas o necessário.  Deploy contínuo.  Lógica separada do design do código
  7. 7. “Never write new functionality without a failing test”.
  8. 8. TDD - Refactoring  Pensar apenas no local da alteração e agir somente nesse local.  Confusão entre conceitos com refactoring com redesign.
  9. 9. Qualidade interna e externa
  10. 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. 11. Ciclo de feedback interno e externo Write a Make Write a failing the unit test failing test pass acceptance test Refactor
  12. 12. Extenal quality Amount of feedback Internal quality unit integration end-to-end
  13. 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. 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. 15. Coupling and cohesion  Coesão  Em OO é quando uma classe tem um propósito bem claro e definido.
  16. 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. 17. CRC card Game Engine Displays game state Renderer Updates game state Animator Resolves collisions Collision Detector
  18. 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. 19. Ao invés de usar isso ((EditaSaveCustomizer) master.getModelisable() .getDockablePanel() .getCustomizer()) .getSaveItem().setEnabled(Boolean.FALSE)); Use isso master.allowSavingOfCustomisations();
  20. 20. TDD with objects  But sometimes ask.  Algumas vezes é necessário perguntar a classe o que fazer.
  21. 21. Ao invés de usar isso public void reserveSeats(ReservationRequest request) { for(Carriage carriage : carriages) { if (carriage.getSeats().getPercenReserved() < this.percentReservedBarrier) { .... } }
  22. 22. Use isso public void reserveSeats(ReservationRequest request) { for(Carriage carriage : carriages) { if (carriage.hasSeatsAvailableWithin( this.percentReservedBarrier)) { .... } }
  23. 23. Unit-test and collaborators
  24. 24. TDD - TOOLS  Junit4  Jmock2  Hamcrest Matchers
  25. 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. 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.

×