domingo, 23 de febrero de 2014

Reingeniería de Software.


Introducción.
Cuando un software ha tenido una vida útil de 10 a 15 años, ha sufrido muchos cambios y modificaciones tanto en su código, como en su arquitectura, su documentación, diseño, etc. y aun se provee realizar muchos más cambios para seguir satisfaciendo las necesidades del usuario, se llega a un punto en que el equipo encargado de realizar dichos cambios no comprenden a detalle las funciones del sistema y la complejidad actual del mismo complica las cosas. En este punto, la mejor opción es aplicarle reingeniería al software, aunque esto implique grandes costos, pero traerá mejores beneficios.
Reingeniería de Software.

Para entender todo lo que implica la reingeniería de software, primero debemos plantear que es y en qué consiste dicho proceso.
La reingeniería de software es la actividad de reconstrucción de un sistema, en el que el estado actual del sistema es muy complejo y dificultará realizar cambios en él, por lo que la opción más viable para que siga siendo útil es reconstruirlo (Pressman). Consta de seis etapas, que pueden seguir o no una secuencia lineal, pero siempre se desarrollarán cíclicamente.
Las etapas son:
  • Análisis de inventarios: se analizan los inventarios que poseen las empresas o el usuario sobre las características del programa y descripciones detalladas sobre su importancia, edad, etc., así se sabrá a que recursos se aplicará la reingeniería.
  • Reestructuración de documentos: aquí se analiza si se necesita documentar de nuevo todo el sistema, si se tiene que actualiza pero se cuentan con pocos recursos o si la documentación requiere de demasiado tiempo.
  • Ingeniería inversa: en esta etapa se analiza el programa para crear una representación mucho más abstracta que el código fuente y se recupera el diseño.
  • Reestructuración de código: aquí se analizan los módulos en los que se sospecha que el código que lo compone no sigue las estructuras de programación estructurada, para reestructurarlo y que siga dichas normas.
  • Reestructuración de los datos: esta etapa se lleva a cabo en un grado de abstracción bajo, y su respectiva reingeniería es de gran escala. Se definen los objetos de datos y los atributos, para después revisar la actual estructura de los datos.
  • Ingeniería avanzada. 
Conclusión.
Es importante conocer en qué consiste la reingeniería de software porque de esta manera sabremos en que casos y en qué momento es adecuado aplicarla para evitar que el sistema se vuelva mucho más complejo de lo que ya es, y así proveerle un sistema funcional y con mejores técnicas de programación al usuario.
Referencias.

Pressman, R. Ingeniería de Software. Un enfoque práctico. Mc Graw Hill.

domingo, 16 de febrero de 2014

Leyes de Lehman



Introducción.
Para proveer un buen mantenimiento, es necesario conocer el software y su código, cosa que se complica cuando se utiliza “código heredado”. Esto se refiere al código tomado de otro producto, pero que debido a los cambios y mantenimiento sufrido anteriormente, no es el código original y es más complicado entenderlo. Por esto, se desarrollaron las Leyes de Lehman, que se describirán a continuación y las cuales buscan resolver dichos problemas de código.
Las Leyes de Lehman.
Las Leyes de Lehman se derivan de los estudios realizados por el mismo Lehman, que se aplican invariablemente a todos los productos de software sobre los cambios que estos sufren. (Sommerville, 2005).
Son 8 leyes, de las cuales solo se explicarán y denominaran a detalle las 5 primeras, que por lo general son las más comunes y aplicables (Ruíz, 2000-2001), pero sin olvidar las últimas tres, que se agregaron tiempo después de haberse definido las primeras:
  • Cambio continuado. Se refiere a que el sistema está en constante cambio debido a que se pueden presentar nuevos requerimientos, se necesita solucionar los defectos que lleguen a presentarse, debe mejorarse la funcionalidad, eficiencia y seguridad.
  • Complejidad creciente. A medida que se realizan cambios, la estructura del sistema se vuelve mucho más compleja, provocando que en un futuro, cuando se quiera re-utilizar código, esta tarea se vuelva complicada.
  • Evolución prolongada del programa. El contexto en el que se desarrolla el sistema definirá que cambios realizar, en que momentos, los costes y como afectan al proceso de evolución, haciendo que la velocidad de los cambios a realizar sea gobernada por la efectividad y rapidez de la toma de decisiones de la organización.
  • 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. El crecimiento del sistema debe ser continuo para mostrarle mayor y mejor funcionalidad al usuario, que mantenga su interés por el sistema.
  • Decremento de la calidad. Para que la calidad de un sistema no decremente, éste debe adaptarse a los cambios que se presenten en su entorno, que puede referirse a actualizaciones de hardware y software como sistema operativo, librerías dependientes, etc.
  • 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.
Al analizar las Leyes de Lehman, podemos entender mucho mejor como y porque ocurren los cambios en el software provocando su evolución. Es importante considerarlas y tenerlas presentes porque proveen explicación a problemas que llegan a presentarse durante el desarrollo de un sistema.
Al entender lo que cada una dice, podemos tomar precauciones para no interferir en gran medida a ralentizar el proceso.
Referencias.
Ruíz, F. (2000-2001). Escuela Superior de Informática. Universidad de Castilla - La Mancha. Recuperado el 16 de Febrero de 2014, de Mantenimiento del Software.: http://alarcos.esi.uclm.es/per/fruiz/curs/mso/trans/s2.pdf
Sommerville, I. (2005). Ingeniería del Software. Madrid: Pearson Educación S.A.


Descargar "Leyes de Lehman".

lunes, 3 de febrero de 2014

Mantenimiento de Software


Introducción.

Cada que se desarrolla un sistema de software, debe tenerse en cuenta el mantenimiento que se le hace y cuál es el fin del mismo.

Para identificar el tipo de mantenimiento a realizar y el momento adecuado, a continuación se explicara en qué consiste propiamente el mantenimiento de software y los diferentes tipos que hay.

Mantenimiento de Software.
Para entender que es el mantenimiento de software, primero debe plantearse una definición como la siguiente, la cual está basada en el Estándar IEEE 1219 y el Estándar ISO/IEC 14764 (Sánchez Barreiro):

El mantenimiento de software es la modificación de un producto de software, antes de la entrega del producto como después de su entrega al cliente o usuario, para corregir defectos, mejorar el rendimiento u otras propiedades deseables, o para adaptarlo a un cambio de entorno.

Existen cuatro tipos de mantenimiento, los cuales se describirán.
  • Preventivo: Consiste en la revisión periódica de ciertos aspectos, tanto de hardware como de software. Esto permite que nuestro software tenga un mejor desempeño y seguridad de los datos almacenados. El propósito es prever averías o desperfectos en su estado inicial y corregirlas para mantener un funcionamiento óptimo (Fundación Omar Dengo. Educación, tecnología y desarrollo., 2011).
  • Correctivo: Tiene por objetivo localizar y eliminar defectos del software.
  • Adaptativo: Consiste en la modificación de un programa debido a cambios en el entorno de hardware o software en el cual se ejecuta. Estos cambios pueden afectar al sistema operativo, a la arquitectura física del  sistema de software o a su entorno de desarrollo.
  • Perfectivo: Consiste en las actividades realizadas para mejorar o añadir nuevas funcionalidades requeridas por el usuario (Martínez Torres, 2010).

Conclusión.

Después de ver en qué consisten los diferentes tipos de mantenimiento de software, podemos tener una idea más clara de la importancia que tienen los mismos.

Yo considero que el mantenimiento de software es importante ya que de esta manera garantizamos que nuestro producto de software es confiable y tiene un mínimo de probabilidades de fallar debido al efectivo mantenimiento que recibió antes y después de ser entregado.

Referencias.
Fundación Omar Dengo. Educación, tecnología y desarrollo. (2011). Recuperado el 03 de Febrero de 2014, de Mantenimiento Preventivo de Software.: http://www.rema.cr/pdf/Procedimiento_para_la_atencion_de_los_mantenimientos_preventivos.pdf

Martínez Torres, D. (12 de Julio de 2010). Universidad Tecnológica de la Mixteca. Recuperado el 03 de Febrero de 2014, de Ingeniería de Software. Tema 7: Mantenimiento del software.: http://www.utm.mx/~dtorres/cursos/ingsw/tema7.pdf
Sánchez Barreiro, P. (s.f.). Universidad de Cantabria. Dpto. de Matemáticas, Estadística y Computación. Recuperado el 03 de Febrero de 2014, de Ingeniería del So1ware II. Tema 08. Mantenimiento de Sistemas Software: http://ocw.unican.es/ensenanzas-tecnicas/ingenieria-del-software-ii/materiales/tema8-mantenimientoSistemasSoftware.pdf
Descargar "Mantenimiento de Software"