Está en la página 1de 5

Historia y futuro de la Ingeniería de Software

Visión de Barry Boehm

Escrito por: Hanna Oktaba


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.

ELABORADO POR: ING. AUGUSTO J. ANGEL M.


1
DOCENTE DE FUNDAMENTOS DE INGENIERÍA DE SW
 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.

Años Sesenta
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.

Años Setenta
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.

ELABORADO POR: ING. AUGUSTO J. ANGEL M.


2
DOCENTE DE FUNDAMENTOS DE INGENIERÍA DE SW
Años Ochenta
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.

Años Noventa
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.

ELABORADO POR: ING. AUGUSTO J. ANGEL M.


3
DOCENTE DE FUNDAMENTOS DE INGENIERÍA DE SW
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.

Década del 2000


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.

ELABORADO POR: ING. AUGUSTO J. ANGEL M.


4
DOCENTE DE FUNDAMENTOS DE INGENIERÍA DE SW
 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.

Referencias
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.

ELABORADO POR: ING. AUGUSTO J. ANGEL M.


5
DOCENTE DE FUNDAMENTOS DE INGENIERÍA DE SW

También podría gustarte