domingo, 16 de febrero de 2014

Ejemplos: Tipos de mantenimiento / Leyes de Lehman

Introducción.
Como parte fundamental del desarrollo de software, el mantenimiento puede llegar a ser una etapa, que pese a muchas veces ser menospreciada, sumamente importante, ya que esta misma, además de encargarse del proceso del uso del software s uno de las fuentes que más ingresos proporcionan a los equipos que mantienen un software. Como una parte de estandarización y normalización del mantenimiento y evolución del software, se analizaran las leyes de Lehman.  Dichas leyes describen el balance entre las fuerzas que impulsan nuevos desarrollos, y las fuerzas que ralentizan el proceso.
Desarrollo.

Ejemplos de los tipos de mantenimiento de software.

·         Mantenimiento preventivo:
Un ejemplo de este mantenimiento es por ejemplo el brindado a una página o plataforma web cuyos formularios no están correctamente validados, fallo que podría desencadenar un malfuncionamiento del sistema, este tipo de fallos pueden encontrarse en los formularios de registro y búsqueda de la página web de la Biblioteca Vasconcelos de CONACULTA.

·         Mantenimiento correctivo:
El sistema SOLCEDI del SAT, el cual es utilizado para generar archivos de requisición de firmas electrónicas, en sus primeras versiones tenía un error que impedía que los usuarios pudieran seleccionar archivos de extensión .Zip para ingresarlos y enviarlos al sistema. Ya que este tipo de archivos son fundamentales en el proceso de requisición de la firma electrónica, este error se corrigió y posteriormente se lanzo la segunda versión del programa.


·         Mantenimiento adaptativo:
Los servicios de facturación electrónica y envió de facturas por correo electrónico tuvieron que ser implementadas a las páginas web de supermercados y almacenes tales como Wall-Mart, Samborns, Sears, etc. por lo que dichas empresas tuvieron que adaptar sus plataformas web para poder soportar todo lo que esta nueva funcionalidad conllevaba (usuarios, tráfico de datos, pilas de procesos).


·         Mantenimiento perfectivo:
Los servicios que Facebook proporciona son cada vez más extensos y con más funcionalidad, así que es un buen ejemplo del mantenimiento perfectivo, ya que sin presentar fallos, Facebook ha implementado mucha nuevas funcionalidades a la a pagina a lo largo del tiempo.

Ejemplos de las leyes de Lehman.


·         Primera ley de Lehman: Cambio Continuado.
“RENAULT AMENAZA CON SALTARSE LA FECHA LÍMITE PARA EVOLUCIONAR EL MOTOR.”

La nota comenta el hecho de que la empresa automotriz Renault, declaro que no respetara la fecha límite para sacar al mercado la nueva versión del motor diseñado para autos de carreras. La empresa argumenta que es suficiente con cambiar los elementos que conforman al motor, y que se podría seguir trabajando la versión anterior mas allá de la fecha establecida por la organización reguladora, sin tener la necesidad de evolucionar toda la estructura, sin embargo, las empresas competencia de Renault, como lo son Ferrari y Mercedes que si han cumplido con las entregas de las nuevas versiones de sus motores, recalcan el alto rendimiento de sus motores a comparación del motor Renault, el cual, debido al uso de materiales y componentes con un grado de avance más bajo que el que se maneja actualmente, presentas mas fallos y un rendimiento más bajo que las nuevas versiones de las otras empresas, pese a que cuando Renault lo sacó al mercado hace dos años lideraba las ventas y las preferencias de los pilotos.

Este caso ejemplifica el    Cambio Continuado de la primera ley de Lehman, ya que se puede apreciar, que al igual que el software, los motores  que se usan en la realidad deben, por necesidad, cambiar y evolucionar a lo largo del tiempo, o de lo contrario, estos se volverán menos útiles, aunque en un principio cumplía perfectamente con sus funciones, el avance tecnológico y los cambios en la sociedad, requieren un cambio para que la funcionalidad de, en este caso motores,  no se vea afectada y la inutilidad alcance los productos.

·         Segunda ley de Lehman: Complejidad Creciente.
“TECNOLOGÍA, ALIADA DE TU NEGOCIO.”

En la nota se habla acerca de los beneficios que trae a las empresas la implementación de herramientas tecnológicas para la mejora de su negocio, se muestran los aspectos a considerar para que el uso de nuevas tecnologías, por ejemplo redes sociales, en verdad deje una ganancia para la empresa además de que este debe estar justificado identificando las mejoras que el uso de las mismas generaran.
La justificación de porque este articulo es un ejemplo claro de la segunda ley de Lehman: “Complejidad Creciente” es que cuando las empresas desean hacer implementaciones tecnológicas no simplemente traen consigo mejoras en el proceso tecnológico, sino que también hacen del mismo un proceso más complejo, pues por cada implementación de alguna tecnología se tendrá que capacitar a los empleados, también se tendrán que estar realizando distintas estrategias para que el uso de las mismas traigan los resultados esperados y no se estanque el proceso, también al tomar en cuenta las implementaciones tecnologías  como parte del proceso del negocio el mantenimiento de estas hace que todo el proceso sea más complejo, por ejemplo si se cambia el personal, se tendrá que invertir más en capacitar a los nuevos empleados.

Como podemos ver al hacer una nueva implementación en un sistema, en este caso la implementación de tecnología en el proceso de negocio de una empresa, no solo genera beneficios directamente, sino que también hace que todo el sistema que ya se tenía crezca se vuelva más complejo pues cuando este crece es más difícil de ejecutar y de mantener.

·         Tercera ley de Lehman: Evolución Prolongada del Programa.
“EL VIH EVOLUCIONA SEGÚN EL ADN.”

El artículo nos menciona que el principal obstáculo que tienen los científicos para encontrar la vacuna al Virus de Inmunodeficiencia Humana es debido a que este evoluciona dependiendo del ADN de la persona infectada, de esta manera es imposible crear una vacuna en general, aunque cabe aclarar que los síntomas son los mismos que en cualquier otra víctima.

No tienen conocimiento alguno de por qué el VIH evoluciona de esta manera, pero realizarán estudios para determinar qué características en común tiene el virus en todas las distintas personas y de esta manera poder crear vacunas para ciertas zonas del cuerpo que normalmente no resisten el ataque del virus.

Otro dato impresionante es que actualmente, hay más de 33 millones de personas de todo el mundo afectadas por el VIH y, cada año, 2.5 millones de personas se infectan.

Esta nota nos da claro ejemplo de la “Evolución prolongada del programa”, ya que el virus del VIH va evolucionando, pero los síntomas que presentan las víctimas son iguales, de la misma manera pasa con el software, este tiene que evolucionar pero debe mantener ciertas características invariantes como el tiempo que se toma para corregir errores, el tamaño y la cantidad de errores registrados. De esta manera podemos tener la noción de la relación entre lo que habla la nota y de lo que dice la ley.

·         Cuarta ley de Lehman: Estabilidad Organizacional.
“EMPLEADO DE BANCA ALEMÁNA TRANSFIERE 222 MILLONES POR ERROR.”

La cuarta ley de Lehman  señala que los grandes grupos de desarrollo son improductivos ya que las sobrecargas de comunicaciones dominan el trabajo en equipo.

 Un ejemplo de esto es la nota retomada, un hecho sucedido el pasado mes de abril en una ciudad alemana,  ya que por cierto lapso dos integrantes de una empresa bancaria, un empleado de banca y su supervisora hicieron una transferencia de 222.222.222,22 millones de euros. El error de la supervisora, al omitir esa gran cantidad fue la causa de su despido, pero un juez está analizando que no fue intencional ya que ella recibía cerca de 812 documentos de los empleados y tenía que revisarlos a una velocidad aproximada de uno por segundo,  la comunicación entre la supervisora y los empleados se saturo tanto que ella no pudo revisar todos los documentos de manera detallada.

La cuarta ley también nos habla acerca de que un cambio en los recursos o en el personal tiene efectos imperceptibles, como lo es en este caso el cambio de ritmo de trabajo que provoco que el empleado se equivocara, haciendo esa transferencia millonaria  y la falta de cuidado de la supervisora como resultado de ese cambio.

·         Quinta ley de Lehman: Conservación de la Familiaridad.
“DE WINDOWS 95 A WINDOWS 8, LA EVOLUCIÓN DEL MENÚ DE INICIO”

El artículo que se analizo es un ejemplo de la quinta Ley de Lehman conocida como la “Conservación de la Familiaridad” y esta nos dice que en la vida de un sistema que está en evolución constante, los contenidos de sus versiones no deben variar de una manera tan grande como se pensaría.

 También nos menciona la ley que los desarrolladores de los sistemas deben entender las funciones que modificaron, corrigieron y/o ampliaron en las versiones, debido a que la adaptación a ellos satisface la calidad del sistema y evita el gasto excesivo de recursos económicos al volver a modificarlos. El articulo nos menciona que a mediados de la década de los 90’s, Microsoft analizo constantemente la forma de mostrar los contenidos en su escritorio, por lo que nació la idea de crear el famoso menú de “Inicio” el cual apareció en el año de 1995. El menú solo constaba de un botón con el logotipo de Windows y la palabra “Inicio”, al apretarlo se desplegaban los accesos rápidos de programas, archivos, los botones de apagar, reiniciar, etc. Las opciones se visualizaban en una barra vertical que dividía en otras conforme se buscaba el programa o archivo. Esta ingeniosa idea al tiempo propicio que la gente que usaba el sistema se acomodara al botón y facilitaba la búsqueda exacta de lo que se deseaba realizar.
Años más tarde Microsoft volvió a analizar al botón “Inicio” y fue hasta la versión Windows XP donde se observaron cambios notables, como la aparición de dos columnas verticales en vez de una. La columna de la izquierda mostraba el navegador, el correo y los programas más usados por el usuario, en la columna de la derecha se podían observar las herramientas más populares como el “Panel de control” o “Mis Documentos” y en la parte inferior se podía ver la opción clásica “Todos los programas” ya conocida desde Windows 95. Para Windows 7, Microsoft investigo que los usuarios se acoplaban más a la barra de tareas para trabajar con sus programas que con el botón “Inicio”, por lo que perdió protagonismo, así que la solución fue agregar un buscador a la barra izquierda del botón “Inicio” con la finalidad de que la búsqueda de un programa fuera exacta y tardara milésimas de segundo en encontrarse.
Finalmente en Windows 8 el cambio que se realizo en el menú fue muy radical, se dice que ya no es el mismo y que ha desaparecido. Ahora W8 muestra una pantalla de inicio al oprimir el icono de Windows.  La compañía explica que el sistema mantiene la filosofía del menú de inicio, la de poner a disposición de los usuarios los contenidos de forma rápida, pero adecuándose a los nuevos dispositivos. El menú adquiere una personalidad más original y apuesta por una interacción touch entre el usuario y el sistema. El articulo muestra las modificaciones y/o adaptaciones que tuvo que hacer Microsoft en el botón de “Inicio” el cual experimento cambios muy leves excepto en Windows 8.
 El artículo siempre menciona que la empresa hizo investigaciones a los usuarios para adaptar nuevos menús por lo que sabían que debían hacer y conocían el uso de cada menú de las versiones que crearon.
 Finalmente se pudo observar que los usuarios se adaptaron al botón de “Inicio” y propicio gastos muy leves en su desarrollo aunque en Windows 8 hubo mucha polémica respecto al gran cambio que hubo.

Conclusión.
A partir de los conceptos definidos y examinados, llegamos a la conclusión de que el mantenimiento y el desarrollo de un sistema, no deben ser considerados como etapas independientes una de la otra, ya que muchas veces, esto puede traer problemas durante la fase de mantenimiento, incluidos el equipo y las versiones, y elevando los costos que se tienen previstos. Además recalcamos que las leyes de Lehman, se refieren a una serie de leyes empíricas que Lehman y Belady formularon, basados en trabajos que comenzaron en 1974, con respecto a la evolución del software.
La evolución puede ser observada en muchos procesos de la vida convencional, y de ahí podemos extrapolar conceptos al desarrollo de software.

Bibliografía

Fouruzan, B. A. (2007). Desarrollo de software y UML. McGraw-Hill.
Sommerville, I. (2005). Ingenieria de Software (Séptima ed.). Ciudad de México: Pearson.

Fuentes electrónicas consultadas (Fuentes de las notas)

Primera Nota:
http://blogs.20minutos.es/formula-1-alonso/2014/02/16/renault-amenaza-con-saltarse-la-fecha-limite-para-evolucionar-el-motor/
Segunda Nota:
http://www.eluniversal.com.mx/pymes-tu-empresa-tu-negocio/2014/pymes-tecnologia-emprendedor-82653.html
Tercera Nota:
http://www.esmas.com/salud/787788.html
Cuarta Nota:
http://www.elperiodico.com/es/noticias/curiosidades/banquero-aleman-duerme-transfiere-222-millones-por-error-2414880
Quinta Nota:
http://www.europapress.es/portaltic/software/noticia-windows-95-windows-evolucion-menu-inicio-20111010080004.html


domingo, 9 de febrero de 2014

Soporte/Mantenimiento de Sofware, Clasificación y Factores de costo.



Introducción.
Después de que los sistemas hayan sido desarrollados, inevitablemente han de sufrir cambios si tienen que seguir siendo útiles. Una vez que el software comienza a utilizarse, surgen nuevos requerimientos y los requerimientos existentes cambian Los cambios en los procesos de negocio a menudo generan nuevos requerimientos en el software existente. Algunas partes del software tienen a modificarse para corregir errores encontrados en su funcionamiento, adaptarlo a una nueva plataforma  y mejorar su rendimiento. Por lo tanto, el desarrollo de software no se detiene al entregarlo, sin que continua durante el tiempo de vida del sistema. (Sommerville, 2005)

Desarrollo.

Definición de conceptos.

Es en este punto del desarrollo de software donde aparecen los conceptos de soporte y mantenimiento. Hay múltiples y muy distintas definiciones de estos conceptos, que pueden llegar a ser utilizados como sinónimos, aunque no en todos los casos esto sea correcto.  Algunas de las definiciones más aceptadas son las siguientes:
·         Soporte de Software:
o   “El soporte de software es el conjunto de servicios que tienen la finalidad de  ayudar a resolver los problemas que puedan presentárseles a los usuarios, mientras hacen uso de servicios, programas o dispositivos. (Sommerville, 2005)
o   “Dícese de todo aquel servicio especializado y directo que provee de ayuda técnica para asegurar un buen uso por parte del usuario  de los productos de software que se consumen.” (Weitzenfield, 2004)
o   “Es la ayuda prestada a los usuarios de sistemas de información, plataformas, programas y demás productos de software con el fin último de brindar infamación que facilite el uso del software, así como de despejar dudas y de auxiliar  a los usaros para actuar durante casos de un malfuncionamiento por parte del sistema.” (Pressman, 2005)
·         Mantenimiento de Software:
o   “Etapa del desarrollo de software posterior a la implantación en la cual el sistema original es modificado debido algún fallo o error, ya sea presentado o potencial, o cambios en las funcionalidades del sistema debido a cambios en los procesos en que está basado o cuestiones externas a los requerimientos originales.” (Fouruzan, 2007)
o   “La fase  mantenimiento se centra en el cambio que va  asociado a la corrección de errores, a las adaptaciones requeridas a medida que evoluciona el entorno del software, y a cambios debidos a las mejoras producidas por los requisitos cambiantes del cliente” (Pressman, 2005)
o   “Actividades realizadas a un software funcionando que tienen la finalidad de actualizar las funciones del software, dar atención a nuevos requerimientos y cambios en los ya existentes y poder corregir fallos que se presentaron en el software durante su utilización así como prevenir errores que pudieran acontecer” (Weitzenfield, 2004)
o   “Proceso general de cambiar un sistema después de haberlo entregado” (Sommerville, 2005)
Tras analizar estas definiciones, podemos darnos cuenta que la principal diferencia que tienen el mantenimiento y el soporte es a quien está dirigido, mientras que el soporte son los servicios y ayudas que le son prestados al usuario, el mantenimiento va aplicado al software con lo que se constituyen finalidades completamente distintas.
A continuación, se profundizara en cada uno de los conceptos que se han definido anteriormente.

Mantenimiento de software.

Tras haber definido lo que es el mantenimiento de software, podemos proceder a interpretar las características de cada uno de los distintos tipos que existen, ya que hay diversas formas y distintos propósitos por los que se le da mantenimiento al software.
Los cambios realizados al software pueden ser cambios sencillos para corregir errores de código, cambios mas extensos para corregir errores de diseño o mejoras significativas para corregir errores de especificación o acomodar nuevos requerimientos y para modificar los componentes del sistema existente y añadir nuevo en caso de una nueva funcionalidad. (Sommerville, 2005)
A partir de la finalidad del mantenimiento, podemos clasificar el mantenimiento en distintos tipos:
Ø  Mantenimiento Preventivo.
Es aquel mantenimiento que pretende anticipar potenciales errores o fallos, modificando el sistema para evitarlos en el futuro. (Weitzenfield, 2004)
Muchas veces los desarrolladores dependen de los usuarios para ofrecer mantenimiento preventivo, ya que es durante la ejecución de un programa o al usar un sistema donde pueden observase los potenciales errores, o simplemente indicios o detalles que no ocasionan un malfuncionamiento del software pero pueden llevar a eso o ser malinterpretados. Su costo suele variar, ya que puede tratarse de correcciones sencillas de código o desencadenar una modificación en el diseño del sistema.
Ejemplos: Validaciones incorrectas de formularios, información incorrecta.

Ø  Mantenimiento Correctivo.
Mantenimiento para reparar defectos del software. (Sommerville, 2005)
Son aquellas modificaciones que se dan con la finalidad de reparar o corregir un error que ya se presento durante la ejecución de un programa o uso de un sistema. Al igual que la clasificación anterior, tiene un costo muy variable ya que puede corregir errores sencillos de código ó operación o también errores de diseño, los cuales son muchos más costosos.
Ejemplos: Errores en bases de datos, mal manejo de procesos de negocio.
Ø  Mantenimiento Adaptativo.
Mantenimiento para adaptar el software a diferentes entornos operativos. (Sommerville, 2005) 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 del que dependa, suele tener un costo medio-alto, ya que se requieren contemplar diversos aspectos desde amientes gráficos hasta el diseño estructural del software.
Ejemplos: Implementación de multiplataforma, actualizaciones por hardware (monitores, discos duros, memorias, etc.).

Ø  Mantenimiento perfectivo.
Mantenimiento para añadir o modificar funcionalidades del sistema. (Sommerville, 2005)
Este mantenimiento es necesario cuando los requerimientos de un sistema cambian respondiendo a cambios del proceso de negocio. Pretende perfeccionar el software implementando nuevos requerimientos o implantando nuevos en el sistema, en esencia tiene el fin de mantener la funcionalidad del sistema pero mejorando su estructura su rendimiento, en general, ya que las modificaciones suelen ser mucho mayores que en otro tipo de mantenimiento, el costo suele ser elevado.
Ejemplos: Nuevos módulos, mejora de procesos, implementación de nuevas tecnologías.


¿Cuáles son los factores que elevan el costo del mantenimiento?

 Una razón importante por la que los costos de mantenimiento son altos es que es más caro añadir funcionalidades después de que el sistema este en funcionamiento que implementar la misma funcionalidad durante el desarrollo. Los factores clave que distinguen el desarrollo y mantenimiento y conducen a costos más elevados son: (Sommerville, 2005)
1.       Estabilidad del equipo de desarrollo.
Sabemos que es normal que un equipo de trabajo pueda disolverse tras la entrega de un proyecto. Es posible que los nuevos integrantes del equipo encargado del mantenimiento del sistema ano conozcan el mismo, ni las razones por las que debe dársele el mantenimiento.
 Es difícil, costoso y lleva tiempo capacitara quipos de trabajo para que sean competentes en el proceso de mantenimiento de un sistema, ya que primero se debe asegurar la total comprensión del mismo antes de producir cambios en el. (Weitzenfield, 2004)

2.       Responsabilidad contractual.
El contrato para mantener un sistema, normalmente está separado al contrato para desarrollar un sistema. Este factor, junto con la ausencias del estabilidad en el equipo, que podría no ser el mismo que mantiene que el que desarrolla implica dificultades, ya que si el equipo de desarrollo realiza ciertas acciones para ahorrar esfuerzo durante el proceso de desarrollo lo hará sin tomar en cuenta lo difícil que puede llegar a ser modificarlo, ni preocupándose porque se pudieran incrementar costos de mantenimiento. (Sommerville, 2005)

3.       Habilidad del personal.
Es sabido que muy a menudo se asignan a equipos menormente capacitados para el mantenimiento que para el desarrollo, ya que muchas veces los desarrolladores consideran al mantenimiento como un proceso donde se requieren de menos habilidades que durante las fases del desarrollo. (Pressman, 2005)

4.       Edad y estructura del programa.
Los programas y su estructura suelen degradarse con el tiempo y la salida al mercado de nuevas tecnologías. Las versiones antiguas suelen ser desarrolladas sin gestión de configuraciones, lo que vuelve difícil ubicar versiones para modificar el sistema.
 

¿Qué se debe considerar en el entorno para realizar cambios?

Para evaluar las relaciones entre un sistema y su entorno debería tomarse en cuenta:
Ø  Número y complejidad de interfaces.
Es más probable un cambio en un sistema con muchas interfaces, entre mayor el número, mayor la posibilidad de un cambio.
Ø  Número de requerimientos volátiles.
Los requerimientos volátiles son aquellos que se basan en procesos de empresas independientes o procedimientos internos y únicos, entre más de estos existan en un sistema, es más probable un cambio, ya que son muy susceptibles a modificarse con el tiempo.
Ø  Procesos de negocio.
Ya que los procesos de negocio van cambiando acorde con la sociedad, mientras mas procesos de negocio se contemplen, habrá más peticiones de cambio en el sistema. (Sommerville, 2005)

Conclusión.
A partir de los conceptos definidos y examinados, llegamos a la conclusión de que el mantenimiento y el desarrollo de un sistema, no deben ser considerados como etapas independientes una de la otra, ya que muchas veces, esto puede traer problemas durante la fase de mantenimiento, incluidos el equipo y las versiones, y elevando los costos que se tienen previstos.
Se observa que el proceso de mantenimiento tiene la finalidad de alargar la vida funcional del software y que más que un gasto se considera una inversión que protege el costo cubierto por el desarrollo inicial del software.
También diferenciamos claramente el distinto enfoque que tienen el mantenimiento y el soporte de software, sus finalidades y los casos en que se debe hacer uso de cada uno.

Bibliografía

Fouruzan, B. A. (2007). Desarrollo de software y UML. McGraw-Hill.
Pressman, R. (2005). Ingeniería de Software. Pearson.
Sommerville, I. (2005). Ingenieria de Software (Séptima ed.). Ciudad de México: Pearson.
Weitzenfield, A. (2004). Ingenieria de Software orientada a objetos con UML, Java e internet. Thomson.