26
Growing Object Oriented Software Guided By Tests.

Growing oos guided_by_tests entire

Embed Size (px)

Citation preview

Page 1: Growing oos guided_by_tests entire

Growing Object

Oriented

Software Guided

By Tests.

Page 2: Growing oos guided_by_tests entire

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.

Page 3: Growing oos guided_by_tests entire

TDD - Presentation

Testes feitos antes do código em si.

Confiabilidade e flexibilidade.

Usado especialmente em agile software,

práticas XP e Scrum projects.

Page 4: Growing oos guided_by_tests entire

Desenvolvimento de software como aprendizado.

“Antecipar as alterações não antecipáveis

(To antecipate unantecipated changes)”

TDD - Learning

Page 5: Growing oos guided_by_tests entire

TDD - Benefits

Ideia clara do próximo passo.

Escrever componentes pouco

acoplados.

Detectar erros quando “frescos” na

mente.

Page 6: Growing oos guided_by_tests entire

TDD - Benefits

Fazer apenas o necessário.

Deploy contínuo.

Lógica separada do design do código

Page 7: Growing oos guided_by_tests entire

“Never write new functionality without a failing test”.

Page 8: Growing oos guided_by_tests entire

TDD - Refactoring

Pensar apenas no local da alteração e agir

somente nesse local.

Confusão entre conceitos com refactoring

com redesign.

Page 9: Growing oos guided_by_tests entire

Qualidade interna e

externa

Page 10: Growing oos guided_by_tests entire

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?

Page 11: Growing oos guided_by_tests entire

Ciclo de feedback interno e

externo

Write a failing

acceptance test

Write a failing unit test

Refactor

Make the test pass

Page 12: Growing oos guided_by_tests entire

unit integration end-to-end

Internal quality

Am

ount

of fe

edback

Extenal quality

Page 13: Growing oos guided_by_tests entire

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.

Page 14: Growing oos guided_by_tests entire

Coupling and cohesion

Acomplamento

Alto acoplamento: Quando altera-se um

objetos e há necessidade de alterar outros.

Baixo acoplamento: Quando altera-se

objetos e consequentemente, com pouca ou

sem necessidades de alterar outros.

Page 15: Growing oos guided_by_tests entire

Coupling and cohesion

Coesão

Em OO é quando uma classe tem um

propósito bem claro e definido.

Page 16: Growing oos guided_by_tests entire

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.

Page 17: Growing oos guided_by_tests entire

CRC card Game Engine

Displays game state Renderer

Updates game state Animator

Resolves collisions Collision Detector

Page 18: Growing oos guided_by_tests entire

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.

Page 19: Growing oos guided_by_tests entire

Ao invés de usar isso

((EditaSaveCustomizer) master.getModelisable()

.getDockablePanel()

.getCustomizer())

.getSaveItem().setEnabled(Boolean.FALSE));

Use isso

master.allowSavingOfCustomisations();

Page 20: Growing oos guided_by_tests entire

TDD with objects

But sometimes ask.

Algumas vezes é necessário perguntar a

classe o que fazer.

Page 21: Growing oos guided_by_tests entire

Ao invés de usar isso

public void reserveSeats(ReservationRequest request) {

for(Carriage carriage : carriages) {

if (carriage.getSeats().getPercenReserved() <

this.percentReservedBarrier) {

....

}

}

Page 22: Growing oos guided_by_tests entire

Use isso

public void reserveSeats(ReservationRequest request) {

for(Carriage carriage : carriages) {

if (carriage.hasSeatsAvailableWithin(

this.percentReservedBarrier)) {

....

}

}

Page 23: Growing oos guided_by_tests entire

Unit-test and collaborators

Page 24: Growing oos guided_by_tests entire

TDD - TOOLS

Junit4

Jmock 2

Hamcrest Matchers

Page 25: Growing oos guided_by_tests entire

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.

Conclusão

Page 26: Growing oos guided_by_tests entire

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.

Referências