
Ingenieria de Software XV
Sean Bienvenidos a Blog de la materia
jueves, 21 de mayo de 2009
jueves, 14 de mayo de 2009
Tópicos Avanzados en la Ingeniería de Software

REINGENIERÍA DE SOFTWARE
Reingeniería de Software es una forma de modernización para mejorar las capacidades y/o mantenibilidad de los sistemas de información heredados mediante la aplicación de tecnologías y practicas modernas. La Reingeniería de Software ofrece una disciplina de preparación para migrar un sistema de información heredado hacia un sistema evolucionable. El proceso aplica principios de ingeniería para un sistema existente para encontrar nuevos requerimientos.
"El Instituto de Ingeniería de software (SEI) desarrollo una definición de Reingeniería como: Reingeniería es la transformación sistemática de un sistema existente dentro de una nueva forma de realizar mejoramientos de calidad en unas operaciones, capacidad del sistema, funcionabilidad, rendimiento o evolucionabilidad a bajo costo, agendas o riesgos para el cliente." [Till 95]
El propósito de la reingeniería es que los sistemas existentes tomen ventajas de las nuevas tecnologías y habilitar el nuevo esfuerzo de desarrollo para que aproveche las ventajas de reutilizar sistemas existentes. La reingeniería tiene el potencial de mejorar la productividad y calidad del software a través de todo el ciclo de vida.La reingeniería casi siempre implica cambiar la forma de un programa y mejorar su documentación. En este caso, la funcionabilidad del programa no es cambiada; sólo su forma es modificada. En otros casos, la reingeniería va más allá de la forma e incluye rediseñar para cambiar la funcionabilidad del programa para buscar mejores requerimientos de usuario.
Los objetivos de la reingeniería son:
- Proporcionar asistencia automatizada para el mantenimiento.
- Reducir los errores y costos del mantenimiento.
- Incrementar la intercambiabilidad del grupo de mantenimiento.
- Hacer sistemas fáciles de entender, cambiar y probar.
- Habilitar la conversión y migración de sistemas.
- Reforzar el apego a estándares.
- Mejorar la respuesta a peticiones de mantenimiento.
- Mejorar el estado de ánimo del grupo de mantenimiento.
- Proteger y extender la vida del sistema.
- Usar CASE para apoyar sistemas existentes
- Re-usar componentes de sistema existentes.
La reingeniería puede ayudar a entender sistemas existentes y descubrir los componentes de software que son comunes en todo el sistema. Estos componentes comunes pueden ser re-usados en el desarrollo (o redesarrollo) de sistemas y así reducir el tiempo y riesgos del desarrollo de sistemas.
La reingeniería requiere tiempo; implica un coste de dinero enorme y absorbe recursos que de otro modo se podrían emplear en preocupaciones más inmediatas. Por todo esto, la reingeniería no se lleva a cabo en unos pocos meses, ni siquiera en unos pocos años. La reingeniería de sistemas de información es una actividad que absorberá recursos de las tecnologías de la información durante muchos años.
2.3 LA IMPORTANCIA DE APLICAR REINGENIERÍA DE SOFTWARE
Las Viejas Aplicaciones
Mucha gente al ver las grandes y viejas mansiones queda asombrado de su belleza, pero no se preguntan que tan bien se puede vivir en ellas. Las personas que lo hacen dicen que es una pesadilla mantenerlas. Todas ellas fueron construidas con viejas tecnología estándar. Sus paredes externas no tienen aislamiento. El alambrado eléctrico tiene limitaciones y claramente es inadecuada para las necesidades de energía de hoy y su cableado decadente crea un severo peligro eléctrico.
Los viejos sistemas son muy similares a los grandes y viejos edificios. Ellos tienen los mismos problemas de mantenimiento, un hecho en gran parte irreconocible por parte de la comunidad corporativa. Muchos de esos edificios son demolidos por que no son mantenibles y ya no sirven para las necesidades de sus ocupantes.
Las viejas computadoras tal vez se puedan ver solamente en museos. Pero en muchos casos, software escrito para viejos modelos de computadora están ejecutándose hoy en día. Un caso extremo es el de un software escrito para una IBM 1401 Autocoder. Cuando la compañía remplazó la 1401 con una IBM 360/40, compraron un emulador de la 1401 para poder ejecutar el software. Esa aplicación hoy día corre en una PC – la compañía compro otro emulador.
Los clientes demandan que las nuevas capacidades sean agregadas al código escrito en sus viejos sistemas. Casi siempre, las empresas encuentran que no pueden modificar su código – el programador que lo mantenía murió recientemente o nadie sabe programar en el lenguaje en el que fue escrito. Por lo que la funcionalidad de ese programa quedará así para siempre.
La siguiente lista son las razones por las que es aplicable la reingeniería a los sistemas de información heredados:
- Frecuentes fallas de producción (fiabilidad cuestionable).
- Problemas de rendimiento.
- Tecnología obsoleta.
- Problemas de integración del sistema.
- Código de calida pobre.
- Dificultad (peligroso) al cambio.
- Dificultad para probar.
- Mantenimiento caro.
- Incremento de problemas del sistema.
Estas razones pueden ser solucionadas al aplicar un proceso de mantenimiento de software, pero cuando dicho mantenimiento deja de ser viable, entonces se toma la decisión de aplicar reingeniería.
Nuevas Ideas, Nuevo Software
Aunque la reingeniería se usa principalmente durante el mantenimiento del software, va mas allá de una simple ayuda para el mantenimiento. La reingeniería es el puente desde viejas tecnologías hacía nuevas tecnologías que las organizaciones deben usar en la actualidad para responder al cambio de requerimientos del negocio.
Los viejos programas representan la tecnología del ayer. Ahora sabemos que los años tienen cuatro dígitos y no dos, que los datos pueden ser manejados mejor en bases de datos y que tenemos nuevos diseños de construcción y lenguajes de programación que permiten diseñar programas notablemente mantenibles.
Cuando el costo de mantener viejos edificios es altamente excesivo, se remplazan estos edificios. Nosotros deberíamos hacer lo mismo con los programas. Los programas no se hacen obsoletos al paso del tiempo ya que fueron escritos para hardware y sistemas operativos que ya no existen, muchos están llenos de características y parches no documentados.Sólo cuando hayamos aprendido a que es mejor invertir en nuevo hardware y nuevos edificios podremos reconocer el valor de remplazar los viejos sistemas raquíticos.
2.4 COSTES Y BENEFICIOS DE LA REINGENIERÍA.
Antes de reconstruir un sistema en uso, es altamente recomendable analizar las diversas alternativas disponibles:
- Dejar el producto como está.
- Adquirir uno en el mercado que realice la misma función.
- Reconstruirlo.
Evidentemente, elegiremos la opción que mejor relación coste/beneficio nos ofrezca. Para calcular los costes de un proyecto de reingeniería, Harry Sneed [Snee 95] propone un modelo basado en cuatro etapas:
- Justificación del proyecto de reingeniería.
- Análisis de la cartera de aplicaciones.
- Estimación de costes.
- Análisis de costes / beneficios.
2.4.1 Justificación Del Proyecto De Reingeniería.
Para justificar un proyecto de reingeniería se requiere de un análisis del software existente, de los procesos de mantenimiento actuales y del valor de negocio que tienen las aplicaciones; todo esto con el objeto de hacer una evaluación en posibles aumentos de valores sobre estos tres factores.La mayoría de las organizaciones sólo toman en consideración los procesos de reingeniería cuando el coste de un nuevo desarrollo es demasiado alto. En cualquier caso, y aunque a primera vista parezca la única o la mejor alternativa, es necesario confirmar la necesidad de reconstruir el sistema.
Existen cuatro operaciones que nos pueden dar una idea de los costes del proyecto y del valor del software actual dentro del negocio:
Introducción de un sistema de evaluación de los costes del mantenimiento. Es recomendable que esta tarea la lleve a cabo la organización anticipándose con suficiente anticipación al momento en que se percibe la necesidad de aplicar reingeniería.Análisis de la calidad del software actual, para lo cual pueden utilizarse auditores de código automáticos que proporcionan datos del tamaño, complejidad y métricas de calidad del código fuente. Estos valores son incorporados a una base de datos que es utilizada por otra herramienta para realizar comparaciones y obtener resultados.
Análisis de los costes de mantenimiento: Se proponen tres métricas para medir los procesos de mantenimiento: "Dominio del impacto" o proporción de instrucciones y elementos de datos afectados por una tarea de mantenimiento con respecto al total de instrucciones y elementos de datos del sistema; "Esfuerzo empleado", que es el número de horas dedicadas a tareas de mantenimiento, con lo que se puede obtener una media del número de horas por tarea de mantenimiento; y "Tasa de errores de segundo nivel", que es el número de errores causados por acciones de mantenimiento. Si se observa que estas tres medidas se incrementan, es muy probable que los costes de mantenimiento se incrementen con el tiempo.
para más información ver: http://www.monografias.com/trabajos17/reingenieria-software/reingenieria-software.shtml
Tópicos Avanzados en la Ingeniería de Software

Ingenieria Web
Roger Pressman[PRE98] moderó una mesa redonda virtual con representantes de la ingeniería software tradicional y del desarrollo software basado exclusivamente en Internet. El debate principalmente se centró en discutir si valía la pena aplicar un proceso de ingeniería a las aplicaciones con base en internet, o qué características tenían éstas que justificaran el no utilizarlo. La conclusión general fue que aplicar un proceso de ingeniería nunca es una mala idea pero que éste debería adaptarse alos requerimientos de cambio continuo y rapidez siempre presentes en el proceso de desarrollo Web. De iniciativas como ésta y de otras como la organización de congresos y talleres especializados en el desarrollo para la Web, surge el nacimiento de una nueva disciplina denominada Ingeniería Web.
Qué es la Ingeniería Web?
Murugesan et al. [MUR01],promotores iniciales del establecimiento, dan la siguiente definición:“Web Engineering is the establishment and use of sound scientific, engineering and managementprinciplesanddisciplinedandsystematic approaches to the successfuldevelopment,deploymentandmaintenance of high quality Web-basedsystems and applications.”Y que escuetamente podemos “traducir” como el proceso utilizado para crear, implantar y mantener aplicaciones y sistemas Web de alta calidad. Esta breve definición nos lleva a abordar un aspecto clave de cualquier proyecto como es determinar que tipo de proceso es más adecuado en función de las características del mismo.
El Proceso de Ingeniería Web
Características como inmediatez y evolución y crecimiento continuos, nos llevan a un proceso incremental y evolutivo, que permite que el usuario se involucre activamente, facilitando el desarrollo de productos que se ajustan mucho lo que éste busca y necesita.Según Pressman [PRE00], las actividades que formarían parte del marco de trabajo incluirían las tareas abajo enumeradas. Dichas tareas serían aplicables a cualquier aplicación Web,independientemente del tamaño y complejidad de la misma.Las actividades que forman parte del proceso son:formulación,planificación análisis, modelización,generación de páginas, test y evaluacióndel cliente.
La Formulación identifica objetivos y establece el alcance de la primera entrega. La Planificación generala estimación del coste general delproyecto, la evaluación de riesgos y elcalendario del desarrollo y fechas deentrega.
El Análisis especifica los requerimientos e identifica el contenido.La Modelización se compone de dossecuencias paralelas de tareas. Una consiste en el diseño y producción del contenido que forma parte de la aplicación. La otra, en el diseño de la arquitectura, navegación e interfaz de usuario. Es importante destacar laimportancia del diseño de la interfaz.Independientemente del valor delcontenido y servicios prestados, unabuena interfaz mejora la percepción queel usuario tiene de éstos. En laGeneración de páginas se integra contenido, arquitectura, navegación e interfaz para crear estática o dinámicamente el aspecto más visible delas aplicación, las páginas. El Test busca errores a todos lo niveles: contenido,funcional, navegacional, rendimiento,etc. El hecho de que las aplicacionesresidan en la red, y que interoperen enplataformas muy distintas, hace que elproceso de test sea especialmente difícil. Finalmente, el resultado essometido a la evaluación del cliente.
2.2 Control y Garantía de la Calidad
Una de las tareas colaterales queforman parte del proceso es el Control y Garantía de la Calidad (CGC). Todas las actividades CGC de la ingeniería software tradicional como son:establecimiento y supervisión deestándares, revisiones técnicas formales,análisis, seguimiento y registro deinformes, etc, son igualmente aplicablesa la Ingeniería Web. Sin embargo, en la Web toman especial relevancia para valorar la calidad aspectos como:Usabilidad, Funcionabilidad, Fiabilidad,Seguridad, Eficiencia y Mantenibilidad[OLS01].
2.3 Control de la Configuración
Establecer mecanismos adecuados de control de la configuración para la Ingeniería Web es uno de los mayores desafíos a los que esta nueva disciplina se enfrenta. La Web tiene características únicas que demandan estrategias y herramientas nuevas. Hay cuatro aspectos importantes a tener en cuenta en el desarrollo de tácticas de control de la configuración para la Web [DAR99]:
Contenido:Considerando la dinamicidad con la que el contenido segenera, es tarea compleja organizarracionalmente los objetos que forman laconfiguración y establecer mecanismosde control.
Personal: Cualquiera realizacambios. Hay mucho personal no especializado que no reconoce laimportancia que tiene el control delcambio.
Escalabilidad: Es comúnen contrar aplicaciones que de un día para otro crecen considerablemente. Sin embargo, las técnicas de control no escalan de forma adecuada. Política:¿Quién posee la información? ¿Quién asume la responsabilidad y coste de mantenerla?
2.4 La Gestión del Proceso
En un proceso tan rápido como es el proceso de Ingeniería Web, donde los tiempos de desarrollo y los ciclos de vida de los productos son tan cortos,¿merece la pena el esfuerzo requerido por la gestión? La respuesta es que dada su complejidad es imprescindible. Entre los aspectos que añaden dificultad a la gestión destacamos: - alto porcentaje de contratación a terceros, - el desarrollo incluye una gran variedad de personal técnico y no técnico trabajando en paralelo, - el equipo de desarrollo debe dominar aspectos tan variopintos como,software basado en componentes, redes,diseño de arquitectura y navegación,diseño gráfico y de interfaces, lenguajesy estándares en Internet, test deaplicaciones Web, etc, lo que hace que elproceso de búsqueda y contratación depersonal sea arduo.
3. ¿Qué marca la diferencia?A modo de breve resumen enumeramos las siguientes diferencias: -Confluencia de disciplinas: Sistemas de Información, Ingeniería Software y Diseño Gráfico que requiere equiposmultidisciplinares y polivalentes. –Ciclos de vida y tiempo de desarrollo muy cortos - Cambio continuo:Necesidad de soluciones que permitan flexibilidad y adaptación conforme el proyecto cambia. – Requisitos fuertes deSeguridad, Rendimiento y Usabilidad.
4. ¿Por qué es necesaria?La Web evoluciona y crece sin diseño alguno. Prácticas tan pobres de calidad pueden introducir defectos que dejen al efecto 2000 como un juego de niños. Es deber de todos proporcionar cimientos firmes a una tecnología que“mágicamente” nos permite acceder acualquier hora a cualquier punto del planeta para obtener bienes tan valiosos como son los Servicios y la Información.
Suscribirse a:
Entradas (Atom)