Sumario sobre el mantenimiento del Software


Anuncios


El mantenimiento del Software es hoy en da aceptado com parte del SDLC. Se refiere a todas las modificaciones y actualizaciones que se llevan a cabo despus de la entrega del producto software. Hay muchas razones por las que las modificaciones son necesarias, algunas de ellas se mencionan de manera breve a continuacin:

  • Condiciones de mercado - Leyes, las cuales cambian con el paso del tiempo, como los impuestos o limitaciones que se han introducido de recientemente, como es el caso de : Cmo mantener la contabilidad, puede desencadenar en una necesidad de modificacin.

  • Requisitos del cliente - A medida que pasa el tiempo, el consumidor puede pedir nuevas funciones o caractersticas en el software.

  • Modificaciones del servidor - Si algn tipo de hardware y/o plataforma (como es el caso de un sistema operativo) del servidor target cambia, se requerirn cambios en el software para mantener la adaptabilidad.

  • Cambios organizativos - Si se produjera algn cambio a nivel de negocio con el consumidor final, como por ejemplo una reduccin de la fuerza organizacional, adquiriendo otra compaa, un emprendimiento organizacional en un nuevo negocio, puede que se necesite modificar algo del software original.

Tipos de mantenimiento

En el ciclo vital del software, el tipo de mantenimiento puede variar segn la naturaleza del producto. Puede que sea simplemente una tarea rutinaria de mantenimiento porque algn usuario ha encontrado un virus, o puede tratarse propiamente de un gran evento basado en la magnitud del mantenimiento o en su naturaleza. A continuacin presentamos algunos tipos de mantenimiento fundamentados en sus caractersticas:

  • Mantenimiento correctivo - Este tipo incluye las modificaciones y actualizaciones que se han hecho con tal de corregir o resolver problemas descubiertos por el usuario o se han encontrado en informes de error de algn usuario.

  • Mantenimiento adaptable - Este tipo icluye modificaciones y actualizaciones que se han aplicado para mantener el producto software al da y en consonancia con el siempre cambiant mundo de las tecnologas y entornos de negocio.

  • Mantenimiento perfectivo - Esto incluye las modificaciones y acualizaciones que se han realizado con tal de mantener el software usable por un largo periodo de tiempo. Aqu se incluyen nuevas caractersticas, nuevos requisitos para perfeccionar el software y mejorar su fiabilidad y su rendimiento.

  • Mantenimiento preventivo - Incluye las modificaciones y actualizaciones para prevenir problemas de software en un futuro. Pretende ocuparse de problemas, que no son muy significativos por el momento pero que podran ocasionar graves conflictos en un futuro.

Coste de Mantenimiento

Los informes insinan que el coste de mantenimiento es alto. Un estudio realizado para estimar el mantenimiento de software concluy que el coste de mantenimiento representa un 67% del coste total en el ciclo del proceso de software.

Mantenimiento Tabla de costos

El promedio del coste del mantnimiento de software constituye ms del 50% en todas las fases del SDLC. Hay varios factores, que inducen el aumento del coste de mantenimiento, como es el caso de:

Factores reales que afectan al coste de mantenimiento

  • La edad media de un software se sita entre 10 y 15 aos.

  • Los softwares ms viejos, diseados para trabajar en mquinas lentas y con menos memoria y capacidad de almacenaje, no pueden mantenerse en el mercado con al competencia de nuevos y perfeccionados softwares en hardwares modernos.

  • A medida que la tecnologa avanza, se vuelve ms caro mantener software antiguo.

  • La mayora de ingenieros de mantenimiento son principiantes y usan mtodos de error y de prueba para rectificar problemas.

  • A menudo, los cambios que se hacen pueden facilmente daar la estructura original del software, dificultando cambios posteriores.

  • Los cambios se suelen dejar indocumentados, lo que puede ocasionar ms conflictos en el futuro.

Factores del software final que afectan a los costes de mantenimiento

  • Estructura del programa de Software
  • Lenguaje de programacin
  • Dependencia a entornos externos
  • Disponibilidad y fiabilidad de personal

Actividades de mantenimiento

El IEEE proporciona un borrador para las actividades del proceso secuencial de mantenimiento. Se puede usar de forma reiterativa y puede extenderse para que los artculos personalizados puedan incluirse.

Mantenimiento Actividades

Estas actividades van cogidas de la mano con cada una de las siguientes fases:

  • Identificacin & Seguimiento - Incluye las actividades que pertenecen a la identificacin de requisitos de modificacin o mantenimiento. Es generado por el usuario o el mismo sistema puede anunciar a travs de mensajes de error o registros. Aqu, el tipo de mantenimiento tambin se clasifica.

  • Anlisis - La modificacin se analizada por su impacto en el sistema, incluyendo implicaciones de seguridad. Si un probable impacto es severo, se busca una solucin alternativa. Un conjunto de modificaciones requeridas se materializa entonces en requisitos del sistema. El coste del mantenimiento/modificacin se analiza y se concluye con una estimacin.

  • Diseo - Nuevos mdulos, que necesitan ser modificados o reemplazados, se disean en contra de los requisitos que ya se han fijado en en la fase previa. Las pruebas de casos se han creado para la validacin y la verificacin.

  • Implementacin - Los nuevos mdulos son codificados con la ayuda del diseo estructurado creado en la fase de diseo. Cada programador debe hacer pruebas unitarias en paralelo.

  • Evaluacin del sistema - Las pruebas de integracin se hace entre nuevos mdulos creados. Las pruebas de integracin tambin se llevan a cabo entre mdulos nuevos y el sistema. Finalmente el sistema se evalua en su conjunto, siguiendo procedimientos evaluativos reaccionarios.

  • Pruebas de aceptacin - Despus de evaluar el sistema de manera interna, se evala la acceptacin con la ayuda de los consumidores. Si en esta etapa, los consumidores se quejan de algn asunto, son redirigidos o se les notifica que se dirijan a la siguiente repeticin.

  • Entrega - Despus del test de aceptacin, el sistema se implementa en la totalidad de la organizacin con pequeos paquetes de actualizaciones o con la instalacin nueva del sistema. La evaluacin final se da con el consumidor final despus de entregar el software.

    Se provee formacin si se requiere, adems de una copia en papel del manual del usuario.

  • Gestin de mantenimiento - La gestin de la configuracin es una parte esencial del mantenimiento del sistema. Es auxiliado con herramientas de control de versiones, semi-versiones o Gestin de parches.

Refactorizacin de Software

Cuando necesitamos actualizar el software para mantenerlo en el mercado actual, sin afectar a su funcionalidad, estamos ante un caso de refactorizacin de software. Es un proceso en el que el diseo del software se cambia y los programas se escriben de nuevo.

El software heredado no puede adaptarse a las nuevas y ms recientes tecnologas disponibles en el mercado. Como que el hardware se vuelve obsoleto, la actualizacin de software se convierte en un dolor de cabeza. Aunque el software envejezca con el tiempo, sus funcionalidades no hacen los mismo.

Por ejemplo, Unix fue desarrollado en lenguaje ensamblador. Cuando el lenguaje C empez a existir, Unix fue refactorizado en C, porque trabajando en el lenguaje previo era difcil.

A parte de este caso, a veces los programadores notan que en algunas partes del software se necesita ms mantenimiento que en otras, y tambin necesitan refactorizacin.

Proceso de Re-Ingeniera

Proceso de refactorizacin

  • Decidir Lo que va a ser refactorizado, si va a ser una parte del software o su totalidad.

  • Desarrollar La ingeniera inversa, con tal de obtener especificaciones de software ya existentes.

  • Reestructurar el programa Si se requiere. Por ejemplo, cambiar programas orientados a la funcin en programas orientados al objeto.
  • Reestructurar datos tal y como se requiera.

  • Aplicar conceptos de Ingeniera directa o deductiva con tal de que el software pase por un proceso de refactorizacin.

Hay varios conceptos importantes usados en la refactorizacin de Software

Ingeniera inversa

Es un proceso para lograr especificaciones del sistema a travs del anlisis y el entenidimiento del sistema existente. Este proceso puede verse como un modelo inverso de SDLC, esto es, intentamos lograr mayor nivel de abstraccin analizando niveles de abstraccin ms bajos.

En un sistema existente se implementa un diseo previamente, sobre el que no sabemos nada. Los diseadores utilizan entonces ingeniera inversa observando el cdigo e intentan lograr el diseo. Con el diseo en mano, intentan encontrar las especificaciones. Por consiguiente, van al revs des del cdigo hasta los requisitos del sistema.

Ingeniera Inversa

Reestructurar el Programa

Es un proceso de reestructuracin y construcin de software ya existente. Se vuelve a organizar el cdigo de origen, en el mismo lenguaje de programacin o con otro distinto. La reestructuracin puede tener su origen en la reestructuracin del cdigo, de los datos o de ambos.

La reestructuracin no tiene un impacto en la funcionalidad del software, pero aumenta la fiabilidad y la capacidad de su mantenimiento. Los elementos del Programa, que ocasionan errores frecentemente pueden cambiarse o actualizarse con a reestructuracin.

La dependencia del software en plataformas hardware obsoletas se puede eliminar a travs de la reestructuracin.

Ingeniera directa

La ingeniera directa es un proceso para obtener el software deseado a partir de los requisitos que se han obtenido mediante la ingeniera invertida. Asume que haba alguna ingeniera de software ya hecha en el pasado.

La ingeniera directa es igual que en el proceso de ingeniera de software pero con una diferencia Siempre se lleva a cabo despus de la ingeniera inversa.

Ingeniera Adelante

Reutilizacin de componentes

Un componente es parte del cdigo del programa software, el cual ejecuta tareas independientes en el sistema. Puede ser un mdulo pequeo o un subsistema en s mismo.

Ejemplo

Los procedimientos de acceso que se usan en las webs se pueden cosiderar como componentes, el sistema de impresin en software se puede considerar como componente del software.

Los Componentes tienen una alta cohesin de funcionalidad y una tasa baja de acoplamiento, esto es, trabajan de manera independiente y pueden llevar a cabo tareas sin tener que depender de otros mdulos.

En programacin orientada al objeto (OOP), los objetos se disean de forma muy especfica dependiendo de sus preocupaciones, y tienen pocos cambios par ser usados en otro software.

En programacin modular, los mdulos se codifican para llevar a cabo tareas concretas que se pueden usar sobre un gran nmero de otros programas software.

Hay una nueva y completa vertical, que se basa en la reutilizacin de componentes software, y se conoce como programacin orientada a componentes (que tambin es llamada basada en componentes y tiene sus siglas en ingls 'CBSE').

componentes

La reutilizacin se puede hacer en varios niveles

  • Nivel de aplicacin - Cuando una aplicacin entera se usa como subsistemade software nuevo.

  • Nivel de Componente - Cuando el subsistema de una aplicacin es usado.

  • NIvel de mdulos - Donde los mdulos funcionales son reutilizados.

    Los componentes del Software aportan interfaces, que pueden usarse para establecer comunicacin entre los distintos componentes.

Proceso de reutilizacin

Se pueden adoptar dos tipos de mtodo: o manteniendo los requisitos de la misma manera y ajustando los componentes, o manteniendo los componentes igual pero modificando los requisitos.

Proceso de reutilizacin
  • Requisitos del sistema - Los requisitos funcionales y no funcionales del producto software se especifican, y este debe cumplirlos, con la ayuda del sistema existente, una entrada (input) de un usuario, o con ambos.

  • Diseo - Esto es tambin un paso del proceso estndar de SDLC,donde los requisitos se definen en trminos de jerga de software. La arquitectura bsica del sistema en su totalidad y sus subsistemas son creados.

  • Especificar componentes - Mediante el estudio del diseo software, los diseadores dividen la totalidad del sistema en pequeos componentes o subsistemas. Un diseo de software completado se vuelve una gran coleccin de componentes trabajando juntos.

  • Buscar componentes adecuados - El repositorio de componentes software es consultado por los diseadores para buscar el componente que combina, en base a la funcionalidad y a los requisitos del software.

  • Incorporar Componentes - Todos los componentes emparejados y combinados se empaquetan juntos para convertirlos en software completo.