Code Smells, Kata y TDD Flashcards
¿Qué es la refactorización?
Es una técnica para reestructurar un cuerpo de código existente, alterando su estructura interna sin cambiar su comportamiento externo.
¿Cómo se logra la refactorización?
- Con pruebas unitarias para garantizar que el comportamiento externo no haya sido modificado
- Aplicando las refactorizaciones propuestas
¿Cuál es el flujo de una refactorización?
- Asegúrese de que todas las pruebas pasen
- Encontrar code smells
- Encontrar refactorización
- Aplicar refactorización
Explique los code smells que se vieron en la materia.
- Código duplicado
- Métodos muy largos
- Clases muy largas
- Lista de parámetros larga
- Cambio divergente: cambios múltiples afectan una misma clase o módulo.
- Shotgun Surgery: Cuando cambios pequeños requieren modificaciones en muchas partes del código.
- Feature Envy: Cuando un método o función de una clase accede excesivamente a los miembros de otra clase en lugar de utilizar sus propios miembros.
- Data Clumps: Grupos de datos relacionados que aparecen juntos repetidamente en el código
- Primitive Obsession: Tendencia de utilizar tipos primitivos (como cadenas, números, etc) para representar conceptos que podrían ser mejor representados por clases específicas.
- Uso de switch
- Lazy class: Clase que no hace lo suficiente para justificar su existencia.
- Data Class: Clase cuya única función es almacenar datos sin ningún comportamiento adicional o lógica.
-
Message Chains: Cadena de llamados:
clase.metodo1().metodo2()
- Control flag: Presencia de una variable booleana (o un conjunto de variables) que se utiliza para controlar el flujo de ejecución en una función o método.
Explique los refactorings que se vieron en la materia.
- Introduce Explaining Method: Introduce un método para explicar una funcionalidad compleja dentro de una clase.
- Split Temporary Variable: divide una variable temporal en varias, para mejorar la claridad del código.
- Extract Class: Mueve un conjunto coherente de campos y métodos de una clase a una nueva clase separada.
- Decompose Conditional: Divide una estructura condicional grande en métodos o funciones más pequeños y legibles.
- Consolidate conditional expression: Combina múltiples expresiones condicionales similares en una sola, para reducir la duplicación de código.
- Consolidate duplicate conditional fragments: Agrupa fragmentos de código condicionalmente duplicados en un único lugar para mejorar la mantenibilidad.
- Remove control flag: Elimina el uso de banderas de control (variables booleanas) reemplazándolas con estructuras de control más claras y directas.
- Replace nested conditionals with guard clauses: Sustituye condicionales anidados por cláusulas de guardia (early returns) para mejorar la legibilidad y reducir la complejidad.
- Introduce Null Object: Crea un objeto nulo que implemente una interfaz común para manejar casos donde se utilizan valores nulos de manera explícita.
- Replace parameter with method: Convierte un parámetro en un método que calcule su valor automáticamente para reducir la complejidad.
- Introduce parameter object: Agrupa varios parámetros relacionados en un objeto único para mejorar la organización y la legibilidad del código.
- Replace error code with exception
- Replace primitive with object: Reemplaza tipos primitivos (como números y cadenas) con objetos que encapsulen su comportamiento y datos para mejorar la claridad y la extensibilidad del código.
¿Qué es Kata?
Kata es un ejercicio de práctica repetitiva en programación, especialmente en el contexto de la programación orientada a objetos y el desarrollo ágil de software.
¿A qué se refiere Kata en el ámbito de la programación?
En el ámbito de la programación, Kata se refiere generalmente a un pequeño problema o desafío que los desarrolladores resuelven de manera iterativa, aplicando principios de diseño de software, técnicas de codificación y buenas prácticas de desarrollo.
Las katas ayudan a mejorar la habilidad, la fluidez y la calidad del código de los programadores a medida que practican y refinan su habilidades a través de la repetición y la retroalimentación.
Explique las etapas de TDD
- RED: hacer un test que falle
- GREEN: hacer código que funcione para que el test pase
- REFACTOR: Eliminar la redundancia y mejorar la calidad de código.