ScholarGate
Asistente

Reingeniería de Software

La reingeniería de software es el examen y la alteración de un sistema existente para reconstituirlo en una forma nueva y mejorada, generalmente para modernizar software heredado antiguo mientras se preserva su comportamiento esencial.

Encontrar tema con PaperMindPróximamenteFind papers & topics
Tools & resources
Descargar diapositivas
Learn & explore
VídeoPróximamente

Definition

La reingeniería de software es el proceso de examinar un sistema sujeto para comprenderlo y luego volver a implementarlo o reestructurarlo para mejorar su forma o plataforma, preservando sustancialmente su funcionalidad.

Scope

Este tema abarca la ingeniería inversa y la recuperación de diseño; la reestructuración de código y datos; la migración a nuevas plataformas, lenguajes y arquitecturas; el encapsulamiento y las estrategias de modernización incremental para sistemas heredados; las pruebas para preservar el comportamiento durante la transformación; y los criterios de decisión para la reingeniería frente al mantenimiento continuo o el reemplazo.

Core questions

  • ¿Cómo se recupera el diseño de un sistema heredado a partir de su código y datos?
  • ¿Qué estrategias migran o reestructuran un sistema con un riesgo aceptable?
  • ¿Cómo se preserva el comportamiento mientras se transforma la implementación?
  • ¿Cuándo la reingeniería supera al mantenimiento continuo o al reemplazo completo?

Key theories

Ingeniería inversa y recuperación de diseño
Chikofsky y Cross definieron una taxonomía que distingue la ingeniería inversa (recuperación de representaciones de nivel superior de un sistema) de la redocumentación, la reestructuración y la ingeniería hacia adelante, enmarcando las actividades de recuperación de diseño.
Modernización incremental de sistemas heredados
En lugar de reescrituras arriesgadas de 'big-bang', los sistemas heredados se modernizan incrementalmente introduciendo pruebas alrededor del código existente, aislando puntos de cambio y reestructurando o reemplazando componentes gradualmente.

Clinical relevance

La reingeniería permite a las organizaciones extender la vida útil y el valor de los sistemas heredados críticos para el negocio con un riesgo menor que la reescritura desde cero; una estrategia sólida y técnicas que preserven el comportamiento son esenciales porque los sistemas heredados a menudo codifican conocimientos empresariales irremplazables y no documentados.

History

A medida que los grandes sistemas construidos entre las décadas de 1960 y 1980 envejecieron, la ingeniería inversa y la reingeniería surgieron como preocupaciones distintas a finales de los años 80 y 90, formalizadas por la taxonomía de Chikofsky y Cross; las técnicas prácticas para dominar el código heredado no probado fueron codificadas posteriormente por Feathers.

Debates

Reingeniería incremental versus reescritura completa
La decisión de modernizar un sistema heredado incrementalmente o reescribirlo por completo es controvertida; las reescrituras prometen un borrón y cuenta nueva, pero con frecuencia exceden el presupuesto y pierden conocimientos incrustados, mientras que la reingeniería incremental es más segura pero más lenta.

Key figures

  • Elliot Chikofsky
  • James Cross
  • Michael Feathers

Related topics

Seminal works

  • chikofsky1990
  • feathers2004
  • sommerville2015

Frequently asked questions

¿Cuál es la diferencia entre refactorización y reingeniería?
La refactorización realiza pequeñas mejoras que preservan el comportamiento del código fuente, generalmente como parte del desarrollo continuo; la reingeniería es una actividad a mayor escala que puede recuperar diseños y migrar un sistema completo a una nueva plataforma o arquitectura, de la cual la refactorización puede ser una técnica.
¿Por qué no simplemente reescribir un sistema heredado desde cero?
Los sistemas heredados a menudo encarnan años de reglas de negocio acumuladas y mal documentadas; una reescritura desde cero corre el riesgo de perder este conocimiento y comúnmente excede el presupuesto, por lo que la reingeniería incremental es frecuentemente el camino de menor riesgo a pesar de su ritmo más lento.

Methods for this concept

Related concepts