¿Qué es la ingeniería de Software?


En este escrito te explico que es la Ingeniería de Software, mediante mapas conceptuales y texto. Al final hago una crítica a la definición clásica de Ingeniería de Software.

El contexto

Lo primero es poner la Ingeniería de Software en un contexto, y es que ella es una Ingeniería, por ello primero te presentaré los conceptos básicos de Ingeniería y sus relaciones en el siguiente mapa conceptual.

Mapa conceptual de la Ingeniería

Mapa conceptual de la Ingeniería

Si no lo puedes ver bien, puedes hacer clic en él para ampliarlo (dos veces, no doble clic, uno para ver solamente el mapa y otro para ampliarlo).

La ingeniería es el conjunto de conocimientos y técnicas de carácter científico, que son aplicados al desarrollo, implementación, mantenimiento y evolución de sistemas físicos, teóricos y virtuales. Se basa en una o varias ciencias, y cuyo objetivo es la resolución de problemas de la sociedad.

Quiero llamar la atención sobre que las ciencias en las que se basa la ingeniería se fundamentan en la realidad objetiva, esto es, se basan en datos tomados de lo que se está estudiando mediante instrumentos de medición y experimentos. Estos experimentos deben ser repetibles y objetivos.

Complementando lo anterior, las ingenierías, casi siempre, se basan en las ciencias duras, estas son, las que además de lo anterior, tienen una fuerte base matemática. Lo que permite que se pueda predecir, con un margen de error pequeño, el desarrollo, implementación, mantenimiento y perfeccionamiento de estos sistemas. ¿Se puede predecir de esta forma en la Ingeniería de Software?

Por ejemplo la Ingeniería Civil tiene como base la geología, química y la física. La Ingeniería Electrónica se basa en la física, particularmente la electromagnética y últimamente en los algoritmos y la programación. ¿En que se basará la Ingeniería de Software?

La Ingeniería de Software

El siguiente mapa están los conceptos básicos de la Ingeniería de Software y sus relaciones.

Mapa conceptual de la Ingeniería de Software

Mapa conceptual de la Ingeniería de Software

La ingeniería de Software es la aplicación de un enfoque sistemático, disciplinado y cuantificable, al desarrollo, operación y evolución del software [1]. Este software debe ser confiable, eficiente y que cumpla con las necesidades del cliente (eficacia) [3]. También se llama Ingeniería de Software al estudio de la aplicación de la misma [2]. La Ingeniería de Software integra las matemáticas, las ciencias de la computación y las prácticas con origen en la ingeniería [3].

Particularmente la Ingeniería de Software integra  las matemáticas discretas, que incluye: Teoría de la información, Lógica matemática, Teoría de conjuntos, Combinatoria, Teoría de grafos, Álgebra abstracta, Topología, Discretización, y otras. En cuanto a Ciencias de la computación integra cosas como: Algoritmos, como hacerlos, pero en especial poder decir cuanto tiempo se demora la ejecución de un algoritmo, cuanto espacio en memoria ocupa (eficiencia); también se estudia la corrección de un programa, esto es, pruebas lógicas en donde se demuestra (matemáticamente) que cumple con lo pedido (eficacia); y finalmente la programación en si.

Una crítica a la definición “clásica”

¿Pero es realmente la Ingeniería de Software una Ingeniería? Si nos acogemos a las matemáticas discretas y las ciencias de la computación parece que si. La algoritmia nos permite predecir la eficiencia de un algoritmo, además permite demostrar la eficacia. Pero estas dos cosas sólo se puede con algoritmos muy sencillos y no con programas de gran envergadura que son los que se hacen en Ingeniería de Software.

Por ello, no es raro ver que un proyecto software se exceda en tiempo y recursos en mucho más de lo que se esperaba originalmente, a veces hasta el doble. Esto es por que no hay ningún modelo matemático que permita predecir esto con un margen de error pequeño.

Esa falta de modelos matemáticos que tengan capacidad preditiva y que más bien se basa en metodologías y buenas prácticas, casi siempre basados más en la administración que en la ciencias de la computación, hacen que realmente el desarrollo de software sea más una artesanía o un arte, más que una ingeniería.

Sin embargo, el término Ingeniería de Software como una meta que debemos alcanzar debe ser una prioridad. Hay que llegar a una verdadera Ingeniería de Software que se base en las ciencias de la computación y que éstas tengan modelos matemáticos que nos permitan predecir la eficacia y la efectividad de un desarrollo.

 Referencias

[1] “IEEE Standard Glossary of Software Engineering Terminology,” IEEE std 610.12-1990, 1990. ISBN 155937067X.
[2] SWEBOK executive editors, Alain Abran, James W. Moore; editors, Pierre Bourque, Robert Dupuis. (2004). Pierre Bourque and Robert Dupuis, ed. Guide to the Software Engineering Body of Knowledge – 2004 Version. IEEE Computer Society. pp. 1–1. ISBN 0-7695-2330-7.
[3] ACM (2014). «Computing Degrees & Careers». ACM. Consultado el 24 de agosto de 2015.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: