SlideShare une entreprise Scribd logo
1  sur  19
cómo     NO hacer programas
Las mejores prácticas
                        MCs Javier González Sánchez
Introducción:


has escuchado algo como esto:




www.javiergs.com                javiergs@acm.org
Introducción:


o como esto:




www.javiergs.com   javiergs@acm.org
Introducción:


entonces el siguiente manual es para tí


  Técnicas para hacer un PESIMO sistema de software
  Técnicas para hacer un PESIMO sistema de software

  1.
  1.   Programación estilo volcán
       Programación estilo volcán

  2.
  2.   El programa Dios
       El programa Dios

  3.
  3.   La barita mágica
       La barita mágica

  4.
  4.   Reinventar la rueda
       Reinventar la rueda

  5.
  5.   Casarse con el diablo
       Casarse con el diablo

  6.
  6.   El equipo superpoderoso
       El equipo superpoderoso

  7.
  7.   Código spaghetti
       Código spaghetti

  8.
  8.   Fantasmas
       Fantasmas

  9.
  9.   Estufa y chimenea
       Estufa y chimenea

  10. Y mucho más …
  10. Y mucho más …


www.javiergs.com                                      javiergs@acm.org
Técnica 1:

Lava Flow
programar al estilo volcán

                                                  Síntomas:

                                                       Declaración de Variables no justificadas.
                                                       Clases grandes y complejas sin documentar que no se
                                                       relacionan claramente con la arquitectura
                                                       Inconsistente y difuso estilo de evolución de una arquitectura
                                                       Bloques completos de código comentado sin explicación o
                                                       documentación
                                                       Muchas áreas con código por terminar o reemplazar
                                                       Código sin uso abandonado, interfaces o componentes
                                                       obsoletos en el cuerpo


                                                  Consecuencias:

Definición:                                            Si el código de flujo de lava no es removido del código
                                                       puedo seguir proliferando cuando el código es reusado en
construir grandes cantidades de código de              otras áreas.
manera desordenada, con poca                           Si el proceso que sufre de flujo de lava no es revisado,
documentación y poca claridad de su función            puede haber un crecimiento geométrico de estos flujos, ya
en el sistema. Conforme el sistema avanza en           que muchas veces los programadores que continúan
su desarrollo y crece, se dice que estos flujos        trabajando con la versión original trabajan alrededor del flujo
de lava se solidifican, es decir, se vuelve            original
mucho más complicado corregir los problemas            Conforme los flujos se endurecen y solidifican, rápidamente se
originados por estos, y el desorden va                 vuelve imposible documentar el código o entender su
creciendo geométricamente.                             arquitectura lo suficientemente bien como para hacer mejoras

 www.javiergs.com                                                                            javiergs@acm.org
Técnica 2:

The God
un programa omnipresente y desconocido
                                    Síntomas:

                                         Una sola clase en la implementación de todo el sistema




                                    Consecuencias:

                                         Dependencia total de esa clase

                                         Código desorganizado

                                         Fuerte interdependencia

Definición:

Una sola clase ó modulo hace todo

Tu programa es un SOLO archivo de
muuuuuchas líneas




 www.javiergs.com                                                             javiergs@acm.org
Técnica 3:

Golden Hammer
también conocida como la técnica de la barita mágica
                                                Síntomas:

                                                     Uso obsesivo de herramientas

                                                     Terquedad de los desarrolladores para usar un paradigma de
                                                     solución para todos los programas

                                                     Mala elección




                                                Consecuencias:

                                                     Consumir mucho más esfuerzo para resolver un problema
Definición:

Es un vicio referente a aferrarse a un
paradigma para solucionar todos los
problemas que se nos presenten al
desarrollar sistemas, como por ejemplo
siempre querer usar el mismo lenguaje de
programación para todos los desarrollos sea o
no conveniente.




 www.javiergs.com                                                                       javiergs@acm.org
Técnica 4:

reinventar la rueda
eso reinventar la rueda
                                         Síntomas:

                                              Poco nivel de reuso en el código

                                              Constantemente se reescriben fragmentos de código

                                              Hay pocos métodos procedimientos o funciones




                                         Consecuencias:

                                              El software se vuelve innecesariamente más denso
Definición:
                                              Se pierde tiempo e reimplementar cosas que ya estaban
                                              hechas
Se refiere a reimplementar componentes
prefabricados de antemano y hacer poco
                                              Se puede perder consistencia
reuso en el código.

Querer hacer todo uno mismo




 www.javiergs.com                                                                javiergs@acm.org
Técnica 5:

Vendor lock-in
o casarse con el diablo
                                            Síntomas:

                                                 Poco conocimiento del trabajo ya existente

                                                 Se buscan soluciones a problemas ya solucionados




                                            Consecuencias:

                                                 Se depende completamente de lo que el vendedor haga

                                                 La calidad de los productos del proveedor nos
Definición:                                      comprometen

Crear una dependencia hacia un fabricante        El vendedor nos tiene agarrados
que nos provee de alguna solución
(componentes).




 www.javiergs.com                                                                    javiergs@acm.org
Técnica 6:

Mythical Month Man
el súper equipo de programadores
                                             Síntomas:

                                                  Se trata de corregir retraso asignando más personal

                                                  No importa cuanto personal se aumente, el proyecto sigue
                                                  sin avanzar




                                             Consecuencias:

                                                  Llega un punto que entre más personal se asigne más se
                                                  retrasa el proyecto
Definición:

Consiste en la creencia de que asignar más
personal a un proyecto acotará el tiempo
de entrega.




 www.javiergs.com                                                                     javiergs@acm.org
Técnica 7:

Spaghetti Code
o programar con las … los “pies”

                                               Síntomas:

                                                    50% del tiempo de mantenimiento se invierte en entender al
                                                    sistema original.

                                                    El programa creado para hacer un pequeño demo, en un dos
                                                    por tres esta trabajando como producto final.

                                                    El trabajo fue hecho pro el “Programador Solitario” ¿Quién
                                                    era ese hombre enmascarado?

                                                    Síndrome del programador desesperado: ¡mejor reescribimos
                                                    todo el programa!


Definición:                                         El reuso es imposible

Spaghetti: dicese de una pieza de código
fuente no documentado, dónde cualquier
pequeño movimiento convulsiona la estructura
completa del sistema.                          Consecuencias:

Nota:                                               Tienes problemas, muchos problemas, disfrútalos.
Si mezclamos más de un lenguaje de
programación en el mismo archivo el
Spaghetti es más sabroso. Ej. PHP con HTML
sazonado con JavaScript, es delicioso!

 www.javiergs.com                                                                        javiergs@acm.org
Técnica 8:

Poltergeist
fantasmas

                                               Síntomas:

                                                    El modelo de análisis y/o diseño es inestable

                                                    El diseño no coincide con la implementación

                                                    El rendimiento del sistema es pobre

                                                    Imposible hacer extensiones al sistema, entre tanto
                                                    “fantasma” encontrar los elementos relevantes se imposibilita.




                                               Consecuencias:
Definición:

Demasiadas clases en un programa o tablas           Sigues teniendo problemas, pero no te asustes solo échale la
en una base de datos. Muchas clases o tablas        culpa al programador que estaba antes en tu lugar.
con mínimas responsabilidades.




 www.javiergs.com                                                                         javiergs@acm.org
Técnica 9:

Stovepipe
cocinado en “caliente”

                                                 Síntomas:

                                                      Falta de estrategia tecnológica de la empresa.
                                                      Falta de estándares.
                                                      Falta de perfil de sistema.
                                                      Falta de incentivos para la cooperación en el desarrollo
                                                      de sistemas.
                                                      Falta de comunicación
                                                      Falta de conocimiento sobre los estándares tecnológicos.
                                                      Falta de interafaces para la integración de sistemas




                                                 Consecuencias:
Definición:
                                                      Tecnologías incompatibles dentro de la misma empresa
En la empresa se desarrollan varios sistemas          Arquitecturas monolíticas y no documentadas
de manera independiente y a distintos niveles.
                                                      Falta de posibilidad de extender los sistemas para
Esto dificulta interoperabilidad, reuso e
                                                      satisfacer las necesidades de negocio
incrementa costos. Se crean islas
automatizadas dentro de la misma empresa.             Falta de estándares
                                                      Falta de reuso
                                                      Falta de interoperabilidad




 www.javiergs.com                                                                       javiergs@acm.org
Más técnicas:


alguna es de tu agrado o quizás prefieras alguna de estas:


    La técnica POCP [Programación orientada a Cut & paste]

    La técnica CTE [Cubre Tus Errores]

    La técnica de morir planeando

    La técnica de la navaja suiza

    La técnica del viejo y poderoso Duke de York

    La técnica de la esponja

    La técnica de la Cosa



www.javiergs.com                                         javiergs@acm.org
¿Administras proyectos de desarrollo de software?


entonces este anexo es para tí


  1.
  1.   El DES-administrador
       El DES-administrador

  2.
  2.   La mazorca de empleados
       La mazorca de empleados

  3.
  3.   Y otros más …
       Y otros más …




www.javiergs.com                                    javiergs@acm.org
Estrategia 1:

Project Miss-management
la jefa o el jefe que no sabe mandar
                                               Síntomas:

                                                    Retrasos en las fechas de entrega. Áreas incompletas.




                                               Consecuencias:

                                                    No se cumplen con las fechas de entrega




Definición:

EL proyecto se descuida y no se monitorea de
manera adecuada, es muy difícil de detectar
en etapas iniciales pero repentinamente
emerge de golpe y suele voltear de cabeza
negativamente la situación del proyecto.




 www.javiergs.com                                                                        javiergs@acm.org
Estrategia 2:

Corncob
los empleados se obstaculizan unos a otros
                                              Síntomas:

                                                   El proyecto no se desarrolla correctamente aunque el personal
                                                   es bueno




                                              Consecuencias:

                                                   El proyecto puede fallar por causas completamente ajenas a
                                                   él.




Definición:

Personas conflictivas o difíciles de tratar
que forman parte del equipo de desarrollo
desvían u obstaculizan el proceso de
producción porque transfieren sus problemas
personales o diferencias con otros miembros
del equipo al proyecto.




 www.javiergs.com                                                                       javiergs@acm.org
Más estrategias:


puedes considerar también:


    El supervisor paranoico

    Miedo al éxito

    La pelea




www.javiergs.com              javiergs@acm.org
Conclusiones:


Todos estos problemas tienen una receta que los soluciona




SOFTWARE ARCHITECTURE


GOOD PROJECT MANAGEMENT


www.javiergs.com                              javiergs@acm.org

Contenu connexe

Tendances

Glosario Términos De JAVA
Glosario Términos De JAVAGlosario Términos De JAVA
Glosario Términos De JAVA
Stiven Rocha
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
still01
 
Friends function and_classes
Friends function and_classesFriends function and_classes
Friends function and_classes
asadsardar
 

Tendances (20)

Object-Oriented Analysis And Design With Applications Grady Booch
Object-Oriented Analysis And Design With Applications Grady BoochObject-Oriented Analysis And Design With Applications Grady Booch
Object-Oriented Analysis And Design With Applications Grady Booch
 
Glosario Términos De JAVA
Glosario Términos De JAVAGlosario Términos De JAVA
Glosario Términos De JAVA
 
Let us understand design pattern
Let us understand design patternLet us understand design pattern
Let us understand design pattern
 
Design pattern
Design patternDesign pattern
Design pattern
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
 
18 Curso POO en java - contenedores
18 Curso POO en java - contenedores18 Curso POO en java - contenedores
18 Curso POO en java - contenedores
 
Diseño de patrones
Diseño de patronesDiseño de patrones
Diseño de patrones
 
Advance Java - 2nd Unit
Advance Java - 2nd UnitAdvance Java - 2nd Unit
Advance Java - 2nd Unit
 
Decorator design pattern
Decorator design patternDecorator design pattern
Decorator design pattern
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Pilares de la POO
Pilares de la POOPilares de la POO
Pilares de la POO
 
Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
OOP with Java - Continued
OOP with Java - Continued OOP with Java - Continued
OOP with Java - Continued
 
Friends function and_classes
Friends function and_classesFriends function and_classes
Friends function and_classes
 
Diagrama uml ing software i promecys
Diagrama uml ing software i promecysDiagrama uml ing software i promecys
Diagrama uml ing software i promecys
 
Uml in software engineering
Uml in software engineeringUml in software engineering
Uml in software engineering
 
Patrones GRASP
Patrones GRASPPatrones GRASP
Patrones GRASP
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 

Similaire à 200610 - Antipatrones de Software

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
Alfredo Chavez
 
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
Alfredo Chavez
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
guestb97266b9
 
fases de programacion
fases de programacionfases de programacion
fases de programacion
camila1727
 

Similaire à 200610 - Antipatrones de Software (20)

legacy
legacylegacy
legacy
 
Anti patrones
Anti patronesAnti patrones
Anti patrones
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
 
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
 
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
 
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
 
Metodologias todas
Metodologias todasMetodologias todas
Metodologias todas
 
Metodologias desarrollo de software
Metodologias desarrollo de softwareMetodologias desarrollo de software
Metodologias desarrollo de software
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
Mejores formas de aprender a programar
Mejores formas de aprender a programarMejores formas de aprender a programar
Mejores formas de aprender a programar
 
Software
SoftwareSoftware
Software
 
Guía de trabajos hilos y posix
Guía de trabajos   hilos y posixGuía de trabajos   hilos y posix
Guía de trabajos hilos y posix
 
Patrones de-diseño
Patrones de-diseñoPatrones de-diseño
Patrones de-diseño
 
fases de programacion
fases de programacionfases de programacion
fases de programacion
 
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
 
introducción ingeniería de software
introducción  ingeniería de  softwareintroducción  ingeniería de  software
introducción ingeniería de software
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
 
Programación extrema
Programación extremaProgramación extrema
Programación extrema
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015
 

Plus de Javier Gonzalez-Sanchez

Plus de Javier Gonzalez-Sanchez (20)

201804 SER332 Lecture 01
201804 SER332 Lecture 01201804 SER332 Lecture 01
201804 SER332 Lecture 01
 
201801 SER332 Lecture 03
201801 SER332 Lecture 03201801 SER332 Lecture 03
201801 SER332 Lecture 03
 
201801 SER332 Lecture 04
201801 SER332 Lecture 04201801 SER332 Lecture 04
201801 SER332 Lecture 04
 
201801 SER332 Lecture 02
201801 SER332 Lecture 02201801 SER332 Lecture 02
201801 SER332 Lecture 02
 
201801 CSE240 Lecture 26
201801 CSE240 Lecture 26201801 CSE240 Lecture 26
201801 CSE240 Lecture 26
 
201801 CSE240 Lecture 25
201801 CSE240 Lecture 25201801 CSE240 Lecture 25
201801 CSE240 Lecture 25
 
201801 CSE240 Lecture 24
201801 CSE240 Lecture 24201801 CSE240 Lecture 24
201801 CSE240 Lecture 24
 
201801 CSE240 Lecture 23
201801 CSE240 Lecture 23201801 CSE240 Lecture 23
201801 CSE240 Lecture 23
 
201801 CSE240 Lecture 22
201801 CSE240 Lecture 22201801 CSE240 Lecture 22
201801 CSE240 Lecture 22
 
201801 CSE240 Lecture 21
201801 CSE240 Lecture 21201801 CSE240 Lecture 21
201801 CSE240 Lecture 21
 
201801 CSE240 Lecture 20
201801 CSE240 Lecture 20201801 CSE240 Lecture 20
201801 CSE240 Lecture 20
 
201801 CSE240 Lecture 19
201801 CSE240 Lecture 19201801 CSE240 Lecture 19
201801 CSE240 Lecture 19
 
201801 CSE240 Lecture 18
201801 CSE240 Lecture 18201801 CSE240 Lecture 18
201801 CSE240 Lecture 18
 
201801 CSE240 Lecture 17
201801 CSE240 Lecture 17201801 CSE240 Lecture 17
201801 CSE240 Lecture 17
 
201801 CSE240 Lecture 16
201801 CSE240 Lecture 16201801 CSE240 Lecture 16
201801 CSE240 Lecture 16
 
201801 CSE240 Lecture 15
201801 CSE240 Lecture 15201801 CSE240 Lecture 15
201801 CSE240 Lecture 15
 
201801 CSE240 Lecture 14
201801 CSE240 Lecture 14201801 CSE240 Lecture 14
201801 CSE240 Lecture 14
 
201801 CSE240 Lecture 13
201801 CSE240 Lecture 13201801 CSE240 Lecture 13
201801 CSE240 Lecture 13
 
201801 CSE240 Lecture 12
201801 CSE240 Lecture 12201801 CSE240 Lecture 12
201801 CSE240 Lecture 12
 
201801 CSE240 Lecture 11
201801 CSE240 Lecture 11201801 CSE240 Lecture 11
201801 CSE240 Lecture 11
 

Dernier

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Dernier (11)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

200610 - Antipatrones de Software

  • 1. cómo NO hacer programas Las mejores prácticas MCs Javier González Sánchez
  • 2. Introducción: has escuchado algo como esto: www.javiergs.com javiergs@acm.org
  • 4. Introducción: entonces el siguiente manual es para tí Técnicas para hacer un PESIMO sistema de software Técnicas para hacer un PESIMO sistema de software 1. 1. Programación estilo volcán Programación estilo volcán 2. 2. El programa Dios El programa Dios 3. 3. La barita mágica La barita mágica 4. 4. Reinventar la rueda Reinventar la rueda 5. 5. Casarse con el diablo Casarse con el diablo 6. 6. El equipo superpoderoso El equipo superpoderoso 7. 7. Código spaghetti Código spaghetti 8. 8. Fantasmas Fantasmas 9. 9. Estufa y chimenea Estufa y chimenea 10. Y mucho más … 10. Y mucho más … www.javiergs.com javiergs@acm.org
  • 5. Técnica 1: Lava Flow programar al estilo volcán Síntomas: Declaración de Variables no justificadas. Clases grandes y complejas sin documentar que no se relacionan claramente con la arquitectura Inconsistente y difuso estilo de evolución de una arquitectura Bloques completos de código comentado sin explicación o documentación Muchas áreas con código por terminar o reemplazar Código sin uso abandonado, interfaces o componentes obsoletos en el cuerpo Consecuencias: Definición: Si el código de flujo de lava no es removido del código puedo seguir proliferando cuando el código es reusado en construir grandes cantidades de código de otras áreas. manera desordenada, con poca Si el proceso que sufre de flujo de lava no es revisado, documentación y poca claridad de su función puede haber un crecimiento geométrico de estos flujos, ya en el sistema. Conforme el sistema avanza en que muchas veces los programadores que continúan su desarrollo y crece, se dice que estos flujos trabajando con la versión original trabajan alrededor del flujo de lava se solidifican, es decir, se vuelve original mucho más complicado corregir los problemas Conforme los flujos se endurecen y solidifican, rápidamente se originados por estos, y el desorden va vuelve imposible documentar el código o entender su creciendo geométricamente. arquitectura lo suficientemente bien como para hacer mejoras www.javiergs.com javiergs@acm.org
  • 6. Técnica 2: The God un programa omnipresente y desconocido Síntomas: Una sola clase en la implementación de todo el sistema Consecuencias: Dependencia total de esa clase Código desorganizado Fuerte interdependencia Definición: Una sola clase ó modulo hace todo Tu programa es un SOLO archivo de muuuuuchas líneas www.javiergs.com javiergs@acm.org
  • 7. Técnica 3: Golden Hammer también conocida como la técnica de la barita mágica Síntomas: Uso obsesivo de herramientas Terquedad de los desarrolladores para usar un paradigma de solución para todos los programas Mala elección Consecuencias: Consumir mucho más esfuerzo para resolver un problema Definición: Es un vicio referente a aferrarse a un paradigma para solucionar todos los problemas que se nos presenten al desarrollar sistemas, como por ejemplo siempre querer usar el mismo lenguaje de programación para todos los desarrollos sea o no conveniente. www.javiergs.com javiergs@acm.org
  • 8. Técnica 4: reinventar la rueda eso reinventar la rueda Síntomas: Poco nivel de reuso en el código Constantemente se reescriben fragmentos de código Hay pocos métodos procedimientos o funciones Consecuencias: El software se vuelve innecesariamente más denso Definición: Se pierde tiempo e reimplementar cosas que ya estaban hechas Se refiere a reimplementar componentes prefabricados de antemano y hacer poco Se puede perder consistencia reuso en el código. Querer hacer todo uno mismo www.javiergs.com javiergs@acm.org
  • 9. Técnica 5: Vendor lock-in o casarse con el diablo Síntomas: Poco conocimiento del trabajo ya existente Se buscan soluciones a problemas ya solucionados Consecuencias: Se depende completamente de lo que el vendedor haga La calidad de los productos del proveedor nos Definición: comprometen Crear una dependencia hacia un fabricante El vendedor nos tiene agarrados que nos provee de alguna solución (componentes). www.javiergs.com javiergs@acm.org
  • 10. Técnica 6: Mythical Month Man el súper equipo de programadores Síntomas: Se trata de corregir retraso asignando más personal No importa cuanto personal se aumente, el proyecto sigue sin avanzar Consecuencias: Llega un punto que entre más personal se asigne más se retrasa el proyecto Definición: Consiste en la creencia de que asignar más personal a un proyecto acotará el tiempo de entrega. www.javiergs.com javiergs@acm.org
  • 11. Técnica 7: Spaghetti Code o programar con las … los “pies” Síntomas: 50% del tiempo de mantenimiento se invierte en entender al sistema original. El programa creado para hacer un pequeño demo, en un dos por tres esta trabajando como producto final. El trabajo fue hecho pro el “Programador Solitario” ¿Quién era ese hombre enmascarado? Síndrome del programador desesperado: ¡mejor reescribimos todo el programa! Definición: El reuso es imposible Spaghetti: dicese de una pieza de código fuente no documentado, dónde cualquier pequeño movimiento convulsiona la estructura completa del sistema. Consecuencias: Nota: Tienes problemas, muchos problemas, disfrútalos. Si mezclamos más de un lenguaje de programación en el mismo archivo el Spaghetti es más sabroso. Ej. PHP con HTML sazonado con JavaScript, es delicioso! www.javiergs.com javiergs@acm.org
  • 12. Técnica 8: Poltergeist fantasmas Síntomas: El modelo de análisis y/o diseño es inestable El diseño no coincide con la implementación El rendimiento del sistema es pobre Imposible hacer extensiones al sistema, entre tanto “fantasma” encontrar los elementos relevantes se imposibilita. Consecuencias: Definición: Demasiadas clases en un programa o tablas Sigues teniendo problemas, pero no te asustes solo échale la en una base de datos. Muchas clases o tablas culpa al programador que estaba antes en tu lugar. con mínimas responsabilidades. www.javiergs.com javiergs@acm.org
  • 13. Técnica 9: Stovepipe cocinado en “caliente” Síntomas: Falta de estrategia tecnológica de la empresa. Falta de estándares. Falta de perfil de sistema. Falta de incentivos para la cooperación en el desarrollo de sistemas. Falta de comunicación Falta de conocimiento sobre los estándares tecnológicos. Falta de interafaces para la integración de sistemas Consecuencias: Definición: Tecnologías incompatibles dentro de la misma empresa En la empresa se desarrollan varios sistemas Arquitecturas monolíticas y no documentadas de manera independiente y a distintos niveles. Falta de posibilidad de extender los sistemas para Esto dificulta interoperabilidad, reuso e satisfacer las necesidades de negocio incrementa costos. Se crean islas automatizadas dentro de la misma empresa. Falta de estándares Falta de reuso Falta de interoperabilidad www.javiergs.com javiergs@acm.org
  • 14. Más técnicas: alguna es de tu agrado o quizás prefieras alguna de estas: La técnica POCP [Programación orientada a Cut & paste] La técnica CTE [Cubre Tus Errores] La técnica de morir planeando La técnica de la navaja suiza La técnica del viejo y poderoso Duke de York La técnica de la esponja La técnica de la Cosa www.javiergs.com javiergs@acm.org
  • 15. ¿Administras proyectos de desarrollo de software? entonces este anexo es para tí 1. 1. El DES-administrador El DES-administrador 2. 2. La mazorca de empleados La mazorca de empleados 3. 3. Y otros más … Y otros más … www.javiergs.com javiergs@acm.org
  • 16. Estrategia 1: Project Miss-management la jefa o el jefe que no sabe mandar Síntomas: Retrasos en las fechas de entrega. Áreas incompletas. Consecuencias: No se cumplen con las fechas de entrega Definición: EL proyecto se descuida y no se monitorea de manera adecuada, es muy difícil de detectar en etapas iniciales pero repentinamente emerge de golpe y suele voltear de cabeza negativamente la situación del proyecto. www.javiergs.com javiergs@acm.org
  • 17. Estrategia 2: Corncob los empleados se obstaculizan unos a otros Síntomas: El proyecto no se desarrolla correctamente aunque el personal es bueno Consecuencias: El proyecto puede fallar por causas completamente ajenas a él. Definición: Personas conflictivas o difíciles de tratar que forman parte del equipo de desarrollo desvían u obstaculizan el proceso de producción porque transfieren sus problemas personales o diferencias con otros miembros del equipo al proyecto. www.javiergs.com javiergs@acm.org
  • 18. Más estrategias: puedes considerar también: El supervisor paranoico Miedo al éxito La pelea www.javiergs.com javiergs@acm.org
  • 19. Conclusiones: Todos estos problemas tienen una receta que los soluciona SOFTWARE ARCHITECTURE GOOD PROJECT MANAGEMENT www.javiergs.com javiergs@acm.org