Evolución del software


La evolución del software es el desarrollo continuo de una pieza de software después de su lanzamiento inicial para abordar los requisitos cambiantes de las partes interesadas y / o del mercado. La evolución del software es importante porque las organizaciones invierten grandes cantidades de dinero en su software y dependen completamente de este software. La evolución del software ayuda al software a adaptarse a los requisitos cambiantes de la empresa, a corregir defectos e integrarse con otros sistemas cambiantes en un entorno de sistema de software.

Fred Brooks , en su libro clave The Mythical Man-Month , [1] afirma que más del 90% de los costos de un sistema típico surgen en la fase de mantenimiento, y que cualquier software exitoso será inevitablemente mantenido.

De hecho, los métodos ágiles se derivan de actividades similares al mantenimiento en y alrededor de tecnologías basadas en web, donde la mayor parte de la capacidad proviene de marcos y estándares. [ cita requerida ]

El mantenimiento del software aborda la corrección de errores y las mejoras menores, mientras que la evolución del software se centra en la adaptación y la migración .

Las tecnologías de software seguirán desarrollándose. Estos cambios requerirán la creación y justificación de nuevas leyes y teorías. Algunos modelos también requerirían aspectos adicionales en el desarrollo de programas futuros. Las innovaciones y mejoras aumentan la forma inesperada de desarrollo de software. Los problemas de mantenimiento probablemente también cambiarían para adaptarse a la evolución del software futuro. Los procesos de software están evolucionando en sí mismos, después de pasar por el aprendizaje y los refinamientos, siempre se mejora su eficiencia y efectividad. [2]

La necesidad de la evolución del software proviene del hecho de que nadie es capaz de predecir cómo evolucionarán los requisitos de los usuarios a priori . [3] En otras palabras, los sistemas existentes nunca están completos y continúan evolucionando. [4] A medida que evolucionan, la complejidad de los sistemas aumentará a menos que haya una mejor solución disponible para resolver estos problemas. Los principales objetivos de la evolución del software son garantizar la relevancia funcional, la fiabilidad y la flexibilidad del sistema. La evolución del software puede ser completamente manual (basada en cambios realizados por ingenieros de software), parcialmente automatizada (por ejemplo, usando herramientas de refactorización) o completamente automatizada (con configuración o evolución autónoma [5] ).