domingo, 26 de febrero de 2017

Las Leyes de Lehman

Las Leyes de Lehman:

En ingeniería del software, las Leyes de evolución del software, o simplemente 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.

Ley 1. Cambio Continuo: Un programa que se emplea debe adaptarse continuamente, en caso contrario el programa se hace progresivamente menos útil. Estas adaptaciones son el resultado del cambio de la operación del entorno en el cual desempeña una función.

Ejemplo:

Cuando el navegador de Internet Explorer se volvió obsoleto debido a su casi nulo soporte por el formato CSS, además de la fama negativa de ser lento, tanto así que al no cambiar esas expectativas, su lentitud y su poca compatibilidad con CSS, los usuarios lo abandonaron, haciendo que sus creadores (Microsoft) tuvieran que reinventarlo, como otro software, bajo el nombre de EDGE.

Ley 2. Complejidad Creciente. A medida que evoluciona un programa, su complejidad aumenta, salvo que se trabaje para reducir su estructura. Esto conlleva un incremento progresivo del esfuerzo de mantenimiento, excepto que se realice algún tipo de, mantenimiento perfectivo a este respecto.

Ejemplo:

Podemos decir que el sistema operativo Android, con el tiempo y las actualizaciones, su estructura se fue haciendo más compleja, pues cada vez se le añadían cosas nuevas, tanto así que bajo el rendimiento de algunos Smartphone, por lo que a partir de su versión KitKat tuvo que homologarse para evitar que eso siguiera pasando en futuras versiones.

Ley 3. Evolución Prolongada del Programa (Autorregulación). El proceso de evolución del programa se autorregula con una distribución de medidas de atributos del producto y de procesos cercanos a lo normal. Los acuerdos de gestión en relación con los cambios en el programa instituyen una dinámica que determina las características de crecimiento del producto.

Ejemplo:

Por ejemplo, el sistema informático de un banco, al estar operando tanto tiempo, este necesita evolucionar, agregando funcionalidades, por ejemplo, para las transacciones vía internet, estas actualizaciones al sistema, así mismo aumentan su complejidad, haciendo que las actualizaciones futuras sean más complicadas y que puedan ser propensas a errores, sin embargo, sin estas actualizaciones, el sistema tendría principios de ser obsoleto.

Ley 4. Ley de Conservación de la Estabilidad Organizativa. La velocidad de actividad total efectiva media en un sistema en evolución es invariante a lo largo el ciclo de vida del producto. Habitualmente se piensa que el esfuerzo gastado en la evolución del sistema se establece por decisiones de dirección.

Ejemplo:

En esta ley se puede observar un desarrollo constante, para ejemplificar, tomaremos el desarrollo del SO “Windows” y el SO Mobile “Windows Phone”, donde Microsoft dedica más personal al desarrollo del primero, pues este llega a muchas más personas que WP, sin embargo, el hecho de que más personas se dediquen a este, no quiere decir que su desarrollo es más rápido, este es constante, pero diferente debido a su relevancia.

Ley 5. Conservación de la familiaridad. En el trascurso de la vida de un programa en evolución, el contenido de las versiones subsiguientes es estadísticamente invariante. Uno de los componentes que fija el progreso de un desarrollo de software es la familiaridad de todos los involucrados.

Ejemplo:

Un ejemplo adecuado para esta ley es WhatsApp, esta aplicación, era constantemente actualizada, agregando funcionalidades y reparando bugs del sistema, una actualización grande fue aquella donde se agregó el cifrado punto a punto de los mensajes, sin embargo recientemente se actualizo, la manera de visualizar los estados, el cambio fue tan radical que se perdió la propiedad de familiaridad por lo que probablemente WhatsApp tenga que recurrir a un downgrade.

Ley 6. Ley del Cremento Continuo. Un programa debe extenderse continuamente para mantener la satisfacción del usuario durante su ciclo de vida. Tradicionalmente los sistemas se crean con una limitación en cuanto a la funcionalidad del dominio protegida por motivos de tiempo o recursos. Con el tiempo, los requisitos regresan como necesidades.

Ejemplo:

Un ejemplo seria la aplicación de Facebook, en un comienzo, Facebook era exclusivo para ingresar desde un navegador, después el sistema evoluciono y se unifico entre distintas plataformas. Para referenciar, en un inicio solo se podía publicar estados y agregar amigos, luego se agregaron los mensajes privados, publicaciones de fotos y se cambió “el muro”, por “la biografía”. Actualmente, sigue en constante cambio.

Ley 7. Calidad Decreciente. Los programas se consideran de calidad decreciente si no se mantienen de manera tenaz y se adaptan al entorno operativo cambiante. Esto es, por los cambios en los criterios de aceptabilidad de los usuarios.

Ejemplo:

Pokemon GO, en un inicio fue un éxito entre los usuarios de smarthphones, sin embargo, esta aplicación no fue actualizada, decreciendo su calidad y haciendo que los usuarios perdieran el interés por esta aplicación.

Ley 8. Realimentación del sistema. Los procesos de evolución adicionan sistemas de realimentación multiagente y multiblucle, estos deben ser tratados como sistemas de realimentación para lograr una mejora significativa del producto

Ejemplo:

Un software como Google Chrome, se retroalimenta, según las búsquedas que efectúas, así, plataformas como YouTube o páginas de compra, pueden identificar los gustos de los usuarios, basados en las cosas que buscas usando esta aplicación, por lo que cada vez que las usas, sugieren cosas que concuerdan con tus gustos. 

Comparativa de métodos agiles: XP vs SCRUM

Comparativa de métodos agiles: XP vs SCRUM

Sobre XP (extreme programming):

Extreme Programming o XP es una metodología ágil del desarrollo de software, la cual fue inventada por Ken Beck al final de los años 90’. XP aligera el proceso de desarrollo de software, haciendo inca pie en la obtención de requerimientos, pues para ello, el cliente para a ser parte del equipo de desarrollo, por lo que en todo momento, el software es modelado de acuerdo a sus necesidades más actuales, haciendo que XP sea responsivo a cambios.

Entre sus principales cualidades están, la programación en parejas, historias de usuario, involucración del cliente en el equipo de desarrollo y que se enfoca en los programadores y en general en todo el equipo como personas, por lo que estipula que entre mejor se sienta el equipo en su ambiente, mejor será su rendimiento, entre otras características.

Sobre SCRUM:

SCRUM es aquella metodología ágil, que implica todo un proceso de “buenas practicas” donde el objetivo el desarrollo de un proyecto se lograra con un trabajo colaborativo exitoso. Una de las principales características de esta metodología son los “sprints” los cuales son ciclos de trabajo cortos, que culminan como pequeñas entregas del proyecto. Esta característica, da la propiedad de un desarrollo incremental a SCRUM.

Comparativa:

En la siguiente tabla (Highsmith, 2002), se compara las distintas aproximaciones ágiles en base a tres parámetros: vista del sistema como algo cambiante, tener en cuenta la colaboración entre los miembros del equipo y características más específicas de la propia metodología como son simplicidad, excelencia técnica, resultados, adaptabilidad, etc. También incorpora como referencia no ágil el Capability Madurity Model (CMM).

Metodología
SCRUM
XP
Sistema como algo cambiante
5
5
Colaboración
5
5
Características Metodología (CM)
Resultados
5
5
Simplicidad
5
5
Adaptabilidad
4
3
Excelencia Técnica
3
4
Prácticas de colaboración
4
5
Media CM
4.2
4.4
Media Total
4.7
4.8
Ranking de “agilidad” (Los valores más altos representan una mayor agilidad)


Según los resultados de la tabla, podemos decir que las diferencias en lo que agilidad y rentabilidad se refiere entre SCRUM y XP son casi nulas, sin embargo, XP resulta vencedor, pero por la mínima, el apartado que le da la victoria a XP son las prácticas de colaboración. Justificando este hecho, podemos decir que como tal, XP resulta más colaborativo pues necesita específicamente del cliente para poder efectuarse, el ecosistema que se crea en el equipo de desarrollo es totalmente colaborativo, en cambio, en SCRUM resulta que se tiene ejecutando el rol de “cliente” al “product owner”, el cual puede o no ser el cliente real como tal, este solo necesita tener autorización del cliente real y conocer el proceso de negocio del mismo, mas no participa reactivamente con el equipo como lo hace el cliente en XP.

Tabla Comparativa de características:
   
Metodología
SCRUM
XP
ROLES
·         Product Owner
·         Scrum Master
·         Equipo de Desarrollo (Team)
·         Stakeholders
·         Cliente
·         Gestor del proyecto
·         Coach
·         Tracker
·         Programadores
·         Tester

Proceso
En Scrum un proyecto se ejecuta en bloques temporales cortos y fijos (iteraciones que normalmente son de 2 semanas, aunque en algunos equipos son de 3 y hasta 4 semanas, límite máximo de feedback y reflexión). Cada iteración tiene que proporcionar un resultado completo, un incremento de producto final que sea susceptible de ser entregado con el mínimo esfuerzo al cliente cuando lo solicite.
El proceso parte de la lista de objetivos/requisitos priorizada del producto, que actúa como plan del proyecto. En esta lista el cliente prioriza los objetivos balanceando el valor que le aportan respecto a su coste y quedan repartidos en iteraciones y entregas.
Es una metodología ágil centrada en potenciar las relaciones interpersonales como clave para el éxito en desarrollo de software, promoviendo el trabajo en equipo, preocupándose por el aprendizaje de los desarrolladores, y propiciando un buen clima de trabajo. XP se basa en realimentación continua entre el cliente y el equipo de desarrollo, comunicación fluida entre todos los participantes, simplicidad en las soluciones implementadas y coraje para enfrentar los cambios. XP se define como especialmente adecuada para proyectos con requisitos imprecisos y muy cambiantes, y donde existe un alto riesgo técnico.
Artefactos
·         Product Backlog
·         Sprint Backlog
·         Scrum Taskboard
·         Incremento
·         Sprint
·         Historias de usuario
·         Tareas de ingeniería (task card)
·         Tarjetas CRC

Para finalizar, quisiera dar mi opinión sobre cuál de las dos metodologías me parece “mejor” más no más practica ni más ágil, pero si más cómoda. Esa es XP. La razón es su principal característica, el cliente formando parte del equipo, además de la manera en que presenta las historias de usuario, son sencillas y fáciles de entender, pero el hecho de que el cliente este ahí para colaborar, resolviendo dudas y afinando los detalles en conjunto, le da una clara ventaja respecto a otras metodologías. Sin embargo, quisiera destacar los sprints de SCRUM, ya que me parecen una buena manera de trabajar en equipo de manera rápida y focalizada, si los sprints se redujeran, a la mitad de su tiempo, por ejemplo 15 días, en vez de 30, y las definiciones en los Sprints plannings de las actividades a realizar en estos fueran ajustadas para este tiempo, en mi opinión, serian aún más eficientes.

Referencias

Highsmith, J. (2002). Agile Software Development Ecosystems. Addison-Wesley.


 Dietmar Pfahl. Software Engineering: "Agile/Lean Methods" , University of Tartu

Asif Qumer, Brian Henderson-Sellers, COMPARATIVE EVALUATION OF XP AND SCRUM USING THE 4D ANALYTICAL TOOL (4-DAT) .Faculty of Information Technology, University of Technology, Sydney, NSW, Australia 

domingo, 12 de febrero de 2017

Mapa Conceptual: "Metodologias Agiles"


Ensayo: "El Soporte de Software"

En estricto sentido, el termino "Soporte de Software" no existe. No hay estándar ni definición en el mundo que pueda decir con exactitud que es el soporte de software, esto debido a que es la conjunción entre dos elementos: el "Mantenimiento de Software" y el "Soporte Técnico".  Sin embargo, aun no definido, el soporte de software es esencial y de alguna manera algunas compañías lo ponen en practica, aun sin darse cuenta, basta con brindar mantenimiento al producto de software y ademas brindar soporte a los usuarios del mismo.

Para poder si quiera aproximarse a una definición de "Soporte de Software" primero tendríamos que definir ambos elementos que lo componen. 

Comenzando con "Mantenimiento de Software" :
"La modificación de un producto de software después de su entrega al cliente o usuario para corregir defectos, para mejorar el rendimiento u otras propiedades deseables, o para adaptarlo a un cambio de entorno." (IEEE, Diciembre 1992)

"Conjunto de actividades destinadas a proporcionar soporte económicamente rentable para un determinado producto software. Estas actividades se realizan tanto antes de la entrega del producto como después de la entrega del mismo. Las actividades previas a la entrega incluyen las actividades destinadas a planificar, anticipar y preparar actividades de mantenimiento posteriores. Las actividades posteriores a la entrega incluyen modificaciones del producto software, formación y asistencia al usuario" (ISO/IEC)
 Ambas definiciones son muy parecidas, sin embargo, difieren en algo, el tiempo en que se efectúa el mantenimiento. Lo correcto seria según el Estándar ISO/IEC 14764 pues la actividad de mantenimiento puede hacerse tanto antes como después de la entrega del producto de software, sin embargo, esto no desprestigia la definición del Estándar IEEE 1219. 

Por lo tanto, el mantenimiento del software serán todas aquellas actividades destinadas al cuidado, corrección y mejora del software, tanto antes como después de la entrega del mismo. Debido a esto, es que existen mantenimientos de distinta naturaleza, aun que todos con el mismo objetivo "hacer mejor el software", los tipos de mantenimiento de software son los siguientes:

  • Mantenimiento Correctivo: localiza y corrige defectos en un programa tras su
    entrega. Puede ser urgente o no urgente
    . (Macario Polo, Marzo 1999)
Este tipo de mantenimiento es aquel que busca encontrar y corregir todos aquellos problemas o defectos que originan un comportamiento diferente al esperado del software, estos defectos pueden ser desde fallas de procesamiento, uso ineficiente de los recursos, inconsistencias, seguridad o la estabilidad del mismo software. 
  • Mantenimiento Adaptativo: Modificación para adaptarse a un cambio en el entorno. (Macario Polo, Marzo 1999)
Este mantenimiento se efectúa cuando el entorno en el que el software normalmente trabaja, cambian, por ejemplo el sistema operativo o el mismo hardware en el que estaba instalado. Puede ser esencial que el software se adapte a sus nuevas condiciones sin prescindir de ninguna de sus funcionalidades ni su rendimiento optimo.
  • Mantenimiento Perfectivo: Modificación para detectar y corregir fallos latentes antes de que se conviertan en carencias. (IEEE, Diciembre 1992) Modificación para modificar o añadir nuevas funcionalidades. (Macario Polo, Marzo 1999)
El mantenimiento perfectivo busca agregar nuevas funcionalidades o características al software, las cuales no estaban cuando se implemento el software.

  • Mantenimiento Preventivo: Modificación para detectar y corregir fallos latentes antes de que se conviertan en fallos operacionales. (IEEE, Diciembre 1992) Mejorar las propiedades del software. (Macario Polo, Marzo 1999)
Este tipo de mantenimiento puede brindarse antes de la entrega el software, debido a que busca evitar posibles errores o defectos que el software pudiera tener en el futuro.

Continuando con "Soporte Técnico":

Son aquellos servicios que proporciona asistencia con el software o hardware de un sistema o algún otro aparato electrónico o mecánico. Estos servicios tendrán como objetivo ayudar al usuario con algún problema o inconveniente con sus sistemas/aparatos. Para ello, este soporte técnico puede ser brindado de manera remota o a distancia, ya sea vía telefónica o por Internet, por ejemplo, análogamente, puede ser presencialmente con un técnico verificando el problema.

El soporte técnico que una empresa brinda puede ser dividido en niveles, los cuales dependerán de las mismas actividades de la empresa, de igual forma se puede tener una "cola" la cual puede ser organizada según el nivel de urgencia que un soporte técnico requiera. A continuación se mencionan algunos niveles de soporte técnico.
  • Soporte de Nivel/Tier 1 (Ayuda al usuario): Este nivel es el primero en la linea de ayuda y es quien recibe primero las llamadas de los usuarios buscan soporte técnico. Regularmente son problemas básicos que el usuario puede resolver por si mismo utilizando alguna herramienta del conocimiento. (Walker, 2001)
  • Soporte de Nivel/Tier 2 (Soporte Técnico): Este nivel busca encontrar la solución del cliente por su cuenta o utilizando conocimientos básicos técnicos de principiante. (Walker, 2001)
  • Soporte de Nivel/Tier 3 (Administración del Sistema): En este nivel el soporte se centra en la infraestructura, asi como los servidores de red. (Walker, 2001)
  • Soporte de Nivel/Tier 4 (Ingeniería de Operaciones de Producto): Este nivel se centra en productos individuales que cuentan con problemas específicos, así mismo, buscan solucionarlos. (Walker, 2001)
  • Soporte de Nivel/Tier 5 (Ingeniería): Este nivel es el encargado de hacer y mantener los productos, así como vigilar su correcto funcionamiento y "salud". (Walker, 2001)
Para finalizar, podemos concluir con la definición de "Soporte de Software", en sustancia, decíamos que la combinación entre el mantenimiento de software y el soporte técnico nos darían como resultado al Soporte e Software. El Soporte de Software será entonces: 
El conjunto de actividades auxiliares o de asistencia las cuales buscaran anticipar, modificar, adaptar o perfeccionar un producto de software a posibles errores o problemas con su funcionamiento, y de igual manera ayudar al cliente con estos.
Por último, cabe mencionar que este Soporte de Software debería ser rentable para  la empresa que lo brinde, pues de no serlo, representaría costos excesivos, además de que es brindado antes y después de la entrega del producto de software.

Referencias

IEEE, T. I. (Diciembre 1992). Standard for software maintenance. Technical Report IEEE Std 1219-1993,.

ISO/IEC. (s.f.). Software engineering – software life cycle processes – maintenance. Septiembre 2006: Technical Report International Standard ISO/IEC 14764:2006.

Macario Polo, M. P. (Marzo 1999). MANTEMA: A Complete Rigorous Methodology for Supporting.

Walker, G. (2001). IT Problem Management (Harris Kern’s Enterprise Computing Institute Series). Upper Saddle River: Prentice Hall.: Google Bocks.

Ensayo: "Las Metodologías Ágiles"

Las metodologías ágiles están revolucionando la manera en la que se desarrolla software, Estas metodologías dejan de lado factores que podrían ser irrelevantes, y los sustituye por practicas amigables y sencillas que harán del desarrollo de software una experiencia mas personal entre el equipo y el cliente, a diferencia de las metodologías tradicionales las cuales eran estructuradas y de alguna manera, mas rigurosas en todos sentidos del proceso de desarrollo de software, pues establecían pautas precisas para obtener requerimientos, analizarlos, diseñar y proponían una documentación detallada de todo lo que se efectuaba sobre el software, por mencionar algunas de las normativas que seguían en esencia estas "metodologías tradicionales". Bien ahora, este ensayo busca explicar esta tendencia por las metodologías ágiles que se ha manifestado cada vez con mas frecuencia entre los equipos de desarrollo.

“Una metodología es una colección de procedimientos, técnicas, herramientas y documentos auxiliares que ayudan a los desarrolladores de software en sus esfuerzos por implementar nuevos sistemas de información. Una metodología esta formada por fases, cada una de las cuales se puede dividir en sub-fases, que guiarán a los desarrolladores de sistemas a  elegir las técnicas mas apropiadas en cada momento del proyecto y también a planificarlo, gestionarlo, controlarlo y evaluarlo.” (Fitzgerald, 1995)

Una metodología sera utilizada en el proceso de software, que son todas aquellas actividades que se llevan a cabo para elaborar software. Siendo así, la metodología implementada nos indicara las fases o procesos a realizarse durante el proceso. La representación del proceso, sus actividades y la manera en la que estas son elaboradas es el modelo de procesos.

Las metodologías ágiles surgen en febrero del 2001 durante una reunión entre 17 expertos de la industria del software que se celebro en Utah, USA, como se enuncia en Metodologías Ágiles en el Desarrollo de Software (José H. Canós). En esta reunión se establecieron las maneras para que se pudiera desarrollar software de manera relativamente mas rápida que utilizando las metodologías tradicionales, y que ademas fuera de una manera en la que pudiera responder a los cambios que surgieran durante el proceso. Como resultado, se creo "The Agile Alliance" una asociación que se encargaría de promover y difundir los conceptos del desarrollo ágil. Para plasmar estos conceptos, y formalizar esta nueva "filosofía del desarrollo de software", se elaboro el "Manifiesto Ágil".

En el Manifiesto Ágil se enuncian los principios y valores que debe se deben de cumplir para que una metodología pueda ser ágil. Sus 4 valores primordiales se enuncian a continuación (Aliance, s.f.):

·         A los individuos y su interacción, por encima de los procesos y las herramientas
·         El software que funciona por encima de la documentación exhaustiva
·         La colaboración por el cliente, por encima de la negociación contractual
·         La respuesta al cambio, por encima del seguimiento a un plan

Siendo así, podremos decir que las metodologías ágiles buscan volver del desarrollo de software un proceso mas interactivo y de colaboración que un guion a seguir. Para las metodologías ágiles es mas importante la colaboración cliente-equipo, pues así la obtención de requerimientos, como la estructura y cambios al software son factores que de manera tradicional se vuelven monótonos, pues los requerimientos pueden no ser plasmados con exactitud y los cambios podrían ser un problema según la fase en que el desarrollo vaya, todo esto, es optimizado por las metodologías ágiles, pues al contar con el cliente siendo "parte del equipo", los requerimientos siempre están actualizados y es en esencia la visión del mismo cliente. Sin embargo, algo debatible y de gran controversia en el mundo del desarrollo, es la documentación, pues para muchos es una parte fundamental del desarrollo (Metodologías tradicionales), para otros no toda la documentación es verdaderamente necesaria (Metodologías Ágiles). Podemos analizar este aspecto desde varias perspectivas pues, para el cliente puede llegar a ser irrelevante, pero para el equipo, si el cliente no trabaja con ellos de manera cercana en el desarrollo, es un gran sustento contar con la documentación, así mismo si el sistema desarrollado se vuelve heredado o si otro equipo va a trabajar sobre el mismo, la documentación entonces tomaría un papel muy relevante y su ausencia seria muy contraproducente, sin embargo, las metodologías ágiles no prohíben la redacción de la documentación, mas bien, proponen que solo se redacte la necesaria, y este hecho, es en efecto rentable pues en muchas ocaciones, solo la documentación necesaria es suficiente.

Algunos ejemplos de Metodologias Agiles son las siguientes:
  • EXTREME PROGRAMING, XP
  • SCRUM
  • Crystal Methodologies
  • Dinamic Systems development Method (DSM)
  • Addaptive Software Development (ASD)
Para concluir, podemos decir que las Metodologías Ágiles buscan optimizar todas aquellas actividades del proceso de desarrollo del software en las que las Metodologías Tradicionales normalmente tardarían mucho mas tiempo en realizar. Ademas, los Métodos Ágiles resuelven problemas sustanciales del desarrollo como es la obtención de los requerimientos y los cambios en los mismos. Como practica, no se puede decir que las Metodologías Ágiles son mejores a las tradicionales, y mucho menos, peores, en realidad surgen como una gran alternativa a estas, pues el hecho de que el cliente forme parte del equipo de desarrollo es una gran ventaja, facilita desde el análisis de la problemática hasta los  posibles cambios en los requerimientos, sin dejar de lado el factor de la documentación, en el cual, solo documentar lo esencial y necesario del desarrollo, podría ser una gran diferencia entre poder codificar mas y de manera mas intuitiva de acuerdo al mismo cliente que hacerlo siguiendo requerimientos que podrían cambiar. Es por ello que muchos equipos de desarrollo cada vez utilizan mas estas metodologías ágiles, pues se adecuan a al proceso de desarrollo de manera que lo vuelve mucho mas simple y eficiente. Sin duda alguna, las Metodologías Ágiles representan una evolución positiva en el mundo del desarrollo de software. 


Referencias

Aliance, A. (s.f.). Manifesto for Agile Software Development. Obtenido de http://agilemanifesto.org/

Fitzgerald, D. E. (1995). Information Systems Development: Methodologies, Techinques and Tools. McGraw-Hill.
José H. Canós, P. L. (s.f.). Métodologías Ágiles en el Desarrollo de Software. Camino de Vera s/n, 46022 Valencia: DSIC -Universidad Politécnica de Valencia.