Una aproximación a la mejora de la reusabilidad de código C++

Anuncio
La Ingeniería del Software en el currículo del
Ingeniero en Informática
F.Javier Zarazaga Soria
Depto. de Informática e Ingeniería de Sistemas
Universidad de Zaragoza
javy@posta.unizar.es
Mª Isabel Alfonso Galipienso
Depto. de Ciencia de la Computación e
Inteligencia Artificial
Universidad de Alicante
eli@dccia.ua.es
Resumen. Desde su “nacimiento” hace más de 35 años, la Ingeniería del Software ha ido
cobrando cada vez una mayor relevancia dentro del mundo profesional del desarrollo de
aplicaciones software. Lógicamente, acompañando a este auge profesional ha venido asociada
una presencia cada vez más importante en la docencia que se ha impartido a los titulados
universitarios en Informática. En el presente trabajo se lleva a cabo una revisión de la
Ingeniería del Software dentro del currículo del titulado universitario en Informática. Esta
revisión abarca un estudio de la definición y tareas encomendadas a la Ingeniería del Software,
su evolución histórica y su participación en los currículos universitarios. En este sentido, se
hace un exhaustivo recorrido de su ubicación en las propuestas curriculares a lo largo de los
últimos 30 años y su situación actual, y se sugiere cuál podría ser la evolución futura de la
misma.
1. Definición y tareas de la Ingeniería del Software
Aunque no hay consenso, el origen del término “Ingeniería del Software” se atribuye a dos
congresos organizados por la OTAN en 1967 y 1968. Ambas conferencias fueron convocadas para
tratar la llamada “crisis del software”, concepto nacido de la sensación, bastante real por otra parte,
de que los grandes programas no llegaban nunca a poderse entregar, además de ser altamente
ineficientes, tener un gran número de errores y llevar asociados unos costes impredecibles.
Los problemas que se presentan en la construcción de grandes sistemas de software no son
simples versiones a gran escala de los problemas de escribir pequeños programas de computador.
Para entender la diferencia se puede hacer la analogía entre la construcción de un puente sobre un
estuario y un puente peatonal sobre un arroyo [1]. Aunque ambos pertenecen a la clase "puente" y
tienen algunas características comunes, un ingeniero civil nunca diseñaría un puente sobre un
estuario por la simple ampliación del diseño de un puente peatonal. La complejidad de los programas
pequeños (o puentes) es tal que una persona puede comprenderlos con facilidad y retener en la
mente todos los detalles del diseño y la construcción. Las especificaciones pueden ser informales y el
efecto de las modificaciones evidenciarse de inmediato. Por otro lado, los grandes sistemas son tan
complejos que resulta imposible para cualquier individuo recordar los detalles de cada aspecto del
proyecto, es decir, para su realización se debe trabajar en grupo, se necesitan técnicas más formales
de especificación y diseño que posibiliten una comunicación más clara y menos ambigua entre los
integrantes del equipo; debe documentarse apropiadamente cada etapa del proyecto y realizar unas
pruebas exhaustivas, y es esencial una cuidadosa administración. En definitiva, para tener éxito al
diseñar y construir un software no trivial necesitamos una cierta disciplina. Es decir, necesitaremos un
enfoque de ingeniería. Con ello se facilita la construcción de sistemas en los plazos de tiempo
especificados, cumpliendo con el presupuesto estimado, y satisfaciendo las necesidades del cliente
[2].
La ingeniería lleva asociada la creación de soluciones con un coste adecuado para problemas
prácticos mediante la aplicación de conocimiento científico [3]. Los ingenieros son los responsables
de reconciliar restricciones conflictivas, especialmente las relacionadas con los costes. También
deben realizar elecciones entre diseños alternativos por razones tanto técnicas como de otra índole
[4]. Sus decisiones se basan en un profundo conocimiento de la disciplina, que les permite diseñar y
asumir responsabilidades acerca de la seguridad y calidad de los sistemas que diseñan. La ingeniería
del software puede interpretarse en este sentido de ingeniería, de forma que resulta conveniente
preparar a los futuros ingenieros para realizar diseños técnicos y toma de decisiones, así como para
asumir la responsabilidad del éxito de sus productos [5].
Según el Diccionario de la Real Academia Española, se define ingeniería como: “1. Conjunto de
conocimientos y técnicas que permiten aplicar el saber científico a la utilización de la materia y de las
fuentes de energía. 2. Profesión y ejercicio del ingeniero”. De igual manera define software como
“Conjunto de programas, instrucciones y reglas informáticas para ejecutar ciertas tareas en una
computadora”. Sin embargo, no consta definición de Ingeniería del Software, seguramente por
tratarse de una nueva ingeniería. Se podría aventurar una definición partiendo de las dos dadas:
“Conjunto de conocimientos y técnicas que permiten aplicar el saber científico a la utilización y
construcción de programas, instrucciones y reglas informáticas para ejecutar ciertas tareas en una
computadora”. No obstante, antes de adoptar esta acepción como segura, es conveniente realizar
una breve recopilación de definiciones propuestas por autores e instituciones de prestigio (aquí se
destacan algunas de entre las muchas propuestas):
• F.L.Bauer [6] indica que la Ingeniería del Software es el establecimiento y uso de sólidos principios
de ingeniería y buenas prácticas de gestión, así como la evolución de herramientas y métodos
aplicables y su uso cuando sea apropiado para obtener, dentro de las limitaciones de recursos
existentes, software que sea de alta calidad en un sentido explícitamente definido.
• B.W.Boehm [7] presenta la Ingeniería del Software como la aplicación práctica del conocimiento
científico en el diseño y construcción de programas de computadora y la documentación asociada
requerida para desarrollarlos, operarlos y mantenerlos.
• M.V.Zelkovitz, A.C.Shaw y J.D.Gannon [8], describen la Ingeniería del Software como el estudio
de los principios y metodologías para desarrollo y mantenimiento de sistemas de software.
• En la colección de estándares publicada por IEEE en 1993 [9] se define la Ingeniería como la
aplicación de un método sistemático, estructurado y cuantificable a estructuras, máquinas,
productos, sistemas o procesos; y la Ingeniería del Software como la aplicación de un método
sistemático, estructurado y cuantificable al desarrollo, operación y mantenimiento de software.
• En el volumen II (Computer Science) de la propuesta curricular del ACM/IEEE-CS Joint Task
Force on Computer Curricula de diciembre de 2001 [10] se propone la Ingeniería del Software
como la disciplina preocupada por la aplicación de la teoría, conocimiento y práctica para la
construcción eficiente y efectiva de sistemas software que satisfagan los requisitos de usuarios y
clientes.
Por otra parte, en [11] se indica que “el trabajo del ingeniero del software consiste en construir
productos de alta calidad, con un determinado presupuesto y antes de una determinada fecha”. Por
todo ello, se podría establecer como una definición apropiada de Ingeniería del Software: “Conjunto
de Técnicas, Metodologías y Herramientas que ayudan a la producción de un software de alta
calidad, con un determinado presupuesto y antes de una determinada fecha”. Entendiendo por:
• Técnica (Método): Procedimiento formal para obtener resultados utilizando alguna notación bien
especificada.
• Metodología: Colección de métodos aplicados a lo largo del ciclo de vida del software y unificados
mediante alguna aproximación filosófica genérica.
• Herramienta: Instrumento, o sistema automatizado, utilizado para poner en práctica un método.
• Software de calidad: Aquel software que sirve para lo que fue concebido, es decir, que hace lo que
se acordó que hiciese con el cliente. Conviene aclarar, además, que el término calidad no hace
referencia a la excelencia del software. Por ejemplo, dados los riesgos y los recursos disponibles,
se puede pedir el cumplimiento de determinados parámetros de servicio: fallos leves y
recuperables pero disponibilidad 24x7 (24 horas al día, 7 días a la semana). Sin embargo, en un
proyecto crítico (por ejemplo, software aeroespacial) puede resultar imprescindible el que no haya
fallos, dadas sus consecuencias.
Aunque no exista un claro consenso en la definición de Ingeniería del Software, la bibliografía
existente parece coincidir a la hora de proponer cuáles deben ser los dos grandes grupos de tareas
encomendadas a la misma: (a) tareas vinculadas al desarrollo de un producto software, y (b) tareas
vinculadas a la gestión y control de dicho desarrollo.
Tareas vinculadas al desarrollo de productos software. Independientemente del modelo de
proceso seguido (conjunto de actividades y resultados asociados que conducen a la creación de un
producto software), existen cuatro actividades fundamentales de desarrollo que son comunes a todos
ellos [12]: (1) especificación del software, en la que se definen la funcionalidad y restricciones en sus
operaciones, (2) diseño e implementación del software, (3) verificación y validación del software, para
asegurar que hace lo que el cliente desea, (4) transferencia al cliente y mantenimiento, que recoge
los cambios necesarios posteriores a su entrega, y que ponen de manifiesto la constante evolución
de los sistemas software durante su "vida" hasta que son desechados. La realización de las tareas de
este grupo se lleva a cabo mediante la aplicación del correspondiente conjunto de técnicas,
metodologías y herramientas.
Tareas vinculadas a la gestión y control del desarrollo de productos. A este grupo pertenecen las
siguientes tareas: (1) gestión de los proyectos (entre las que se incluyen la estimación y seguimiento
de tamaño y esfuerzo, planificación y seguimiento del trabajo, gestión de riesgos, elaboración y
control de presupuestos, y selección y evaluación de personal); (2) gestión de configuraciones
(incluyendo el nombrado de elementos de configuración, control de cambios, estadísticos de
defectos, construcción del sistema, y gestión de versiones y entregas); y (3) aseguramiento de la
calidad (principalmente estandarización y revisión de los procesos de desarrollo de productos,
planificación de las inspecciones y auditorias).
Existen propuestas que plantean un tercer grupo de tareas relacionadas con la evaluación y
mejora de los procesos de gestión de los desarrollos (que pueden aparecer también incluidas en el
segundo grupo anterior). Quedarían dentro del alcance de este tercer grupo aspectos relativos a la
estandarización y modelización de dichos procesos, así como la evaluación y mejora de los mismos.
Referencias importantes son las del estándar de procesos ISO 12207, así como el estándar ISO/IEC
TR15504 (SPICE), que sirve de marco para la evaluación de procesos. Dichos estándares están
relacionados con los de la familia ISO 9000, especialmente el ISO 9001 que resulta aplicable a
organizaciones que diseñan, desarrollan y mantienen productos, y el ISO 9000-3, referido
directamente a productos software [13]), o modelos como CMM [14]. Tanto el estándar ISO 9000-3,
como el CMM hacen referencia a las denominadas áreas clave del proceso sujeto a la evaluación y
mejora.
2. Perspectiva histórica
Como ya se ha visto en el apartado anterior, el término “Ingeniería del Software” fue introducido a
finales de la década de los 60 para denominar a una estrategia de abordar la construcción de
sistemas software que permitiese resolver los problemas de la “crisis del software”: los grandes
programas no llegaban nunca a poderse entregar, además de ser altamente ineficientes, tener un
gran número de errores y llevar acarreados unos costes impredecibles. Por desgracia, una gran parte
de los sistemas que se desarrollan en la actualidad siguen adoleciendo de los mismos problemas. El
código en productos de consumo se duplica cada dos años; y sigue siendo algo habitual que los
proyectos software sobrepasen sus costes y planificaciones. Un número importante de proyectos no
se terminan nunca, y muchos de los que se terminan no cumplen los requisitos de los usuarios y son
de baja calidad. Un estudio de 1994 del Standish Group entre proyectos desarrollados por empresas
con ingresos anuales entre 100 y 200 millones de dólares arrojó los siguientes datos: solo el 28%
tienen éxito, el 50’4% se terminan pero tienen problemas y el 21’6% se cancelan; las medias de
excesos son de 214% en coste y 239% en tiempo; características no cumplidas llegan al 26% de
promedio [15].
¿Por qué la construcción de sistemas software sigue teniendo los mismos problemas hoy que
hace 30 años? Una posible explicación, oída muchas veces, es que la disciplina de desarrollo del
software no ha evolucionado apropiadamente. Esta visión se apoya habitualmente en el contraste
entre la producción de desarrollos software y la producción de desarrollos hardware, que se ha
multiplicado por más de mil en algo más de dos décadas. Para intentar atajar este problema asociado
a la disciplina de desarrollo se han realizado numerosos esfuerzos en la línea de buscar mejoras en
las técnicas, metodologías y herramientas que se utilizan para la construcción de productos software.
Así, aparecen conceptos como orientación a objeto, desarrollos basados en componentes,
reutilización y patrones, acompañados de una mayor automatización en la construcción del software
gracias a herramientas CASE que posibilitan generación de código, verificación y corrección de
especificaciones e ingeniería inversa. Todo ello ha contribuido a dotar de eficiencia y eficacia al
proceso de desarrollo del software en los últimos años. Sin embargo la "crisis" perdura, aunque
quizás el siglo 21 aporte una nueva perspectiva [16].
Otra explicación para los frecuentes fracasos en el desarrollo del software se basaría en que los
problemas radican principalmente en la forma en que las personas y los equipos hacen su trabajo y,
accidentalmente, en el modo en el que el software se construye. Esto cobra sentido si se plantea que
los proyectos software se parecen mucho más a cualquier otro proyecto de ingeniería de lo que los
programadores creen. Frederick P. Brooks Jr. presenta en su libro “The mythical Man-Month” [17],
escrito en 1975 y reeditado 20 años después con un capítulo específico sobre la vigencia del mismo,
un muy interesante repaso a los problemas relacionados con el desarrollo de proyectos software, y su
analogía con otros proyectos de ingeniería. El hecho de que 20 años después un libro de este estilo
siga teniendo vigencia invita a plantearse la realidad de una evolución de la Ingeniería del Software.
A pesar de esto, en los últimos 20/25 años, la Ingeniería del Software ha pasado de ser una idea
oscura y practicada por un grupo muy pequeño de fanáticos a ser una disciplina legítima de la
ingeniería. Hoy en día, esta disciplina está reconocida como un tema valioso y digno de ser
investigado, de recibir un estudio concienzudo y un debate acalorado. En la industria, el título de
“programador” ha sido reemplazado por el de “ingeniero del software”. Los modelos de proceso de
software, los métodos de Ingeniería del Software y las herramientas del software se están adaptando
con relativo éxito en la enorme gama de aplicaciones de la industria. Además, parece claro que en el
futuro inmediato el software jugará un papel cada vez más importante y pasará a ser el elemento
central de todos los aspectos que condicionen la vida diaria. El número, tamaño, complejidad y
dominios de aplicación de los programas que se están construyendo continuarán aumentando de
manera considerable. Esto está creando una demanda cada vez mayor de profesionales del software
que, junto con su capacitación en aspectos técnicos de la Informática, sean capaces de aplicar estos
conocimientos en el contexto de modernos desarrollos software de gran escala. En pocas palabras,
existe una creciente demanda de ingenieros del software [18], lo que justifica los esfuerzos que se
están realizando en investigación de nuevos procedimientos, métodos y herramientas que sirvan de
ayuda para el desarrollo con éxito de proyectos software.
3. La Ingeniería del Software en el currículo del Ingeniero en
Informática
La elaboración de un currículo para la enseñanza universitaria de la Ingeniería del Software viene
condicionada por una serie de factores decisivos:
• La Ingeniería del Software no está fundamentada sobre un núcleo coherente de principios
teóricos, como sí ocurre en otros campos de la Informática, hecho que podría inducir a no
considerar la Ingeniería del Software como una materia básica de formación.
• El ingeniero de software desarrolla fundamentalmente su labor en el campo orientado al producto,
por lo que el tipo de formación que reciba en dicha materia ha de ser distinto a la que se
proporciona habitualmente en otras materias posiblemente más orientadas a la investigación.
• La mayor parte del conocimiento sobre Ingeniería del Software reside en las empresas, que es
donde realmente se aplican y validan los sucesivos avances en todos los aspectos que abarca la
Ingeniería del Software. Por otra parte, este conocimiento es el know-how de las mismas que les
hace poder abordar con éxito sus proyectos y representa su elemento diferenciador,
convirtiéndose, por tanto, en elemento crítico y de gran valor que generalmente no están
dispuestas a hacer público.
• El software es un producto intelectual (protegido por la ley así, al igual que la música o los libros)
no sometido a fundamentos físicos como el hardware. Además se trata de un producto intangible,
lo que dificulta enormemente la gestión de su desarrollo, puesto que no se puede "ver" el progreso
del proyecto directamente, si no es a través de la documentación generada por el mismo (ver
[12]).
Aun teniendo en cuenta todos estos condicionantes, es necesario formar a los futuros
profesionales de la Informática para que desarrollen en su vida laboral software fiable, eficiente,
sencillo de utilizar y de mantener. Para dar soporte a una buena enseñanza en esta materia, sería
necesario contar en el entorno docente con una tecnología, tanto hardware como software, adecuada
para la práctica y aplicación de los fundamentos adquiridos en la base teórica.
3.1. La Ingeniería del Software en las propuestas curriculares internacionales
Desde el punto de vista de la enseñanza de la Ingeniería del Software, dos son las líneas de
evolución que se han seguido en estos últimos años. Por una parte se encuentra la incorporación a la
formación del ingeniero de tecnologías y planteamientos de trabajo que van apareciendo y cobrando
fuerza (orientación a objetos, componentes, patrones y reutilización, aplicaciones en Internet,
sistemas distribuidos....). Por otro lado, se plantea un enfoque cada vez más cercano al resto de las
ingenierías con una clara separación entre el proceso de construcción de un producto, y la gestión,
control y calidad de dicho proceso. A modo de ejemplo de esta evolución se puede hacer una breve
descripción de las propuestas curriculares en el ámbito internacional más relevantes de los últimos 30
años.
En marzo de 1968, ACM publica su "Curriculum'68" [19], que es el primer intento extensivo de
definir la Informática como una disciplina independiente. Aunque en él no aparece la denominación
de “Ingeniería del Software”, sí que se recogen aspectos formativos que posteriormente tendrán su
sitio en la base de asignaturas con contenidos relativos a la Ingeniería del Software. Concretamente,
se estipulan dos cursos cuyos contenidos van en esta dirección: “Programación de sistemas” y
“Sistemas de gran tamaño de procesado de la información”. En enero de 1977 se publica "A survey of
the
literature
in
computer
science
education
since
Curriculum'68"
[20].
Dentro
de
las
aproximadamente 200 referencias bibliográficas sobre enseñanza de Informática que se revisan, ya
se localizan algunas que hacen referencia directa a la Ingeniería del Software.
En marzo de 1979, aparece el "Curriculum'78" [21] con nuevas recomendaciones para programas
de licenciatura en Informática. En él, la asignatura de “Diseño y desarrollo de software”, entre las
optativas, ofrece un programa que presenta un enfoque formal del estado de las técnicas de diseño y
desarrollo del software y proporciona los medios para su aplicación. Así mismo, se afirma que una
componente integrante del curso es la implicación de los estudiantes trabajando en grupos en la
organización, administración y desarrollo de grandes proyectos software.
En el currículo propuesto por la ACM como Master [22] se detallan los cursos que configurarían
una intensificación en los estudios de Informática. Los cursos que en el mismo se incluyen y que
tienen relación con la Ingeniería del Software, aludiendo a su contenido, son: “Métodos formales en
lenguajes de programación” y “Diseño de sistemas de información”. Por otro lado ACM publica un
artículo sobre programas formativos en Sistemas de Información [23], aduciendo que los programas
de licenciatura en ciencias de la computación típicamente acentúan el conocimiento técnico del
hardware y software y excluyen la parte organizacional. Ello justifica la necesidad de un programa, los
sistemas de información, que contemple las dos dimensiones: técnica y organizacional. El núcleo de
asignaturas para un programa de licenciatura en sistemas de información debería incluir a las
siguientes relacionadas con la Ingeniería del Software: “Comportamiento organizacional y humano”,
“Análisis de sistemas de información”, “Diseño de software” y “Diseño de sistemas e implementación”.
En 1983 la IEEE elabora una propuesta [24] que desarrolla un plan de estudios de cuatro años
(Bachelor), y pretende reunir las tendencias desarrolladas en centros con orientación de Ingeniería
Eléctrica con las directrices de la ACM. El resultado es la definición de un conjunto de áreas
temáticas o materias agrupadas en básicas, avanzadas y opcionales, que permiten configurar
distintos planes de estudio en función de las particularidades de cada centro. Dentro de estas áreas
se encuentran las siguientes asignaturas relacionadas con la Ingeniería del Software: “Sistemas de
software e ingeniería de software” entre las materias fundamentales (troncales), e “Ingeniería de
software” entre las avanzadas (optativas).
En 1984, una comisión del Comité Técnico de Educación (TCE) de la Federación Internacional
para el Procesamiento de la Información (IFIP), por iniciativa de la UNESCO, presentó su propia
propuesta [25] con la intención de ofrecer una presentación global, estructurada y jerárquica de
aquellas áreas consideradas, generalmente, parte de la Informática, incluyendo los últimos
desarrollos. Las áreas se organizaban en módulos interrelacionados, cada uno con sus propios
objetivos, desarrollo general y contenido. La Ingeniería del Software se contemplaba a través de
varios módulos: “Análisis y Diseño de Sistemas”, “Diseño de sistemas e Implementación”, “Gestión de
proyectos software” y “Diseño y Gestión de proyectos”. Este trabajo es revisado diez años después
[26]. En esta revisión se mantiene una organización en áreas y módulos. La Ingeniería del Software
tiene su presencia a través de los módulos: “Análisis y diseño estructurados”, “Análisis y diseño de
sistemas de información”, “Gestión de proyectos software” y parcialmente “Gestión de servicios
informáticos”. De estos módulos, solamente el de “Análisis y diseño estructurados” se incluyó en el
currículo básico, los demás formaban parte de los currículos de “Ingeniero de sistemas
computerizados”, “Ingeniero del software” o “Ingeniero de sistemas de información”, todos ellos
especializaciones a partir del currículo básico.
Durante el período 1981-84, en la Universidad Carnegie Mellon se desarrolló un currículo en
Informática para regularizar la situación docente de sus estudiantes de Informática [27]. Dicho
currículo se organizaba en tres niveles de cursos: básicos, elementales e intermedios, y avanzados.
Los dos primeros integraban el núcleo imprescindible de formación, mientras que el tercero
comprendía los cursos que se consideraban indicados para programas de Master y estudiantes
avanzados en programas de licenciatura (Bachelor). La presencia de la Ingeniería del Software en
este currículo se restringe a dos asignaturas ubicadas dentro del bloque correspondiente a los cursos
avanzados: “Ingeniería del Software” y “Laboratorio de Ingeniería del Software”.
En 1991, ACM e IEEE Computer Society proponen un currículo de Informática [28] que se divide
en nueve áreas diferentes, con subdivisiones en esas áreas. Una de estas nueve áreas es
“Metodología e Ingeniería del Software” que recoge la mayor parte de los contenidos presentados en
el curso avanzado propuesto por [27]. Los temas recomendados para esta área son: “Conceptos
fundamentales de la resolución de problemas”, “Proceso de desarrollo de software”, “Especificación y
requisitos de software”, “Diseño e implementación de software” y “Verificación y validación”.
Estas dos mismas organizaciones (ACM, IEEE Computer Society) renuevan su propuesta
curricular a finales del 2001 planteando unos cambios muy drásticos al pasar a considerar los
estudios superiores en cuatro especialidades Computer Science,, Computer Engineering, Software
Engineering e Information Systems [10] (ver Figura 1).
Desde el punto de vista de la semejanza con la estructura curricular existente en las universidades
españolas, la primera de ellas (Computer Scienc) es la que mantiene una analogía más clara. En ella
el cuerpo del conocimiento se estructura en 14 áreas distintas, una de las cuales es “Ingeniería del
Software”. Ésta se estructura en 12 temas, de los cuales los 8 primeros se consideran
imprescindibles: “Diseño de software”, “Utilización de APIs”, “Herramientas y entornos de desarrollo”,
“Proceso de desarrollo de software”, “Requerimientos y especificaciones del software”, “Validación
del software”, “Evolución del software”, “Gestión de proyectos software”, “Computación basada en
componentes”,
“Métodos
formales”,
“Fiabilidad
del
software”
y
“Desarrollo
de
sistemas
especializados”.
Como se ha podido observar, la Ingeniería del Software está presente en todas las propuestas
revisadas. Igualmente, se puede ver el creciente protagonismo que va adquiriendo esta materia
dentro de las propuestas curriculares, pasando de ser simples asignaturas optativas a áreas
principales y básicas dentro del cuerpo del conocimiento, cada vez con mayor relevancia. La
culminación de este creciente protagonismo es la propuesta curricular específica de Ingeniería del
Software de [10]. Esta propuesta está en consonancia con la cada vez más creciente realidad de la
existencia de titulaciones universitarias específicas en Ingeniería del Software (medias, superiores y
doctorados). Según [29], en enero de 2001 se tenía constancia de la existencia de un mínimo de
6800 alumnos matriculados en programas de Ingeniería del Software de 11 países diferentes,
incluidos Estados Unidos y varios países de la Unión Europea, y 64 Universidades distintas.
Figura 1. Relación entre los informes de los currículos de ACM/IEEE del 2001 [10]
Además, se está llevando a cabo un importante trabajo en la creación de un cuerpo de
conocimiento independiente y específico de la Ingeniería del Software que permita la creación de
currículos que no nazcan "viciados" a partir de la reconversión de planes de estudio de Informática
[30]. Un esfuerzo en este sentido lo constituye el proyecto SWEBOK, que surge de la decisión del
Estado de Texas (Estados Unidos) de incluir como acreditación a la profesión de ingeniero de
software, distinta a la de Informática (Computer Science). Estas ideas sobre la existencia de una
profesión de "ingeniería del software" están relacionadas con las cuestiones sobre el ejercicio de la
profesión Informática en nuestro país [31]. También en esta línea, en mayo de 2001, IEEE publicó
una versión de prueba (v. 1.0) de la guía SWEBOK (Guide to the Software Engineering Body of
Knowledge) [32], con el objetivo de recopilar los esfuerzos realizados para definir el cuerpo de
conocimiento de la Ingeniería del Software durante sus cuatro décadas de existencia (desde 1968).
Sin embargo, aunque es cada vez más frecuente la consideración de la Ingeniería del Software
como un área más de la ingeniería, y el ingeniero del software comienza a ser una profesión
implantada en el mundo laboral internacional, con derechos, deberes y responsabilidades que cumplir
[33], junto a una reconocida consideración social en el mundo empresarial y con brillante futuro,
todavía se tendrán que dar numerosos pasos antes de que la Ingeniería del Software alcance el
grado de normalización que permita abarcar, incluso, aspectos legislativos específicos [34].
3.2. La Ingeniería del Software en los planes de estudio de las Universidades
Españolas
El Decreto 593/1976 de 4 de marzo de 1976 (BOE de 26 de marzo de 1976) establece la creación
de las Facultades de Informática en Barcelona, Madrid y San Sebastián. Los primeros planes de
estudio que se aprueban son los de la Facultad de Informática de Barcelona (Orden 1698/1977 de 7
de junio de 1977, BOE de 27 de julio de 1977) y la Facultad de Informática de San Sebastián (Orden
1818/1978 de 4 de abril de 1978, BOE de 23 de agosto de 1978). En este último plan de estudios no
aparece ninguna asignatura bajo el epígrafe de Ingeniería del Software (posiblemente lo más
parecido pudiesen ser las asignaturas de Informática de la Empresa I y II). La revisión que de este
plan de estudios se realiza en 1982 (Orden 1098/1982 de 3 de febrero de 1982, BOE de 4 de mayo
de 1982) sigue sin recoger la Ingeniería del Software de manera explicita.
En posteriores planes de estudios, como el de la Universidad Politécnica de Valencia (primer ciclo
Orden 2187/1984 de 19 de julio de 1984, BOE de 5 de septiembre de 1984; segundo ciclo Orden
916/1987 de 16 de marzo de 1987, BOE de 7 de abril de 1987) ya se recogen contenidos específicos
de la Ingeniería del Software bajo el epígrafe de asignaturas tales como Análisis Funcional y
Orgánico (básicamente Análisis Estructurado, Tecnología de la Programación (básicamente Diseño
Estructurado), e Ingeniería de la programación (paradigmas del ciclo de vida y herramientas). Incluso
ya se abordan temáticas vinculadas a la gestión del proceso de desarrollo de aplicaciones como
ocurre en la asignatura de Proyectos Informáticos del plan de estudios del segundo ciclo de la
Facultad de Informática de la Universidad de las Islas Baleares (Resolución 359/1989 de 18 de enero
de 1989, BOE de 15 de febrero de 1989).
Con motivo de la entrada en vigor de la Ley de Reforma Universitaria (Ley Orgánica 11/1983 de
25 de agosto de 1983, BOE 1 de septiembre de 1983) se procede a la homogeneización de las
titulaciones universitarias estableciendo unos contenidos comunes que deberán ser desarrollados por
planes de estudios específicos de cada universidad. Fruto de este proceso se establece el título
universitario de Ingeniero en Informática (Real Decreto 1459/1990 de 26 de octubre de 1990, BOE de
20 de noviembre de1990) que es el que rige la totalidad de los planes de estudio de Ingeniería en
Informática que en la actualidad se imparten en las universidades españolas. En este Real Decreto
se fijan los contenidos de la materia troncal de Ingeniería del Software que con 18 créditos asignados
son: Análisis y definición de requisitos, Diseño, Propiedades y mantenimiento del software, Gestión
de configuraciones, Planificación y gestión de proyectos informáticos, Análisis de aplicaciones.
Quedan a la especificación concreta de los planes de estudio de cada una de las Universidades el
reparto en asignaturas y el detalle de los contenidos de cada una de ellas.
El reparto de créditos establecido por Real Decreto 1459/1990 recoge dentro de la materia de
obligado curso entorno al 7,5% de Ingeniería del Software, frente a algo más del 11% que aparece en
la propuesta de [10]. Adicionalmente, y dentro de los bloques de optatividad y libre elección, en todas
las universidades se imparten asignaturas complementarias de Ingeniería del Software. No obstante,
el alcance y contenidos de las mismas esta claramente ligado a la situación de los grupos de
investigación sobre temáticas relacionadas de dichas universidades por lo que se puede observar
una heterogeneidad muy amplia.
Finalmente, y de modo complementario, merece la pena indicar la impartición en las universidades
españolas de dos titulaciones técnicas directamente vinculadas a la Ingeniería en Informática. Una de
ellas es Ingeniería Técnica en Informática de Sistemas (Real Decreto 1461/1990 de 26 de diciembre
de 1990, BOE 20 de noviembre de 1990) donde la presencia de la Ingeniería del Software es muy
reducida (6 créditos). La otra es Ingeniería Técnica de Informática de Gestión (Real Decreto
1460/1990 de 26 de diciembre de 1990, BOE 20 de noviembre de 1990) en la que la presencia de la
Ingeniería del Software es análoga a la que tiene en Ingeniería en Informática (18 créditos).
3.3. Evolución futura
En la actualidad ya son muchas las universidades que imparten Ingeniería Informática que están
reestructurando sus planes de estudios. La Universidad de Castilla La Mancha y la Politécnica de
Valencia son solamente un ejemplo. Sin embargo, estas reestructuraciones poseen una cierta falta de
flexibilidad desde el punto de vista de la Ingeniería del Software. La necesidad de ajustarse a los
contenidos fijados por el Real Decreto 1459/1990 hace imposible la variación de la troncalidad,
teniendo que realizar los posibles ajustes sobre la base de las asignaturas optativas. Si embargo, la
evolución seguida por la Ingeniería del Software en estos últimos años, su mayor necesidad y
presencia en la empresa, y las perspectivas futuras, hacen que resulte cuestionable la actual
estructura de la titulación en Ingeniería Informática.
Adicionalmente, la actual especificación de la titulación en Ingeniaría Informática deja de lado un
importante núcleo de conocimiento que cada vez se está mostrando más necesario para el titulado
que accede al mundo laboral y que desempeñará tareas vinculadas con la Ingeniería del Software.
Así, por ejemplo, aspectos legislativos y empresariales resultan necesarios para comprender el
entorno en el que debe trabajar el Ingeniero del Software; cierta formación de base en Psicología y
Sociología resultarían muy interesantes ante la complejidad del trato con los clientes; etc. Algunos de
estos temas vienen recogidos en la propuesta de currículo del IEEE/ACM [10] dentro del área
denominada Temas sociales y profesionales. Sin embargo, la mayor parte de los mismos no están
cubiertos explícitamente por los contenidos de ninguna materia troncal.
También es necesario prestar más atención al tema de la gestión de proyectos software,
concretamente a la aplicación de técnicas mínimamente rigurosas para la gestión del software. Al fin
y al cabo, el desarrollo hay que hacerlo de todas formas, pero la gestión del desarrollo aparece en
muchas ocasiones como algo secundario que se resuelve como se puede, sobre la marcha [35].
Además es necesario tener en cuenta aspectos tales como la naturaleza del software, la gente que
crea software y los factores esenciales en la creación de productos que contienen software [36].
Por otro lado es necesario tener presente el nuevo escenario que en el ámbito Europeo se está
diseñando como consecuencia de la Declaración de Bolonia. Esta Declaración es el compromiso
establecido por 29 países europeos en junio de 1999 para reformar las estructuras de sus sistemas
de educación superior buscando la convergencia entre ellos [37]. La intención de estos países es
poder contar con un espacio Europeo de educación superior en el año 2010. Es por tanto razonable
pensar que en un futuro cercano se procederá a una reestructuración de los planes de estudio
buscando dichas líneas de convergencia. Concretamente, las Facultades y Escuelas Superiores de
Informática están siendo de las primeras en abordar este paso. De este modo, según se desprende
de la reunión anual de la COODI (Conferencia de Decanos y Directores de Centros Universitarios de
Informática en España) celebrada en Barcelona (16 y 17 de mayo de 2002) en el marco del 25º
aniversario de la Facultat d’Informática de Barcelona, la futura línea de evolución de estos estudios
pasa por el diseño de un recorrido curricular cíclico con la estructura “BaMa” (Bachelor + Master) en
el que el primer ciclo de 4 años de duración conduciría a la obtención del título de Ingeniería
Informática con competencias y atribuciones profesionales. Este título se podría completar por una
parte con Masters de especialización que recogieran las características de cada universidad, su
entorno socio-económico y las necesidades tecnológicas de cada momento y, por otra, con cursos de
doctorado encaminados a la realización de la tesis doctoral.
Ante esta situación, una propuesta de futuro en este marco podría orientarse por el mantenimiento
dentro de la formación base del Ingeniero en Informática de un bloque de Ingeniería del Software
proporcional al existente en la actualidad (un 7’5% del total de créditos). Adicionalmente, se abordaría
el desarrollo de una especialización en Ingeniería del Software a través de programas Master. Estos
programas podrían ser de dos tipos claramente diferenciados: uno eminentemente aplicado orientado
a la formación del Ingeniero en el trabajo con el cliente y los equipos de desarrollo, y que debería
incluir formación en aspectos psicológicos, sociológicos y legislativos; y otro de corte más teórico
destinado a proporcionar una base conceptual más amplia. Este segundo modelo podría sustituirse
por un tercer ciclo específico en Ingeniería del Software.
4. Conclusiones
En este trabajo se ha presentado una revisión de la Ingeniería del Software como materia
integrante del currículo del titulado universitario en Informática. Esta presencia, que ha sido
prácticamente constante a lo largo de los últimos 30 años, ha ido cobrando una mayor relevancia con
el tiempo. Tal es el grado de importancia que caracteriza en la actualidad a la Ingeniería del Software,
que en las últimas propuestas curriculares internacionales se aboga por su implantación como
titulación universitaria específica, al margen de continuar figurando en la formación de base del resto
de titulados universitarios en Informática.
La más que probable modificación de las estructuras de las titulaciones universitarias siguiendo la
línea de la Declaración de Bolonia hace pensar en la creación de un nuevo titulo en Ingeniería en
Informática que proporcione una formación de base en la que la Ingeniería del Software se
mantendría tal como está en la actualidad. Esta formación se podría complementar con una
especialización en Ingeniería del Software a través de Master específicos destinados a llevar al
mercado laboral a los especialistas que éste está demandando.
Estas propuestas se conjugan perfectamente con las actuales tendencias del mercado laboral que
auguran un interesante porvenir para los profesionales que se encuentren bien preparados, tanto
directamente en la materia de Ingeniería del Software, como en los bloques de conocimiento que
deben rodear a ésta.
Bibliografía
[1]
I.Sommerville. Software engineering. 2th edition. Addison Wesley, 1988.
[2]
R.S. Pressman. Ingeniería del Software: Un enfoque práctico (quinta edición). Mc.Graw-Hill,
2001.
[3]
M.Shaw. “Prospects for an engineering discipline of software”. IEEE Software, pages 15-24,
November 1990.
[4]
B.W.Boehm, K.J.Sullivan. “Software Economics”. ICSE 2000 FoSE Track, Limerick, Ireland,
June. ACM. pp. 319-343. 2000.
[5]
M.Shaw. “Software engineering education: A roadmap”. ICSE 2000 FoSE Track, Limerick,
Ireland, June. ACM. pp. 371-380. 2000.
[6]
F.L.Bauer. “Software Engineering”, Information Processing, 71, North Holland Publishing
Co., Amsterdam 1972.
[7]
B.W. Boehm. “Software Engineering”, IEEE Transactions on Computers. C-25, n.12, dic.
1976, pp. 1226-1241.
[8]
M.V.Zelkovitz, A.C.Shaw, J.D.Gannon. Principles of Software Engineering and Design.
Prentice Halls, 1979.
[9]
Standards Collection: Software Engineering. IEEE Standard 610.12-1990: IEEE Standard
Glosary of Software Engineering Terminology. IEEE Society Press N.Y. 1993.
[10]
ACM/IEEE Computer Society Press. Computing curricula 2001, (Volume I: Overview,
Volume II: Computer Science, Volume III: Computer Engineering, Volume IV: Software
Engineering, Volume V: Information Systems Technical report, ACM/IEEE-CS/ Association
for Information Systems, The Joint Task Force on Software Engineering Education Project
(SWEEP), diciembre 2001.
[11]
W.S.Humphrey. Introduction to the Personal Software Process. Addison-Wesley. 1997.
[12]
I.Sommerville. Software engineering. 6th edition. Addison Wesley, 2001.
[13]
R.Kehoe, A.Jarvis. ISO 9000-3 A Tool for Software Product and Process Improvement.
Springer-Verlag 1996
[14]
CMU SEI. The Capability Madurity Model: Guidelines for Improving the Software Process.
Addison-Wesley. 1995
[15]
Página Web del Standish Group: http://www.standishgroup.com/
[16]
C.Jones “Software Project Management in the Twenty-First Century”. Paper by Artemis
Management System (http://www.spr.com/news). January 1999
[17]
F.P.Brooks. The Mythical Man-Month, Essays on Software Engineering. Addison-Wesley.
1995.
[18]
T.B.Hilburn, G.Hislop, D.J.Bagert, M.Lutz, S.Mengel, M.McCracken. “Guidance for the
development of software engineering education programs”. The Journal of Systema and
Software. Vol 49, pp 163-169, 1999.
[19]
W.F.Atchison, E.J.Schweppe, W.Viavant, D.M.Young, S.D.Conte, J.W.Hamblen, T.E.Hull,
T.A.Keenan, W.B.Kehl, E.J.McCluskey, S.O.Navarro, W.C.Rheinboldt. “Curriculum 68:
Recommendations for academic programs in computer science: a report of the ACM
curriculum committee on computer science”. Communications of the ACM, Vol.11, Issue 3
(March 1968), pp 151 – 197.
[20]
R.H.Austing, B.H.Barnes, G.L.Engel. “A survey of the literature in computer science
education since curriculum '68”. Communications of the ACM, Vol. 20 , Issue 1 (January
1977), pp 13 - 21
[21]
R.H.Austing,
B.H.Barnes,
D.T.Bonnette,
G.L.Engel,
G.Stokes
“Curriculum
'78:
recommendations for the undergraduate program in computer science. A report of the ACM
curriculum committee on computer science”. Communications of the ACM, Vol. 22 , Issue 3
(March 1979), pp 147 – 166.
[22]
K.I.Magel, R.H.Austing, A.Berztiss, G.L.Engel, J.W.Hamblen, A.A.J.Hoffmann, R.Mathis.
“Recommendations for master's level programs in computer science: a report of the ACM
curriculum committee on computer science”. Communications of the ACM, Vol. 24 , Issue 3
(March 1981), pp 115 - 123
[23]
“ACM Educational Programs in Information Systems”. Communications of the ACM 24 (3)
(Marzo, 1981), 124-133
[24]
IEEE Educational Activities Board. “Model Program in Computer Science and Enginering”.
IEEE Computer Society order numer 932. Diciembre, 1983.
[25]
Unesco-IFIP. “A modular curriculum in computer science”. UNESCO. 1984
[26]
Unesco-IFIP. “A modular curriculum in computer science”. UNESCO. 1994
[27]
M.Shaw. The Carnegie-Mellon Curriculum for Undergraduate Computer Science. SpringerVerlag, 1985.
[28]
ACM/IEEE Computer Society Press. Computing curricula 1991. Technical report,
ACM/IEEE-CS Joint Curriculum Task Force, 1991.
[29]
K.L.Modesitt, D.Bagert, L.Werth. “Academic Software Engineering: What Is and What Could
Be? Results of the First Annual Survey for International SE Programs”. Proceedings of the
International
Conference
on
Software
Engineering,
Toronto,
(May,
2001).
http://www.engin.umd.umich.edu/CIS/Survey_ISEAP_2001/Survey_ISEAP_html/survey2000-final.html
[30]
T.B.Hilburn, I.Hirmanpour, S.Khajenoori, R.Turner, A.Qasem. “A Software Engineering Body
of Knowledge, v.1.0”. Technical Report CMU/SEI-99-TR-034, ESC-TR-99-004. April 1999.
http://faculty.db.erau.edu/hilburn/se-educ
[31]
J.Dolado. “El cuerpo de conocimiento de la Ingeniería del Software”. Novática, nº 148, pp.
56-59. 2000
[32]
Project of the software engineering coordinating comittee. Guide to the software engineering
body of knowledge. Trial version. IEEE Computer Society. May, 2001.
[33]
J.Dolado. “El código de ética profesional de Ingeniería del Software de la ACM/IEEEComputer Society”. Novática, nº 140, pp. 48-51. 2000
[34]
F.Allen, P.Hawthorn, B.Simons. “Viewpoint: not now, not like this”. Communications of the
ACM Vol.43, Issue 2 (February 2000), pp 29 – 30.
[35]
L.Fernandez. “El futuro de la ingeniería del software o ¿cuándo será el software un producto
de ingeniería?”. Novática, nº 145, pp. 82-84. 2000.
[36]
K.Frühauf. “El futuro de la Ingeniería del Software”. Novática, nº 154. pp. 57-58. 2001.
[37]
Bologna Declaration, The European Higher Education Area. Joint Declaration of the
European Ministers of Education, Bologna, 19 junio 1999.
Descargar