NEW
Font size
WorksheetsMalos olores en el código
Total questions: 63
Worksheet time: 32mins
¿Qué significa la frase 'If it stinks, change it' en el contexto de la refactorización de código?
Que si el código es difícil de entender o mantener, debe modificarse.
Que el código debe eliminarse si no funciona.
Que el código debe comentarse extensamente.
Que el código debe ejecutarse varias veces para probarlo.
Es importante saber cuándo empezar y cuándo detener la refactorización porque:
Permite optimizar el código sin gastar recursos innecesarios.
Evita que el código funcione correctamente.
Hace que el desarrollo sea más lento.
Impide la colaboración entre desarrolladores.
¿Qué criterio sugiere el texto para identificar 'malos olores' en el código?
La presencia de patrones repetitivos y poco claros.
El uso de comentarios extensos en el código.
La cantidad de líneas de código por función.
La utilización de variables globales en todos los métodos.
¿Qué significa el 'Nombre misterioso' como mal olor en el código según el texto?
Un nombre que es claro y fácil de entender
Un nombre que causa confusión y dificulta la comprensión
Un nombre que es demasiado largo
Un nombre que se repite en el código
¿Cuál es una de las refactorizaciones más comunes para solucionar el 'Nombre misterioso'?
Cambiar la estructura del código
Renombrar funciones, variables o campos
Eliminar comentarios
Duplicar el código
El 'Código duplicado' ocurre cuando _________.
la misma estructura de código aparece en más de un lugar
el código se ejecuta más rápido de lo esperado
el código contiene errores de sintaxis
el código utiliza demasiadas variables
¿Cuál es una solución mencionada en el texto para el problema de código duplicado?
Ignorar las duplicaciones
Unificar el código usando métodos como 'Extract Function' o 'Slide Statements'
Escribir más comentarios
Renombrar variables
¿Cuál es la principal ventaja de tener funciones pequeñas en los programas, según el texto?
Son más rápidas
Son más fáciles de entender y mantener
Consumen menos memoria
Permiten más errores
Según el texto, ¿qué técnica se recomienda cuando se siente la necesidad de comentar el código?
Escribir un comentario largo
Escribir una función en vez de comentar
Eliminar el código
Usar variables globales
Completa el espacio en blanco: 'La clave para entender fácilmente las funciones pequeñas es _______.'
tener un buen nombre para la función
escribir mucho código en una sola función
ignorar los nombres de las variables
utilizar funciones muy largas
¿Qué problema puede surgir al extraer una función con muchos parámetros y variables temporales, según el texto?
Puede dificultar la comprensión y el mantenimiento del código.
Se mejora la eficiencia del programa.
Se reduce la cantidad de errores en el código.
Se facilita la reutilización de la función.
Las listas largas de parámetros pueden ser problemáticas en la programación porque:
Dificultan la legibilidad y el mantenimiento del código.
Permiten mayor velocidad de ejecución.
Facilitan la depuración de errores.
Hacen el código más seguro.
El principal problema de los datos globales en el desarrollo de software es:
Dificultan el mantenimiento y depuración del código.
Facilitan la reutilización del código.
Mejoran la seguridad del software.
Aumentan la velocidad de ejecución.
¿Cuál de las siguientes es una técnica recomendada para reducir el tamaño de las listas de parámetros en las funciones?
Utilizar objetos como parámetros
Agregar más parámetros innecesarios
Duplicar funciones similares
Evitar el uso de funciones
¿Cuál es la defensa clave contra la contaminación de datos en un programa según el texto?
Usar variables globales
Encapsular la variable
Permitir acceso libre a los datos
No controlar el acceso a los datos
Complete la frase: Los datos globales son especialmente peligrosos cuando son _______.
mutables
constantes
privados
inalterables
¿Qué método se recomienda para separar la parte libre de efectos secundarios de la que realiza la actualización de datos?
Encapsulate Variable
Extract Function
Split Variable
Slide Statements
¿Cuál es la ventaja de usar funciones estrechas para actualizar datos según el texto?
Son más fáciles de monitorear y evolucionar.
Permiten mayor consumo de memoria.
Aumentan la complejidad del código.
Dificultan la identificación de errores.
Según el texto, los datos mutables que pueden calcularse en otro lugar son una fuente de confusión y errores.
Verdadero
Falso
¿Qué es el 'Cambio divergente' en el desarrollo de software según el texto?
El cambio divergente ocurre cuando un módulo se cambia a menudo por diferentes razones, normalmente porque mezcla diferentes contextos que deberían estar separados.
Es el proceso de fusionar varios módulos en uno solo para simplificar el sistema.
Se refiere a la actualización simultánea de todos los módulos del sistema por una única razón.
Es el cambio que ocurre cuando un módulo nunca necesita ser modificado después de su creación.
¿En qué se diferencia la 'Cirugía de escopeta' del 'Cambio divergente' según el texto?
La cirugía de escopeta es lo opuesto al cambio divergente; ocurre cuando cada vez que se realiza un cambio, hay que hacer muchas pequeñas ediciones en varios lugares.
La cirugía de escopeta implica realizar un solo cambio grande en un único lugar.
El cambio divergente requiere modificar muchos módulos sin relación entre sí.
La cirugía de escopeta y el cambio divergente son exactamente lo mismo.
¿Qué es la 'Feature Envy' según el texto?
Cuando una función en un módulo pasa más tiempo comunicándose con funciones o datos dentro de otro módulo que dentro de su propio módulo.
Cuando una función tiene demasiados parámetros.
Cuando una clase tiene demasiados métodos.
Cuando el código está desorganizado.
¿Cuál es la solución principal para el caso de 'Feature Envy'?
Usar Move Function para mover la función al módulo con los datos.
Eliminar la función.
Dividir la función en partes más pequeñas.
Usar Inline Class.
Complete la frase: Una táctica útil para la cirugía de escopeta es usar refactorizaciones de inlining, como ________, para juntar la lógica pobremente separada.
Inline Function o Inline Class
Extract Method
Replace Temp with Query
Move Method
¿Qué patrón de diseño se menciona como excepción a la regla de juntar datos y comportamiento?
Singleton
Strategy y Visitor
Observer
Factory
¿Qué son los 'Data Clumps' según el texto?
Variables que se usan una sola vez
Datos que tienden a agruparse y aparecen juntos en varios lugares
Clases que no tienen métodos
Objetos que no tienen atributos
¿Cuál es una señal de que tienes un 'Data Clump'?
Si puedes eliminar uno de los valores de datos y los otros siguen teniendo sentido
Si los datos aparecen en diferentes clases
Si los datos se usan solo en una función
Si los datos se usan como parámetros en métodos
Completa la frase: 'Primitive Obsession' ocurre cuando los programadores usan tipos primitivos como ______ en lugar de crear sus propios tipos.
enteros, números de punto flotante y cadenas (strings)
clases y objetos complejos
estructuras de datos avanzadas
interfaces y módulos
Completa la frase: Un ejemplo común de 'Primitive Obsession' es representar un número de teléfono como ______ en vez de un tipo propio.
cadena (string)
entero (integer)
booleano (boolean)
arreglo (array)
¿Cuál es el problema principal de los 'switches' repetidos según el texto?
Son difíciles de entender
Hay que encontrar y actualizar todos los switches
No funcionan en todos los lenguajes
Son más rápidos que otras alternativas
¿Qué alternativa elegante proporciona el texto para combatir la repetición de 'switches'?
Usar bucles
Polimorfismo
Variables globales
Recursión
Completa la frase: Los bucles han sido una parte fundamental de la programación desde los primeros lenguajes, pero hoy en día se pueden reemplazar por _________
operaciones de pipeline (como filter y map)
variables globales
comentarios en el código
funciones recursivas para imprimir texto
¿Por qué se consideraban los bucles como anacronismos en la primera edición del libro?
Porque eran demasiado lentos
Porque no había alternativas mejores en ese momento
Porque no funcionaban en Java
Porque eran difíciles de leer
¿Qué es un 'Lazy Element' en el código según el texto?
Un elemento que añade estructura y es muy útil
Un elemento que no se necesita y puede ser una función o clase que realiza una sola función simple
Un elemento que siempre se usa para refactorizar
Un elemento que nunca se elimina
Complete la frase: 'La generalidad especulativa puede detectarse cuando los únicos usuarios de una función o clase son ______.'
casos de prueba
métodos privados
variables globales
constructores
¿Cuál es el problema principal de un 'Temporary Field' en una clase?
Hace que la clase sea más fácil de entender
El campo solo se establece en ciertas circunstancias y puede dificultar la comprensión de la clase
Permite reutilizar el código fácilmente
No afecta la comprensión de la clase
¿Qué es una cadena de mensajes (Message Chain) en la programación orientada a objetos?
Una cadena de mensajes ocurre cuando un cliente pide un objeto a otro objeto, y luego pide otro objeto al siguiente, y así sucesivamente.
Una cadena de mensajes es una secuencia de variables globales utilizadas en una clase.
Una cadena de mensajes es un método que retorna siempre el mismo valor.
Una cadena de mensajes es una estructura de datos que almacena mensajes en una lista.
¿Cuál es la acción recomendada para manejar las cadenas de mensajes según el texto?
Eliminar el objeto intermedio
Usar Hide Delegate
Usar Extract Function
Usar Move Function
¿Cuál es una de las principales características de los objetos según el texto bajo el título 'Middle Man'?
La encapsulación: ocultar detalles internos del resto del mundo.
La herencia: compartir atributos entre clases.
La polimorfismo: cambiar el tipo de objeto en tiempo de ejecución.
La recursividad: llamar a métodos dentro de sí mismos.
¿Qué se recomienda hacer cuando la mayoría de los métodos de una clase están delegando a otra clase?
Se recomienda usar Remove Middle Man y hablar con el objeto que realmente sabe lo que está pasando.
Se recomienda duplicar los métodos en ambas clases para mayor flexibilidad.
Se recomienda eliminar la clase original y mantener solo la clase delegada.
Se recomienda agregar más métodos a la clase original para evitar la delegación.
¿Verdadero o falso? El uso excesivo de delegación puede llevar a que la interfaz de una clase esté compuesta principalmente por métodos que delegan a otra clase.
Verdadero
Falso
¿Qué problema principal se menciona en la sección 'Insider Trading' sobre el intercambio de datos entre módulos en el software?
Falta de comunicación
Aumento del acoplamiento
Pérdida de datos
Reducción de la seguridad
Complete la frase: Para reducir la necesidad de que los módulos se comuniquen entre sí, se recomienda usar ________ o ________ para separar sus responsabilidades.
Move Function (198) o Move Field (207)
Extract Class (149) o Inline Method (105)
Replace Temp with Query (178) o Remove Middle Man (192)
Pull Up Method (322) o Push Down Field (328)
¿Cuál es una solución sugerida para evitar la colusión entre subclases y sus padres en el diseño de software?
Eliminar la herencia
Aplicar Replace Subclass with Delegate (381)
Usar más campos
Ignorar el problema
¿Qué indica la presencia de demasiados campos en una clase según la sección 'Large Class'?
Que la clase es eficiente
Que el código está duplicado
Que la clase está bien diseñada
Que la clase es fácil de mantener
Complete la frase: Si una clase tiene muchos métodos con mucho código en común, la solución más simple es ________ la redundancia en la propia clase.
eliminar
duplicar
ignorar
incrementar
¿Cuál es uno de los grandes beneficios de usar clases según la sección 'Alternative Classes with Different Interfaces'?
A) Permitir la sustitución de una clase por otra en tiempos de necesidad
B) Hacer que todas las clases sean abstractas
C) Usar solo métodos públicos
D) Evitar la duplicación de código
Según la sección 'Data Class', ¿qué característica clave tiene un 'result record' después de aplicar 'Split Phase (154)'?
Es mutable
Es inmutable
Tiene solo métodos públicos
No puede ser encapsulado
Complete la frase según la sección 'Refused Bequest': Los subclases heredan los métodos y datos de sus padres, pero si no los quieren o necesitan, se recomienda crear una nueva clase hermana y usar ________ para mover el código no utilizado.
Push Down Method (359) y Push Down Field (361)
Extract Method (110) y Extract Class (149)
Pull Up Method (322) y Pull Up Field (324)
Inline Method (119) y Inline Class (154)
¿Cuál es el consejo tradicional cuando una herencia rechazada está causando confusión y problemas en el código?
Ignorar el problema
Seguir el consejo tradicional
Refactorizar siempre
Eliminar la herencia
¿Por qué los comentarios en el código a menudo se consideran un 'desodorante'?
Porque siempre mejoran el código
Porque ocultan el mal olor del código malo
Porque explican el funcionamiento
Porque son obligatorios
Completa la frase: Cuando sientas la necesidad de escribir un comentario, primero intenta _______ el código para que cualquier comentario se vuelva superfluo.
refactorizar
compilar
borrar
copiar
¿Cuándo es un buen momento para usar un comentario en el código según el texto?
Cuando no sabes qué hacer o necesitas explicar por qué hiciste algo, especialmente para ayudar a futuros modificadores.
Cuando el código es muy corto y fácil de entender.
Solo cuando el código contiene errores.
Siempre que escribas cualquier línea de código, sin importar su complejidad.
¿Cuál es la definición de 'refactorización' como sustantivo según el texto?
Un cambio realizado en la estructura interna del software para facilitar su comprensión y abaratar su modificación sin cambiar su comportamiento observable.
Un proceso de eliminar errores en el software para mejorar su rendimiento.
La creación de nuevas funcionalidades en el software sin modificar el código existente.
La documentación detallada de cada función en el software para facilitar su uso.
¿Cuál es la definición de 'refactorización' como verbo según el texto?
Reestructurar el software aplicando una serie de refactorizaciones sin cambiar su comportamiento observable.
Eliminar partes del software que no se utilizan para mejorar el rendimiento.
Agregar nuevas funcionalidades al software sin modificar el código existente.
Cambiar el diseño visual del software para hacerlo más atractivo.
¿Cuál es el objetivo principal de la refactorización?
Mejorar el rendimiento del software
Cambiar el comportamiento observable del software
Facilitar la comprensión y modificación del software sin cambiar su comportamiento observable
Añadir nuevas funcionalidades
¿Qué significa el término 'restructuración' según el texto?
Añadir nuevas funcionalidades
Reorganizar o limpiar una base de código
Eliminar errores
Optimizar el rendimiento
Completa la frase: 'Si alguien dice que su código estuvo roto por un par de días mientras estaban refactorizando, puedes estar bastante seguro de que ______.'
no estaban refactorizando
estaban probando nuevas funciones
olvidaron guardar los cambios
el equipo estaba de vacaciones
¿Cuál es la diferencia principal entre la refactorización y la optimización del rendimiento según el texto?
La refactorización busca mejorar la funcionalidad
La optimización busca que el código sea más fácil de entender
La refactorización busca que el código sea más fácil de modificar y entender, mientras que la optimización busca mejorar el rendimiento
No hay diferencia
¿qué actividades se realizan bajo el 'sombrero de funcionalidad' y el 'sombrero de refactorización'?
Bajo el sombrero de funcionalidad se añaden nuevas capacidades y se miden los progresos con pruebas. Bajo el sombrero de refactorización solo se reestructura el código sin añadir funcionalidades ni pruebas, salvo que sea necesario por cambios en la interfaz.
Bajo el sombrero de funcionalidad solo se corrigen errores menores, mientras que bajo el sombrero de refactorización se añaden nuevas funcionalidades.
Ambos sombreros implican únicamente la documentación del código sin realizar cambios en la funcionalidad ni en la estructura.
El sombrero de funcionalidad implica eliminar funcionalidades existentes y el de refactorización implica añadir pruebas sin modificar el código.
¿Cuál es el propósito de la técnica 'Extract Method' en la refactorización de código?
Dividir un método grande en varios métodos más pequeños y manejables.
Agregar más parámetros a un método existente.
Combinar varios métodos en uno solo para simplificar el código.
Eliminar métodos que no se utilizan.
¿Qué significa 'Code Smell' en el contexto de la programación?
Un método que se utiliza para optimizar el rendimiento del código.
Un tipo de virus informático que afecta el código.
Un error de sintaxis en el código.
Un indicio de que el código puede ser mejorado o refactorizado.
¿Cuál es la recomendación para manejar la complejidad en el código según el texto?
Duplicar el código para asegurar que no se pierda información.
Usar variables globales para simplificar el acceso a los datos.
Escribir todo el código en un solo archivo para evitar la fragmentación.
Dividir el código en módulos más pequeños y cohesivos.
