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.