Universidad Nacional del Altiplano – Puno
Facultad De Ingeniería Mecánica Eléctrica, Electrónica Y Sistemas Escuela Profesional De Ingeniería De Sistemas
Ingeniería de Software Monografía: Desarrollo Software Docente:
Adaptativo
Ing. Elmer COYLA IDME
Alumnos: ROMERO ALMONTE, Yoel Diomedez VARGAS CAMACHO, Juan Carlos
Puno
–
Perú
de
2015 Desarrollo adaptativo de software I.
Breve Historia Para muchas personas el software son solo programas de computadora, sin embargo nos comenta que son todos aquellos documentos asociados a la configuración de datos que se necesitan para hacer que estos programas operen de manera adecuada. Estos productos de software se desarrollan para algún cliente en particular o para un mercado en general. Para el diseño y desarrollo de proyectos de software se aplican metodologías, modelos y técnicas que permiten resolver los problemas. En los años 50 no existían metodologías de desarrollo, el desarrollo estaba a cargo de los propios programadores. De ahí la importancia de contar con analistas y diseñadores que permitieran un análisis adecuado de las necesidades que se deberían de implementar. Aun así los resultados eran impredecibles, no se sabía la fecha exacta en que concluiría un proyecto de software, no había forma de controlar las actividades que se estaban desarrollando. Tampoco se contaba con documentación estandarizada. El nacimiento de técnicas estructuradas es lo que da origen al desarrollo de aplicaciones a través de métodos de ingeniería. La informática aporta herramientas y procedimientos que se apoyan en la ingeniería de software con el fin de mejorar la calidad de los productos de software, aumentar la productividad y trabajo de los ingenieros desarrolladores de software, facilitar el control del proceso de desarrollo de software y suministrar a los desarrolladores las bases para construir software de alta calidad en una forma eficiente. El objetivo principal que busca la ingeniería de software es convertir el desarrollo de software en un proceso formal, con resultados predecibles, que permitan obtener un producto final de alta calidad y satisfaga las necesidades y expectativas del cliente. A partir de aquí nacen muchas modelos y metodologías para el desarrollo de software. El desarrollo adaptativo de software ASD (por sus siglas en inglés) fue creada por Jim Highsmith en 1998 como una metodología para desarrollar software y sistemas complejos, que se describe en su libro de 1999 “Adaptive Software Development”. Un enfoque de desarrollo ágil y adaptativo basado en la colaboración es " una fuente de orden en las complejas interacciones entre disciplina e ingeniería".
1) Especulación; en esta fase se inicia el proyecto y se conduce el ciclo adaptativo de planeación. Este último utiliza información de inicio del proyecto, es decir, el enunciado de la misión del cliente, restricciones del proyecto y los requisitos básicos. Esto permite definir el conjunto de ciclos de lanzamiento que se requerirán para el proyecto. 2) Colaboración; la gente motivada trabaja de una forma que multiplica su talento y sus salidas creativas más allá de sus números absolutos. Este enfoque de colaboración es un tema recurrente en todos los métodos ágiles, pero la cooperación no es fácil. No solamente es la comunicación, o que la comunicación es parte de ella. No sólo es un asunto de trabajo en equipo, aunque un equipo cuajado es esencial para la presencia de la colaboración real. No es un rechazo al individualismo ya que la creatividad individual representa un papel importante en el pensamiento de colaboración. Esto es, por encima de todo, una cuestión de confianza. Las personas que trabajan juntas deben confiar entre sí para: a) Criticar de forma constructiva b) Ayudar sin resentimientos c) Trabajar más duro de lo que ya lo hace d) Tener el conjunto de actitudes para contribuir al trabajo curso e) Comunicar los problemas o preocupaciones en una forma que conduzca a la acción efectiva 3) Aprendizaje; como miembros de un equipo de DAS se comienzan a desarrollar los componentes integrantes de un ciclo adaptativo, la importancia radica en el aprendizaje y en el progreso a través de un ciclo completo. De hecho Highsmith argumenta que los desarrolladores de software a menudo sobreestima su comprensión (de la tecnología, el proceso y el proyecto), y que el aprendizaje les podré ayudar a mejorar su grado de entendimiento real. Los equipos del DAS aprenden de tres maneras: a) Grupos enfocados. El cliente o los usuarios finales proporcionan retroalimentación sobre los incrementos de software que se entregan. Esto indica en forma directa la satisfacción o la insatisfacción de las necesidades del negocio.
b) Revisiones técnicas formales. Los miembros del equipo del DAS revisan los componentes del software desarrollado mientras mejoran su calidad y su aprendizaje.
c) Post mortem. El equipo de DAS se vuelve introspectivo al vigilar su propio desempeño y proceso con el propósito de aprender acerca de su enfoque y después mejorarlo.
Es importante destacar que la filosofía del DAS es meritoria sin importar el modelo del proceso empleado. La dinámica de la organización propia los equipos, la colaboración interpersonal y el aprendizaje individual conducen a los grupos de proyectos de software con una mayor posibilidad de éxito. Los apoyos filosóficos del ASD se enfocan en la colaboración humana y la organización propia del equipo.
II.
Definiciones Los procesos de desarrollo del software basados en una completa especificación de los requerimientos, diseño, construcción y pruebas del sistema no se ajustan al desarrollo rápido de aplicaciones. Cuando los requerimientos cambian o se descubren problemas con ellos, el diseño o implementación del sistema se tiene que volver a realizar o probar. Como consecuencia, normalmente se prolonga en el tiempo un proceso en cascada convencional y el software definitivo se entrega mucho tiempo después al cliente con el que inicialmente se pactó. En un entorno de negocios tan cambiante, esto puede causar verdaderos problemas. Para cuando esté disponible el software, la razón original de su adquisición puede ser que haya cambiado de forma radical que en realidad éste sea inútil. Actualmente los negocios operan en un entorno global que cambia rápidamente. Tienen que responder a nuevas oportunidades y mercados, condiciones económicas cambiantes y la aparición de productos y servicios competidores. El software es parte de casi todas las operaciones de negocio, por lo que es fundamental que el software nuevo se desarrolle rápidamente para aprovechar nuevas oportunidades y responder a la presión competitiva. Actualmente el desarrollo y entrega de manera rápida son los requerimientos más críticos de los sistemas. De hecho, muchas organizaciones están dispuestas a obtener una pérdida en la calidad del software y en el compromiso sobre los requerimientos en favor de una entrega rápida del software. Esta entrega rápida del software necesita otra metodología llamada Desarrollo de Software Ligeras, que luego fueron llamadas Ágiles.
Dicha metodología combina una filosofía y un conjunto de directrices de desarrollo. La filosofía busca la satisfacción del cliente y la entrega temprana de software incremental, equipos pequeños con alta motivación, métodos informales y una simplicidad general del desarrollo. Los procesos de desarrollo rápido de software están diseñados para producir software útil de forma rápida. Generalmente, son procesos interactivos en los que se entrelazan la especificación, el diseño, el desarrollo y las pruebas. Como habíamos dicho Jim Highsmith es la mente detrás de este proceso ágil. ASD consiste en un cambio de filosofía en las organizaciones pasando de la transición del modelo ComandoControl al modelo Liderazgo-Colaboración. Basado en los conceptos de los Sistemas Adaptativos Complejos relacionada con la Inteligencia Artificial, Highsmith lleva los mismos al campo de la Ingeniería de Software en particular. Dada la complejidad inherente al software concluye que la aplicación de esta teoría es esencial para el nuevo escenario que plantea la economía global. Barry Boehm indica que las actividades se conforman en una espiral, en la que cada bucle o iteración representa un conjunto de actividades. Las actividades no están fijadas a ninguna prioridad, sino que las siguientes se eligen en función del análisis de riesgo, comenzando por el bucle interior. Sin embargo, Ikujiro Nonaka e Hirotaka Takeuchi, definen a los marcos de desarrollo ágiles denotan, adoptar una estrategia de desarrollo incremental, en lugar de la planificación y ejecución completa del producto. Basar la calidad del resultado más en el conocimiento tácito de las personas en equipos auto-organizados, que en la calidad de los procesos empleados. Junto con el solapamiento de las diferentes fases del desarrollo, en lugar de realizar una tras otra en un ciclo secuencial o de cascada. Por otro lado, Kent Beck, nos dice que una metodología ágil se debe basar en los valores de simplicidad, comunicación, retroalimentación (feedback) coraje y respeto. Con estos valores creen que ser capaz de adaptarse a los cambios de requisitos en cualquier punto de la vida del proyecto es una aproximación mejor y más realista que intentar definir todos los requisitos al comienzo del proyecto e invertir esfuerzos después en controlar los cambios en los requisitos. Al final tendremos un ciclo basado en Deming, el cual tendrá comenzará por hacer un cambio en el modelo de desarrollo determinista, tomado dicho ciclo, en que se aplica la secuencia Planificar-Ejecutar-Evaluar. Tal esquema es llevado a la práctica con
el modelo en cascada, en que se realiza una precisa planificación inicial mediante el WBS, el Gantt, y el Pert definiendo las tareas a realizar en detalle, luego se tiene las fases de construcción, y finalmente, se tiene el testing que brinda el feedback en relación al producto construido.
III.
Fases
Características
Highsmith argumenta que un enfoque de desarrollo adaptativo basado en la colaboración es “tanto una fuente de orden en nuestras complejas interacciones, como de disciplina e ingeniería”. El define un ciclo de vida del ASD que incorpora tres fases: especulación, colaboración y aprendizaje.
Especulación, se inicia el proyecto y se lleva a cabo la planeación adaptativa del ciclo. La especulación emplea la información de inicio del proyecto, enunciado de misión de los clientes, restricciones del proyecto y requerimientos básicos para definir el conjunto de ciclos de entrega (incrementos de software) que se requerirán para el proyecto Colaboración, las personas motivadas la usan de manera que multiplica su talento y producción creativa, sin embargo, la colaboración no es fácil, incluye la comunicación y el trabajo en equipo, pero también resalta el individualismo porque la creatividad individual desempeña un papel importante en el pensamiento colaborativo. Es cuestión, sobre todo de confianza. Aprendizaje, conforme los miembros de un equipo ASD comienzan a desarrollar los componentes que forman parte de un ciclo adaptativo, el énfasis se traslada al aprendizaje de todo lo que hay en avance hacia la terminación del ciclo. En resumen tendríamos la figura siguiente; en la cual se puede ver el detalle interno de cada fase como ya fue explicado, mostrándose con una flecha que trasciende las tres fases en sentido inverso, el bucle de aprendizaje. Este bucle es algo crítico para ASD ya que denota un cambio en el esquema tradicional de la vista de un sistema en que se
tenía un bucle de control para detectar diferencias y corregirlas. Es decir, en las metodologías tradicionales las diferencias respecto a lo planificado eran vistas como errores que debían ser enmendados para que cumplieran lo pautado. ASD y las metodologías ágiles plantean la necesidad de que el feedback necesario sea para aprender, nos da la posibilidad de entender más respecto al dominio y construir la aplicación que mejor satisfaga las necesidades del cliente. Highsmith lo expone claramente en la siguiente frase:
IV.
Ventajas y Desventajas Ventajas Desventajas
Se utiliza para poder aprender
-
Los errores y cambios que no son detectados con anterioridad afectan la calidad del producto y su costo total.
-
Ya que esta es una metodología ágil, no permite realizar procesos que son requeridos en las metodologías tradicionales.
de los errores e iniciar nuevamente el ciclo de desarrollo. Utiliza información disponible
acerca de todos los cambios para poder mejorar el comportamiento del Software. Difunde la colaboración de
distintas personas.
V.
Casos de éxito Uno de los casos más notables del éxito de esta metodología en el mundo actual es en el de las telecomunicaciones. A pesar de que la tecnología aquí empleada no cumple con los sueños y visiones de los hombres de antes, se tiene un acercamiento cada vez más cercano a las visiones e imaginaciones de los mismos realizadores de películas futuristas de los años 70. Una gran desventaja que se tiene es el cambio relativamente brusco de la tecnología en estos días. Se tiene así que pues mientras tengamos una computadora de cinco núcleos de procesamiento, mañana saldrá una de once. Dejando, no tanto como obsoleta nuestra máquina sino que esta pasará a ser una que ya no esté en el filo de la tecnología de la noche a la mañana. Lo mismo pasa con los celulares, tablets, y demás artefactos de tecnología que tengamos. Pasarán a la historia de la noche a la mañana. Esto hace que nuestro mundo cambiante, sea netamente impredecible, pues por más actualizados que seamos en este tema de la tecnología, no podremos estar al tanto de lo que cada compañía tecnológica haga. Por ende, al desarrollar un sistema, y que este cumpla con los requerimientos que satisfagan al cliente, sea en la tecnología que apliquemos, necesitamos estar frente al cambio no como un objeto evolutivo, más sino como uno adaptable. Es en esto que debemos de someternos al cambio y a la metamorfosis constante de la tecnología sin sufrir pérdidas. Esto nos lleva a que la idea de un software que desarrollemos no cambie según el tiempo, sino esta se mantenga y mediante los componentes necesarios sea lo suficientemente flexible y logre adaptarse netamente a los cambios que el mañana depare. Los casos de éxito que se tiene en la aplicación de esta metodología es los sitemas operativos Android y de iPhone, siendo el primero el que mayor adaptabilidad ha sufrido, debido a que al ser más aplicado a dispositivos móviles, necesitar ser más adaptable, ya que la tecnología en estos dispositivos como fue mencionado anteriormente está disparada. Citando el siguiente párrafo de Metodología de desarrollo ágil para sistemas móviles Introducción al desarrollo con Android y el iPhone (Paco Blanco, Julio Camarero,etc.), tenemos, que a medida que el negocio de las aplicaciones móviles se va expandiendo y haciéndose rentable, se tienen que investigar las metodologías óptimas de desarrollo software para tales aplicaciones y entornos que lleven dicho desarrollo a éxito de una forma tractiva y eficiente; todo esto antes de que sea demasiado tarde y que el mercado esté tan maduro que las empresas hayan optado por las metodologías ya implementadas de software tradicional. Aunque éstas difieran bastante de las metodologías necesarias debido a que el software
móvil debe satisfacer requerimientos y restricciones especiales. A pesar de estas características tan especiales, el software producido debe exigir un alto nivel de calidad para que este puede operar propiamente en la cantidad ingente de terminales que llenan el mercado actual y el venidero. El desarrollador de aplicaciones móviles se enfrenta, además, con un escenario muy fragmentado, formado por multitud de plataforma incompatibles, como Symbian, Windows Mobile, Brew, iPhone SDK, Android, Linux o Java. Todo esto hace que el proceso de desarrollo para plataformas móviles sea más complejo. Entonces es entendido que es necesario no un cambio de una idea, sino, su adaptación al cambiante mundo tecnológico hoy en día. Otro ejemplo dado es el del caso del navegador Opera. Opera es un navegador web creado por la empresa noruega Opera Software, que e usa el motor de renderizado Blink. Este navegador tiene versiones para computadoras de escritorio, teléfonos móviles y tabletas. Los sistemas operativos compatibles con Opera de escritorio son Microsoft Windows, Mac OS X y GNU/Linux (Ubuntu 64-bit). Los sistemas operativos móviles soportados son Maemo, BlackBerry, Symbian, Windows Mobile, Windows Phone, Android e iOS; así como la plataforma Java ME. Existe también una suite de Internet antigua de Opera, basada en el motor Presto, que aún sigue recibiendo soporte de seguridad a pesar de ser ya casi obsoleto. Opera ha sido pionero en originar características que han sido posteriormente adoptadas por otros navegadores web, como por ejemplo el Acceso Rápido (Speed Dial). Eso tiene que ser tomado en cuenta, debido a que su adaptabilidad es clara. El navegador no sufrió cambio en su idea original sino en su cambio de plataforma. Usa la menor cantidad de transferencia de datos para que su desempeño sea rápido. Y en comparación de navegadores grandes como el Chrome o el Safari, se pierden detalles como fuentes especiales que los diseñadores web pusieron en sus páginas, pero frente a las necesidades de lugares como Perú, por ejemplo, en donde el ancho de línea no es del todo eficiente, hace que el navegador cumpla su objetivo sin complicaciones. Lo que se debe tener en cuenta es lo resaltante de la adaptabilidad del software en el entorno tecnológico hoy en día. Si este es testeado en una tablet moderna, así como en un celular con Android o en un Blackberry de hace más de cinco años, el desempeño será el mismo (las diferencias de velocidad serán determinadas por la máquina al final).
VI.
Papers en Observación Metodologías tradicionales vs Metodologías Ágiles. Roberth G. Figueroa , Camilo J. Solís, Armando A. Cabrera. Universidad Técnica Particular de Loja, Escuela de Ciencias en Computación Resumen: En conclusión general es indicado que el papel preponderante de las metodologías es sin duda esencial en un proyecto y en el paso inicial, que debe encajar en el equipo, guiar y organizar actividades que conlleven a las metas trazadas en el grupo. En el trabajo presentado en este paper se detallan los dos grandes enfoques, tanto metodologías tradicionales y metodologías ágiles, indicando así que las primeras metodologías están pensadas para el uso exhaustivo de documentación durante todo el ciclo del proyecto mientras que las segundas ponen vital importancia en la capacidad de respuesta a los cambios, su adaptación, la confianza en las habilidades del equipo y al mantener una buena relación con el cliente. Son explicadas también las diferencias, ventajas, desventajas y cual puede encajar en un proyecto de software. Además de que los autores plantean al final una cuestión al lector de poder decidir su respuesta frente a lo que cree que es conveniente para el desarrollo de software. Comparative Study on Agile software development methodologies. A B M Moniruzzaman y Dr Syed Akhter Hossain. Resumen: Plantea que frente al cambio constante de los requerimientos y los ajustes de los nuevos ambientes, además de las demandas para la entrega de software en el mundo actual, se debe tener en cuenta que las metodologías tradicionales no colaboran al cambio real del mundo actual. En torno a satisfacer las necesidades de los cliente, se tienen que tener en cuenta métodos basados en procesos de desarrollo que sean iterativos e incrementales, donde los requerimientos y el desarrollo evolucionen a través de a colaboración y organización de equipos que permitan la entrega rápida de un sistema de alta calidad que pueda encontrar el cliente para que este en sí quede satisfecho. Este sistema también se debe acomodar a los cambios de los requerimientos que el cliente objete durante todo el proceso de su desarrollo. El paper describe las mejoras que los procesos ágiles permiten en comparación a las metodologías tradicionales. Además de que indica que las metodologías ágiles surgen como una alternativa a los métodos basados en un sólo plan de los sistemas tradicionales además de proveer un profundo entendimiento de los más resaltantes beneficios que se aplican en la industria del desarrollo de software.
VII.
Resumen En el desarrollo de software hay una tensión entre la calidad, costo y tiempo. Dejando atrás la competencia de costos en la actualidad en los restringidos mercados es una tarea muy difícil. Muchos procesos tradicionales para el desarrollo de software son muy pesados con la documentación y el control de los mecanismos suele ser muy rígido, haciendo que sea difícil su aplicación a diversos proyectos. Nuevas familias de procesos, referidos como Procesos Ágiles, están, o bueno son, aplicados ahora a la industria de software. Estos procesos se basan en un código más que en la documentación llamándose así ágiles, porque, en comparación de los procesos tradicionales, son adaptables y no rígidos. Una de las metodologías de estos procesos es el Adaptive Software Development, Desarrollo Adaptativo de Software (ASD en adelante), desarrollado por Jim Highsmith. A pesar de que no se proveen los detalles generalmente asociados con el proceso. Los hitos, métodos y derivados no son los elementos específicos discutidos por el ASD. En vez de eso, el ASD pone en énfasis la aplicación de ideas originadas en los complejos sistemas adaptativos. El ASD provee la base fundamental para desarrollar sistemas adaptativos de los cuales surgen los sistemas ágiles. Tomando esto es entendido que el núcleo del ASD es la premisa que resulta y es naturalmente impredecible, y sin embargo, su planeamiento es paradójica. Esto nos hace entender que no es posible planear un movimiento rápido e impredecible en el ambiente de los negocios. El desarrollo adaptativo es esencial cuando se tiene a los desarrolladores, clientes, vendedores, competidores y accionistas todos juntos intentado interactuar uno con otro para lidiar con las reglas de causa y efecto que no pueden asegurar un éxito. El ASD reemplaza el ciclo de vida evolucionario con un modelo de ciclo de vida adaptativo. Como se tiene abajo. Comparando esos dos modelos, el ASD reconoce que no es deseable el cómo experimentar constantemente esperando encontrar éxito. Por otro lado, la palabra planeamiento es demasiado determinística para nuestro mundo impredecible, así que el ASD prefiere la palabra Especular. Desarrollar una idea de adónde nuestro proyecto es dirigido, y poner los mecanismos en el lugar correcto para adaptarlo a los cambios que los clientes necesiten, cambiando también la tecnología y el mercado. La colaboración reemplaza el desarrollo, porque, según el ASD, se tiene que las personas son el ingrediente esencial para producir un producto que sea meramente exitoso. La colaboración es el balance de las actividades: administrando un proyecto como el control de las configuraciones y el cambio administrativo, con la creatividad de las personas de confianza para poder encontrar respuestas creativas en
un entorno impredecible; y al final completando el ciclo con el debido aprendizaje. El aprendizaje es preferido sobre la revisión o la modificación, por que la revisión es mirar hacia atrás. La revisión en el contexto del ciclo de vida evolucionario implica que mientras es necesario un cambio este es un cambio en el plan original. El Aprendizaje, sin embargo, es el acto de ganar más experiencia. Poniendo el producto bajo el escrutinio y la inquisición de todas las previas conjeturas, usando los resultados del ciclo para poder aprender qué dirección el siguiente ciclo debe tomar. El ASD no es presentado como una metodología de hacer proyectos de software pero más es como un alcance de una actitud que debe ser adoptada por una organización cuando aplica procesos ágiles. Adoptando la premisa de que este mundo está en ritmo constantemente acelerado e impredecible requiriendo procesos adaptativos para ser completos y exitosos. En fin este es el mensaje que dejó Jim Highsmith.
VIII.
Referencias
Bruegge, B., Dutoit, A.H., Ingeniería del Software Orientado a Objetos, cap. 1 Juan F. Inglés-Romero y Cristina Vicente-Chicote, Desarrollo de Software Adaptativo para Robótica, División de Sistemas e Ingeniería Electrónica (DSIE). Universidad Politécnica de Cartagena Jacobson, I., Booch, G., Rumbaugh, J., El Proceso Unificado de Desarrollo de Software, cap. 1 Pressman, R.S., Ingeniería del Software. Un enfoque práctico, cap. 1y2 Sommerville, I., Ingeniería de Software, cap. 1, 2 y 3 Everette R. Keith, Agile Software Development Processes A Different Approach to Software Design
Referencias Web Metodología DAS Desarrollo adaptativo del software. Noviembre del 2011. http://inf162expogrupo10-2011.blogspot.com/2011/11/metodologiadas-desarrollo-adaptativo.html
Desarrollo adaptativo de software (DAS), Junio del 2011. http://desarrolloadaptativodesoftware.blogspot.com/2011/06/desarr ollo-adaptativo-de-software-das.html
José Luis Cendejas Valdéz (CV), Implementación Del Modelo Integral Colaborativo (Mdsic) Como Fuente De Innovación Para El Desarrollo Ágil De Software En Las Empresas De La Zona Centro Occidente En México, Noviembre del 2013. http://www.eumed.net/tesis-doctorales/2014/jlcv/software.htm