En conjunto: ¿cómo mantendremos los sistemas heredados? [cerrado]


15

NUEVA YORK - Con una explosión que hizo temblar a los rascacielos, una tubería de vapor de 83 años envió un poderoso mensaje de que las millas de tubos, cables y hierro debajo de Nueva York y otras ciudades de EE. UU. Están envejeciendo y podrían volverse peligrosamente inestables.

Julio de 2007 Historia sobre una tubería de vapor de explosión en Manhattan


Hemos escuchado sobre la podredumbre del software y la deuda técnica .

Y hemos escuchado de personas como:

Así que, ciertamente, la comunidad de ingeniería de software es consciente de estos problemas.


Pero siento que nuestra sociedad agregada no aprecia cómo estos problemas pueden afectar a los sistemas y aplicaciones de trabajo.

Como señala Steve McConnell :

... A diferencia de la deuda financiera, la deuda técnica es mucho menos visible, por lo que a las personas les resulta más fácil ignorarla.

Si esto es cierto, y creo que lo es, me temo que los gobiernos y las empresas pueden diferir el mantenimiento y la fortificación regulares contra los piratas informáticos hasta que sea demasiado tarde. [Al igual que Nueva York y las tuberías de vapor.]


Mi pregunta:

  • ¿Hay alguna forma de evitar el equivalente de software de Nueva York y las tuberías de vapor?

Respuestas:


12

Un problema clave relacionado con el mantenimiento de los sistemas heredados es la falta de personas que a) estén al día con esos sistemas yb) estén dispuestos a continuar manteniéndolos.

Hace poco hice una pregunta similar sobre si los programadores más jóvenes estaban interesados ​​en los mainframes. El consenso se inclinó hacia el no.

Mantener los sistemas heredados se ve como un suicidio profesional. En muchas empresas donde la inercia gobierna, hay poca inversión en capacitar al personal para mantenerse al tanto de esos sistemas, lo que lleva a puntos únicos de falla en el lado del personal. Mucha gente que conozco que trabaja en sistemas similares está buscando rutas porque no ven un futuro a largo plazo en los sistemas y solo ven detrimento de su carrera.

En algunas industrias, las regulaciones de mantenimiento de datos pueden ser un factor clave para garantizar que los sistemas heredados sean vigilados razonablemente. Este es particularmente el problema en la industria financiera, creo. Esas regulaciones, que yo sepa, generalmente tienen un tiempo limitado.

Sin embargo, creo que en la práctica, lo que sucederá es:

Llegará un punto en el gráfico donde el costo de pasar a un sistema más moderno que le permita enrutar las desventajas de un sistema heredado caerá por debajo del costo de mantener el sistema heredado porque es más barato.

IBM está vendiendo muchos mainframes en este momento, y están trabajando muy duro para garantizar que sus máquinas grandes no excluyan a los profesionales más jóvenes. Pero no creo que sea suficiente en esta etapa. Tienen algunos PSU en términos de huella de carbono y potencia de procesamiento real.

Sin embargo, por cada persona que comprará un mainframe de IBM porque puede ejecutar Linux en él, cuesta menos electricidad y es altamente eficiente, tendrá varios más que elegirán una granja de servidores porque están más familiarizados con ese mundo y también muchos más programadores.

En última instancia, mucho depende de la industria involucrada. Trabajo en una industria en particular que ha sido muy dependiente de los mainframes durante años y años y todavía se usan ampliamente. Pero las soluciones alojadas se están volviendo más populares, lo que permite la consolidación de habilidades en compañías más grandes, lo que elimina algunos de los problemas que enfrentan las compañías individuales en términos de puntos de falla, y además, algunos proveedores están estudiando soluciones no basadas en mainframe. por los problemas inherentes a esa industria.

Entonces, en resumen, lo que estoy diciendo es que, en general, habrá un movimiento hacia la migración desde los sistemas heredados tan pronto como un punto económico de mantenimiento versus migración caiga a favor de la migración. Sin embargo, será en gran medida invisible para muchas personas porque no es nuevo y original y no tiene una cara muy pública en la forma en que lo hace una próxima gran cosa. Esa migración puede ser a proveedores de servicios o a tecnología más nueva (especialmente cuando los proveedores de servicios son los directamente afectados).

Mi experiencia, particularmente en redes, es que hay un movimiento para eliminar la dependencia de los sistemas heredados.


+1 por abandonar las malditas cosas. En un momento dado, pagar 90k al año por soporte 24/7, y 250k / a para programadores viejos, todo para mantener un sistema cuyas especificaciones están más en línea con una calculadora de bolsillo que un servidor moderno, deja de tener sentido comercial. La gente tiene miedo de cambiar, pero el cambio puede ser bueno. Los mainframes tienen un nicho. Es un buen nicho. Pero está haciendo procesos que no se pueden hacer fácilmente en paralelo. Veo compañías que ponen sus datos financieros en nuevos mainframes, solo porque son caros, y piensan que caro es mejor, y simplemente no es cierto.
Satanicpuppy

1
ser el encargado de mantenimiento del sistema Cobol de 30 años es, de hecho, un suicidio profesional. No necesita nuevas habilidades, por lo que no hay un presupuesto de capacitación, ya que eso se extiende solo a las cosas que necesita para el trabajo actual o previsto (y se anticipa que lo seguirá haciendo para siempre). Nunca se pone en contacto con nuevas herramientas y técnicas, porque no hay un desarrollo lo suficientemente cerca de su sistema en mantenimiento como para ser relevante para él. Etc. etc. Si después de 5 años de eso intentas conseguir otro trabajo utilizando tecnología más moderna, eres visto como obsoleto y pasado de moda, por lo que estás estancado.
Jwenting

12

La mayoría de las empresas ya ignoran la deuda técnica, y ni siquiera se dan cuenta de que las cosas están mal hasta que literalmente se derrumba a su alrededor y las envía a la bancarrota (si alguna vez llega a ese punto). En realidad he vistoeso sucedió, y no fue bonito; lo que lo empeoró fue el hecho de que repetidamente intenté informar a los dueños de negocios sobre la creciente deuda técnica y que tendría que ser reparada, y cada vez que fue rechazada debido a la falta de voluntad para gastar el tiempo y los recursos necesarios para arreglarla eso. El resultado final fue después de más de 10 años, el sistema finalmente falló catastróficamente (después de que me fui) y no pudieron recuperarse, y cerraron, porque fueron demasiado estúpidos para darse cuenta durante esos diez años de gastar un poco de dinero para solucionar el problema hubiera sido mejor que ignorarlo por completo. Podría hablar durante horas sobre la absurda estupidez de esa compañía, y lo que más me dolió fue que podría haberse evitado por completo si los dueños no solo para ganar dinero rápido cortando todo lo demás por completo.

Es increíblemente difícil tratar de decirle a una empresa si sus sistemas están mal escritos y necesitan una gran refactorización (si no una reescritura total, que normalmente es el caso porque es tan malo). La mayoría de las veces sólo te derriban, incluso si ellos advierten que es difícil hacer cambios o añadir nuevas características (de la manera correcta, es decir, no sólo capas más basura en la pila), o incluso considerar que una en detrimento de la empresa porque ve problemas con el sistema en su estado actual.

Honestamente he llegado a la conclusión de que es una batalla perdida, y una que no vale la pena pelear. Las personas lo suficientemente inteligentes como para saber sobre la deuda técnica no necesitan que se les diga dos veces al respecto y son conscientes de los peligros desde el principio, y todos los demás no escucharán ningún tipo de razón o advertencia hasta que sea demasiado tarde de todos modos. La mejor opción (y, por supuesto, la más poco realista) sería dejar que la selección natural intervenga y dejar que las personas ignorantes se extingan, dejando solo a las inteligentes. No sé de ninguna otra manera práctica de manejarlo, porque todo lo que intenté personalmente en el pasado fue ignorado por completo, redujo mi valor a los ojos de la empresa (por "quejarme") o incluso resultó en mi terminación porque estaba "demasiado concentrado" en arreglar "lo que no es roto y nadie más tenía el estado mental adecuado para ver que estaba roto.


3
+1: totalmente de acuerdo y también difícil de convencer. Hay un problema cuando una gran parte de la gestión anterior eran los desarrolladores al principio de su carrera. Lo toman como algo personal cuando les dice que el código escrito hace 15 años ya no lo va a cortar, en lugar de aceptar el cambio de tiempos y el código antiguo debe revisarse, ponen sus cabezas en la arena y le dicen que necesita ser más un jugador de equipo, etc.
MDV2000

7

Las millas de tubos, cables y hierro debajo de Nueva York y otras ciudades de EE. UU. Están envejeciendo y podrían volverse peligrosamente inestables.

Para la anécdota, se hizo el mismo argumento en París en los siglos XVI y XVII. Se habían excavado tantos agujeros y túneles debajo (además de los agujeros naturales debido a la geología del área) que un edificio ocasional se derrumbaría.

Para cuando se derrumbaron bloques enteros de la ciudad en el suelo, se habían dado instrucciones para llenar los agujeros y túneles innecesarios con grava y huesos (también tenían problemas de hacinamiento en el cementerio). La ciudad sobrevivió de esa manera hasta que se inventó el hormigón.

Mi punto aquí es que muchas organizaciones tienden a esperar hasta el último minuto para realizar cualquier mantenimiento de software, pero los codificadores (como los ingenieros civiles) hacen el trabajo de manera rápida y bien.

Sobrevivimos al error Y2k. El error Y2036 obligará a muchas organizaciones a actualizar su hardware y software. El mundo podría terminar en 2012. Pero los informáticos no son sociólogos ni críticos literarios .

Ah, y como dice el refrán mientras tanto: escriba el código como si el próximo responsable fuera un psicópata vicioso que sabe dónde vive.


55
"escribe código como si el próximo responsable de mantenimiento sea un psicópata vicioso que sepa dónde vives". - quieres decir, ¿tan mal que se sacarán los ojos después de verlo? Tengo que protegerme después de todo. Eso sería explicar una parte del código que he visto.
MSalters

Algo así, sí. : D
Denis de Bernardy

4

Olvidé, ¿qué consideramos código heredado en estos días? ¿El código del año pasado, el código de la década pasada o el código del siglo pasado?

El dinero impulsa la conversación en torno al mantenimiento de los sistemas heredados. La deuda técnica toma su forma como un mayor costo para cambiar el sistema.

He trabajado con sistemas mal diseñados e inteligentemente diseñados. Lo interesante es que los costos para mantenerlos no varían tanto. Los problemas más importantes son las arquitecturas incorrectas para el uso actual, que generalmente aparecen en problemas de escala o cuando se desea un cambio importante. No puede convertir fácilmente un área importante de código de un solo subproceso a varios subprocesos.

Los problemas más importantes que experimento son los lenguajes de desarrollo utilizados. Los sistemas más antiguos están escritos en idiomas que son menos populares hoy en día, por lo que debe entrenar más o contratar recursos más experimentados (caros) y raros. En cualquier caso, debido al grupo más pequeño, también tiene dificultades para encontrar personas calificadas que tienden a generar tantos problemas como soluciones.

En cuanto a la reescritura prometida, la mayoría de los sistemas que han tenido grandes inversiones no justifican una reescritura. Es sorprendente cuánto tiempo el software puede mantenerse funcionando y mejorado. Los cambios de hardware (algunos sistemas que mi empresa admite utilizan hardware especializado) tienden a ser nuestro mayor problema. La capacidad de mejorar a menudo solo está limitada por los mecanismos para integrar código heredado con nuevas características.


4

Esto ya es un gran problema. Y no muestra signos de cambio.

En los años 60 y 70, grandes instituciones de todo tipo pasaron de hacer contabilidad en papel a hacer contabilidad en sistemas informáticos. Abrumadoramente eligieron COBOL. La mayoría todavía usa versiones actualizadas de esos sistemas COBOL. Ver http://cis.hfcc.edu/faq/cobol para algunas estadísticas sobre esto

De vez en cuando recibimos recordatorios aleatorios de esto, como cuando Arnold Schwarzenegger descubrió hace un par de años que no podía simplemente reducir el salario de 200,000 trabajadores estatales sin 6 meses de desarrollo primero (ver http: //www.infoworld. com / d / developer-world / californias-cobol-conundrum-067 para verificación).

Dados los riesgos de cambiar, es muy difícil justificar el cambio de estos sistemas. Nunca. Esa ha sido la realidad durante toda mi vida. Pero no veo ninguna razón para que ese hecho cambie en la vida de mis hijos. O la vida de sus hijos tampoco.

Tengo amigos que han mantenido el código que es más antiguo que ellos. ¡Tengo una amiga que regresó a una compañía 30 años después de que ella trabajó allí por primera vez, para descubrir que sus programas todavía estaban funcionando, sin cambios, en un idioma que ni siquiera recordaba!

Permítanme terminar con una historia real de lo que ambos pueden suceder.

En la década de 1970, una empresafue fundada para proporcionar un mercado en línea para los comerciantes. El PDP-11 era una buena relación precio / rendimiento para ellos, por lo que eligieron eso. Estaban empujando los límites de rendimiento de una máquina, por lo que escribieron su sistema en un ensamblaje PDP-11 altamente optimizado. Unos años más tarde, el PDP-11 dejó de venderse. Sin embargo, el negocio fue excelente, las máquinas duraron y los reemplazos de segunda mano fueron fáciles de conseguir. Mantuvieron su plataforma. Algunos años después, los reemplazos se hicieron más difíciles de conseguir. Se realizó un gran proyecto para reemplazar la plataforma de negociación. Falló. Lo intentaron de nuevo. Y falló de nuevo. Una de las principales causas del fracaso fue que nadie sabía cómo funcionaba su sistema comercial, y ya nadie podía leer el ensamblaje PDP-11. Entonces la salvación golpeó. Alguien creó un ensamblador PDP-11 que se ejecutaba en Linux.

Por lo tanto, en 2000, las operaciones que entraban en un negocio de mil millones de dólares al año fueron a máquinas Linux, a través de un puente ethernet-decnet, a máquinas PDP-11 emuladas que ejecutaban la operación en un sistema de software que estaba escrito en PDP altamente optimizado. 11 montaje. Por velocidad.

No he tenido conexión con dicha compañía en la última década. Así que no puedo decirte si todavía se están ejecutando en PDP-11 emulados. Sé que la decimalización estaba exprimiendo dolorosamente sus márgenes, por lo que tuvieron otro esfuerzo para migrar. (Solo aprendí la historia porque entrevisté a varias personas que habían sido despedidas de allí y pregunté qué había sucedido). Sin embargo, dados los fracasos anteriores, lo consideraría mejor que incluso probabilidades de que no hayan reemplazado con éxito ese sistema.


Los sistemas se ejecutan en simuladores (y capas de simuladores) ejecutan aplicaciones críticas para la vida actual. Es trivialmente fácil validar un simulador PDP-11 o 6805 en comparación con la reescritura del programa ensamblador heredado con una compatibilidad funcional garantizada al 100%. Es una forma perfectamente válida de resolver este problema en particular.
mattnz

@mattnz: Creo que su tiempo mínimo de transacción en 2000 fue de 1 segundo. También sus costos fueron significativamente más altos que sus competidores. La decimación redujo sus márgenes, de ahí la ronda de despidos que resultó en mi entrevista a varias personas de la compañía. Solo sobrevivieron porque tenían la ventaja de ser los primeros en moverse en uno de los pocos tipos de aplicaciones donde se lleva a cabo la Ley de Metcalfe (subastas). Si bien individualmente las decisiones fueron razonables, el resultado final fue decididamente subóptimo.
btilly

3

Suena como una preocupación muy genuina desde el punto de vista del usuario. Para que la podredumbre se retrase, o mejor, se evite, el software en cuestión debe estar libre de ataduras. Sus editores deberían haber liberado el código fuente o estar en el negocio de mantener y actualizar las fuentes hasta que su último usuario deje de usarlo. De lo contrario, hay muchas posibilidades de que cierren debido a problemas similares en el mundo de los negocios, dejando así el software totalmente abierto a los problemas.

Es decir, la duración del plazo de los derechos de autor del software y la restricción de licencias debe ser muy corta, al final de la cual, el software y su base de código ingresan al dominio público y permanecen allí. Por lo tanto, haciendo posible que el usuario siga actualizando las fuentes o contrate a alguien para que lo haga, lo que retrasará y / o evitará las pudriciones.

O, si está un poco abierto a la idea del software libre, puede escribir sus programas bajo una licencia gratuita como la AGPL o la GPL u otras licencias de software libre. Por lo que he visto, cuando las fuentes de un software no atraen más interés en los desarrolladores para mejorarlo por cualquier motivo, la base de la fuente se canibaliza y adquiere una nueva vida. Los paquetes en el sistema operativo Debian tienden a seguir este ciclo de vida, por lo que he visto.


1
+1 Al menos una visión de cómo se podría resolver el problema haciendo que el software sea libre después de un cierto tiempo y esperando que la comunidad resuelva los problemas. Sin embargo, dudo que esto pueda volverse realista debido a problemas financieros
k3b

Software libre o no, los procedimientos para detener las pudriciones siempre se pueden resolver. Ese es el dominio de la ingeniería, después de todo. Si se detendrán o no las pudriciones es siempre una pregunta para el negocio.
vpit3833

2

Habiendo apoyado una variedad de aplicaciones de la industria gubernamental y privada, diría que la mayoría de las empresas y, al menos, el gobierno de los EE. UU., Son conscientes de los peligros de dejar que el código se pudra y no mantenerse al tanto de las últimas tendencias de seguridad.

Regularmente tenemos que certificar nuestro software para varias susceptibilidades y la mayoría de los sistemas electrónicos del gobierno, incluso los antiguos, reciben actualizaciones periódicas para mantenerlos seguros.

Por supuesto, hay excepciones, y los piratas informáticos siempre están en movimiento, pero en general creo que la gente es muy consciente de que no puedes tirar algo y nunca volver a tocarlo.


1

Advertencia: Esto será un poco libre ...

Creo que hay 2 formas de ver su preocupación.

Si lo piensas, algunos transbordadores espaciales y satélites han estado ejecutando el mismo código que los lanzó originalmente. Por otro lado, algunos han sido diseñados para actualizarse incluso si son (muy) remotos.

Lo que importa es el medio ambiente. Obviamente, siempre que no modifique el entorno, su código no quedará obsoleto. En este caso, la descomposición del código realmente no existe: el código en sí (o el binario producido) no puede pudrirse. Podría romperse si comienzas a atacarlo desde un ángulo completamente diferente. No es que se esté pudriendo, es que no se está adaptando a su entorno. Piense en ello como un problema evolutivo.

Pero nuestro entorno cambia. Y de alguna manera, cuál es la clave de su problema también es la solución. Nuestro entorno cambia tan rápido que hoy en día no esperaríamos que una solución de software no evolucione con el tiempo. Pasamos por alto los proyectos de software que no se han actualizado en el último año, y lamentaremos el soporte al producto y al cliente que no produce una hoja de ruta clara. E incluso cuando esto funciona bien (obtienes una hoja de ruta clara, un buen soporte, actualizaciones periódicas ...) siempre existe la posibilidad de que surja un desafío, con un crecimiento exponencial. A menudo cometemos el error de pensar que las grandes empresas establecidas siempre dominarán, exactamente porque dominan. Sin embargo, de la misma manera que el elemento dominante en una manada envejece, el software / hardware súper masivo / cualquier proveedor envejece. O simplemente un poco vago. Y entra un retador y cambia las cosas aún más rápido de lo que el dominante establecido podría haberlo hecho 5 o 10 años antes. O el dominante solo recibirá una buena paliza, apenas sobrevivirá mientras vemos una interrupción en el mercado (económicamente hablando, con impactos en diferentes campos), y luego las cosas continuarán. Tal vez eso parezca imperfecto, pero en sí mismo es un proceso orgánico.

Entonces, desde la perspectiva del usuario, supongo que el problema no es tan grande. La descomposición del código no sucederá desde la perspectiva del usuario, ya que podrá usar una alternativa (posiblemente con una transición / migración sin problemas ... con suerte).

Ahora suponiendo que no estamos viendo cosas desde el punto de vista del usuario, o que estamos hablando de un sistema que es inmune, por razones desconocidas, desarrollo gubernamental, viajes espaciales, etc., a la competencia y que se supone realmente Para ser construido para vivir / sobrevivir durante mucho tiempo, necesitamos mirar los textos a los que hizo referencia. Y probablemente más literatura sobre sistemas confiables y sistemas tolerantes a fallas. Aunque probablemente queremos avanzar más. No solo queremos tolerancia a fallas, queremos sistemas evolutivos.

El problema con la evolución es que introduce cambios, y los cambios introducen puntos de falla. Miremos estos ahora y lo que podemos hacer para abordarlos.

Todavía podemos confiar en la metáfora de infraestructura / arquitectura / ingeniería mientras lo hacemos (después de todo, todos nosotros somos ingenieros de software, aunque podría decirse que no existe tal cosa como ingeniería de software ... por ahora). Hay una razón mientras el sistema de tubos todavía está activo (con algunos problemas técnicos), mientras que Big Ben todavía funciona (con algunos problemas técnicos) o la Torre Eiffel sigue en pie. Es porque hacemos con elementos vitales (o no tan vitales) de una infraestructura lo que también deberíamos estar haciendo con el software: inspección continua. Estas entidades no fueron necesariamente diseñadas para durar tanto tiempo, pero se han beneficiado de la supervisión permanente y las mejoras y reparaciones oportunas cuando fue necesario. Llame a eso sus revisiones si lo desea.

Por otro lado, algunos diseños estaban destinados a durar y funcionar de manera duradera sin interrupción, incluso sabiendo que la inspección continua no será posible. En este caso nos dirigimos hacia un buen diseño y modelos formales. Los elementos de fiabilidad (disponibilidad, fiabilidad, seguridad, integridad, mantenibilidad) se pueden cuantificar para un entorno determinado. Las estadísticas hacen el resto para planificar el descanso y el futuro. Lo que trae la pregunta: ¿es posible incluso para nosotros construir sistemas que serán evolutivos, en el sentido real?


0

Jeff Langer en Clean Code hace una pregunta similar ... sin referencias a tuberías de vapor :)

¿Qué pasaría si hubiera cuatro reglas simples que pudiera seguir que lo ayudarían a crear buenos diseños mientras trabajaba? ¿Qué sucede si al seguir estas reglas obtiene información sobre la estructura y el diseño de su código, lo que facilita la aplicación de principios como SRP y DIP? ¿Qué pasaría si estas cuatro reglas facilitaran la aparición de buenos diseños?

Muchos de nosotros sentimos que las cuatro reglas de diseño simple de Kent Beck son de gran ayuda para crear un software bien diseñado.

Según Kent (en Extreme Programming Explained), un diseño es "simple" si sigue estas reglas:

  • Ejecuta todas las pruebas
  • No contiene duplicación
  • Expresa la intención del programador.
  • Minimiza el número de clases y métodos.

Para ejecutar todas las pruebas ... necesitamos pruebas para ejecutar y ese es un gran indicador de la deuda técnica. Por ejemplo, si hay 10,000 casos de prueba en un sistema como Mercury Quality Center y ninguna de esas pruebas está automatizada, ese es un claro indicador de la deuda técnica que se ha acumulado.

Y ahí es donde entra Plumas y su libro "Trabajando eficazmente con código heredado".


55
incluso si las pruebas están automatizadas, eso sigue siendo una deuda técnica: ¡esas pruebas no los mantienen a todos!
gbjbaanb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.