martes, 13 de noviembre de 2012

Bases de la ingeniería del software

Autor:
PhD. Guillermo Choque Aspiazu
http://www.eldiario.net/
Publicado en:
Enero 16 de 2012

Según el investigador J. Leite, en sus notas de cátedra escritas en 1997, el mundo moderno depende cada día más de los sistemas de software. Los sistemas computacionales están en todas partes, desde los sistemas de freno de los autos, hasta el control de los hornos de microondas. Hoy en día, las grandes corporaciones conocen la importancia estratégica de sus políticas en relación con las tecnologías de información y el papel fundamental del software como parte de esas tecnologías. Roger Pressman complementa la idea, en su famoso libro sobre ingeniería del software escrito en su sexta edición el año 2005, menciona que, en los años cuarenta y cincuenta del siglo veinte, ya era común el hardware de propósito general. El software, sin embargo, era diseñado a medida para cada aplicación y tenía una distribución relativamente limitada. El software como producto, es decir, programas desarrollados para ser vendidos a uno o más clientes estaba en su infancia. La mayoría del software era desarrollado y finalmente usado por la misma persona u organización. El diseño era un proceso implícito llevado a cabo en la cabeza de alguien y la documentación era en general inexistente.


En el afán de comprender lo que es el software, y consecuentemente la ingeniería del software, es importante examinar las características del software que lo diferencian de otras cosas que las personas pueden construir. Cuando se construye hardware, el proceso creativo humano se traduce finalmente en una forma física. El software en cambio es un elemento del sistema que es lógico, en lugar de físico. Según Roger Pressman, el software tiene características considerablemente distintas a las del hardware: (1) El software se desarrolla, no se fabrica en un sentido clásico. Aunque existen similitudes entre el desarrollo del software y la construcción del hardware, ambas actividades son fundamentalmente diferentes. En ambas actividades la buena calidad se adquiere mediante un buen diseño, pero la fase de construcción del hardware puede introducir problemas de calidad que no existen, o son fácilmente corregibles, en el software. Ambas actividades dependen de las personas, pero la relación entre las personas dedicadas y el trabajo realizado es completamente diferente para el software. Ambas actividades requieren la construcción de un “producto” pero los enfoques son diferentes. (2) El software no se estropea. El software no es susceptible a los males del entorno que hacen que el hardware se estropee. Sin embargo la implicación es clara, el software no se estropea. ¡Pero se deteriora!. (3) Aunque la industria tiende a ensamblar componentes, la mayoría del software se construye a medida. En el mundo del hardware, la reutilización de componentes es una parte natural del proceso de ingeniería. En el mundo del software es algo que sólo ha comenzado a lograrse en una escala amplia.

Para los investigadores M. Dorfman y R. Thayer, en un artículo sobre ingeniería del software publicado en 1997, un programa era considerado exitoso si: (a) ejecutaba, (b) ejecutaba rápidamente y (c) daba una respuesta aceptable, donde la calidad dependía altamente de la habilidad del programador. Hacia fines de los años 1960 comenzaron a producirse problemas recurrentes en el desarrollo de sistemas que se conoce como la “crisis del software”, caracterizada por problemas en el desarrollo de software, que provocaban demoras en los plazos de entrega, altos presupuestos, falta de respuesta a los requerimientos de los clientes o usuarios, y dificultad para usar, mantener y mejorar los sistemas. Complementando lo que antecede, Roger Pressman, en la obra ya citada menciona, a medida que los sistemas se hacían más grandes, su calidad era sospechosa. La gente responsable del desarrollo de software tenía limitados datos históricos para usar como guías y menos control sobre el curso de un proyecto. En el año 1969, un conjunto de técnicas, llamadas “ingeniería del software”, surgió como respuesta a esa crisis. Estas técnicas ven al software como un producto de ingeniería que requiere planificación, análisis, diseño, implementación, pruebas y mantenimiento.

Según los investigadores Nauer y Randall, en un artículo sobre ingeniería del software escrito el año 1969, el término ingeniería del software significa “el establecimiento y uso de principios de ingeniería para obtener en forma económica, software confiable y que trabaje eficientemente en máquinas reales”. En los estudios que realiza Carl Hoare, en especial en el artículo en el que cuestiona si la programación es brujería o ciencia, menciona que durante casi veinte años, hubo grandes debates sobre si la creación del software era un arte, una ciencia o disciplina. El término “ingeniería del software” ha tenido cierto nivel de aceptación dentro de la comunidad de software. Sin embargo, lo que significa exactamente, sigue algo confuso. Los escritores Guezzi, Jazayeri y Mandrioli, en el libro “fundamentos de la ingeniería del software, escrito el año 1991, definen la ingeniería del software como “el campo de la ciencia de la computación que trata la construcción de sistemas de software que son tan grandes o tan complejos que tienen que ser construidos por un equipo o equipos de ingenieros”.

Por su parte el investigador Alan Davis, en el libro sobre ingeniería de requerimientos escrita en año 1990, menciona que la ingeniería del software es “la aplicación de principios científicos a: (1) la transformación ordenada de un problema en una solución de software, y 82) el mantenimiento subsiguiente de ese software hasta el final de su vida útil”. Roger Pressman establece de manera clara y simple los objetivos de la ingeniería del software: “Los objetivos clave de la ingeniería del software son definir, crear y aplicar (1) una metodología bien definida dirigida a un ciclo de vida de planeamiento, desarrollo, y mantenimiento; (2) un conjunto establecido de componentes de software que documenta cada paso en el ciclo de vida y muestra un seguimiento paso a paso, y (3) un conjunto de hitos predecibles que pueden ser revisados a intervalos regulares a través del ciclo de vida del software”.

A medida del avance de los años, se han producido grandes avances en la tecnología de la ingeniería del software en todas las áreas que la conforman: Análisis de requerimientos, estrategias de implementación, modelos de costos, etc. Sin embargo, la ingeniería del software aún está por debajo de las necesidades de calidad demandadas por sistemas cada vez más complejos. En este contexto, existen considerables esfuerzos de investigación y desarrollo con el objetivo de perfeccionar el proceso de producción del software, tanto a través de estudios teóricos, como de estudios aplicados. Cuando la ingeniería del software ingresa en su cuarta década, tiene muchas de las fortalezas y debilidades que son experimentadas por los seres humanos de la misma edad. Roger Pressman menciona que la inocencia y el entusiasmo de sus primeros años han sido reemplazados por expectativas más razonables, y aún por un saludable cinismo, basados en bastantes años de experiencia. La ingeniería del software llega a su edad adulta con muchos logros, pero con abundante trabajo aún por hacer.

El Dr. Windston Royce enfatizó esta situación, en su obra ingeniería del software aeroespacial del año 1991, mencionando lo siguiente: “La construcción de nuevo software a gusto del usuario o cliente y sin errores es un problema inesperadamente difícil. Es tal vez el problema más difícil de la ingeniería hoy en día, y ha sido reconocido como tal durante más de quince años. La “crisis del software”, se ha convertido en la crisis más larga en el mundo de la ingeniería, y aún continúa. A pesar de la creciente participación del software en el mundo actual, y de los avances producidos, el software como producto aún utiliza procesos de producción bastante insatisfactorios. Son varios los casos en que errores en el software han traído problemas no sólo financieros, sino también en vidas humanas. Es función de la ingeniería del software evitar que estos errores ocurran, produciendo productos de software más robustos y proveyendo procesos de producción más confiables. Durante mucho tiempo, la literatura y la investigación en ingeniería del software centraban sus esfuerzos en el modelado, procurando desarrollar lenguajes y técnicas de representación.”

Una de las tendencias definidas y ampliamente aceptadas de la ingeniería del software, en el plano académico, es la que proporciona Roger Pressman en su libro ingeniería del software un enfoque practico, donde se menciona que la ingeniería del software es una tecnología estratificada, donde la base que soporta la ingeniería del software, es un enfoque en la calidad que fomenta una cultura de mejora continua del proceso. La base propiamente dicha de la ingeniería del software es el estrato del proceso. El proceso de la ingeniería del software es el elemento que mantiene juntos los estratos de la tecnología y que permite el desarrollo racional y a tiempo del software de computadora. Los métodos de la ingeniería del software proporcionan los “cómo” técnicos para construir software. Los métodos abarcan un amplio espectro de tareas que incluyen la comunicación, el análisis de requerimientos, el modelado del diseño, la construcción del programa, la realización de pruebas y el soporte. Las herramientas de la ingeniería del software proporcionan el soporte automático o semiautomático para el proceso y los métodos. La ingeniería del software se ha utilizado en una gran diversidad de aplicaciones por ejemplo de negocios, de medicina, de producción, de bancos, de control de tráfico, de derecho, en la milicia, en aplicaciones de gobierno, de transporte etc.

Referencias Bibliográficas
  • Davis, A. (1990) Software Requirements: Analysis and Specification. Prentice Hall.
  • Dorfman, M., Thayer, R. (1997) Software Engineering. IEEE Computer Society Press.
  • Guezzi, C., Jazayeri, M., Mandrioli, D. (1991) Fundamentals of Software Engineering. Prentice Hall.
  • Hoare, C. (1984) Programming: Sorcery or Science?, IEEE Software, Vol. 1, Nº 2, April 1984.
  • Leite, J.C.S.P. (1997) Ingeniería de Requisitos. Notas de Cátedra.
  • Nauer, P., Randall, B., eds. (1969) Software Engineering. NATO Scientific Affairs Division, Brussels, Belgium.
  • Pressman, R. (2005) Software Engineering: A Practioner´s Approach. Sixth Edition. McGraw-Hill, Inc.
  • Royce, W., Current Problems in “Aerospace Software Engineering: A Collection of Concepts”. edited by Anderson, Ch., Dorfman, M., American Institute of Aeronautics, Inc., Washington DC, 1991.

Para conocer más acerca del Doctor Choque y sus publicaciones, haz clic en el siguiente vínculo: