Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Capitulo 10
Capitulo 10
!226"
CAPTULO X
REINGENIERA DE PROGRAMACIN
( 18 )
1. Introduccin
Uno de los problemas que enfrenta el campo de la computacin es el alto costo
que representa el desarrollo del software. El equipo, con todos sus avances en
desempeo, velocidad y capacidad, resulta intil sin una coleccin de
programas para operarlo, que van desde sistemas operativos, compiladores,
paquetes de aplicacin, hasta sistemas expertos y programas hechos a la
medida. Las tcnicas de programacin se estn depurando y se est
promoviendo una mayor disciplina, lo cual se traduce en disminucin de
costos y tiempo de desarrollo, a la vez que se aumenta la calidad del producto.
Sin embargo, los problemas con los productos de programacin no se limitan
a fallas durante la ejecucin, sino que incluyen a aquellos que surgen en el
desarrollo, la administracin y el mantenimiento del creciente volumen de
software existente, aunado a los problemas de tipo social derivados por el
contacto con las personas involucradas. Los problemas asociados con el
desarrollo de software tienen sus races en la planeacin deficiente, agravada
por un control de calidad inadecuado durante las fases del ciclo de vida de
ste. Estas deficiencias subsisten y se manifiestan durante las etapas de
desarrollo y mantenimiento.
Durante aos se esper que los problemas de mantenimiento del software y el
envejecimiento de los sistemas, desaparecieran con la introduccin de nuevas
tecnologas de desarrollo y el reemplazo gradual de las ya existentes. Sin
embargo, la historia y la experiencia nos muestran que sta es una falsa
esperanza.
En 1989 un estudio de 862 departamentos de desarrollo en los Estados
Unidos arroj que 63% del tiempo de los empleados se destinaba al
mantenimiento del software o en actividades relacionadas con ste (MC92). En
un artculo de febrero de 1994, Kristin Marks afirma que las actividades de
soporte, actualizacin y entrenamiento ocupan una proporcin de tres cuartas
partes del ciclo de vida del software (MA94). Un artculo de la revista Software
Development, agosto de 1994, estima que el mantenimiento de un programa
de un milln de lneas puede alcanzar un costo anual de dos millones de
dlares, situacin que ha causado reacciones, tales como la creacin del
nuevo Estndar 1219-1993 de la IEEE (LE94).
18 Reingeniera de Programacin: Una propuesta para la solucin de los problemas de mantenimiento de software. Tesis de Ingeniero en
Computacin.
Autores: Hctor Francisco Bautista Gonzlez, Cuauthemoc Freyre Mercado y Norma Susana Zavala Carrasco. FI-UNAM 1995.
!226"
!227"
Aunque no contamos con algn estudio que nos indique la gravedad del
problema en Mxico, podemos esperar peores proporciones si consideramos
que tardamos ms tiempo en adoptar nuevas tecnologas de desarrollo.
A pesar de la introduccin de nuevas tecnologas de desarrollo a principios de
los noventa, la mayora de los esfuerzos siguen concentrados en el
mantenimiento del software. Confiar en que las estrategias de desarrollo van a
resolver el problema no revertir la tendencia. El desarrollo de tecnologas de
software slo puede tener un impacto limitado en el mantenimiento; hay dos
razones para esto.
La primera es que la causa del mantenimiento del software no est entendida.
La mayor parte del trabajo de mantenimiento es originada por cambios en los
requerimientos del sistema, no por defectos en el software. Los programas
utilizados en la industria sufren modificaciones constantemente, con objeto de
adaptarse a las nuevas tecnologas y a las necesidades del usuario.
Aun el sistema que es totalmente confiable, que cubre totalmente las
necesidades del usuario y que est bien estructurado, requiere de
mantenimiento. A menos que las nuevas tecnologas, como CASE, nos ayuden a
construir sistemas que acepten cambios fcilmente y sin perder calidad, el
mantenimiento del software continuar siendo una actividad consumidora de
tiempo y dinero. La clave para reducir el mantenimiento es hacer ms fciles y
seguros los cambios en los sistemas.
Segundo, es muy improbable que los sistemas existentes sean reemplazados
en corto tiempo por sistemas nuevos, ms fciles de mantener. No solamente
fue muy grande la inversin de dinero para crear estos sistemas, sino que
tambin es muy grande la inversin necesaria para su cambio.
De acuerdo con esto, la accin idnea para reducir los problemas en
mantenimiento de software es adoptar una serie de medidas ms agresivas y
directas, como las siguientes:
Anticipar y enfrentar eficientemente los problemas que surgirn al
realizar cambios en el software.
Instituir buenas prcticas de direccin, control y planeacin para el
mantenimiento.
Aumentar la eficiencia y calidad de las actividades de mantenimiento.
Mejorar la aptitud de los sistemas existentes para recibir mantenimiento.
!227"
Reingeniera de programacin
!228"
!228"
!229"
!229"
Reingeniera de programacin
!230"
!231"
!231"
Reingeniera de programacin
!232"
6. Reingeniera
La reingeniera es la manera de realizar el mantenimiento de una forma
automtica, aplicando herramientas, tcnicas y metodologas para extender la
vida til de un sistema a un bajo costo. La reingeniera de programacin
considera el mejoramiento del proceso de mantenimiento al sugerir una
estrategia a largo plazo, en lugar de ejecutar los cambios como se van
presentando.
La reingeniera es el proceso de examinar un sistema de
software ya existente (programa) y modificarlo con la ayuda
de herramientas automticas para:
!233"
7. Tipos de reingeniera
7.1. Reestructuracin
Es el proceso de cambiar la forma del software (e. g., nombres de datos y
definiciones, y fuentes de cdigos del programa) sin alterar su
funcionalidad. La razn principal de la reestructuracin es hacer que el
programa sea ms fcil de entender.
7.2. Ingeniera inversa
Es el proceso de analizar el sistema para construir una descripcin de
sus componentes y de sus interrelaciones entre s. El resultado es una
descripcin de alto nivel (diagramas de flujo, diagramas entidad relacin,
cdigo fuente, etc.) del programa a partir de sus niveles ms bajos de
informacin (en muchos casos el cdigo fuente). El propsito de la
ingeniera inversa es el de actualizar la documentacin o volver a
documentar el sistema y descubrir su diseo como una ayuda para hacer
el programa ms entendible o para migrarlo a una nueva tecnologa.
7.3. Administracin de configuracin y cambios
Es la actividad de generar y organizar la informacin referente a la
evolucin de los programas que se encuentran en las etapas de desarrollo
o de mantenimiento. Permite administrar las bibiliotecas que almacenan
estos datos y controlar los cambios que se efectan a las diferentes
versiones del producto.
Aunque los conceptos envueltos en la reingeniera (reestructuracin,
herramientas de medicin, CASE, etc.) no son nuevos, la idea de redesarrollar
los sistemas viejos y actualizarlos dentro de una nueva estrategia, utilizando los
mismos conceptos que en el desarrollo s lo es. Los elementos aplicados a la
reingeniera incorporan varias de las mejores ideas del pasado y del presente
de la ingeniera de software, lo que permite que se puedan aplicar a una gran
variedad de empresas, no importando la metodologa, el hardware, ni mucho
menos el lenguaje utilizado en sus sistemas. Sin embargo, s deber existir
una metodologa de desarrollo y un ciclo de vida de software, as como polticas
y procedimientos para aceptar y controlar los cambios realizados. Al contar
con estos requisitos, la labor de reingeniera puede ser implementada
utilizando las mismas tcnicas que se emplean actualmente en el desarrollo de
nuevos sistemas, pero aplicndolos a los sistemas existentes (RA92).
!233"
Reingeniera de programacin
!234"
!235"
Reingeniera de programacin
!236"
DBMS, TP
monitor).
!236"
!237"
Los registros son utilizados para dar informacin sobre las caractersticas y el
comportamiento de los sistemas existentes para hacer una comparacin entre
s, y pueden ser utilizados para sugerir sistemas candidatos para la
reingeniera.
Sin embargo, estos registros por lo general estn escritos a mano,
incompletos, inexactos, y desactualizados. No necesariamente el sistema ms
antiguo, o el ms largo, o el menos estructurado, es el ms frgil. Tal vez slo
algunos mdulos, no todo el sistema, son la causa de grandes problemas de
mantenimiento. Con la ayuda de herramientas de reingeniera y de registros
de mantenimiento se pueden detectar los sistemas frgiles y aquellas
porciones de cdigo que son ms complejas y con posibilidad de tener errores.
12. Analizadores de cdigo y herramientas de medicin
Los herramientas de medicin proporcionan una medida aceptable de la
disposicin del software para recibir mantenimiento. Diferentes herramientas
de medicin miden diferentes caractersticas de calidad de los programas
como son: la capacidad de ser probado, lo entendible que es, y la facilidad que
tiene de modificarse. No se puede controlar lo que no se puede medir.
La mayora de las herramientas de medicin leen el cdigo fuente del
programa para producir:
Medidas de complejidad
Mtricas de tamao
Mtricas de flujo
Reportes analticos
Listados
Clculos diversos
!237"
Reingeniera de programacin
!238"
Modularidad.
Consistencia de estilo.
Sin trucos o cdigo intrincado.
Uso de datos con significados especficos y nombres claros en los
procedimientos.
Estructuracin.
El estructurar un programa tiende a incrementar la claridad, ya que se
establece un patrn en el programa. Sin embargo, Boehm sugiere que
adems de una buena estructura, un programa debe ser conciso,
consistente y completo.
Un programa conciso es aquel en el que no se presenta un exceso de
piezas. En un programa conciso cada instruccin debe ser ejecutada al
menos una vez.
Un programa consistente es aquel que es escrito con un estilo coherente
y sigue una lnea de diseo. La consistencia en el estilo del cdigo
implica que el programa contenga notacin, terminologa y simbologa
consistente, respetando los nombres convencionales corporativos y
estndares.
Un programa completo es aquel en el que se disponen de todos sus
componentes o funciones. Si se carece de alguna parte del cdigo fuente
o de la especificacin del diseo, el programador pierde confianza en su
capacidad para corregirlo.
!238"
!239"
!239"
Reingeniera de programacin
!240"
Porcentaje de estructuracin
Extensin de
la complejidad
ciclomtica
Complejidad
esencial
!241"
operadores nicos
total de operadores
operandos nicos
total de operandos
14.1. Tamao
El tamao N de un programa se calcula como:
N = N1 + N2
Entre mayor sea el valor de la N, ms difcil es de entender y mantener
el programa.
El tamao estimado, N', se calcula con la siguiente frmula:
Tamao estimado N' = (n1 * log2(n1)) + (n2 * log2(n2))
Elshoff encontr que el tamao aproximado, N', se acerca ms al tamao
actual, N en programas bien estructurados. Basado en este
descubrimiento, se utiliza una comparacin de N a N' como una prueba
de estructuracin. Esta medida se conoce como el radio puro y se
calcula de la siguiente manera:
radio puro = N' / N
!241"
Reingeniera de programacin
!242"
14.2. Volumen
Si dos programas tienen el mismo largo N, pero uno posee un mayor
nmero de operadores nicos y de operandos, esto lo hace ms difcil de
entender, entonces este programa tendr mayor volumen. La frmula es:
volumen V = N * log2(n) y n = n1 + n2
14.3. Esfuerzo
El esfuerzo es una medida del trabajo requerido para desarrollar un
programa. La frmula es:
esfuerzo E = V / L
El nivel del lenguaje L indica qu tan poderosas son las instrucciones de
un lenguaje:
L = (2*n2)/(n1 *N2)
A continuacin se indican las ventajas de las medidas cientficas de software
de Halstead:
Son fciles de calcular y de automatizar, y no requieren regresar al
anlisis de las caractersticas del programa como el detalle de la grfica
de flujo del programa.
Son aplicables a cualquier lenguaje de programacin.
Muchos estudios estadsticos de diferentes programas demuestran la
validez como pronstico del esfuerzo de programacin y de encontrar el
nmero de errores en un programa.
Las medidas cientficas de software se encuentran resumidas en la siguiente
tabla:
Longitud
Tamao estimado
Volumen
Esfuerzo
El nivel del lenguaje (nivel
de abstraccin del lenguaje)
N = N1 + N2
N' = (n1 * log2(n1)) + (n2 * log2(n2))
V = N * log2(n) donde n = n1 + n2
E=V/L
L = (2*n2)/(n1*N2)
!242"
!243"
15. Reestructuracin
Tanto la lgica como los datos (nombres de las variables, de los
procedimientos, etc.) del programa pueden ser reestructurados para mejorar
la comprensin.
Reestructurar es el proceso de estandarizar las variables
y los nombres de los procedimientos, as como el
mejorar la estructura lgica y la modularidad del
programa para aumentar la productividad en el
mantenimiento del software.
15.1. Objetivos de la reestructuracin
!243"
Reingeniera de programacin
!244"
Medidas para
estructurada:
cumplir
con
los
objetivos
de
la
programacin
!244"
!245"
modificados
Reingeniera de programacin
!246"
Debajo hay tres variables con nombres diferentes para los nmeros del
empleado y tres definiciones de tipo.
Cul es correcto y cul el que debe utilizar el encargado de mantenimiento?
NUMERO_DE_EMPLEADO
CP_EMP_NO
EMPL_NUM
PIC X(4)
PIC 9999
PIC 9(9)
!246"
!247"
Reingeniera de programacin
!248"
!248"
!249"
!249"
Reingeniera de programacin
!250"
!250"
!251"
!251"
Reingeniera de programacin
!252"
!252"
!253"
Reingeniera de programacin
!254"
16.10.
Beneficios
En principio, el uso de estas herramientas hace ms sistemtica la
labor de mantenimiento. Las herramientas de control de cambios no
slo manejan la logstica del mantenimiento y cambio del software,
sino que tambin refuerzan un proceso completo y definido. Su
principal aportacin es hacer del desarrollo y del mantenimiento del
software actividades ms baratas y menos propensas a errores.
Las funciones del manejo de la configuracin son una parte integral
del entorno de las herramientas CASE. En este entorno, la nocin del
manejo de la configuracin debe incluir no slo el manejo en el nivel
fsico de los componentes del software, sino tambin el manejo del
nivel lgico de los componentes. La administracin de la configuracin
se necesita durante el proceso de desarrollo y el de mantenimiento
para operar cambios a travs del ciclo de vida entero.
Desafortunadamente, aunque estn disponibles herramientas
poderosas de configuracin y de control de cambios, no se han
integrado al medio ambiente de las herramientas CASE. Esta situacin
deber cambiar en la presente dcada, es seguro que las funciones de
configuracin y cambio se van a volver parte de los servicios del
almacn.
!255"
Ingeniera inversa
1. Ingeniera inversa de datos
2. Ingeniera inversa de lgica
Pruebas
1. Generadores de datos para pruebas
2. Analizadores de alcance para pruebas
3. Debuggers
4. Comparadores
Convertidores
1. De lenguaje
Manejadores de configuracin y cambios
1. Manejadores de control de cambio
2. Manejadores de libreras
3. Generadores de cdigo
Herramientas de redocumentacin
1. Referencias cruzadas
2. Generadores de diagramas ( 18 )
18 Reingeniera de Programacin: Una propuesta para la solucin de los problemas de mantenimiento de software. Tesis de Ingeniero en
Computacin.
Autores: Hctor Francisco Bautista Gonzlez, Cuauthemoc Freyre Mercado y Norma Susana Zavala Carrasco. FI-UNAM 1995.
!255"
Reingeniera de programacin
!256"
!256"
!257"
!257"