Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Definiciones ISO: traduccin de (ISO/IEC 14764 IEEE Std 14764 2006 SW Engineering SW Life
Cycle Processes -Maintenance)
3,10 Mantenimiento de software, totalidad de las actividades necesarias para proporcionar
los gastos de apoyo eficaz a un sistema de software. Las actividades se realizan durante la
etapa previa a la entrega, as como la posterior fase de entrega.
Teniendo en cuenta que los sistemas de software son activos de negocio crtico y que las
organizaciones invierten recursos en los cambios es que requiere de nuestra atencin esta etapa
del proceso que es la que lleva la mayor cantidad de tiempo.
Desde las pequeas empresas de fabricacin de software hasta las grandes empresas invierten la
mayor parte del presupuesto en el mantenimiento de los sistemas existentes, variando el
porcentaje de acuerdo a las distintas visiones y experiencias obtenidas, por ejemplo:
-1-
Erlikh sugiere que el 90% de los costos del software son costos de evolucin. (Erlikh,
2000).
Algunos datos de la industria indican que:
o Entre el 40% y el 70% del costo del software a lo largo de todo su ciclo de vida es
consumido por actividades de mantenimiento.
o Entre el 60% y el 80% del presupuesto de IT de las organizaciones se gasta en
Mantenimiento y Soporte
-2-
establecer estrategias para el cambio las cuales estn centradas en tres puntos importantes:
1- Mantenimiento de Software: los cambios en el software se hacen en respuesta a los
cambios en los requerimientos que satisfagan las nuevas necesidades del cliente, pero la
estructura fundamental de dicho software permanece estable.
2- Evolucin Arquitectnica: Enfoque ms radical para cambiar el software con la
importancia que tiene el diseo y continuar dndole mantenimiento conforme se
implementen cambios ms importantes en la arquitectura del mismo.
3- Reingeniera de Software: Estrategia diferente en el sentido que en principio no se
agrega nueva funcionalidad al sistema, sino que se lo modifica para hacerlo ms fcil de
comprender y cambiar. Implica modificaciones estructurales, no cambios arquitectnicos
mayores.
Dinmicas de la evolucin de los programas
Las dinmicas de evolucin de programa son el objeto de estudio de los procesos de cambio los
de sistemas.
Durante los 70 y 80 Lehman y Belady trabajaron sobre esta rea problemtica, el mantenimiento
del software, dichos estudios continuaron y en los 90, luego de los principales estudios,
propusieron la existencia de un nmero de leyes (las Leyes de Lehman) que son aplicables a
todos los sistemas conforme evolucionen.
Existen observaciones sensibles ms que leyes, hiptesis realmente, que son aplicables a
grandes sistemas desarrollados por grandes organizaciones. Tal vez menos aplicables en otros
casos.
Ley de Lehman
Ley
Cambio continuo
Incremento de Complejidad
Estabilidad Organizacional
Conservacin de Familiaridad
Crecimiento continuado
Decremento de la calidad
Descripcin
A travs de la vida el sistema, el sistema debe
cambiar sino ser menos til cada da.
Como un programa en evolucin cambia, su
estructura en evolucin tiende a ser cada vez ms
compleja, Deben asignarse recursos extra para
preservar y simplificar esta estructura.
La evolucin del programa es un proceso auto
regulado. Atributos del sistema tales como tamao,
tiempo entre releases (versiones), y el nmero de
reporte de errores, son invariantes, en general para
cada versin.
A travs de la vida de un programa, su ratio de
evolucin es constante e independiente de los
recursos dedicados al desarrollo del sistema.
El cambio incremental en cada release es
aproximadamente constante.
Es necesario el crecimiento continuo para
mantener la satisfaccin del cliente.
Si los sistemas no se adaptan a los cambios en su
entorno de funcionalidad, la calidad de los sistemas
disminuir.
Los sistemas de evolucin incorporan sistemas de
realimentacin para lograr una mejora significativa
del producto.
-3-
Las cinco primeras leyes fueron las que se propusieron inicialmente por Lehman, las restantes
fueron agregadas despus de trabajos posteriores.
La sexta y sptima Ley son similares y dicen que los usuarios estarn cada vez ms
descontentos con el sistema a menos que se lo mantenga y se le agreguen nuevas
funcionalidades.
La ltima Ley refleja el trabajo de investigacin ms reciente, aunque an no est muy claro cmo
implementarlo.
Aplicabilidad de la Ley de Lehman
La aplicabilidad de la Ley de Lehman no ha sido establecida completamente, generalmente es
aplicable a sistemas grandes a medida, desarrollados para organizaciones de gran tamao.
Las Leyes deberan tenerse en cuenta cuando se planifica el proceso de mantenimiento, pero
puede seer que las caractersticas del negocio requieran prescindir de ellas en algn momento,
por ejemplo, cuando las empresas de software deben realizar cambios mayores en el sistema en
una nica entrega, las consecuencias ms notable ser la necesidad de realizar nuevas entregas
dedicadas a la reparacin de los errores producidos por dicha entrega.
Otro ejemplo que nos es familiar y que parece no respetar las Leyes de Lehman, es el de
Microsoft Word, que en su principio era un sencillo procesador de textos que funcionaba en 256 K
de memoria y se transform en un sistema de gran porte con mltiples caractersticas,
necesitando en la actualidad caractersticas tecnolgicas mayores para que funcione. Dicha
evolucin parece no respetar la cuarta y quinta Ley, sin embargo es muy posible que el producto
inicial no haya evolucionado como una secuencia de revisiones a partir de un programa ncleo
comn, sino que ha sido reescrito y reestructurado ms de una vez desde su primera entrega, lo
cual lo convierte en un nuevo producto. Este es el caso de muchas empresas que deciden dar de
baja un producto para reestructurarlo completamente y comenzar un nuevo sistema.
-4-
Mantenimiento
Previsto
Cambios
Previstos del
sistema
Costos Previstos
Mantenimiento
Cuntas peticiones
de cambio se
esperan?
Para poder determinar la prediccin del nmero de peticiones de cambios que puede sufrir un
sistema es necesario entender la relacin que existe entre el sistema y su entorno. Para poder
realizar dicha evaluacin debe tener en cuenta los siguientes factores que influyen:
-5-
Proceso de evolucin
Dependiendo del tipo de software a mantener, el ciclo de vida utilizado, los procesos de desarrollo
diseadas y utilizados y el nivel del personal implicado en el proceso, es que varan los procesos
de evolucin del mismo. Si bien se puede adoptar un proceso informal es conveniente disponer de
un proceso formalizado en el que se deja documentacin estructurada en cada etapa del proceso.
El mantenimiento es disparado por requerimientos de cambio que vienen desde los clientes,
usuarios y administradores, entre otros. Dichos cambios son incluidos normalmente en una nueva
entrega del sistema.
Los programas a veces necesitan ser reparados sin una iteracin completa del proceso, pero eso
es peligroso si se permite que la documentacin y los programas tengan diferencias entre las
versiones.
Los procesos de evolucin incluyen actividades fundamentales, tales como el anlisis de cambios,
planificacin de entregas, implementacin del sistema y entrega final del sistema al cliente.
Estas etapas se pueden representar de la siguiente forma:
Proceso de
identificacin de
cambios
Propuesta de
cambio
Nuevo sistema
Proceso de
identificacin de
cambios
El proceso de implementacin de los cambios representa una iteracin del proceso de desarrollo
en la que se disean, implementan y prueban las revisiones del sistema. Veamos una
representacin del proceso de evolucin del mismo:
Peticiones de
Cambio
Anlisis de
Impacto
Reparacin
de fallas
Planificacin
de versiones
Adaptacin
Implementacin
de cambios
Liberacin del
Sistema
Perfeccionamiento
del sistema
-6-
Cambios
propuestos
Anlisis de
requerimientos
Actualizacin de
requerimientos
Desarrollo de
software
Testing:
o Reproduccin del comportamiento a modificar
o Prueba del cambio implementado (funcional y no funcional por ejemplo, en
condiciones de stress)
o Pruebas de regresin
Qu es entender el sistema?
Comprende los siguientes puntos:
Entender qu debe hacer el sistema (los requerimientos)
Entender qu hace el sistema (el comportamiento)
Entender cmo esta implementado el sistema (el cdigo)
Entender cmo mapean las funcionalidades del sistema al cdigo (la descomposicin
funcional y las dependencias).
Cada etapa del proceso de mantenimiento tiene caractersticas particulares que es necesario
tener en cuenta:
Identificacin del Problema:
Comienza con el requerimiento de cambio.
Identificacin Unvoca del Requerimiento de Modificacin
Ingresar el Requerimiento de Modificacin al Repositorio
Actividades:
Asignar nmero de cambio
Clasificar
Aceptar o rechazar el cambio
Estimacin preliminar de magnitud
Priorizar
-7-
Salida:
Requerimiento de Modificacin
Validado
Determinaciones de Proceso
Mtricas:
Cantidad de Requerimientos de Modificacin enviados
Tiempo insumido en la validacin del problema
Cantidad de Req. de Modificacin duplicados
Anlisis:
Ingreso:
Documentacin del Proyecto/Sistema
Informacin del Repositorio
Requerimiento de Modificacin Validado
Conducir Revisiones Tcnicas
Verificar:
o Estrategia de Prueba
o Si la documentacin est actualizada
o Identificar aspectos de seguridad fsica y lgica
Actividades:
Anlisis de Factibilidad
Anlisis Detallado
Redocumentacin, si es necesario
Salida:
Reporte de Factibilidad
Reporte de Anlisis Detallado
Requerimientos Actualizados
Lista preliminar de modificacin
Plan de Implementacin
Estrategia de Prueba
Mtricas:
Cambios a los Requerimientos
Ratio de error en la documentacin
Esfuerzo por rea de funcin
Ratio de errores generados por prioridad y tipo
Tiempo insumido
Diseo
Ingreso:
Documentacin del
Proyecto/Sistema
Cdigo Fuente
Base de Datos
Salida Fase de Anlisis
Inspecciones y revisiones de software
Verificar Diseo
-8-
Actividades:
Crear casos de prueba
Revisar requerimientos
Revisar Plan de Implementacin
Salida:
Revisado:
o Lista de Modificaciones
o Anlisis Detallado
o Plan de Implementacin
Actualizado:
o Lnea Base de Diseo
o Planes de Prueba
Mtricas:
Complejidad del Software
Cambios en el diseo
Esfuerzo por rea de funcin
Ratio de errores generados por prioridad y tipo
Tiempo insumido
Nmero de Aplicaciones
Implementacin
Ingreso:
Documentacin del Proyecto/Sistema
Cdigo Fuente
Resultados de la Fase de Diseo
Inspecciones y revisiones de software
Verificar
o Gestin de configuracin
o Rastreabilidad del Diseo
Actividades:
Codificar
Realizar Pruebas de unidad
Revisar Prueba de Legibilidad
Salida:
Actualizado:
o Software
o Documentos de Diseo
o Documentos de Prueba
o Documentos de Usuario
o Material de Capacitacin
Reporte de revisin de prueba de Legibilidad
Mtricas:
Volumen/Funcionalidad (puntos de funcin o lneas de cdigo fuente)
Ratio de errores generados por prioridad y tipo
Prueba del Sistema
Ingreso:
-9-
Actividades:
Realizar Pruebas Funcionales
Realizar Pruebas de Interfaz
Realizar Pruebas de Regresin
Revisar Pruebas de Legibilidad
Salida:
Sistema Probado
Reportes de Prueba
Mtricas:
Volumen/Funcionalidad (puntos de funcin o lneas de cdigo fuente)
Ratio de errores generados por prioridad y tipo
Prueba de Aceptacin
Ingreso:
Sistema completamente integrado
Reporte de revisin de prueba de Legibilidad
Prueba de Aceptacin:
o Planes
o Casos
o Procedimientos
Actividades:
Realizar Pruebas de Aceptacin
Realizar Pruebas de Interoperabilidad
Salida:
Nueva lnea base del sistema
Reporte de Prueba de Aceptacin
Reporte de Auditora de Configuracin Fsica
Mtricas:
Ratio de errores generados por prioridad y tipo
o Generados
o Corregidos
Entrega
Ingreso:
Sistema Probado y Aceptado
Actividades:
- 10 -
Los nuevos requerimientos al sistema en uso pueden implicar cambios a distinto nivel de
implementacin, como pueden ser:
De nueva funcionalidad
A nivel arquitectnico.
A nivel Reingeniera de software
Nuevas funcionalidad:
Estn encuadradas en lo expuesto anteriormente, es decir, se recibe el requerimiento y se evala
la factibilidad tcnica teniendo en cuenta el impacto que provoca en el sistema actual, si es factible
de realizar se pone en marcha el proceso de mantenimiento diseado.
Evolucin arquitectnica:
Una de las caractersticas principales para evaluar el nuevo requerimiento es el tipo de
arquitectura que se requiere y la que se posee en el sistema actual.
Existe la necesidad de convertir sistemas legados desde arquitecturas centralizadas a arquitectura
cliente- servidor.
Adems las organizaciones pueden contar con sistemas heredados por lo que se debe decidir
cules sern las medidas a tomar para obtener los mejores beneficios a su inversin.
Existen cuatro opciones estratgicas:
- 11 -
1- Desechar completamente el sistema: es vlido para sistemas muy viejos con tecnologa
que no se utiliza ms y para aquellos que no contemplan los procesos de negocio, con lo
cual el gasto es mayor si se trata de actualizar.
2- Dejar el sistema sin cambios y continuar con un mantenimiento regular: es viable cuando el
sistema es necesario, el nmero de requerimiento es pequeo y el sistema es estable.
3- Hacer Reingeniera del sistema para mejorar su mantenibilidad: cuando el sistema no
soporta ms cambios y no soporta nuevos componentes.
4- Reemplazar todo o parte del sistema con un nuevo sistema: es posible cuando se cambia
de tecnologa y el sistema actual puede seguir cubriendo las necesidades del cliente. El
cambio se hace en forma paulatina.
Factores que contribuyen al cambio
Costos de Hardware: los servidores son ms baratos que los mainframes.
Expectativas de Interfaz de Usuario: los usuarios esperan interfaces grficas.
Acceso distribuido a sistemas: Los usuarios desean acceder a los sistemas desde lugares
diferentes, distribuidos geogrficamente.
Factores
Importancia en los negocios
Descripcin
Distribuir un sistema heredado depende de su importancia para
los negocios y del tiempo que ser importante y til. Si la
distribucin proporciona soporte ms eficiente a los procesos
de negocio, entonces puede ser una estrategia de evolucin
costeable.
Edad del sistema
Mientras ms antiguo sea el sistema es ms difcil de modificar
su arquitectura debido a que los cambios previos degradaron la
estructura del sistema.
Estructura del Sistema
Mientras ms modular sea el sistema, ms fcil ser cambiar su
estructura. Si la lgica de negocio, la interfaz y la administracin
de datos estn fuertemente entrelazadas, ser difcil separar las
funciones para la migracin.
Polticas de Adquisicin de La distribucin de la aplicacin puede ser necesaria si existe
Hardware
una poltica de la compaa para reemplazar computadoras
mainframes ms costosas por servidores ms baratos.
Estructuras de sistemas heredados:
Idealmente, para la distribucin, debera existir una clara separacin entre la interfaz de usuario,
los servicios del sistema (lgica) y la administracin de los datos. En la prctica, usualmente estn
mezclados en los sistemas legados ms viejos.
Por lo general los sistemas viejos no cuentan con un diseo de clases o componentes, no estn
orientados a objetos ni a servicios, son monousuarios, no contemplan su estructura distribuida con
arquitectura cliente servidor, la lgica de negocio y las sentencias de base de datos estn
embebidas en las distintas interfaces de usuario, por lo que requiere de un esfuerzo importante
poder realizar una modificacin cuando no se cuenta con documentacin ni con el conocimiento
de quienes lo codificaron en su momento.
En este momento de la materia es importante tener claro todos los contenidos de diseo vistos en
los mdulos anteriores de esta materia, es conveniente que realice un repaso de los temas para
entender con profundidad los trminos y significados tratados.
- 12 -
Para la evaluacin de los sistemas heredados se deben ver desde dos perspectivas, una de
negocio y otra tcnica (Warren, 1998). Desde el punto de vista del negocio, determinar si el
negocio realmente necesita el sistema, desde el punto de vista tcnico se evala la calidad de la
aplicacin.
Se identifican cuatro clases de sistemas:
1- Baja calidad y bajo valor de negocio. Alto costo de mantenimiento y baja tasa de beneficio
para el negocio.
2- Baja calidad y alto valor de negocio. Alto costo de mantenimiento, requieren ser
reemplazados por uno nuevo o aplicarles reingeniera.
3- Alta calidad y bajo valor de negocio. Bajo costo de mantenimiento, no conviene
reemplazarlos mientras los cambios no sean caros.
4- Alta calidad y alto valor de negocio. El costo de cambio no es elevado debido a su calidad
y la utilidad para el negocio marcan que el sistema debe continuar.
Existen factores a tener en cuenta para determinar el valor para el negocio y el valor tcnico, pero
fundamentalmente depende de cada empresa.
Reingeniera de software
Para realizar cambios en los sistemas se debe comprender exprograma que tiene que cambiarse
para poder implementar dichos cambios. Cuando los sistemas son heredados y datan de bastante
tiempo son difciles de comprender y de cambiar, por lo general se han optimizado en funcin de
la optimizacin del uso de la memoria y su rendimiento a expensas de la comprensibilidad, la
estructura de la base de datos y los programas pueden ser poco confiables por una serie de
cambios en el tiempo.
El concepto de Re-ingeniera implica lo siguiente:
Re-estructurar o re-escribir parte o todo un sistema heredado sin cambiar su funcionalidad.
Aplicable cuando algunos pero no todos los subsistemas de un sistema grande requieren
mantenimiento frecuente.
La Re-ingeniera implica agregar esfuerzo para hacer el sistema ms fcil de mantener. El
sistema puede ser re-estructurado y redocumentado.
Cundo se debe hacer Reingeniera del producto?
Cuando los cambios en el sistema estn afectando a parte del sistema, entonces hacer reingeniera de esa parte.
Cuando el hardware o software de soporte se vuelve obsoleto
Cuando hay disponibilidad de herramientas para soportar reestructuracin
Hacer Reingeniera tiene dos ventajas que son clave sobre las aproximaciones de la evolucin del
sistema:
1- Riesgo reducido, trabajar sobre software crtico tiene un alto riesgo de cometer errores en
la especificacin o puede haber problemas en el desarrollo retrasando el tiempo de
inclusin de nuevos cambios y proporcionando costos adicionales al negocio.
2- Costo reducido, hacer reingeniera implica menor costo que el mantenimiento del existente.
Realizar reingeniera significa realizar el proceso al revs de la ingeniera de software, o sea, se
parte del sistema existente, se comprende y transforma obteniendo el nuevo sistema.
- 13 -
- 14 -
Nuevos Requerimientos
Cambio Adaptativo
Cambio Perfectivo
Defectos
Cambio Correctivo
Cambio Preventivo
Adaptativo
18%
Preventivo 5%
Correctivo
17%
Perfectivo
60%
4.2.1 Perfectivo
Este mantenimiento no esta nicamente enfocado a mejorar tcnicamente una solucin, sino que
tambin incluye un proceso continuo de optimizacin a nivel funcional y de procesos. Este
mantenimiento hace foco en:
Por lo tanto, el principal objetivo del mantenimiento perfectivo es llevar a cabo las tareas y
procesos necesarios para identificar aquellos puntos susceptibles de mejora, aportando las
- 15 -
soluciones ptimas y haciendo efectivos esos cambios en las aplicaciones. Mejorar la calidad del
software para hacerlo ms fcilmente mantenible y reducir el coste e impacto de los cambios de
los procesos de mantenimiento.
Entre otros, los procesos necesarios que se ponen en marcha para la consecucin de estos
objetivos son:
4.2.2 Adaptativo
Cuando el software ya est en uso, puede ocurrir que se produzca algn cambio en el software o
el hardware del entorno en el que se ejecuta, este tipo de mantenimiento responde a esta
situacin, ya que requiere adaptarse a la nueva situacin planteada.
Estos cambios pueden deberse a:
Cambio en el sistema operativo.
Cambio del tipo de arquitectura en la que se ejecuta (red local a Internet/Intranet).
Entorno de desarrollo del software (nuevos elementos y herramientas como ODBC- Open
Database Connectivity, conectividad abierta a una Base de Datos).
Cualquiera sea el motivo del cambio, estos pueden ir desde un pequeo retoque a nivel de
mdulo hasta la casi reescritura de todo el cdigo.
Se pueden realizar cambios en el entorno software a nivel de datos, como por ejemplo una
migracin de un sistema de ficheros a un sistema basado en bases de datos relacionales o de
procesos tanto de negocio como de dominio de la aplicacin, como por ejemplo, pasar de una
tecnologa a otra, por ejemplo el paso a una plataforma de desarrollo con componentes
distribuidos.
- 16 -
Dentro del tipo adaptativo se distingue el Mantenimiento Evolutivo de Infraestructura. En este caso
se trata de asegurar la evolucin de la infraestructura software que da soporte a las aplicaciones,
aportando ideas de mejoras en los distintos entornos. Este mantenimiento se especializa en
aportar soluciones para adaptar los distintos sistemas a cambios en el entorno operativo as como
a nuevas plataformas o versiones de plataformas existentes.
El objetivo que se pretende alcanzar con este servicio es el de mantener actualizada la
infraestructura software de forma que sta vaya incorporando los ltimos estndares y mejoras
que aparezcan en el mercado.
Para lograr este objetivo se establecen los siguientes procesos:
- 17 -
Ejecucin peridica de pruebas de los distintos sistemas con el fin de analizar sus
resultados.
Anlisis peridicos de los resultados de las anteriores pruebas y monitorizaciones con el fin
de encontrar factores de riesgo en las tres capas analizadas.
Elaboracin de planes de actuacin y/o contingencia que ayuden a mitigar dichos factores.
Distribucin continua del conocimiento de los distintos sistemas entre todos los miembros
de los distintos equipos de trabajo, aunque no estn asignados a un sistema concreto, de
forma que en cualquier momento los integrantes de los equipos puedan ser trasladados a
otra rea.
Correctivo
Dentro del servicio integral de Soporte al Ciclo de Vida del Software se encuentra el servicio de
Mantenimiento Correctivo, mediante el cual se ofrecen soluciones a las incidencias surgidas en los
distintos sistemas.
Estas incidencias sern analizadas y solventadas atendiendo principalmente a los aspectos que
implica:
El principal objetivo del Mantenimiento Correctivo es subsanar los fallos detectados en el sistema
y asegurar que stos no han producido incoherencias en la integridad en los datos. Estos fallos en
el sistema provocan una falta de conformidad en el cliente, lo que las normas de calidad lo
llaman No conformidad, cuando esto sucede hay dos tipos de acciones a realizar en el tiempo:
1- Accin de correccin, es la accin inmediata para solucionar en primera instancia lo
sucedido, sin analizar la causa que lo provoc, por ejemplo, si se produce un incendio la
accin de correccin es echarle agua ara apagarlo.
2- Accin correctiva, es la accin que se toma luego de haber analizado el fallo y encontrado
la causa, o sea que ataca la causa minimizando la posibilidad que pueda volver a ocurrir.
En el ejemplo del incendio, ser ver las causas que lo provocaron y buscar las acciones
correctivas que solucionen el problema, como llamar al electricista, cambiar los cables,
entre otras.
Para ofrecer el servicio de mantenimiento correctivo o de soporte al cliente se establecen, entre
otros, los siguientes mecanismos y procesos:
Sistema de gestin de las incidencias, para poder controlar en todo momento el estado,
personas implicadas en la resolucin, medidas tomadas para analizarlo y corregirlo, etc.
Verificacin y, en caso necesario, correccin o restauracin de los datos que, por fallos de
conexin, uso incorrecto de la aplicacin o por los efectos laterales de un defecto, se
hayan podido almacenar incorrectamente en la base de datos.
- 18 -
Se debe tratar de minimizar los fallos en los sistemas con lo cual es importante que se cumplan
con el proceso de desarrollo de software durante la construccin del mismo, sobre todo con los
procesos de V&V y las pruebas de testing en cada etapa posible, tratando de detectar las fallas
antes de que lo haga el cliente.
Se puede representar la relacin entre los mantenimientos de la siguiente forma:
Afecta indirectamente al
Sistema Software
En el proceso de mantenimiento evidentemente se pueden presentar los cuatro tipos, cada uno se
presenta a su manera pero todos tienen relacin con el software y su construccin, cada iteracin
lleva consigo una nueva funcionalidad, una mejora, una correccin o una adaptacin.
- 19 -
REQUISITO
Ingeniera
directa
Ingeniera
directa
Ingeniera
inversa
Ingeniera
inversa
Recuperacin
diseo
Recuperacin
diseo
Reingeniera
Reestructuracin
IMPLEMENTACIN
Reingeniera
Reestructuracin
Reestructuracin
Redocumentacin
Materia: Construccin de Software
Profesora: Adriana Prez
- 20 -
- 21 -
La Ingeniera inversa suele ser empleada por empresas, para analizar si el producto de su
competencia infringe patentes de sus propios productos.
Muchas veces, la Ingeniera inversa es utilizada en el rea militar para investigar (y copiar)
las tecnologas de otras naciones, sin obtener planos ni detalles de su construccin o
desarrollo.
En el software y en el hardware, la Ingeniera inversa, muchas veces es empleada para
desarrollar productos que sean compatibles con otros productos, sin conocer detalles de
desarrollo de stos ltimos. En otras palabras, quien desarrolla los nuevos productos, no
puede acceder a los detalles de fabricacin de los productos de los que intenta ser
compatibles.
La Ingeniera inversa tambin es empleada para comprobar la seguridad de un producto,
generar keygens (key generator, generador de llave, clave, serial, nmero de llave) de
aplicaciones, reparacin de productos, entre otros.
- 22 -
Ingeniera inversa de datos: Se aplica sobre algn cdigo de bases datos (aplicacin,
cdigo SQL, etc.) para obtener los modelos relacionales o sobre el modelo relacional para
obtener el diagrama entidad-relacin
Ingeniera inversa de lgica o de proceso: Cuando la Ingeniera inversa se aplica sobre
cdigo de un programa para averiguar su lgica o sobre cualquier documento de diseo
para obtener documentos de anlisis o de requisitos.
Ingeniera inversa de interfaces de usuario: Se aplica con objeto de mantener la lgica
interna del programa para obtener los modelos y especificaciones que sirvieron de base
para la construccin de la misma, con objeto de tomarlas como punto de partida en
procesos de Ingeniera directa que permitan modificar dicha interfaz.
- 23 -
- 24 -
Diagramas de
estructuras de
programas
Almacn del
sistema de
informacin
Generacin de
documentacin
Diagramas de
estructuras de
datos
Anotacin
manual
Matrices de
rastreabilidad
La Ingeniera reversa a menudo precede a la re-ingeniera aunque a veces vale la pena por s
sola.
Puede hacerse Ingeniera reversa del diseo y la especificacin de un sistema como
entrada de un proceso de reemplazo de un sistema.
Puede hacerse Ingeniera reversa del diseo y la especificacin de un sistema como
soporte de un programa de mantenimiento.
- 25 -
Reestructuracin de software
El mantenimiento del software tiende a corromper la estructura de un programa. Lo vuelve cada
vez ms difcil de entender. Cuando esto sucede el programa puede ser reestructurado
automticamente para remover bifurcaciones incondicionales y las condiciones pueden
simplificarse para hacerlas ms comprensibles
La reestructuracin del software modifica el cdigo fuente y/o los datos en un intento de adecuarlo
a futuros cambios. Tiende a centrarse en los detalles de diseo de mdulos individuales y en
estructuras de datos locales definidas dentro de los mdulos.
La reestructuracin del cdigo trae aparejado beneficios y problemas que debe conocer para
actuar debidamente.
Los beneficios de de la reestructuracin son:
Prdida de comentarios.
Prdida de documentacin.
Demandas computacionales pesadas.
La reestructuracin no ayuda con la modularizacin pobre, donde componentes
relacionados estn dispersos a travs del cdigo.
La incomprensibilidad de los programas conducidos por datos no puede mejorarse con la
reestructuracin
- 26 -
Condicin Compleja
if not (A > B and (C < D or not ( E > F) ) )...
Condicin Simplificada
if (A <= B and (C>= D or E > F)...
Reestructuracin de datos
El anlisis del cdigo fuente es la primera actividad, en primer lugar se evaluarn todas las
sentencias del lenguaje de programacin con definiciones de datos, descripciones de archivos, de
Entrada / Salida y descripciones de interfaz. Esta actividad a veces se denomina anlisis de datos.
Una vez finalizado el anlisis de datos, comienza el rediseo de datos. Se emplea un paso de
estandarizacin de rediseo de datos que clarifique las definiciones de datos para lograr una
consistencia entre nombres de objetos de datos, o entre formatos de registros fsicos o formato de
archivos existentes. Otra forma de rediseo, denominada racionalizacin de nombres de datos,
garantiza que todas las convenciones de denominacin de datos se ajusten a los estndares
locales y/o internacionales y que se eliminen las irregularidades a medida que los datos fluyen por
el sistema.
Cuando la reestructuracin sobrepasa la estandarizacin y la racionalizacin, se efectan
modificaciones fsicas en las estructuras de datos ya existentes con objeto de hacer que el diseo
de datos sea ms efectivo. Esto puede significar una conversin de un formato de archivo a otro,
o, en algunos casos, una conversin de un tipo de base de datos a otra.
- 27 -
Muchos sistemas heredados usan tablas compartidas y datos globales para ahorrar espacio en
memoria. Esto trae problemas debido a que los cambios tienen un impacto muy grande en el
sistema.
Los datos globales pueden ser convertidos a objetos o ADT (Abstract data type, tipos de
datos abstractos)
Analizar reas de datos comunes para identificar abstracciones lgicas.
Crear un objeto o ADT para esas abstracciones
Use un browser para encontrar todas las referencias a los datos y reemplcelas con la
referencia a la abstraccin del dato.
Modularizacin de Programas
Dentro de la reestructuracin de un sistema, el proceso de reorganizacin de los programas de
manera tal que las partes de programas relacionados sean puestos juntos en un mismo mdulo es
la actividad principal para la modularizacin.
Usualmente, es ejecutado un proceso manual por un programa de inspeccin y reorganizacin
para lograr la modularizacin, otras veces es manual de acuerdo al conocimiento de los
programadores o diseadores del sistema.
Tipos de Mdulos
Los mdulos se pueden clasificar teniendo en cuenta caractersticas que posean, en:
Abstracciones de Datos
o Tipos de datos abstractos donde las estructuras de datos y operaciones asociadas
son agrupados.
Mdulos de Hardware
o Todas las funciones requeridas para relacionarse con una unidad de hardware.
Mdulos Funcionales
o Mdulos que contienen funciones para ejecutar tareas muy relacionadas.
Mdulos de Soporte de Proceso
o Mdulos cuyas funciones dan soporte a procesos de negocio o fragmentos de
proceso.
Proceso de Reestructuracin
Programa
reestructurado
Programa a ser
reestructurado
Analizador y
constructor
grfico
Generador de
programa
Reestructuracin
Grfica
- 28 -
Reingeniera de software
En la Unidad 4 de la materia vimos el concepto de Reingeniera de software, por lo cual ahora slo
profundizaremos en algunos conceptos.
Recordemos que la Reingeniera de software significa reescribir y/o reestructurar el sistema, por lo
que es esfuerzo es mayor cuanto ms grande es el sistema.
Idealmente, las aplicaciones se deberan reconstruir utilizando un motor de Reingeniera
automatizado, en el cual se inserte el programa viejo, que lo analice, reestructure y despus
regenere la forma de exhibir los mejores aspectos de la calidad del software.
Los fabricantes de CASE han presentado herramientas que proporcionan un subconjunto limitado
de estas capacidades y que se enfrentan con dominios de aplicaciones especficos, siendo estas
herramientas de Reingeniera cada vez ms sofisticadas.
La Ingeniera directa no slo recupera la informacin de diseo a partir del software existente,
tambin utiliza esta informacin para alterar o reconstruir el sistema existente con la finalidad de
mejorar su calidad global. En la mayora de los casos el software sometido a reingeniera vuelve a
implementar la funcin del sistema existente y tambin aade nuevas funciones o mejoras.
Entre los beneficios de aplicar reingeniera a un producto existente se puede destacar:
Programa
original
Documentacin
del Programa
Programa
modularizado
Datos
originales
Ingeniera
reversa
Traduccin
de cdigo
fuente
Modularizacin
del programa
Datos
reingeniarizados
Mejora de la
estructura
del programa
Programa
estructurado
Datos
reingeniarizados
- 29 -
5.1. Mtricas
En el ciclo de vida del sistema es necesario realizar revisiones de los procesos asegurando la
mejora continua, estas revisiones son costosas, consumen tiempo y retrasan la fecha de entrega
del software. Para mejorar es necesario medir, lo cual consume tiempo, lo ideal es que esta tarea
se realice de forma automtica por sistema, es necesario para ello que se cuente con un sistema
de seguimiento de las actividades de los procesos.
Estas mtricas permiten comprobar que el software tiene el umbral de calidad requerido,
destacando las partes en las cuales no se a ha alcanzado dicho umbral para ser revisadas.
Medir el software implica obtener un valor numrico desde algn atributo o del proceso del
software, por ejemplo una herramienta para medir la cantidad de fallos que posee un desarrollo de
software en un tiempo determinado, una vez solucionados se vuelve a repetir el proceso para ver
si se descubren nuevos errores en la misma cantidad de tiempo. La informacin obtenida es til
para el proceso de validacin del software.
Las mediciones del software pueden utilizarse para:
1- Hacer predicciones generales del sistema, como por ejemplo la cantidad de fallos.
2- Identificar componentes anmalos, los que se salen de lo normal, por ejemplo los de
complejidad ms alta suponen mayor cantidad de errores posibles de aparecer, con lo cual
se debe centrar la atencin en ellos en el proceso de revisin.
Una mtrica o indicador es entonces, cualquier tipo de medida relacionada con un sistema,
proceso o documentacin de software.
Algunos ejemplos de indicadores del proceso de software son:
Cantidad de fallos del software
Desviacin de la estimacin del tiempo para las actividades del proceso, su frmula es
Tiempo real / (tiempo estimado *100).
Cantidad de ciclos de testing para aun mismo componente desarrollado.
Cantidad de requerimientos que no funcionan correctamente en el cliente con respecto a la
cantidad total de requerimientos entregados, lo que nos indica el porcentaje de No
Conformidades y la calidad del trabajo de Testing.
Las mtricas son de control o de prediccin, ambas influyen en la toma de decisiones de gestin.
Ejemplo de mtricas de ambos tipos es el esfuerzo y tiempo promedio requeridos para reparar los
defectos encontrados.
Relacin entre los atributos del software y la mtrica utilizada
- 30 -
Mantenibilidad
Fiabilidad
Complejidad ciclomtica
Portabilidad
Usabilidad
El proceso de medicin
Los pasos claves en este proceso son:
1- Seleccionar las medidas a realizar, formulando las preguntas que la medicin intenta
responder o los problemas detectados y definir la medicin requerida para resolver cada
pregunta.
2- Seleccionar los componentes a evaluar, no es conveniente estimar todos los componentes
de un sistema de software, hay que elegir un conjunto representativo de componentes y
los crticos.
3- Medir las caractersticas de los componentes, las actividades del proceso como anlisis,
diseo, desarrollo, testing poseen sus propias caractersticas que proporcionan mtricas
particulares, lo cual se puede procesar con una herramienta de recogida de datos.
4- Identificar las mediciones anmalas, cuando se tienen los resultados de las mediciones de
los componentes, se comparan entre s y con los resultados anteriores registradas y
almacenadas, Los valores obtenidos deben estar dentro de un rango establecido, para lo
cual se determina un mnimo, un mximo y un ideal, si los valores estn fuera de las cotas
tenemos retroalimentacin negativa, con lo cual hay que ver qu sucede.
5- Analizar los componentes anmalos, cuando se identifican los componentes con valores
fuera de lo establecido para las mtricas particulares, se examinan estos componentes
para decidir si los valores de las mtricas obtenidas indican que la calidad del componente
est en peligro.
Los datos obtenidos de las mediciones realizadas deben registrarse y conservarse en registros
histricos que permitan realizar anlisis, estadstica y predicciones. Estos registros son un
patrimonio organizacional, ya que ayuda a la toma de decisiones. Cuando se tiene una base de
datos lo suficientemente grande se pueden realizar comparaciones entre proyectos, refinando las
mtricas si es necesario.
Mtricas del producto
- 31 -
Las mtricas del producto se refieren a las caractersticas propias del software, pero lo que
normalmente se mide no ayuda de determinar su calidad, como la comprensin y la
mantenibilidad.
Esta relacin entre las mediciones y los atributos del software dependen del proceso, la tecnologa
y el tipo de sistema a desarrollar, por ejemplo un proceso de nueva funcionalidad no es igual a un
proceso para desarrollo de un proyecto nuevo, ya que la nueva funcionalidad es agregar algo
nuevo a algo existente y tiene un estudio de impacto y de factibilidad, por lo que tendr sus
propias mtricas en estas etapas.
Si bien todos los registros de mediciones son importantes y deben almacenarse en base de datos
permitiendo contar con histricos, no todos lo que se mide es vlido, hay que saber elegir el
indicador necesario, para ello hay que tener en cuenta lo que el valor obtenido significa, por
ejemplo cantidad de veces que se rechaz el cdigo por fallos, indica que el producto software no
es de calidad y que los programadores no estn haciendo bien su trabajo.
Las mtricas del producto se dividen en dos clases:
1- Las mtricas dinmicas, valores recogidos de las mediciones realizadas en un programa
en ejecucin.
2- Las mtricas estticas, valores recogidos de las mediciones realizadas en las
representaciones del sistema como el diseo, el programa o la documentacin.
Las mtricas estticas ayudan a valorar la eficiencia y la fiabilidad de un programa, la complejidad,
la comprensin y la mantenibilidad de un sistema de software.
Las mtricas dinmicas se relacionan con los atributos de calidad de software, como por ejemplo,
el tiempo que demora la ejecucin de una funcionalidad, performance, tiempo de respuesta,
eficiencia; otro indicador est dado por la cantidad de cadas del sistema que se han producido lo
cual se relaciona con la fiabilidad del sistema.
Una mtrica muy usada en los aos anteriores es la longitud del cdigo, es difcil inferir si es
correcto o no un cdigo que tenga X cantidad de lneas de cdigo, ya que depende mucho de la
herramienta de programacin, del paradigma de programacin y del lenguaje, por lo que hoy slo
se pide que el componente tenga una funcionalidad especfica que permita ser reutilizado con
reglas de buena programacin y patrones que garanticen la calidad del componente.
Anlisis de las mediciones
Tener los valores cuantitativos de las mediciones del software y de los proyectos de software
requiere comprender su significado, ya que es fcil malinterpretar los datos y realizar inferencias
incorrectas. Para que esto no suceda se deben analizar cuidadosamente dichos datos para
comprender realmente lo que significan.
Es comn utilizar como indicadores la cantidad de ocurrencias de algo especfico, por ejemplo la
cantidad de requerimiento de cambios que se reciben. Dicha mtrica no significa nada por s sola,
hay que ubicarla en un contexto que nos indique por qu se produce la peticin por parte del
cliente, es posible que sea porque el sistema no responde como lo esperaban y no solamente
porque se establecen cantidad de cambios en el tiempo.
El anlisis requiere encontrar las causas y ver a qu o a quien ayuda la mtrica.
- 32 -
- 33 -
La coleccin de mtricas resulta vital para poder realizar estimaciones y establecer expectativas
realistas con base histrica.
Mtricas de mantenibilidad
Condiciones de
mantenibilidad
Compatibilidad
Integridad
Simplicidad
Usabilidad
Extensibilidad
Estabilidad
Familiaridad
Indicador de
mantenibilidad en el
desarrollo
Se emplean mtodos
y herramientas de
desarrollo vigentes
Indicador de
mantenibilidad en la
administracin
Se utiliza tecnologa
estndar para la
plataforma
El software adhiere a
estndares de calidad
y contiene pocos
defectos
El software es
estructurado y
modularizado
Los reportes de
problemas operativos
son infrecuentes
El procesamiento
requiere minima
intervencin del
administrador
Los pedidos de
asistencia de los
usuarios para la
operacin del sistema
son mnimos
La plataforma soporta
ampliacin de la
capacidad de
procesamiento
Las intervenciones del
administrador no
provocan cadas del
sistema
Los administradores
tienen larga
experiencia con el
sistema
Indicador de
mantenibilidad en el
uso
Se utilizan interfaces
de usuario
ampliamente
aceptadas
Los datos ingresados
por los usuarios son
de alta calidad
Las habilidades y
procedimientos para
uso rutinario son
sencillos de aprender
Los usuarios emplean
pocos "workarounds"
para cumplir sus
tareas
La funcionalidad del
sistema puede
aprovecharse para
nuevos usos
Los picos de uso no
generan fallas en el
sistema
Los usuarios tienen
entrenamiento
especfico y
experiencia con el
sistema
Mtricas de Complejidad
La prediccin de la mantenibilidad puede ser evaluada por la complejidad de los componentes del
sistema. Estudios realizados han demostrado que el esfuerzo de mantenimiento es caro en
relacin a un nmero pequeo de componentes.
La complejidad depende varios factores:
Complejidad de Control: puede medirse examinndose las sentencias condicionales en el
programa.
- 34 -
Despus de que el sistema se haya puesto en funcionamiento, se pueden usar los valores para
ayudar a predecir la mantenibilidad.
Veamos algunas de estas mtricas propuestas:
1- El nmero de peticiones de mantenimiento correctivo, si el nmero de informes de fallos de
ejecucin se ha incrementado, puede estar indicando que se han producido ms errores
en el programa de los que se ha logrado corregir durante el proceso de mantenimiento, lo
cual indica que el nivel de mantenibilidad est decreciendo.
2- El tiempo medio requerido para el anlisis de impacto, representa la cantidad de
componentes del programa que se ven afectados por los requerimientos de cambio. Si el
tiempo se incrementa implica que hay ms componentes afectados y que est
disminuyendo la mantenibilidad.
3- Tiempo medio empleado en implantar un cambio, refleja el tiempo que se emplea en
modificar cdigo de los componentes y su documentacin. Si el tiempo aumenta puede
indicar que cada vez es ms complejo realizar un cambio, por lo que la mantenibilidad
disminuye.
4- Cantidad de requerimientos de cambio pendientes, refleja que faltan recursos para resolver
los cambios o la mantenibilidad est disminuyendo.
Conclusin:
Las mtricas son necesarias para plantear la mejora continua de los procesos y los productos;
para lograrlo se deben plantear correctamente dichas mtricas y realizar un correcto anlisis de
las mismas para determinar las decisiones a tomar, ya sean de continuar igual porque los
indicadores estn dentro de los parmetros planteados o realizar cambios en relacin con los
indicadores que establecen desviaciones.
- 35 -
determinar si hay que realizar mejoras al proceso, qu metodologa conviene ms, cuntos
recursos altamente especializados se necesitan para cumplir con xito la entrega en el tiempo y a
un costo menor, sin perder la calidad del producto.
Cuando se realiza la estimacin asociada al esfuerzo y al tiempo con las actividades del proyecto,
es necesario responder a las siguientes preguntas:
1- Cunto esfuerzo se requiere para completar una actividad?
2- Cunto tiempo se necesita para completar una actividad?
3- Cul es el costo total de una actividad?
En la etapa de planificacin se tienen en cuenta el alcance del sistema, la cantidad y criticidad de
los requerimientos y la cantidad de recursos necesarios para llevar a cabo el proyecto. En las
primeras etapas es necesario realizar una estimacin de costos en funcin a estos factores. Esta
estimacin es necesaria para establecer el presupuesto para el proyecto y asignar un valor de
venta al producto.
Existen tres parmetros involucrados en el clculo del costo total de un proyecto de desarrollo de
software.
1- Costos de hardware y software, incluyendo el mantenimiento de los mismos.
2- Costos de viajes y capacitacin.
3- Costos de esfuerzo (costo de hora hombre).
Los costos de esfuerzo son los ms elevados del proyecto, incluyen los salarios de los
profesionales, pero hay otros costos asociados al de esfuerzo y son los que se tienen en cuenta
para que el proceso se lleve a cabo, como son las inversiones en comunicacin, redes, gastos de
servicios elctricos, de telefona, edilicios, entre otros, lo que hacen el costo total.
Durante la ejecucin del proceso se deben actualizar regularmente sus estimaciones de tiempo y
costos. Esta revisin ayuda a la planificacin del proyecto y el uso efectivo de los recursos. Por
ejemplo, si los gastos actuales son mayores que los estimados se debe tomar una decisin
temprana, antes de que el proyecto de prdidas o se tenga que abortar. Lo mismo sucede cuando
se verifica que el tiempo real es mayor al tiempo estimado, con lo cual es posible que sea
necesario incorporar ms recursos lo que implica mayores costos.
Al asignarle un precio al software se debe tener en cuenta consideraciones organizacionales,
econmicas, polticas y de negocio. Esta tarea no es sencilla y es muy comn que las
estimaciones del costo total estn por debajo de lo real.
Cmo se estima correctamente?
No existen tcnicas especficas para estimar el esfuerzo de forma precisa, ya que hay muchos
factores que intervienen, por lo que las empresas se basan en su experiencia, para lo cual es
necesario tener los registros de las mtricas y de los resultados de los cambios realizados en
funcin del anlisis. Estos registros histricos ayudarn a comparar los proyectos y ajustar las
estimaciones de acuerdo a las desviaciones sufridas y a los aciertos realizados.
No obstante existen propuestas de tcnicas de estimacin de costos, entre las ms importantes
podemos citar las siguientes:
Modelado de algoritmos de costos: se realiza en base a los histricos, se hace una mtrica
y el sistema predice.
- 36 -
Juicio experto: basado en la consulta a varios expertos, cada uno hace su estimacin en
funcin de su experiencia y sus registros.
Estimacin por analoga: se realiza en base a la comparacin con otros proyectos
terminados.
Ley de Parkinson: establece que el trabajo se extiende para llenar el tiempo disponible, por
ejemplo si se tiene que entregar un proyecto en 12 meses y se cuenta con 5 recursos, el
esfuerzo requerido se estima en 60 personas / mes.
Pricing to win: el costo del software se estima en funcin a lo que el cliente est dispuesto
a pagar. El esfuerzo estimado depende del presupuesto del cliente y no de la
funcionalidad.
Cada tcnica de estimacin tiene sus ventajas y desventajas, evaluarlas har que la empresa
tome una decisin sobre cul tcnica utilizar, lo cual no implica que sea la misma para cada
proyecto.
Las tcnicas son aplicables cuando existe un documento de especificacin de requerimientos del
software (ERS). Las empresas que han certificado alguna norma de calidad cuentan con dicho
documento, sin embargo en muchos casos, los costos se deben estimar utilizando requerimientos
incompletos, por lo que las etapas de anlisis y diseo son costosas ya que deben lograr relevar
la mayor cantidad de requerimientos para negociar o renegociar el valor del software.
Costos del mantenimiento
La etapa de mantenimiento es la mayor en tiempo, esfuerzo y costos, por lo que merece su
atencin.
Entre las caractersticas ms importante a tener en cuenta se encuentran las siguientes:
Independencia Modular
o Debera ser posible cambiar un mdulo sin afectar a otros.
Lenguaje de Programacin
o Los lenguajes de programacin de alto nivel son ms fciles de mantener.
Estilo de Programacin
o Los programas bien estructurados son ms fciles de mantener.
Validacin de Programa y Testing
o Los programas bien validados tienden a requerir menos cambios a causa del
mantenimiento correctivo.
Documentacin
o La buena documentacin hace los programas ms fciles de comprender.
Gestin de Configuracin
- 37 -
Conclusin:
Los costos del proyecto son estimados tempranamente; para minimizar las desviaciones es
necesario contar con mtricas y adoptar alguna tcnica que permita que las estimaciones no se
desven demasiado y no sean perjudiciales. Esta tarea implica anlisis de costos y de resultados
de estimaciones anteriores.
Cada etapa del proceso de desarrollo tiene asociado su costo de esfuerzo, su sumatoria dar el
costo total en funcin slo del esfuerzo a ello hay que sumarle los costos directos e indirectos para
lograr el valor final. Es factible realizar este proceso de clculo de costos slo cuando tenemos
independencia para realizarlo, esto significa que no estamos sujetos al presupuesto que cuenta el
cliente.
- 38 -