Consolidated Judgment in OOS No. 1 of 1989, OOS No. 3 of 1989 ...
Growing oos guided_by_tests entire
-
Upload
andre-mendonca-bastos -
Category
Documents
-
view
222 -
download
0
Transcript of Growing oos guided_by_tests entire
![Page 1: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/1.jpg)
Growing Object
Oriented
Software Guided
By Tests.
![Page 2: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/2.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/3.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/4.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/5.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/6.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/7.jpg)
“Never write new functionality without a failing test”.
![Page 8: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/8.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/9.jpg)
Qualidade interna e
externa
![Page 10: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/10.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/11.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/12.jpg)
unit integration end-to-end
Internal quality
Am
ount
of fe
edback
Extenal quality
![Page 13: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/13.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/14.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/15.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/16.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/17.jpg)
CRC card Game Engine
Displays game state Renderer
Updates game state Animator
Resolves collisions Collision Detector
![Page 18: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/18.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/19.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/20.jpg)
TDD with objects
But sometimes ask.
Algumas vezes é necessário perguntar a
classe o que fazer.
![Page 21: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/21.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/22.jpg)
Use isso
public void reserveSeats(ReservationRequest request) {
for(Carriage carriage : carriages) {
if (carriage.hasSeatsAvailableWithin(
this.percentReservedBarrier)) {
....
}
}
![Page 23: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/23.jpg)
Unit-test and collaborators
![Page 24: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/24.jpg)
TDD - TOOLS
Junit4
Jmock 2
Hamcrest Matchers
![Page 25: Growing oos guided_by_tests entire](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/25.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022051112/55843adad8b42a77068b4ddb/html5/thumbnails/26.jpg)
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