Your SlideShare is downloading. ×
0
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Clean Code (EN ESPANOL)

404

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
404
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Hola! Muybuenastardes.Bienvenidos al entrenamento de Clean Code. Es um gran placer estaraquí en vuestra casa, en Peru. En los próximos dos díasvamosestar a juntoshablando de calidad de código, técnicas de refactorización, orientación a objectos, pruebasautomatizadas entre otrascosas
  • Transcript

    • 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br/es Clean Code con Técnicas de Refactorización y TDD
    • 2. Acerca de la iniciativa...
    • 3. Estatísticas del entrenamiento de Clean Code hasta la fecha: Primer grupo en: 05/2012 Clases ya realizadas: 21 Desarrolladores entrenados: 340
    • 4. AgileCode “Transformar la manera en que los equipos de desarrollo de software trabajan, aumentando su nivel de madurez técnica y gerencial” http://www.agilecode.com.br/es
    • 5. Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • • • • Desarrollo de Software en Gennera Entrenamientos en Agile Code Artículos en Java Magazine Conferencias sobre desarrollo de software en eventos, universidades y empresas
    • 6. Formación Académica Ciencias de la Computación - UFSC Gestión de Proyectos - FGV Certificaciones SCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM Experiencia Desde hace más de 12 años desarrollando software en la plataforma Java en las empresas: EDS, HP, NET, Citibank, GM, Dígitro, Softplan, OnCast, Senai, VALE, RBS, Unimed, Globalcode, V.Office, Suntech, WPlex e Gennera.
    • 7. El contenido deste entrenamiento puede afectar su zona de confort
    • 8. ¿Sobre que vamos hablar?
    • 9. Insatisfación con el fracaso!
    • 10. ¿Existe diferencia?
    • 11. Insatisfación con el trabajo
    • 12. ¿Te sientes profesional?
    • 13. ¿Te sientes profesional?
    • 14. ¿Te sientes profesional?
    • 15. ¿Podría ser más productivo?
    • 16. ¿Cuanto tiempo perdemos intentando entender el código para arreglar un defecto?
    • 17. ¿Te sientes haciendo un trabajo brazal y fatigoso?
    • 18. ¿Ya quisiste dejarlo todo?
    • 19. ¿Que motiva a un desarrollador?
    • 20. “Quien trabaja solamente por el diñero, ganhe lo que for, siempre será mal pago.”
    • 21. “Cual es tu obra?” (Mario Cortella)
    • 22. ¿Cuanto custa toda esta confusión para la empresa?
    • 23. Alta rotatividad
    • 24. Demora excesiva para poner nuevos productos en marcha
    • 25. ¿Cuantos proyectos ya fueran desechados?
    • 26. Muchos defectos
    • 27. ¿Cuanto custa la perdida de confianza de sus clientes?
    • 28. Passamos la major parte del tiempo leyendo el código!
    • 29. ¿Dos desarrolladores son más productivos que uno? (Pair Programming)
    • 30. ¿Que es Clean Code?
    • 31. Echo con cuidado
    • 32. Inteligente
    • 33. Reusable
    • 34. Revela sus intenciones
    • 35. Sencillo
    • 36. Fácil de entender
    • 37. “Cualquier tonto consigue escribir un código que el ordenador entienda. Buenos programadores escriben código que otros humanos comprendan.” (Martin Fowler)
    • 38. Funcionar es lo mínimo
    • 39. Calidad Externa x Interna
    • 40. ¿Como medir la calidad del código?
    • 41. ¿Líneas de código? ¿Número de métodos? ¿Número de classes? ¿Tamanho de los método? ¿Complejidad? ???
    • 42. WTF?
    • 43. WTF? WTF?
    • 44. WTF? WTF? WTF? WTF?
    • 45. Dificuldad para entenderse
    • 46. Decirlo es fácil!
    • 47. Empezando a entrenar
    • 48. Nomes estraños
    • 49. Limitación histórica
    • 50. 1. 2. 3. 4. 5. 6. 7. 8. 9. READ INPUT TAPE A1, B1, C1; 501 FORMAT A1; IF (A1) 777, 777, 777 IF (B1) 888, 888, 888 IF (C1) 999, 999, 999 STOP 1 799 S = FLOATF(A1 + B1 + C1) / 2.0 WRITE TO TAPE S END PROCESS Las linguajes no ayudavam
    • 51. Los entornos de desarrollo no ayudavam
    • 52. Los ordenadores no ayudavam
    • 53. Herencia Maldita
    • 54. Aprendiendo con los mestres
    • 55. 1. 2. 3. 4. 5. 6. 7. 8. // Descripción de la maquina String mDesc; // Suma de las parcelas int s1; // Color de los ojos String cOjos; // Cotización del Dólar int aux;
    • 56. Revelando su intención
    • 57. 1. 2. 3. 4. 5. 6. 7. 8. // Descripción de la maquina String mDesc; // Suma de las parcelas int s1; // Color de los ojos String cOjos; // Cotazición del Dólar int aux;
    • 58. 1. 2. 3. 4. 5. 6. 7. 8. // Descripción de la maquina String; // Suma de las parcelas int; // Color de los ojos String; // Cotización del Dólar int;
    • 59. 1. 2. 3. 4. 5. 6. 7. 8. // Descripción de la maquina String descriptionDeLaMaquina; // Suma de las parcelas int sumaDeLasParcelas; // Color de los ojos String colorDeLosOjos; // Cotización del Dólar int cotizacionDelDolar;
    • 60. 1. 2. 3. 4. 5. 6. 7. 8. String descriptionDeLaMaquina; int sumaDeLasParcelas; String colorDeLosOjos; int cotizacionDelDolar;
    • 61. 1. 2. 3. 4. String descriptionDeLaMaquina; int sumaDeLasParcelas; String colorDeLosOjos; int cotizacionDelDolar;
    • 62. No seas tan genérico
    • 63. 1. 2. 3. 4. 5. 6. // Ejecutar el cálculo de la nómina void ejecutar(); // Calcular el impuesto void calcular(); // Renderizar la imagen void renderizar(); 7. // Totalizar los costos de las llamadas 8. void totalizar();
    • 64. 1. 2. 3. 4. 5. 6. // Ejecutar el cálculo de la nómina void ejecutarCalculoDeLaNomina(); // Calcular el impuesto void calcularImpuesto(); // Renderizar la imagen void renderizarImagen(); 7. // Totalizar los costos de las llamadas 8. void totalizarCostosDeLasLlamadas()
    • 65. 1. 2. void ejecutarCalculoDeLaNomina(); 3. 4. void calcularImpuesto(); 5. 6. void renderizarImagen(); 7. 8. void totalizarCostosDeLasLlamadas()
    • 66. 1. void ejecutarCalculoDeLaNomina(); 2. void calcularImpuesto(); 3. void renderizarImagen(); 4. void totalizarCostosDeLasLlamadas()
    • 67. Simplificando estructuras de decisión
    • 68. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. class Taximetro { ... double calcularCostoDelViaje() { if (hora > 22:00 || hora < 06:00) { return distancia * 3.90; } else { return distancia * 2.10; } } ...
    • 69. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. class Taximetro { ... double calcularCostoDelViaje() { if () { return distancia * 3.90; } else { return distancia * 2.10; } } ...
    • 70. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. class Taximetro { ... double calcularCostoDelViaje() { if (esBandeiraDos()) { return distancia * 3.90; } else { return distancia * 2.10; } } ...
    • 71. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... double calcularCostoDelViaje() { if (esBandeiraDos()) { return distancia * 3.90; } else { return distancia * 2.10; } Boolean esBandeiraDos() { return hora > 22:00 || hora < 06:00; } ...
    • 72. ¿Cuales son las ventajas de la modificación?
    • 73. ¿Cómo sería una prueba automatizada antes de la refactorización?
    • 74. 1. 2. 3. 4. 5. 6. 7. public class TaximetroPrueba { public void debeSerBanderaDos() { } }
    • 75. 1. 2. 3. 4. 5. 6. 7. 8. public class TaximetroPrueba { public void debeSerBanderaDos() { Taximetro taximetro = new Taximetro(); } }
    • 76. 1. 2. 3. 4. 5. 6. 7. 8. 9. public class TaximetroPrueba { public void debeSerBanderaDos() { Taximetro taximetro = new Taximetro(); taximetro.iniciar(23horas()); } }
    • 77. 1. public class TaximetroPrueba { 2. 3. public void debeSerBanderaDos() { 4. Taximetro taximetro = new Taximetro(); 5. taximetro.iniciar(23horas()); 6. taximetro.distanciaRecorridaEnKM(3.45); 7. } 8. 9. } 10.
    • 78. 1. public class TaximetroPrueba { 2. 3. public void debeSerBanderaDos() { 4. Taximetro taximetro = new Taximetro(); 5. taximetro.iniciar(23horas()); 6. taximetro.distanciaRecorridaEnKM(3.45); 7. double costo = taximetro.calcularCostoDelViaje(); 8. } 9. 10. } 11.
    • 79. 1. public class TaximetroPrueba { 2. 3. public void debeSerBanderaDos() { 4. Taximetro taximetro = new Taximetro(); 5. taximetro.iniciar(23horas()); 6. taximetro.distanciaRecorridaEnKM(3.45); 7. double costo = taximetro.calcularCostoDelViaje(); 8. assertEquals(23.45, costo); 9. } 10. 11. } 12.
    • 80. ¿Y depués?
    • 81. 1. 2. 3. 4. 5. 6. 7. public class TaximetroPrueba { public void debeSerBanderaDos() { } }
    • 82. 1. 2. 3. 4. 5. 6. 7. 8. public class TaximetroPrueba { public void debeSerBanderaDos() { Taximetro taximetro = new Taximetro(); } }
    • 83. 1. 2. 3. 4. 5. 6. 7. 8. 9. public class TaximetroPrueba { public void debeSerBanderaDos() { Taximetro taximetro = new Taximetro(); taximetro.iniciar(23horas()); } }
    • 84. 1. public class TaximetroPrueba { 2. 3. public void debeSerBanderaDos() { 4. Taximetro taximetro = new Taximetro(); 5. taximetro.iniciar(23horas()); 6. assertTrue(taximetro.esBandeiraDos()); 7. } 8. 9. } 10.
    • 85. Magic numbers
    • 86. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... double calcularCostoDelViaje() { if (esBandeiraDos()) { return distancia * 3.90; } else { return distancia * 2.10; } Boolean esBandeiraDos() { return hora > 22:00 || hora < 06:00; } ...
    • 87. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... double calcularCostoDelViaje() { if (esBandeiraDos()) { return distancia * ; } else { return distancia * ; } Boolean esBandeiraDos() { return hora > 22:00 || hora < 06:00; } ...
    • 88. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... double calcularCostoDelViaje() { if (esBandeiraDos()) { return distancia * COSTO_BANDERA_2; } else { return distancia * COSTO_BANDERA_1; } Boolean esBandeiraDos() { return hora > 22:00 || hora < 06:00; } ...
    • 89. Saindo do labirinto
    • 90. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } else { 5. return distancia * COSTO_BANDERA_1; 6. }
    • 91. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } else { 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } else { 8. return distancia * COSTO_BANDERA_1; 9. } 10. }
    • 92. Distancia del borde
    • 93. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } else { 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } else { 8. return distancia * COSTO_BANDERA_1; 9. } 10. } 11. }
    • 94. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } else { 8. return distancia * COSTO_BANDERA_1; 9. } 10. 11. }
    • 95. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } else { 8. return distancia * COSTO_BANDERA_1; 9. } 10. 11. }
    • 96. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } else { 8. return distancia * COSTO_BANDERA_1; 9. } 10. } 11.
    • 97. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } 8. return distancia * COSTO_BANDERA_1; 9. 10. } 11.
    • 98. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } 8. return distancia * COSTO_BANDERA_1; 9. } 10. 11.
    • 99. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return distancia * COSTO_BANDERA_2; 4. } 5. if (esDomingo()) { 6. return distancia * COSTO_DOMINGO; 7. } 8. return distancia * COSTO_BANDERA_1; 9. } 10. 11.
    • 100. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return; 4. } 5. if (esDomingo()) { 6. return; 7. } 8. return; 9. } 10. 11.
    • 101. 1. double calcularCostoDelViaje() { 2. if (esBandeiraDos()) { 3. return calcularBanderaDos(distancia); 4. } 5. if (esDomingo()) { 6. return calcularDomingo(distancia); 7. } 8. return calcularBanderaUno(distancia); 9. } 10. 11.
    • 102. 1. double calcularCostoDelViaje() { 2. 3. 4. 5. } if (esBandeiraDos()) return calcularBanderaDos(distancia); if (esDomingo()) return calcularDomingo(distancia); return calcularBanderaUno(distancia);
    • 103. 1. double calcularCostoDelViaje() { 2. 3. 4. 5. 6. } if (esBandeiraDos()) return calcularBanderaDos(distancia); if (esDomingo()) return calcularDomingo(distancia); return calcularBanderaUno(distancia);
    • 104. 1. double calcularCostoDelViaje() { 2. 3. 4. 5. 6. } if (esBandeiraDos()) return calcularBanderaDos(distancia); if (esBandeiraTres()) return calcularBanderaTres(distancia); if (esDomingo()) return calcularDomingo(distancia); return calcularBanderaUno(distancia);
    • 105. ¿Miedo de estropear algo?
    • 106. Test-Driven Development
    • 107. Ahorre tiempo y diñero, pruebe más temprano!
    • 108. Herramientas – Hudson + Sonar

    ×