domingo, 23 de febrero de 2014

Reingeniería de Software

Introducción


El proceso de evolución de los sistemas implica comprender el programa que tiene que cambiarse, y a continuación implementar estos cambios. Sin embargo, muchos sistemas, especialmente los sistemas heredados más antiguos son difíciles de comprender y de cambiar. Los programas pueden haber sido optimizados originalmente para su rendimiento o utilización de la memoria a expensas de su comprensibilidad o, a lo largo del tiempo, la estructura inicial del programa puede haberse corrompido por una serie de cambios.

Reingeniería de Software


Para  simplificar los problemas de cambiar sus sistemas heredados, una compañía puede decidir hacer reingeniería sobre estos sistemas para mejorar su estructura y comprensibilidad. La reingeniería de software se refiere a la reimplementación de los sistemas heredados para hacerlos más mantenibles. La reingeniería puede implicar redocumentar el sistema, organizar y reestructurar el sistema, traducir el sistema a un lenguaje de programación más moderno, y modificar y actualizar su estructura y vales de los datos del sistema. La funcionalidad del software no se cambia y, normalmente, a arquitectura del sistema también sigue siendo la misma. (Sommerville, 2005)

El proceso de reingeniería es muy elaborado y trae problemas como un alto grado de riesgo puesto que se pueden producir errores en la especificación, o puede haber errores en el desarrollo. Además en cuanto a costes este proceso de la ingeniería de software es significativamente el más caro, sin embargo, sigue siendo relativamente menor que el coste de desarrollar un nuevo software.
En la reingeniería de software se pueden distinguir las siguientes seis etapas, que pueden seguir o no una secuencia lineal, pero siempre se desarrollarán cíclicamente: (Pressman, 2002)


  • Análisis de inventarios.
  • Reestructuración de documentos.
  • Ingeniería inversa.
  • Reestructuración del código.
  • Reestructuración de los datos.
  • Ingeniería avanzada.








Análisis de inventarios:

Se analizan los inventarios que poseen las empresas o el usuario sobre las características de la aplicación. En ocasiones son simples hojas de cálculo con descripciones detalladas (tamaño, edad, importancia para el negocio) de las aplicaciones activas. Así se sabrá a que recursos se aplicará la reingeniería.


Reestructuración de documentos:

Normalmente en los sistemas heredados, la documentación es muy débil; por lo que es necesario evaluar que documentación debe actualizarse. En ocasiones se debe volver a documentarse por completo pero lo adecuado es recortar la creación de documentos al mínimo ya que ocupa muchos recursos y tiempo.


Ingeniería inversa:

Durante esta etapa se plantea la posibilidad de recuperar el diseño de la aplicación. Con diversas herramientas y conocimientos se extrae del programa existente información de la arquitectura y de los procesos así como información de los datos.


Reestructuración de código:

Se analiza el código fuente y se indican las violaciones de las estructuras de programación estructurada como lo son los estándares, entonces se reestructura el código.


Reestructuración de los datos:

Se definen los modelos de datos necesarios, se identifican los objetivos y los atributos, y después se revisa la calidad de las estructuras existentes. Cuando son débiles, se debe aplicar una reingeniería a los datos.


Ingeniería avanzada:

La ingeniería directa no solo recupera la información de diseño a partir del software existente, también utiliza esta información para alterar o reconstruir el sistema existente con la finalidad de mejorar su calidad global. En la mayoría de los casos el software sometido a reingeniería vuelve a implementar la función del sistema existente y también añade nuevas funciones o mejoras.

Conclusión

Las empresas al utilizar software durante varios años, es inevitable que se deban realizar cambios y mejoras o hasta crear un nuevo sistema totalmente innovado. Son ellas que dependiendo de un análisis decidirán que opción se adapta mejor a sus necesidades y es que es sin duda alguna que aplicar algo de mantenimiento siempre será menos costoso que adquirir una aplicación nueva.
En reingeniería sus costos son elevados, debido a que deben realizarlos profesionales muy bien capacitados y con una gran habilidad de extracción de datos y muy buena lógica, sin embargo, sigue siendo una opción muy recomendable para sacar adelante el proceso de negocios de una empresa.


Trabajos citados

Pressman, R. S. (2002). Ingeniería de Software: Un enfoque práctico. Madrid: McGRAW-HILL.
Sommerville, I. (2005). Ingeniería del Software. Madrid: Pearson Eduacion.

Descargar formato PDF



domingo, 16 de febrero de 2014

Leyes de Lehman

Introducción

Durante la evolución del software, podremos apreciar que se van presentando diversas problemáticas principalmente cuando se le hacen mejoras o reparaciones al sistema tanto internos (como cambios al código o al diseño, etc.), como externos (cambio de equipo de trabajo, en el proceso de negocios, etc.). Por esta razón debemos estar conscientes del proceso de evolución y nos apoyaremos estudiando las Leyes de Lehman.

Leyes de Lehman

La dinámica de evolución de los programas es el estudio de los cambios del sistema. La mayor parte del trabajo en esta área ha sido realizada por Lehman y Belady. A partir de estos estudios, propusieron un conjunto se leyes empíricas (Las leyes de Lehman) concernientes a los cambios y crecimiento de los sistemas tango grandes como chicos. Las cinco primeras leyes fueron las propuestas iniciales de Lehman; las leyes restantes fueron añadidas después de posteriores trabajos, dando como resultado lo siguiente:

  • Cambio continuado.

Un programa que se usa en un entorno real necesariamente debe cambiar o se volverá progresivamente menos útil en ese entorno.

  • Complejidad creciente.

A medida que un programa en evolución cambia, su estructura tiende a ser cada vez más compleja. Se deben dedicar recurso extras para preservar y simplificar la estructura.

  • Evolución prolongada del programa.

La evolución de los programas es un proceso autorregulativo. Los tributos de los sistemas, tales como tamaño, tiempo entre entregas y el número de errores documentados, son aproximadamente invariables para cada entrega del sistema.

Esto a su vez implica un aumento progresivo del esfuerzo de mantenimiento, a menos que se realice algún tipo de mantenimiento perfectivo a este respecto.

  • Estabilidad organizacional.

Es importante la buena comunicación entre cada integrante del equipo de desarrollo para lograr una eficiencia mutua que se verá reflejada a lo largo de la evolución del sistema.

  • Conservación de la familiaridad.

A medida que se realicen cambios, todos aquellos que estén asociados al sistema, deberán conocer dichos cambios y su impacto en el comportamiento y funcionalidad del mismo, para así seguirlo desarrollando eficientemente, por lo que es preferible realizar pequeños cambios a uno grande, sabiendo que dichos cambios traerán consigo, indudablemente, nuevos defectos.

  • Crecimiento continuado.

La funcionalidad ofrecida por los sistemas tiene que crecer continuamente para mantener la satisfacción de los usuarios. 

  • Decremento de la calidad.

La calidad de los sistemas comenzará a disminuir a menos que dichos sistemas se adapten a los cambios en su entorno de funcionamiento. 

  • Realimentación del sistema.

El proceso de evolución del sistema y los cambios desarrollados toman como base la realimentación por parte de los usuarios realizada en diferentes niveles y de forma iterativa, para así satisfacer las necesidades que se presentan constantemente.

Conclusión

Lehman dio un magnifico aporte a la Ingeniería de Software, puesto que sus leyes nos permiten controlar cambios y fallas inesperados en el software. Si las consideramos podremos crear un sistema con mayor calidad que efectivamente nos ayudará a tener un mejor producto para nuestro cliente, evaluando futuros problemas que se presenten al momento de dar mantenimiento o soporte.

Bibliografía

M.M, L. (1996). Laws of Software Evolution Revisited. London: Springer Verlag.
Sicilia, M. A. (24 de Noviembre de 2008). Leyes de la Evolución del Software. Recuperado el Febrero de 2013, de Connexions: http://cnx.org/content/m17406/latest/
Sommerville, I. (2005). Ingeniería del Software. Madrid: Pearson Eduacion.


 Descarga formato PDF

domingo, 2 de febrero de 2014

Mantenimiento de Software


Introducción

Durante el ciclo de vida de un software, es común que después de la implementación se requiera dar un cierto tipo de mantenimiento para que su calidad no se reduzca,  o simplemente deje de ser útil debido a las nuevas tecnologías entre otras cosas.

Muchas empresas que utilizan software como un sustento en sus metodologías de trabajo, han implementado diversas estrategias para reducir el coste en cuanto a software; llegando a un punto en el que deben de tomar una decisión y definir cuáles de las aplicaciones que utilizan deben ser eliminadas o sencillamente aplicarles mantenimiento. Aunque es muy cierto que el software debería ser lo suficientemente bueno para que no necesitara cambios una vez que sale de fábrica, sin embargo, aproximadamente un 40% del software instalado deber ser revisado (Sánchez, 2011).

Mantenimiento de Software

Para poder entrar en más detalle con respecto al tema, es necesario conocer el significado de mantenimiento.

“Es el conjunto de actividades que se ejecutan por el personal adecuado, capacitado en diferentes especialidades técnicas para efectuar los diferentes trabajos correspondientes de compostura y reparaciones de equipos, instalaciones e inmuebles.” (Mejia Campos & Zamorano Porras, 2013)

Varios autores toman como clasificación diferentes tipos de mantenimiento, por lo general toman una categorización de tres tipos pero en esta ocasión definiremos cuatro como los esenciales:

1.       Mantenimiento Correctivo
2.       Mantenimiento Adaptativo
3.       Mantenimiento Perfectivo
4.       Mantenimiento Preventivo

Ilustración 1.- Distribución del esfuerzo de Mantenimiento (Sommerville, 2005)



Mantenimiento Correctivo

Mantenimiento para reparar defectos del software. Por lo general, los errores de código son relativamente baratos de corregir, los errores de díselo son mucho más caros ya que implican reescribir varios componentes de los programas. Los errores de requerimientos son los más caros de reparar debido a que puede ser necesario un diseño extenso del sistema. (Sommerville, 2005)

Mantenimiento Adaptativo

Mantenimiento para adaptar el software a diferentes entornos operativos. Este tipo de mantenimiento se requiere cuando cambia algún aspecto del entorno del sistema, como por ejemplo el hardware, la plataforma del sistema operativo u otro software de soporte. El sistema de aplicaciones debe modificarse para adaptarse a estos cambios en el entorno. (Sommerville, 2005)

Mantenimiento Perfectivo

Mantenimiento para añadir o modificar las funcionalidades del sistema. Este tipo de mantenimiento es necesario cuando los requerimientos del sistema cambian como respuesta a cambios organizacionales o del negocio. La escala de los cambios requeridos en el software es a menudo mucho mayor que en los otros tipos de mantenimiento. (Sommerville, 2005)


Mantenimiento Preventivo

Consiste en la revisión periódica de ciertos aspectos, tanto de hardware como de software. El propósito es prever averías o desperfectos en su estado inicial y corregirlas para mantener un funcionamiento óptimo. Por lo regular este tipo de mantenimiento es el más elevado en cuanto a costos y por esta razón en muchas ocasiones prefieren excluirlo.

Conclusión

Debido a las circunstancias es más factible para muchas empresas optar por aplicar mantenimiento a sus sistemas, en lugar de generar uno nuevo. Gracias a esto se logran evitar grandes costos, sin embargo a la larga se verán reflejados algunas desventajas que hacen que el mantenimiento se vuelva obsoleto para poder continuar con la utilidad del software.

Trabajos citados

Mejia Campos, F., & Zamorano Porras, I. (2013). Instituto de ciencias básicas e ingeniería. Recuperado el 01 de 02 de 2014, de Universidad Autónoma del Estado de Hidalgo: http://www.uaeh.edu.mx/docencia/Tesis/icbi/licenciatura/documentos/Software%20de%20mantenimiento.pdf
Sánchez, D. (31 de Julio de 2011). Mantenimiento de software: un análisis automatizado de las aplicaciones es decisivo para reducir costes. Computerworld, 10-11.

Sommerville, I. (2005). Ingeniería del Software. Madrid: Pearson Eduacion.

Descarga formato PDF: