Code Smells, Kata y TDD Flashcards

1
Q

¿Qué es la refactorización?

A

Es una técnica para reestructurar un cuerpo de código existente, alterando su estructura interna sin cambiar su comportamiento externo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Cómo se logra la refactorización?

A
  • Con pruebas unitarias para garantizar que el comportamiento externo no haya sido modificado
  • Aplicando las refactorizaciones propuestas
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Cuál es el flujo de una refactorización?

A
  • Asegúrese de que todas las pruebas pasen
  • Encontrar code smells
  • Encontrar refactorización
  • Aplicar refactorización
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Explique los code smells que se vieron en la materia.

A
  1. Código duplicado
  2. Métodos muy largos
  3. Clases muy largas
  4. Lista de parámetros larga
  5. Cambio divergente: cambios múltiples afectan una misma clase o módulo.
  6. Shotgun Surgery: Cuando cambios pequeños requieren modificaciones en muchas partes del código.
  7. 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.
  8. Data Clumps: Grupos de datos relacionados que aparecen juntos repetidamente en el código
  9. 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.
  10. Uso de switch
  11. Lazy class: Clase que no hace lo suficiente para justificar su existencia.
  12. Data Class: Clase cuya única función es almacenar datos sin ningún comportamiento adicional o lógica.
  13. Message Chains: Cadena de llamados: clase.metodo1().metodo2()
  14. 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Explique los refactorings que se vieron en la materia.

A
  1. Introduce Explaining Method: Introduce un método para explicar una funcionalidad compleja dentro de una clase.
  2. Split Temporary Variable: divide una variable temporal en varias, para mejorar la claridad del código.
  3. Extract Class: Mueve un conjunto coherente de campos y métodos de una clase a una nueva clase separada.
  4. Decompose Conditional: Divide una estructura condicional grande en métodos o funciones más pequeños y legibles.
  5. Consolidate conditional expression: Combina múltiples expresiones condicionales similares en una sola, para reducir la duplicación de código.
  6. Consolidate duplicate conditional fragments: Agrupa fragmentos de código condicionalmente duplicados en un único lugar para mejorar la mantenibilidad.
  7. Remove control flag: Elimina el uso de banderas de control (variables booleanas) reemplazándolas con estructuras de control más claras y directas.
  8. Replace nested conditionals with guard clauses: Sustituye condicionales anidados por cláusulas de guardia (early returns) para mejorar la legibilidad y reducir la complejidad.
  9. 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.
  10. Replace parameter with method: Convierte un parámetro en un método que calcule su valor automáticamente para reducir la complejidad.
  11. Introduce parameter object: Agrupa varios parámetros relacionados en un objeto único para mejorar la organización y la legibilidad del código.
  12. Replace error code with exception
  13. 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿Qué es Kata?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿A qué se refiere Kata en el ámbito de la programación?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Explique las etapas de TDD

A
  1. RED: hacer un test que falle
  2. GREEN: hacer código que funcione para que el test pase
  3. REFACTOR: Eliminar la redundancia y mejorar la calidad de código.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly