![Page 1: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/1.jpg)
Code Smells
Código que huele mal…
![Page 2: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/2.jpg)
Agenda
• Introducción
• Clasificación
• Ejemplos
![Page 3: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/3.jpg)
¿Qué es un code smell?
• Wikipedia:
Un “Code Smell” es un síntoma que encontramos en el
código que indica un posible problema más profundo.
Los code smells entrenan tu nariz para que te diga:
• Cuándo refactorizar
• Qué refactorizar
• Cómo refactorizar
• En “criollo”
Es código que funciona pero que en un futuro podría no
hacerlo.
![Page 4: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/4.jpg)
¿Qué hacer con los code smells?
Refactoring
Proceso de mejorar la calidad del código fuente sin alterar
su funcionalidad.
• No es una bala de plata, son guías.
• Lo más importante es el criterio del desarrollador
Se recomienda hacer test unitarios antes de refactorizar!
![Page 5: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/5.jpg)
¿Por qué refactorizar?
“Cualquier tonto puede escribir código que una computadora
entienda. Los buenos programadores escriben código que los
humanos entienden.” - Refactoring: Improving the Design of Existing Code
• Código más legible
• Fácil encontrar bugs
• Se aprenden principios de diseño
• Descubrir nuevas abstracciones
• Código limpio y mantenible
• The boy scout rule
![Page 6: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/6.jpg)
![Page 7: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/7.jpg)
Clasificación
![Page 8: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/8.jpg)
The Bloaters
Agrupa smells que indican la existencia de algún aspecto
que con el tiempo y el crecimiento pueden volver
incontrolable el código.
• Long method
• Large class
• Primitive obsession
• Long parameter list
• Data clumps
![Page 9: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/9.jpg)
The Object Orientation Abusers
El común denominador de este tipo de smells es que
representan casos donde la solución no explota
completamente las posibilidades del diseño orientado a
objetos.
• Switch statements
• Temporary field
• Refused bequest
• Alternative Classes with Different Interfaces
• Conditional complexity
![Page 10: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/10.jpg)
The Change Preventers
Estos smells dificultan la posibilidad de realizar cambios en nuestro
software o de simplemente seguir avanzando en el desarrollo.
Violan la regla sugerida por Fowler y Beck, que dice que las clases y
los posibles cambios deben tener una relación de uno a uno.
• Divergent Change
• Shotgun surgery
• Parallel Inheritance Hierarchies
• Combinatorial Explosion
• Magic Number
![Page 11: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/11.jpg)
The Dispensables
Estos Smells tienen en común la existencia de algún elemento
innecesario que debería ser removido del código fuente.
• Lazy class
• Data class
• Duplicate code
• Dead code
• Speculative generality
• Comments
![Page 12: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/12.jpg)
The Couplers
Son smells que alertan sobre problemas en el manejo
del acoplamiento entre componentes, pudiendo ser
este excesivo y o mal diseñado.
• Features envy
• Inappropriate intimacy
• Message Chain
• Middle man
• Solution Sprawl
![Page 13: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/13.jpg)
Ejemplos
![Page 14: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/14.jpg)
Data Class
• Clases con atributos y no mucho más
• Sín lógica de negocio
• Indicio de “Modelo de dominio anémico”
• ¿Value Objects ?
• ¿Data Tranfer Objects (DTOs) ?
![Page 15: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/15.jpg)
Comments
![Page 16: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/16.jpg)
Feature Envy
![Page 17: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/17.jpg)
Shotgun surgery
![Page 18: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/18.jpg)
Parallel Inheritance Hierarchies
![Page 19: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/19.jpg)
Data Clump
![Page 20: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/20.jpg)
Long Parameter List
![Page 21: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/21.jpg)
Temporary Field
![Page 22: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/22.jpg)
Switch Statements
![Page 23: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/23.jpg)
Message Chain
![Page 24: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/24.jpg)
Cierre
![Page 25: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/25.jpg)
Conclusión
![Page 26: Code Smells Código que huele mal…. Agenda Introducción Clasificación Ejemplos](https://reader033.vdocumento.com/reader033/viewer/2022061612/5665b4a21a28abb57c92d89b/html5/thumbnails/26.jpg)
¿Preguntas?