Antipatrones IV: desarrollo de software, de programación, de gestión de configuración

Antipatrones de desarrollo de software

Nombre Concepto
Silver bullet ¿Hemos utilizado una solución técnica conocida/favorita únicamente por este hecho sin pensar que quizá no fuera la más adecuada?
Tester driven development ¿Se ha realizado un análisis funcional adecuado o por el contrario se extraen los nuevos requisitos/funcionalidades a partir de los informes de errores?
De-factoring ¿Hemos eliminado funcionalidad y la hemos reemplazado con documentación en algún caso?
Improbability factor ¿Hemos asumido, en algún caso que un error conocido y lo hemos ignorado por pensar que era improbable que desembocase en verdaderos problemas?
Golden Hammer ¿Hemos pretendido aplicar nuestra solución favorita a todos los problemas que nos hemos encontrado?
Premature optimization ¿Hemos tomado, en algún caso decisiones prematuras a la hora de optimizar, sin tener garantías e información suficientes?
Copy and paste programming ¿Hemos reutilizado en algún caso código en lugar de buscar una solución genérica?
Programming by permutation ¿Hemos hecho pequeñas modificaciones en un código que no funcionaba para ver si al final acaba por funcionar en lugar de rehacerlo si procede?
Reinventing the wheel ¿Hemos planteado, en alguna ocasión, soluciones desde cero sin tener en cuenta que pueden existir ya otras implementadas para una situación determinada?
Reinventing the square wheel ¿Hemos planteado, en alguna ocasión, soluciones desde cero sin tener en cuenta que pueden existir ya otras implementadas para una situación determinada y que son mucho mejores?

Antipatrones de programación

Nombre Concepto
Heroic Naming ¿Están identificados los miembros con nombres que indican que están acorde a la ingeniería del software cuando en realidad esconden una implementación anárquica?
Action at a distance ¿Existen en el sistema componentes interactuando que no deberían?
Acumúlate and fire ¿Existe, en algún caso, una subrutina que usa una colección de variables globales?
Boat Anchor ¿Existen partes del sistema obsoletas o que no tienen utilidad?
Busy spin ¿Existen hilos o procesos esperando chequeando alguna variable que podrían ser evitados?
Hard code ¿Existen supuestos sobre el entorno del sistema en más lugares de la implementación de los necesarios?
Accidental complexity ¿Existen soluciones puntuales más complejas de lo que deberían?
Spaghetti code ¿Es difícilmente comprensible la estructura del proyecto al carecer de estructuras de programación?
Raviole code ¿Posee el sistema multitud de objetos débilmente interconectados?
Checking type instead of interface ¿Se pierde el tiempo comprobando el tipo de un objeto en concreto sin ser necesario en lugar de usar interfaces?
Blind faith ¿Se comprueba adecuadamente la solución de todos los procesos teniendo en cuenta las anomalías que pudieran ser consecuencia de estos?
Double-checked locking ¿Se comprueba, antes de realizar una modificación sobre un objeto que tal modificación se puede llevar a cabo? ¿Se bloquea dicho objeto al hacer la comprobación, lo que podría desencadenar el fallo de esa comprobación?
Caching failure ¿Cuándo se produce un fallo de caché, en todos los casos marcamos este error para evitar tratamientos innecesarios?
Lava flow ¿Eliminamos, en todos los casos, el código muerto (no se utiliza para nada) y la información de diseño que ha quedado obsoleta? En este caso la solución sería un proceso de gestión de la configuración que eliminase el código muerto y permitiese evolucionar o rehacer el diseño para acrecentar la calidad.
Superboolean logic ¿Se emplean comparaciones innecesarias?
Exception handling ¿Se emplea, en algún caso el manejo de excepciones de java para implementar la lógica general del programa?
Useless exception handling ¿Controlamos el hecho de que la aplicación lance excepciones en tiempo de ejecución pero a cambio si no se dan esas condiciones lanzamos nosotros manualmente una excepción?
Code momentum ¿Establecemos, sobre algunas partes del código restricciones innecesarias consecuencia de la utilización de estos recursos desde otras partes del código?
Magic numbers ¿Se incluyen en los algoritmos números o variables sin explicación aparente?
Error hiding ¿Alteramos el flujo de ejecución normal de la aplicación capturando errores (excepciones) y cambiando el mensaje dinámicamente de cara al usuario o simplemente no mostrándoselo
Packratting ¿Consumimos más memoria de la necesaria como consecuencia de no liberar recursos que ya no se están utilizando (conexiones, HashMaps,… )?
Coding by exception ¿Añadimos trozos de código (parcheamos) el código para tratar casos especiales, incidencias, a medida que surgen? La consecuencia de esto es que obtenemos un código difícilmente mantenible.
Loop-switch sequence ¿Programamos, en algún caso, un conjunto de pasos secuenciales usando un bucle en combinación con una estructura de control pudiendo evitarlo? Un ejemplo de esto sería un switch dentro de un for en el que se evalúa la variable incremental. Esto sería una variación del código espaguetti.
Magic strings ¿Hardcodeamos cadenas de caracteres para hacer comparaciones, como por ejemplo tipos de eventos?

Antipatrones de gestión de la configuración

Nombre Concepto
DLL Hell ¿Nos hemos encontrado con problemas en las versiones de las DLLs?
JAR Hell ¿Tenemos, en todos los casos, las versiones y ubicaciones correctas de las librerías que utilizamos?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s