Trabajo de Investigación: Mantenimiento de Software
2022
Instituto Politécnico Superior “Gral. San Martín”
Tecnicatura en Informática Profesional y Personal
Mantenimiento de Software
Docente: Paula Ávila
Estudiantes (individual o equipos de máximo 4 integrantes): Martina Alarcón, Alejandro Comba Sanz
Fecha de Entrega: mayo 2022
Tema: Eje 2 - Mantenimiento de Software
Objetivos:
Integrar los conocimientos adquiridos en el Eje 1 para comprender las problemáticas que motivaron el estudio del conjunto
de actividades que comprende el Mantenimiento de Software. Investigar las diferentes posturas con respecto a la definición del
Mantenimiento de software y que implica realizar el mismo.
Consideraciones:
Los siguientes apartados pretenden brindar una guía a los estudiantes a cerca de los contenidos que deben incluir en este trabajo,
pero la estructuración del mismo puede ser elegida por cada estudiante. La entrega debe realizarse antes de la fecha detallada en la
cabecera de esta guía, en formato digital, por las vías de comunicación ya utilizadas en la asignatura. Se debe tener en cuenta que si
bien tuvimos un acercamiento en clase sobre este eje, el presente trabajo tiene carácter de trabajo de investigación, por lo que no
debe corresponder necesariamente con lo desarrollado pero si con su propia investigación e interpretación.
Guía:
1. Citar al menos dos definiciones del Mantenimiento de Software con su fuente y fecha correspondiente para luego sintetizar
una definición propia.
2. Entendiendo al Mantenimiento de Software como conjunto de actividades, investigue acerca de las clasificaciones más
utilizadas para agrupar dichas actividades y cuál es el criterio utilizado para esta clasificación.
3. Comparar valores estadísticos:
a. Relación de Esfuerzo/Costo entre Desarrollo y mantenimiento en 3 momentos de la historia del Software.
b. Porcentajes de Esfuerzo/Recursos aplicados a cada tipo de mantenimiento en la actualidad.
c. Costos financieros, cantidad de personal dedicado al mantenimiento en grandes empresas.
4. Especificar qué acciones realizan los actores encargados del mantenimiento de Software, en cual o cuales tipos de
mantenimiento son llevadas a cabo y una breve descripción de cada una.
5. Investigar acerca de los siguientes términos asociados al tema en cuestión: Mantenibilidad (Maintainability), Efecto dominó
(ripple effect), Estabilidad de un diseño de software, Sistema Heredado o Código Heredado (Legacy Systems).
6. Realizar una valoración personal/conclusión acerca de lo investigado, ¿considera importante al mantenimiento?, ¿ha
cambiado su percepción/opinión acerca de estas actividades?, comente, opine al respecto.
1
El mantenimiento de software ha sido definido a lo largo del tiempo de múltiples pero similares maneras. Algunas de
esas definiciones son:
"La fase mantenimiento se centra en el cambio que va asociado a la corrección de errores, a las adaptaciones requeridas
a medida que evoluciona el entorno del software, y a cambios debidos a las mejoras producidas por los requisitos
cambiantes del cliente.” Pressman, 1998.
"La modificación de un producto software después de haber sido entregado [a los usuarios o clientes] con el fin de
corregir defectos, mejorar el rendimiento u otros atributos, o adaptarlo a un cambio en el entorno”. Estándar IEEE 1219,
1993.
En definitiva, se puede describir al mantenimiento de software como el conjunto de actividades destinadas a mejorar
una pieza de software por algún motivo.
Existen cuatro tipos de mantenimiento: correctivo, adaptativo, perfectivo y preventivo.
El mantenimiento correctivo es aquel en el que se buscan y corrigen los defectos (una característica con el potencial de
causar un fallo) en el software. Hablamos de un fallo cuando el comportamiento de un sistema es diferente del
establecido en la especificación.
Por otro lado, el mantenimiento adaptativo es aquel en el cual el software debe modificarse debido a cambios en el
entorno en el cual se ejecuta (tanto hardware como software). Estos cambios pueden ser del sistema operativo (cambio
a uno más moderno), la arquitectura física del sistema (paso de una arquitectura de red de área local a Internet/Intranet)
o al entorno de desarrollo del software.
En el mantenimiento perfectivo se mejoran o añaden nuevas funcionalidades requeridas por el usuario. Cuando un
software es utilizado por muchos usuarios suele tener mayor cantidad de mantenimiento de este tipo, ya que cuanto
más se utiliza un programa, se crean más demandas de nuevas funcionalidades o mejoras en las existentes. Se puede
dividir en mantenimiento de ampliación (destinado a incorporar nuevas funcionalidades) y de eficiencia (para mejorar la
misma en la ejecución).
Por último, el mantenimiento preventivo es aquel que busca mejorar el funcionamiento del programa sin alterar su
funcionamiento, eliminando así los posibles fallos latentes. Por ejemplo, mejorando la legibilidad del código, agregando
comentarios para una mejor comprensión, validando los datos de entrada, etc. Dentro de esta clasificación entra
también el mantenimiento para reutilización, que consiste en modificar el software para que sea más fácil aplicar partes
del código en otros proyectos.
En la década de 1960, el desarrollo requería un mayor esfuerzo y era más costoso que el mantenimiento, ya que el
software era una tecnología relativamente nueva y se necesitaba invertir mucho para desarrollar nuevas aplicaciones.
Hacia los 80s, dicha relación empezó a equilibrarse, ya que se revelaba la importancia del mantenimiento del software a
largo plazo y los costos de la falta del mismo, con lo cual el mantenimiento se convirtió en una parte importante del
proceso de desarrollo. En la actualidad, mantener el software es más costoso y pide más esfuerzo que desarrollarlo,
debido a que se ha vuelto complejo y se necesita mantenerlos actualizados y funcionando como debe.
Aproximadamente el 60% del esfuerzo y recursos van al mantenimiento perfectivo, un 18% al mantenimiento adaptativo,
el 17% al mantenimiento correctivo y el 5% restante al mantenimiento preventivo.
En grandes empresas, se espera que los costos financieros del mantenimiento de software sean significativamente
Trabajo de Investigación: Mantenimiento de Software
2022
menores a los costos del desarrollo, aunque esto puede variar según la complejidad y la cantidad de cambios requeridos
del mismo. En cuanto a la cantidad de personal, también puede variar, pero se espera que en grandes empresas haya
equipos enteros dedicados al mantenimiento de software, aunque sí qué más pequeños que los equipos de desarrollo.
Los actores encargados del mantenimiento del software pueden llevar a cabo las siguientes acciones en cada uno de los
tipos de mantenimiento:
Mantenimiento correctivo:
● Identificación de errores o fallos en el software.
● Análisis de la causa raíz del problema.
● Corrección del error o fallo encontrado.
● Pruebas para verificar que el problema se ha resuelto y que el software sigue funcionando correctamente.
Mantenimiento Adaptativo:
● Evaluación de los cambios en los requisitos del entorno de tecnología.
● Análisis de la necesidad de modificar el software existente.
● Planificación y diseño de las modificaciones necesarias.
● Implementación de las modificaciones necesarias.
● Pruebas para verificar que el software sigue funcionando correctamente después de la modificación.
Mantenimiento Perfectivo:
● Análisis del rendimiento y la eficiencia del software existente.
● Identificación de áreas de mejora.
● Planificación y diseño de mejoras y optimizaciones en el software existente.
● Implementación de las mejoras y optimizaciones necesarias.
● Pruebas para verificar que el software sigue funcionando correctamente después de la mejora.
Mantenimiento Preventivo:
● Identificación de posibles problemas o riesgos futuros en el software.
● Planificación y diseño de medidas para prevenir los problemas o riesgos identificados.
● Implementación de las medidas preventivas necesarias.
● Pruebas para verificar que el software sigue funcionando correctamente después de la implementación de las
medidas preventivas.
La mantenibilidad representa la capacidad del software para ser modificado de manera tanto efectiva como eficiente.
Esta característica se subdivide a su vez en las siguientes subcaracterísticas:
• Modularidad. Capacidad de un programa que permite que un cambio en un componente tenga un impacto mínimo en
los demás.
• Reusabilidad. Capacidad de una parte del software que permite que sea utilizado en la construcción de más de un
3
programa.
• Analizabilidad. Facilidad con la que se puede evaluar el impacto de un determinado cambio sobre el resto del software,
encontrar las causas de los fallos en el software, o identificar las partes a modificar.
• Capacidad para ser modificado. Lo que permite que se edite el código del software de forma efectiva y eficiente sin
generar fallos o degradar el desempeño.
• Capacidad para ser probado. Facilidad con la que se pueden establecer criterios de prueba para un sistema o
componente y con la que se pueden llevar a cabo las pruebas para determinar si se cumplen dichos criterios.
Un determinado cambio en un producto software se dice que genera un efecto dominó cuando a consecuencia del
cambio debemos realizar cambios adicionales en el sistema. La estabilidad de un diseño de software es la capacidad de
un sistema para resistir cambios sin comprometer su integridad o funcionalidad, es decir, sin crear efectos dominó.
Sistema Heredado o Código Heredado: se refiere a un software anticuado (es decir, que fue desarrollado en el pasado) y
que se esté usando actualmente, lo que significa que puede ser obsoleto y/o difícil de mantener debido a que pueden
llegar a requerir conocimientos específicos sobre el mismo para mantenerlos y actualizarlos.
Para concluir, podemos asegurar que el mantenimiento de software es extremadamente importante para su correcto
funcionamiento a lo largo del tiempo. Sin el mantenimiento, los programas se volverían obsoletos casi automáticamente,
ya que hay cambios constantes en los entornos en los que corren. Una percepción común, que también compartíamos,
es que la mayoría de actividades de mantenimiento son del tipo correctivo, pero mientras realizamos este trabajo
descubrimos que no era el caso. En cambio, la mayor cantidad de esfuerzo en mantenimiento va dirigido a perfeccionar
el software.