Ingeniería de Software Herramientas, alcance, procesos
Septiembre 2010
UACH
–
FCA
–
SIP
Introducción Desde los años 40's las aplicaciones y usos de las computadoras han crecido de forma constante. Hoy en día el software juega un papel central en casi todos los aspectos de la vida cotidiana: gobierno, finanzas, educación, transporte, medicina, etc. Es por esto que en la actualidad el desarrollo del software representa un gasto considerable que tienen que realizar los países que desean continuar en desarrollo. De forma paralela, la complejidad de los sistemas ha crecido de forma dramática, y anualmente se gastan millones de dólares en cuestiones de desarrollo de software. Pero a pesar de que los sistemas de software nos han permitido ser más eficientes y productivos existen serios problemas relacionados con su desarrollo. Estos problemas tienen que ver con el tiempo, costo y calidad de los sistemas que se crean. Los productos de software se ubican entre los sistemas más complejos realizados por el hombre y su naturaleza intangible complica más el problema. Por lo general, las técnicas de desarrollo que funcionan de forma individual o para equipos pequeños no funcionan adecuadamente para el desarrollo de sistemas complejos. Además, si consideramos que la velocidad de cambio tecnológico es muy elevada, los clientes tienen nuevas expectativas y todo ello en conjunto, limita la habilidad de crear software de calidad en tiempos aceptables. Es muy importante saber, que un programador no es equivalente a un ingeniero de software. Cualquier persona puede sentarse a programar conociendo un lenguaje de programación, pero esto no garantiza que se pueda crear una solución compleja a una necesidad en tiempo, costo y calidad. El desarrollar software sin conocer técnicas de ingeniería representa un enfoque “artesanal” de desarrollo que hoy en día sigue siendo común. Es por lo anterior, que la ingeniería de software busca dar solución a este tipo de problemas utilizando métodos y herramientas para el desarrollo profesional de software.
Desarrollo La IEEE maneja como concepto de ingeniería de software a “la aplicación de un enfoque sistemático (ordenado), disciplinado y cuantificable al desarrollo, operación y mantenimiento de software, esto es, la aplicación de la ingeniería en el área del software” . La Ingeniería de Software es una disciplina de la Ingeniería que concierne a todos los aspectos de la producción de software. Los Ingenieros de Software adoptan un enfoque sistemático para llevar a cabo su trabajo y utilizan las herramientas y técnicas necesarias para resolver el problema planteado, de acuerdo a las restricciones de desarrollo y recursos tecnológicos disponibles. El proceso para desarrollo de software sigue, a grandes rasgos, los siguientes pasos: 1. Especificación: Qué debe hacer el software y cuáles son sus especificaciones de desarrollo. 2. Desarrollo: Producción del sistema de software. 3. Validación: Verificar que el software hace lo que el cliente pide. 4. Evolución: Cambiar/adaptar el software a las demandas. Este desarrollo se complica regularmente, porque las especificaciones son incompletas o absurdas y no existe una distinción precisa en la especificación, el diseño y la manufactura, por lo que solo hasta que el sistema se ha producido puede ser probado. Esto nos lleva a que los sistemas no cumplan con las necesidades de los usuarios, generando así pérdidas de tiempo en la modificación del software, por lo que el costo de corregir y mantener es el más alto asociado con el software. Y para ayudar a disminuir esos costos, las metodologías tradicionales haciendo énfasis en la planeación, y las metodologías ágiles haciendo énfasis en la adaptabilidad del proceso, delinean las principales propuestas. De manera paralela, el tema de modelos para el mejoramiento de los procesos de desarrollo ocupa un lugar importante en la búsqueda de la metodología adecuada para producir software de calidad en cualquier contexto de desarrollo.
Por ejemplo, XP, una de las más difundidas, es una metodología de desarrollo de software ágil que define pocas reglas y pocas prácticas. XP promueve la adaptabilidad de los procesos de desarrollo basándose en los principios y prácticas que presenta. Quienes trabajan usando XP 1 deben seguir procesos disciplinados, pero más que eso, deben combinar la disciplina con la adaptabilidad necesaria del proceso. Es importante tener en cuenta que el uso de un método ágil no es para todos. Sin embargo, una de las principales ventajas de los métodos ágiles es su peso inicialmente ligero y por eso las personas que no estén acostumbradas a seguir procesos encuentran estas metodologías bastante agradables. Algunos de los modelos ágiles son: Crystal Clear, Scrum, UP y MSF. Tanto los modelos ágiles como los tradicionales atacan el problema de mantener el conocimiento dentro de la organización: o o
Los grupos formales tienen documentación. Los grupos ágiles confían en las personas.
La principal diferencia es “académica”. En la vida real ambos tienen que llegar a un compromiso. Los diagramas, descripciones, explicaciones son de gran ayuda y son necesarios para entender la complejidad del sistema. La metodología por sí sola, sin personas, es solo texto muerto.
En el tema de Mejoramiento de Procesos de Software (SPI) se encuentra por ejemplo la propuesta realizada por el Instituto de Ingeniería de Software con su trabajo sobre IDEAL 2 y CMMI3. Sin embargo, al igual que para los procesos de desarrollo, las prácticas requeridas para mejorar un proceso de software dependen altamente del contexto donde se mejoran los procesos. Por ejemplo, no es igual mejorar los procesos al interior de equipos con alta rotación, y gran número de participantes, que mejorarlos en un equipo pequeño y estable. Antes de definir el modelo de ciclo de vida de desarrollo para un proyecto dentro del contexto señalado, hay que entender los fundamentos básicos, los obstáculos y ventajas, antes de seguir un modelo determinado.
1
Programación Extrema o eXtreme Programming (XP) es un enfoque de la ingeniería de software formulado por Kent Beck. 2 Impulsora del Desarrollo Económico de América Latina. 3 Modelo de calidad del software que clasifica las empresas en niveles de madurez.
Esto incluye como primera medida, realizar un estudio de las prácticas que se van a poner en ejecución dentro de un proyecto. Los modelos híbridos (tradicionales y ágiles) deben ser estructurados teniendo en cuenta las características propias del proyecto. UP
–
Proceso Unificado
Es un proceso de desarrollo de software configurable que se adapta a través de los proyectos variados en tamaños y complejidad. Se basa en muchos años de experiencia en el uso de la tecnología orientada a objetos en el desarrollo de software de misión crítica en una variedad de industrias por la compañía Rational. El UP guía a los equipos de proyecto en cómo administrar el desarrollo iterativo de un modo controlado mientras se balancean los requerimientos del negocio, el tiempo al mercado y los riesgos del proyecto. El proceso describe los diversos pasos involucrados en la captura de los requerimientos y en el establecimiento de una guía arquitectónica lo más pronto, para diseñar y probar el sistema hecho de acuerdo a los requerimientos y a la arquitectura. El proceso describe qué producir, cómo desarrollarlo y también provee patrones. El proceso unificado es soportado por herramientas que automatizan entre otras cosas, el modelado visual, la administración de cambios y las pruebas.
MSF - Microsoft Solutions Framework Es una serie de modelos flexibles interrelacionados que guían a una organización sobre cómo ensamblar los recursos, el personal y las técnicas necesaria para asegurar que su infraestructura tecnológica y sus soluciones cumplan los objetivos de negocio. Mantiene una relación clara entre los objetivos de negocio y las implementaciones tecnológicas y proporciona las técnicas ligadas a la tecnología. Muestra como estructurar equipos de alto desempeño para crear soluciones más rápido, mejor y más baratas. MSF considera que hay cuatro perspectivas de arquitectura que cumplen los requerimientos de una empresa: Arquitectura de negocios, arquitectura de aplicación, arquitectura de información y arquitectura tecnológica.
Tanto el Proceso Unificado como MSF se enfocan en la arquitectura como el centro del desarrollo para asegurar que el desarrollo basado en componentes sea clave para un alto nivel de reúso. XP
–
Extreme Programming
Es el más destacado de los procesos ágiles de desarrollo de software. Al igual que éstos, la programación extrema se diferencia de las metodologías tradicionales principalmente en que pone más énfasis en la adaptabilidad que en la previsibilidad. XP se enfoca en la comunicación con el cliente y el trabajo en equipo. Las cuatro claves de XP son: o o o o
Comunicación Simplicidad Retroalimentación Coraje
Es utilizado en proyectos con requerimientos cambiantes con equipos de desarrollo pequeños (entre 2 y 12 personas). Se puede considerar la programación extrema como la adopción de las mejores metodologías de desarrollo de acuerdo a lo que se pretende llevar a cabo con el proyecto, y aplicarlo de manera dinámica durante el ciclo de vida del software.
Conclusiones El software es un motor para el crecimiento económico de cualquier país. Como podemos darnos cuenta en nuestra vida cotidiana, la tecnología se aplica a cada una de nuestras actividades diarias, en nuestros empleos, en el supermercado, en la educación, etc. Es por esto que el software, como necesidad fundamental del hardware, toma un papel importantísimo dentro de este desarrollo y actividad diaria. Considero que nuestro país no es la excepción de esta necesidad de introducir tecnología de punta e invertir en TI que lo ayuden a salir de su nivel de subdesarrollado a un país con capacidades económicas considerables. Actualmente existen empresas nacionales que se dedican al desarrollo de software de alguna u otra forma. Lamentablemente la falta de apoyo por parte de nuestros gobiernos impide que crezcan y se conviertan en empresas reconocidas, como las que actualmente se encuentran en Estados Unidos u otros países con economías sólidas. Pero a pesar de todos los obstáculos que se puedan presentar, PROSOFT 4establece claramente la necesidad de contar con personas capacitadas, y no de hacer la contratación de externos, sino de capacitar a nuestra gente para que por medio de técnicas y métodos bien establecidos puedan desarrollar el software con las características necesarias para hacerlo funcional, en costo y tiempos adecuados. Se podrán combatir los problemas relacionados con el software, en la medida en que se tome con seriedad la producción del mismo. Por lo que considero que la Ingeniería de éste, como tal, es la creación de software de calidad que ayude a dar solución a los problemas que afectan directamente a los seres humanos en su actividad cotidiana. Utilicemos pues las herramientas que se nos dan para desarrollar el software de calidad de la mejor manera, y así contribuir al desarrollo de nuestro país.
4
Programa para el Desarrollo de la Industria del Software.
Bibliografía http://www.acis.org.co/index.php?id=551 http://www2.uacj.mx/IIT/CULCYT/agosto-septiembre2004/4ARTIC~1.PDF http://www.mitecnologico.com/Main/ElModeloProcesoUnificado http://www.slideshare.net/fmmeson/metogologias-de-desarrollo-de-software-tradicionales-vs-agiles