Code Smells, Kata y TDD Flashcards
(8 cards)
¿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.