Historia y futuro de la Ingeniería de Software. Visión de Barry Boehm.

Publicado en

Autor

Para cuando lean esta columna, probablemente ya se habrá llevado a cabo la International Conference on Software Engineering (ICSE’06) en Shanghai, donde Barry Boehm participará como conferencista, y en su plática presentará su visión de la perspectiva histórica y el futuro de la Ingeniería de Software. Así que conociendo la importancia de este personaje y el impacto de sus opiniones, les comparto un pequeño resumen del artículo que Boehm desarrolló para esta ocasión y que nos hizo llegar a los miembros del IPRC (International Process Research Consortium).

El autor empieza por darnos su definición de la Ingeniería de Software: “... es la aplicación de la ciencia y las matemáticas a la construcción del software de tal forma que sus propiedades lo hacen útil para las personas.”

Lo que me llama la atención en esta definición es el énfasis en las propiedades de software útiles para el cliente. Esto nos habla de calidad del software, pero no desde una perspectiva de actividades —como otras definiciones—, sino del valor generado para el cliente. Posteriormente, el artículo hace una retrospectiva sobre la ingeniería de software desde los años cincuenta hasta la época actual, y termina con predicciones para el próximo par de décadas. Veamos entonces los puntos más significativos:

Años Cincuenta

Se aplica al desarrollo de software el mismo proceso que al desarrollo de hardware, tipo cascada rigurosa. Las lecciones aprendidas fueron las siguientes:

Buenos principios

  • No ignorar matemáticas, ciencias de la computación, sociales, económicas y administrativas.
  • Usar el método científico para aprender a través de la experiencia.
  • No comprometerse demasiado antes de entender la complejidad de un proyecto Evitar
  • Seguir demasiado rigurosamente el proceso de desarrollo secuencial.

Sesentas

El desarrollo de software es artesanal. Las propiedades de software, tales como: fácil de modificar, fácil de copiar, no se gasta, es invisible, fomentaron el proceso de desarrollo tipo “codifica y corrige” (code and fix). Se inició la cultura del hacker en el buen sentido de la palabra, es decir experto en programación, y la del vaquero (cowboy) que hace desarrollos heroicos de última hora.

Buenos principios

  • Atreverse a hacer prototipos novedosos, no limitarse a repetir lo que ya se conoce.
  • Respetar que el software es diferente. No se puede incrementar la velocidad de su desarrollo de manera infinita.

Evitar

  • Programación al estilo vaquero. Parches de último minuto o trabajo de última noche pueden traer graves consecuencias.

Setentas

Se identifican las diferentes fases del desarrollo: requerimientos, análisis, diseño, codificación y pruebas. Se introduce la programación estructurada y métodos formales para especificar software. Se identifican principios de diseño, como modularidad, encapsulación, abstracción de tipos de datos, acoplamiento débil y alta cohesión, entre otros. Se publica el modelo de cascada y se definen los conceptos de verificación y validación.

Buenos principios

  • Eliminación temprana de defectos y su prevención a través del análisis de causa.
  • Determinación temprana del propósito de sistema para tener una visión compartida con el cliente.

Evitar

  • Desarrollo descendente (top-down) a toda costa. Los requerimientos emergentes y los cambios lo hacen poco realista, para la mayoría de los casos.

Ochentas

Se busca la productividad y escalabilidad de sistemas y equipos de desarrollo. La Orientación a Objetos renace con fuerza a través de las múltiples propuestas de lenguajes de programación. Se crea el primer modelo de madurez de capacidades de procesos (SW-CMM) y los primeros estándares. Nace el concepto de Fábricas de Software y se generan las primeras herramientas para incrementar la productividad a través de la programación por el usuario, tales como 4GLs.

Buenos principios

  • Hay muchos caminos para incrementar la productividad que incluyen la selección del personal, capacitación, herramientas, reutilización, mejora de procesos, entre otros.
  • Lo que es bueno para el producto es bueno para el proceso, por ejemplo: arquitectura, composición y adaptación.

Evitar

  • Pensar que existe una solución mágica (silver bullet) que aplica a toda clase de problemas.

Noventas

La concurrencia (paralelismo y distribución) adquiere mayor importancia con respecto a procesos secuenciales. La Orientación a Objetos se extiende a las fases de análisis y diseño. Se acuerda un lenguaje de modelado (UML) y se genera el primer proceso comercial de desarrollo orientado a objetos (RUP). Los diseñadores y los arquitectos de software empiezan a recaudar las mejores experiencias a través de patrones de diseño y de arquitectura. Se define el Modelo Espiral para el desarrollo basado en el análisis de riesgos y su vertiente conocida como desarrollo iterativo e incremental. El Software Libre toma fuerza y se crean los primeros ejemplos exitosos. La usabilidad de sistemas se convierte en el foco de atención e investigación. Software empieza a ocupar la posición crítica en el mercado competitivo y en la sociedad (web).

Buenos principios

  • El tiempo es dinero. La gente invierte en software esperando retorno de inversión, mientras más rápido se desarrolle el software, más rápido se recupera la inversión, pero eso pasa sólo en el caso cuando la calidad de software es satisfactoria.
  • El software tiene que ser útil para la gente, es la parte crucial de la definición de Ingeniería.

Evitar

  • Hacer las cosas demasiado rápido. Los hitos muy ambiciosos a menudo traen como consecuencia las especificaciones incompletas, que resultan en mucho re-trabajo.

Situación Actual

Los temas nuevos son la agilidad en el desarrollo y el valor para el cliente. Se redacta el Manifiesto de Agilidad en respuesta al estilo promovido por CMM. Surgen nuevos dispositivos (PDAs, celulares) que involucran el ciclo: Aprendizaje-Seguridad-Mejorar su uso. Las cualidades prioritarias de sistemas son: Seguridad/Privacidad, Usabilidad y Confiabilidad. Se incrementa la propagación de software empaquetado COTS (Commercial-Off-The_Shelf). Crece el entendimiento de las bondades del código abierto. El desarrollo dirigido por modelos (MDD, Model Driven Development) toma fuerza. Se integra el proceso de desarrollo de software con el de sistemas.

Buenos principios

  • Cuando los cambios son frecuentes la adaptabilidad del proceso debe ser más importante que la repetición.
  • Primero hay que considerar y satisfacer los asuntos que son de valor para el cliente.

Evitar

  • Enamorarse de tus propios lemas. Decir al cliente “no lo vas a necesitar”, no siempre es cierto.

Prospectiva para las Décadas de 2010 y 2020

Las tendencias que van a afectar, en el futuro próximo, la forma de desarrollar software son las siguientes:

  • Globalización. La conectividad global proporcionada por el Internet y las comunicaciones de banda ancha causará la evolución de las principales economías hacia redes de economías. En consecuencia, se requerirá de nuevos procesos de desarrollo para la colaboración global exitosa. Los retos claves serán: la colaboración multicultural, lograr las visiones compartidas y la confianza, definir mecanismos de contratación, incentivos, entregas y la sincronización de cambios, que aprovechen múltiples zonas horarias. Algunos problemas relacionados con diferencias culturales fueron identificados en un estudio sobre la adopción de procesos. Por ejemplo, SW-CMM que proviene de la cultura Individualista/Masculina/Corto plazo tuvo muy baja aceptación en la cultura de Tailandia que es Colectiva/Feminista/Largo plazo.
  • Sistemas de sistemas. La habilidad de las organizaciones de competir, adaptarse y sobrevivir en el mercado y en la sociedad globalizada va a depender, en gran medida, su habilidad para integrar sistemas de software en sistemas de sistemas (Systems Of Systems - SOS). Un SOS integra múltiples sistemas desarrollados independientemente y se caracteriza por su gran tamaño (>10 millones de SLOCs, > 30 tipos de interfaces externas diferentes, > 20 proveedores). Los retos para el desarrollo de SOS son: lograr acuerdos a tiempo con diversos involucrados, resolver rápido los conflictos en los requerimientos y coordinar actividades de múltiples proveedores.
  • Abundancia computacional. La Ley de Moore seguirá vigente al menos durante los próximos veinte años. Con esto, vamos a tener una abundancia de aparatos pequeños pero con gran poder de procesamiento. La Ingeniería de Software tendrá que enfrentarse con los problemas de cómo manejar el desarrollo para esta abundancia computacional, y finalmente, como integrar estos dispositivos a los SOS. Esto va a requerir de nuevos niveles de abstracción para la programación y nuevas herramientas con mayor poder basado en el uso del conocimiento.
  • Autonomía computacional. Es una visión en la cual la Inteligencia Artificial alcanza plenamente sus objetivos. Las máquinas se vuelven autónomas, evalúan las situaciones y determinan la mejor opción para actuar.
    Combinación de biología y computación. Aquí habrá una influencia mutua. La computación basada en biología utiliza fenómenos moleculares o biológicos para resolver problemas computacionales. Mientras que la biología computacional tratará de mejorar las capacidades humanas, incorporando dispositivos al cuerpo humano.

Este resumen lo presenté recientemente en la reunión mensual de la AMCIS, y el comentario final de una de las asistentes fue: “Qué pena que todavía no hemos salido de los sesentas”. Es verdad que en muchas organizaciones todavía prevalece la cultura del vaquero; pero también veo muchos esfuerzos que están cambiando este panorama. No debemos parar en el camino.

Referencia

  1. B. Boehm, “A View of 20th and 21st Century Software Engineering, International Conference on Software Engineering (ICSE’06), 20-28 Mayo de 2006, Shanghai, China, Copyright 2006 ACM 1-59593-085-X/06/0005.
Bio

La Dra. Hanna Oktaba es profesora de la UNAM a nivel licenciatura y posgrado. Sus áreas de interés principales son Ingeniería de Software, Tecnología Orientada a Objetos, Modelos de Procesos de Software y Mejora de Procesos. Es fundadora de la AMCIS, de la cual actualmente es Secretaria. Estuvo a cargo de los proyectos MoProSoft, EvalProSoft y Pruebas Controladas, base de la actual Norma Mexicana para la Industria de Software. Actualmente es miembro de International Process Research Group (IPRC), organizado por Software Engineering Institute (SEI), cuyo objetivo es definir las líneas de investigación en el área de procesos para los próximos diez años. También es Directora Técnica del proyecto COMPETISOFT, cuyo objetivo es la mejora de procesos para fomentar la competitividad de pequeña y mediana industria de software en Iberoamérica.