SlideShare una empresa de Scribd logo
1 de 36
Anti-patrones
Rocío Amaya (rochi)
Anti-patrones
Según James Coplien, un anti-patrón es...
“...algo que se ve como una buena
idea, pero que falla malamente cuando
se la implementa.”
¿Qué son?
Son una falla de diseño de aplicaciones.
Son mala soluciones a problemas.
Un buen anti-patrón explica:
por qué la solución original parece
atractiva.
por qué se vuelve negativa.
y cómo recuperarse de los problemas que
ésta genera.
¿Por qué estudiarlos?
La idea que sobre la creencia de que es más fácil
detectar lo que se hace mal que proveer un
buen comportamiento.
Son un método eficiente para vincular una
situación general a una clase de solución
específica.
Proveen experiencia del mundo real para
reconocer problemas recurrentes en la industria
del software, ofreciendo también una solución
para sus implicaciones más comunes.
¿Por qué estudiarlos?
 Establecen un vocabulario común para identificar
problemas y discutir soluciones.
Soportan la resolución de conflictos, utilizando
recursos organizacionales a diferentes niveles.
Su conocimiento sirve para:
Intentar evitarlos.
Recuperarse de ellos.
Tipos de anti-patrones
Codificación o desarrollo:
Se centran en problemas asociados al
desarrollo de software a nivel de aplicación.

Arquitectura:
Se centran en la estructura de las
aplicaciones y componentes a nivel de
sistema y empresa.

Administración de proyectos:
Problemas de comunicación entre personas.
Codificación o desarrollo
The Blob
Lava Flow
Functional Decomposition
Poltergeists
Golden Hammer
Spaghetti Code
Cut and Paste Programming

Mini antipatterns:
Continuous Obsolescence
Ambiguous Viewpoint
Walking through a Minefield

Dead End
Input Kludge
Boat Anchor
The Blob (o God Class)
Definición:
Una sola clase que hace todo.

Síntomas:
Una clase grande, muchos métodos no
relacionados y sin argumentos.

Consecuencias:
Pérdida de las ventajas de la OO.
Dependencia total a esa clase.
Difícil rehúso o testeo.
The Blob (o God Class)
Solución:
Separar en pequeñas clases.
Evitar asociaciones transitivas.
Minimizar la complejidad del Blob quitando
responsabilidades y repartiéndolas en otras
clases en forma sensata.
Lava Flow (volcán)
Definición:
Grandes cantidades de código y con poca
claridad de su función. Se vuelve complicado
corregir los problemas ya que el desorden va
creciendo geométricamente

Síntomas:
Código que nadie entiende.
Código “abandonado”, comentado.
Diseño no documentado.
Código que no puede ser testeado
Bloques de código comentado sin explicación
Lava Flow (volcán)
Consecuencias:
Baja performance en el sistema.
Dificultad para extenderlo o depurarlo.
En caso de ser rehusado el problema se traslada

Solución:
Aplicar técnicas de revisión.
Eliminar código muerto.
Refactorizar.
Poltergeists
Definición:
Emplear objetos cuyo único propósito es pasar la
información a terceros objetos.

Síntomas:
Gran numero de clases pequeñas poco
descriptivas, con usos limitados o
responsabilidades muy puntuales

Consecuencias:
Baja performance del sistema

Solución:
Eliminarlos y poner su funcionalidad en la clase
a la que invocan.
Golden Hammer
(o varita mágica)
Definición:
Se refiere al uso de una tecnología, patrón,
arquitectura etc.. para cualquier problema o
situación incluso cuando es evidente que no va
ser útil.

Síntomas:
Las soluciones encontradas son inferiores en
calidad a otras existentes.

Consecuencias:
Dependencia

Solución:
Expandir conocimientos
Spaghetti Code
Definición:
Código en el cual el flujo de control es muy
variado y complicado. En OO, los objetos son
básicamente funciones con poca interacción
entre ellos.

Síntomas:
Un cuerpo de código realizando más de una
función.
Es más fácil reescribir todo que modificar algo.
Falta documentación.
Spaghetti Code
Consecuencias:
Cerca del 50% del tiempo de las operaciones de
mantenimiento de este tipo de aplicaciones se
invierte en descubrir como funcionan

Solución:
Hacer código limpio.
Refactorizar.
Crear funciones de alto nivel.
Crear una buena jerarquía de objetos.
Cut and Paste
Definición:
Programar copiando y modificando código
existente en lugar de crear soluciones genéricas.

Síntomas:
El mismo error vuelve a aparecer a lo largo del
software a pesar de los muchos arreglos locales
Cut and Paste
Consecuencias:
Conduce a costos excesivos de mantenimiento
de software.
Se hace difícil de localizar y corregir todos los
casos de un error en particular.

Solución:
Refactorizar el código base.
Arquitectura
Vendor lock-in
Stovepipe enterprise
Architecture by implication
Design by committee
Reinvent the wheel

Mini antipatterns:
Autogenerated Stovepipe
Cover your Assets
The Grand Old Duke of York
Swiss Army Knife

Wolf Ticket
Jumble
Warm Bodies
Stovepipe Enterprise
Definición:
Empresa de copa o islas de automatización.

Síntomas:
Varios sistemas aislados entre sí, que no pueden
colaborar para crear sistemas mas grandes.
Tecnologías incompatibles dentro de la misma
empresa
Stovepipe Enterprise
Stovepipe Enterprise
Consecuencias:
Incompatible terminología, enfoques, y la
tecnología entre los sistemas de la empresa.
Falta de estándares, de rehúso y de
interoperabilidad

Solución:
Se define la infraestructura común y
convenciones comunes para los sistemas.
Stovepipe Enterprise
Vendor Lock-in
Definición:
Un proyecto adopta un producto de tecnología
sobre el cual se vuelve excesivamente
dependiente.

Síntomas:
El ciclo de mantenimiento está influenciado por los
cambios comerciales de la tecnología de base.
El producto final se diferencia bastante de los
estándares abiertos tradicionales.
Vendor Lock-in
Consecuencias:
Dependencia a cierto producto tecnológico

Solución:
Isolation layer.
Separar los paquetes de software y el
producto de tecnología, brindando
portabilidad e independencia
Architecture by Implication
Definición:
Falta de la especificación de la arquitectura. Los
desarrolladores consideran que la
documentación no es necesaria. Esta confianza
exagerada conlleva a riesgos que pueden
afectar el éxito del sistema.

Síntomas:
El desconocimiento de las nuevas tecnologías.
La ausencia de apoyo técnico y planes de
contingencia.
Architecture by Implication
Consecuencias:
Riesgos ocultos causados por la escala, el
conocimiento del dominio, la tecnología y la
complejidad, que surgen mientras avanza el
proyecto.
Fracaso de los proyectos inminentes o sistema de
éxito debido a un rendimiento insuficiente, el exceso
de complejidad, necesidades incomprendidas,
facilidad de uso, y las características del sistema.

Solución:
Documentación
Design by Committee
Definición:
"Demasiados cocineros estropean el caldo”,
llamado también Haz Feliz a Todo Mundo,
Partido Político, etc.

Síntomas:
La documentación del diseño es demasiado
compleja , defectuosa o voluminosa.
No existe la priorización en las estructuras
del diseño
Design by Committee
Consecuencias:
Las reuniones del comité se convierten en
sesiones poco productivas.
Pocas decisiones se pueden tomar fuera
del comité lo que atrasa mucho el
avance del proyecto

Solución:
Reorganizar el proceso de reuniones

Mini anti patrón: Navaja suiza
Reinvent the Wheel
Definición:
También llamado Diseñando en el vacío,
Inventando el hilo negro.
Querer implementar una solución,
la cual ya fue diseñada previamente.

Sintomas:
Repetición de funcionalidad de otro software
comercial.
Arquitecturas inmaduras e inestables.
Arquitecturas cerradas, útiles acotadamente,
sin previsión de rehusabilidad.
Inadecuado soporte para la administración de
cambios e interoperabilidad.
Reinvent the Wheel
Consecuencias:
La mala gestión de los riesgos y los costos,
lo que lleva a programar mas y superar el
presupuesto.
Imposibilidad para entregar las prestaciones
que desea para el usuario final; gran esfuerzo
para replicar la funcionalidad de otros sistemas
sistemas existentes.

Solución:
Extraer información valiosa enterrada en los
diseños ya existentes para su uso
(architecture mining)
Administracion de proyectos
Analysis paralysis
Death by planning
Corncob
Irrational managament
Project missmanagament

Mini antipatterns:
Blowhard jamboree
Viewgraph Engineering
Fire Drill
Throw it over the wall
E-mail is dangerous

Smoke & mirrors
Intellectual Violence
Fear of success
The Feud
Analysis Paralysis
Definición:
Muy común en objetos. Se busca la perfección y
la completitud en la etapa de análisis, siendo que
apenas avanzan en el diseño.

Síntomas:
Diseño y problemas de aplicación son
continuamente vueltos a introducir en la
fase de análisis.
El análisis excede el tiempo estimado.
Analysis Paralysis
Solucion:

Métodos de modelado y desarrollo que
separan un proyecto en etapas
iterativas, esto es, se analiza una parte
del problema, se diseña, se codifica y se
prueba lo desarrollado para luego volver
a analizar otra parte completando la
iteración.
Otros anti-patrones
Death by Planning:
Ocurre cuando el proyecto se demora por
excesiva dedicación a la preparación de planes
para el desarrollo del proyecto.

Corncob:
Los empleados se obstaculizan unos a otros.
Bajo esta circunstancia, el proyecto no se
desarrolla correctamente aunque el personal es
bueno.
Otros anti-patrones
The Mythical Month Man:
Consiste en la creencia de que asignar más
personal a un proyecto, acotará el tiempo de
entrega. Generalmente como una forma
desesperada de intentar corregir retraso del
proyecto. Llega un punto donde entre más
personal se asigne, más se retrasa el proyecto
Project Missmanagement:
No se monitorea el proyecto adecuadamente.
Resultado: retraso en la entrega, módulos
incompletos.
Conclusiones
Los anti-patrones dejan la enseñanza
de cuál es la mejor forma de NO
hacer sistemas de software
Las mejores prácticas de una época
pueden ser los anti-patrones de la
siguiente

Más contenido relacionado

La actualidad más candente

El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)UTN
 
Modelo componentes
Modelo componentesModelo componentes
Modelo componentesmartin
 
Arquitecturas de software - Parte 2
Arquitecturas de software - Parte 2Arquitecturas de software - Parte 2
Arquitecturas de software - Parte 2Marta Silvia Tabares
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisJulio Pari
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de SoftwareRene Guaman-Quinche
 
Desarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaDesarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaSoftware Guru
 
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWAREPSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWAREFranklin Parrales Bravo
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño Ikaolong
 
Tecnicas de estimacion de software
Tecnicas de estimacion de softwareTecnicas de estimacion de software
Tecnicas de estimacion de softwareAdes27
 
Programación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de CapasProgramación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de CapasEdward Ropero
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudVMware Tanzu
 
Diseño de-la-arquitectura-de-software
Diseño de-la-arquitectura-de-softwareDiseño de-la-arquitectura-de-software
Diseño de-la-arquitectura-de-softwareAndresRealp1
 
1.1 proceso administrativo
1.1 proceso administrativo1.1 proceso administrativo
1.1 proceso administrativoLiz Cruz
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetosyoiner santiago
 

La actualidad más candente (20)

El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)
 
Modelo componentes
Modelo componentesModelo componentes
Modelo componentes
 
sistemas distribuidos
sistemas distribuidossistemas distribuidos
sistemas distribuidos
 
Arquitecturas de software - Parte 2
Arquitecturas de software - Parte 2Arquitecturas de software - Parte 2
Arquitecturas de software - Parte 2
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisis
 
Aplicaciones n capas en visual net
Aplicaciones n capas en visual netAplicaciones n capas en visual net
Aplicaciones n capas en visual net
 
tecnicas de revisión del software
tecnicas de revisión del softwaretecnicas de revisión del software
tecnicas de revisión del software
 
Documenting Software Architectures
Documenting Software ArchitecturesDocumenting Software Architectures
Documenting Software Architectures
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de Software
 
Metodologia DSDM
Metodologia DSDMMetodologia DSDM
Metodologia DSDM
 
Desarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaDesarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache Cordova
 
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWAREPSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Tecnicas de estimacion de software
Tecnicas de estimacion de softwareTecnicas de estimacion de software
Tecnicas de estimacion de software
 
Programación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de CapasProgramación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de Capas
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring Cloud
 
Diseño de-la-arquitectura-de-software
Diseño de-la-arquitectura-de-softwareDiseño de-la-arquitectura-de-software
Diseño de-la-arquitectura-de-software
 
Control de versiones
Control de versionesControl de versiones
Control de versiones
 
1.1 proceso administrativo
1.1 proceso administrativo1.1 proceso administrativo
1.1 proceso administrativo
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
 

Destacado

Antipatrones de desarrollo de software
Antipatrones de desarrollo de softwareAntipatrones de desarrollo de software
Antipatrones de desarrollo de softwarePablo Bouzada
 
Antipatrones de Software
Antipatrones de SoftwareAntipatrones de Software
Antipatrones de SoftwareMartin Salias
 
Patterns and Antipatterns for Adopting IBM DevOps Tools
Patterns and Antipatterns for Adopting IBM DevOps ToolsPatterns and Antipatterns for Adopting IBM DevOps Tools
Patterns and Antipatterns for Adopting IBM DevOps ToolsStrongback Consulting
 
ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...
ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...
ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...Concordia University
 
APIs: the Glue of Cloud Computing
APIs: the Glue of Cloud ComputingAPIs: the Glue of Cloud Computing
APIs: the Glue of Cloud Computing3scale
 
Api anti patterns
Api anti patternsApi anti patterns
Api anti patternsMike Pearce
 
Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009
Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009
Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009Cesare Pautasso
 
Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...
Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...
Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...Spark Summit
 
5 Anti-Patterns in Api Design - buildstuff
5 Anti-Patterns in Api Design - buildstuff5 Anti-Patterns in Api Design - buildstuff
5 Anti-Patterns in Api Design - buildstuffAli Kheyrollahi
 
WS-* vs. RESTful Services
WS-* vs. RESTful ServicesWS-* vs. RESTful Services
WS-* vs. RESTful ServicesCesare Pautasso
 

Destacado (11)

Antipatrones de desarrollo de software
Antipatrones de desarrollo de softwareAntipatrones de desarrollo de software
Antipatrones de desarrollo de software
 
Antipatrones
AntipatronesAntipatrones
Antipatrones
 
Antipatrones de Software
Antipatrones de SoftwareAntipatrones de Software
Antipatrones de Software
 
Patterns and Antipatterns for Adopting IBM DevOps Tools
Patterns and Antipatterns for Adopting IBM DevOps ToolsPatterns and Antipatterns for Adopting IBM DevOps Tools
Patterns and Antipatterns for Adopting IBM DevOps Tools
 
ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...
ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...
ICSE2014 - Detecting Performance Anti-patterns for Applications Developed usi...
 
APIs: the Glue of Cloud Computing
APIs: the Glue of Cloud ComputingAPIs: the Glue of Cloud Computing
APIs: the Glue of Cloud Computing
 
Api anti patterns
Api anti patternsApi anti patterns
Api anti patterns
 
Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009
Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009
Some REST Design Patterns (and Anti-Patterns) - SOA Symposium 2009
 
Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...
Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...
Using Spark and Riak for IoT Apps—Patterns and Anti-Patterns: Spark Summit Ea...
 
5 Anti-Patterns in Api Design - buildstuff
5 Anti-Patterns in Api Design - buildstuff5 Anti-Patterns in Api Design - buildstuff
5 Anti-Patterns in Api Design - buildstuff
 
WS-* vs. RESTful Services
WS-* vs. RESTful ServicesWS-* vs. RESTful Services
WS-* vs. RESTful Services
 

Similar a Anti patrones

Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Sem 001 - Clase 01 - Ingenieria del Software.ppt
Sem 001 - Clase 01 - Ingenieria del Software.pptSem 001 - Clase 01 - Ingenieria del Software.ppt
Sem 001 - Clase 01 - Ingenieria del Software.pptFIORELLAAGUILARISUIZ1
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Volviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareVolviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareDanijel Arsenovski
 
2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptx2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptxGonzaloMartinezSilve
 
Devsecooops Los Caso de no éxito en DevSecOps
Devsecooops Los Caso de no éxito en DevSecOpsDevsecooops Los Caso de no éxito en DevSecOps
Devsecooops Los Caso de no éxito en DevSecOpsLuciano Moreira da Cruz
 
Introducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a ObjetosIntroducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a Objetosedwinlemmon
 
MODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWAREMODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWAREJesus Yepez
 
Díme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarDíme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarKiberley Santos
 
12-150203140754-conversion-gate02.pptx
12-150203140754-conversion-gate02.pptx12-150203140754-conversion-gate02.pptx
12-150203140754-conversion-gate02.pptxGonzaloMartinezSilve
 

Similar a Anti patrones (20)

Programación extrema (xp)
Programación extrema (xp)Programación extrema (xp)
Programación extrema (xp)
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Sem 001 - Clase 01 - Ingenieria del Software.ppt
Sem 001 - Clase 01 - Ingenieria del Software.pptSem 001 - Clase 01 - Ingenieria del Software.ppt
Sem 001 - Clase 01 - Ingenieria del Software.ppt
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Programacion Extrema
Programacion ExtremaProgramacion Extrema
Programacion Extrema
 
Volviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareVolviendo a poner el “soft” en software
Volviendo a poner el “soft” en software
 
2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptx2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptx
 
Devsecooops Los Caso de no éxito en DevSecOps
Devsecooops Los Caso de no éxito en DevSecOpsDevsecooops Los Caso de no éxito en DevSecOps
Devsecooops Los Caso de no éxito en DevSecOps
 
Introducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a ObjetosIntroducción a la Tecnología Orientada a Objetos
Introducción a la Tecnología Orientada a Objetos
 
2.modelos del proceso
2.modelos del proceso2.modelos del proceso
2.modelos del proceso
 
Crystal clear exposicion
Crystal clear exposicionCrystal clear exposicion
Crystal clear exposicion
 
MODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWAREMODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWARE
 
introducción ingeniería de software
introducción  ingeniería de  softwareintroducción  ingeniería de  software
introducción ingeniería de software
 
Conceptos de diseño
Conceptos de diseñoConceptos de diseño
Conceptos de diseño
 
12.diseño basado en patrones
12.diseño basado en patrones12.diseño basado en patrones
12.diseño basado en patrones
 
prueva
pruevaprueva
prueva
 
Principios que Guían la Práctica
Principios que Guían la PrácticaPrincipios que Guían la Práctica
Principios que Guían la Práctica
 
Díme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarDíme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usar
 
12-150203140754-conversion-gate02.pptx
12-150203140754-conversion-gate02.pptx12-150203140754-conversion-gate02.pptx
12-150203140754-conversion-gate02.pptx
 
Crystal Clear
Crystal ClearCrystal Clear
Crystal Clear
 

Anti patrones

  • 2. Anti-patrones Según James Coplien, un anti-patrón es... “...algo que se ve como una buena idea, pero que falla malamente cuando se la implementa.”
  • 3. ¿Qué son? Son una falla de diseño de aplicaciones. Son mala soluciones a problemas. Un buen anti-patrón explica: por qué la solución original parece atractiva. por qué se vuelve negativa. y cómo recuperarse de los problemas que ésta genera.
  • 4. ¿Por qué estudiarlos? La idea que sobre la creencia de que es más fácil detectar lo que se hace mal que proveer un buen comportamiento. Son un método eficiente para vincular una situación general a una clase de solución específica. Proveen experiencia del mundo real para reconocer problemas recurrentes en la industria del software, ofreciendo también una solución para sus implicaciones más comunes.
  • 5. ¿Por qué estudiarlos?  Establecen un vocabulario común para identificar problemas y discutir soluciones. Soportan la resolución de conflictos, utilizando recursos organizacionales a diferentes niveles. Su conocimiento sirve para: Intentar evitarlos. Recuperarse de ellos.
  • 6. Tipos de anti-patrones Codificación o desarrollo: Se centran en problemas asociados al desarrollo de software a nivel de aplicación. Arquitectura: Se centran en la estructura de las aplicaciones y componentes a nivel de sistema y empresa. Administración de proyectos: Problemas de comunicación entre personas.
  • 7. Codificación o desarrollo The Blob Lava Flow Functional Decomposition Poltergeists Golden Hammer Spaghetti Code Cut and Paste Programming Mini antipatterns: Continuous Obsolescence Ambiguous Viewpoint Walking through a Minefield Dead End Input Kludge Boat Anchor
  • 8. The Blob (o God Class) Definición: Una sola clase que hace todo. Síntomas: Una clase grande, muchos métodos no relacionados y sin argumentos. Consecuencias: Pérdida de las ventajas de la OO. Dependencia total a esa clase. Difícil rehúso o testeo.
  • 9. The Blob (o God Class) Solución: Separar en pequeñas clases. Evitar asociaciones transitivas. Minimizar la complejidad del Blob quitando responsabilidades y repartiéndolas en otras clases en forma sensata.
  • 10. Lava Flow (volcán) Definición: Grandes cantidades de código y con poca claridad de su función. Se vuelve complicado corregir los problemas ya que el desorden va creciendo geométricamente Síntomas: Código que nadie entiende. Código “abandonado”, comentado. Diseño no documentado. Código que no puede ser testeado Bloques de código comentado sin explicación
  • 11. Lava Flow (volcán) Consecuencias: Baja performance en el sistema. Dificultad para extenderlo o depurarlo. En caso de ser rehusado el problema se traslada Solución: Aplicar técnicas de revisión. Eliminar código muerto. Refactorizar.
  • 12. Poltergeists Definición: Emplear objetos cuyo único propósito es pasar la información a terceros objetos. Síntomas: Gran numero de clases pequeñas poco descriptivas, con usos limitados o responsabilidades muy puntuales Consecuencias: Baja performance del sistema Solución: Eliminarlos y poner su funcionalidad en la clase a la que invocan.
  • 13. Golden Hammer (o varita mágica) Definición: Se refiere al uso de una tecnología, patrón, arquitectura etc.. para cualquier problema o situación incluso cuando es evidente que no va ser útil. Síntomas: Las soluciones encontradas son inferiores en calidad a otras existentes. Consecuencias: Dependencia Solución: Expandir conocimientos
  • 14. Spaghetti Code Definición: Código en el cual el flujo de control es muy variado y complicado. En OO, los objetos son básicamente funciones con poca interacción entre ellos. Síntomas: Un cuerpo de código realizando más de una función. Es más fácil reescribir todo que modificar algo. Falta documentación.
  • 15. Spaghetti Code Consecuencias: Cerca del 50% del tiempo de las operaciones de mantenimiento de este tipo de aplicaciones se invierte en descubrir como funcionan Solución: Hacer código limpio. Refactorizar. Crear funciones de alto nivel. Crear una buena jerarquía de objetos.
  • 16. Cut and Paste Definición: Programar copiando y modificando código existente en lugar de crear soluciones genéricas. Síntomas: El mismo error vuelve a aparecer a lo largo del software a pesar de los muchos arreglos locales
  • 17. Cut and Paste Consecuencias: Conduce a costos excesivos de mantenimiento de software. Se hace difícil de localizar y corregir todos los casos de un error en particular. Solución: Refactorizar el código base.
  • 18. Arquitectura Vendor lock-in Stovepipe enterprise Architecture by implication Design by committee Reinvent the wheel Mini antipatterns: Autogenerated Stovepipe Cover your Assets The Grand Old Duke of York Swiss Army Knife Wolf Ticket Jumble Warm Bodies
  • 19. Stovepipe Enterprise Definición: Empresa de copa o islas de automatización. Síntomas: Varios sistemas aislados entre sí, que no pueden colaborar para crear sistemas mas grandes. Tecnologías incompatibles dentro de la misma empresa
  • 21. Stovepipe Enterprise Consecuencias: Incompatible terminología, enfoques, y la tecnología entre los sistemas de la empresa. Falta de estándares, de rehúso y de interoperabilidad Solución: Se define la infraestructura común y convenciones comunes para los sistemas.
  • 23. Vendor Lock-in Definición: Un proyecto adopta un producto de tecnología sobre el cual se vuelve excesivamente dependiente. Síntomas: El ciclo de mantenimiento está influenciado por los cambios comerciales de la tecnología de base. El producto final se diferencia bastante de los estándares abiertos tradicionales.
  • 24. Vendor Lock-in Consecuencias: Dependencia a cierto producto tecnológico Solución: Isolation layer. Separar los paquetes de software y el producto de tecnología, brindando portabilidad e independencia
  • 25. Architecture by Implication Definición: Falta de la especificación de la arquitectura. Los desarrolladores consideran que la documentación no es necesaria. Esta confianza exagerada conlleva a riesgos que pueden afectar el éxito del sistema. Síntomas: El desconocimiento de las nuevas tecnologías. La ausencia de apoyo técnico y planes de contingencia.
  • 26. Architecture by Implication Consecuencias: Riesgos ocultos causados por la escala, el conocimiento del dominio, la tecnología y la complejidad, que surgen mientras avanza el proyecto. Fracaso de los proyectos inminentes o sistema de éxito debido a un rendimiento insuficiente, el exceso de complejidad, necesidades incomprendidas, facilidad de uso, y las características del sistema. Solución: Documentación
  • 27. Design by Committee Definición: "Demasiados cocineros estropean el caldo”, llamado también Haz Feliz a Todo Mundo, Partido Político, etc. Síntomas: La documentación del diseño es demasiado compleja , defectuosa o voluminosa. No existe la priorización en las estructuras del diseño
  • 28. Design by Committee Consecuencias: Las reuniones del comité se convierten en sesiones poco productivas. Pocas decisiones se pueden tomar fuera del comité lo que atrasa mucho el avance del proyecto Solución: Reorganizar el proceso de reuniones Mini anti patrón: Navaja suiza
  • 29. Reinvent the Wheel Definición: También llamado Diseñando en el vacío, Inventando el hilo negro. Querer implementar una solución, la cual ya fue diseñada previamente. Sintomas: Repetición de funcionalidad de otro software comercial. Arquitecturas inmaduras e inestables. Arquitecturas cerradas, útiles acotadamente, sin previsión de rehusabilidad. Inadecuado soporte para la administración de cambios e interoperabilidad.
  • 30. Reinvent the Wheel Consecuencias: La mala gestión de los riesgos y los costos, lo que lleva a programar mas y superar el presupuesto. Imposibilidad para entregar las prestaciones que desea para el usuario final; gran esfuerzo para replicar la funcionalidad de otros sistemas sistemas existentes. Solución: Extraer información valiosa enterrada en los diseños ya existentes para su uso (architecture mining)
  • 31. Administracion de proyectos Analysis paralysis Death by planning Corncob Irrational managament Project missmanagament Mini antipatterns: Blowhard jamboree Viewgraph Engineering Fire Drill Throw it over the wall E-mail is dangerous Smoke & mirrors Intellectual Violence Fear of success The Feud
  • 32. Analysis Paralysis Definición: Muy común en objetos. Se busca la perfección y la completitud en la etapa de análisis, siendo que apenas avanzan en el diseño. Síntomas: Diseño y problemas de aplicación son continuamente vueltos a introducir en la fase de análisis. El análisis excede el tiempo estimado.
  • 33. Analysis Paralysis Solucion: Métodos de modelado y desarrollo que separan un proyecto en etapas iterativas, esto es, se analiza una parte del problema, se diseña, se codifica y se prueba lo desarrollado para luego volver a analizar otra parte completando la iteración.
  • 34. Otros anti-patrones Death by Planning: Ocurre cuando el proyecto se demora por excesiva dedicación a la preparación de planes para el desarrollo del proyecto. Corncob: Los empleados se obstaculizan unos a otros. Bajo esta circunstancia, el proyecto no se desarrolla correctamente aunque el personal es bueno.
  • 35. Otros anti-patrones The Mythical Month Man: Consiste en la creencia de que asignar más personal a un proyecto, acotará el tiempo de entrega. Generalmente como una forma desesperada de intentar corregir retraso del proyecto. Llega un punto donde entre más personal se asigne, más se retrasa el proyecto Project Missmanagement: No se monitorea el proyecto adecuadamente. Resultado: retraso en la entrega, módulos incompletos.
  • 36. Conclusiones Los anti-patrones dejan la enseñanza de cuál es la mejor forma de NO hacer sistemas de software Las mejores prácticas de una época pueden ser los anti-patrones de la siguiente