Para empezar entendamos a qué se refiere el concepto de Ingeniería de software. El término consta de dos palabras, software e ingeniería.
Software es mucho más que un código de programa. Un programa es un código ejecutable, usado para propósitos computacionales. El Software se considera una colección de códigos ejecutables de programación, associada a las bibliotecas y a la documentación. El Software, cuando se ha hecho para cubrir requisitos específicos se llama producto software.
Ingeniería Por otro lado, trata de desarrollar productos, utilizando métodos y principios científicos bien definidos.
La ingeniería de Software es una rama de la ingeniería asociada al desarrollo del producto software que usa métodos, principios y procedimientos científicos. El resultado de la Ingeniería de software es un producto software eficiente y de confianza.
El IEEE (Instituto de Ingeniería Eléctrica y Electrónica) define la Ingeniería de software como:
(1) La aplicación de una aproximación sistemática, disciplinada y cuantificable, al desarrollo, las operaciones y al mantenimiento del software; Esto es básicamente la aplicación de la Ingeniería al software.
(2) El estudio de la aproximación, tal y como se ha mencionado anteriormente.
Fritz Bauer, un informático teórico alemán, define Ingeniería de software como:
La ingeniería de Software es el establecimiento y uso de los principios de la Ingeniería de sonido con tal de obtener software fiable y eficiante en máquinas reales de forma económica.
El proceso de desarrollo de un producto software usando principios y métodos de Ingeniería de software, se denomina Evolución del Software. Esto incluye el desarrollo inicial del software, mantenimiento y actualizaciones, hasta que el producto deseado finalmente es desarrollado, lo que satisface los requerimientos esperados.
La evolución empieza con un proceso de recogida de requisitos. Luego los desarrolladores crean un prototipo inicial del software y se muestra a los consumidores para tener un feedback en un etapa temprana del desarrollo del producto de software. Los consumidores sugieren cambios, los cuales irán mejorando con actualizaciones y tareas de mantenimiento de manera progresiva. Este proceso cambia el software original hasta llegar al producto deseado.
Incluso después de que el consumidor tenga el software en sus manos, el avance de la tecnología y los cambios de requisitos fuerzan al producto software a cambiar en acorde a estos. Volver a cerar software des de cero, e ir cumpliendo uno por uno los requisitos no es viable. La única solución viable y económica es actualizar el software ya existente para que se adecue satisfactoriamente con los requisitos más recientes.
Lehman formuló leyes para la evolución del software. Dividió el software en 3 categorías distintas:
Lehman dictó 8 leyes de evolución del software 'E-Type' -
Cambio continuo - Los sistemas de software 'E-type' deben adaptarse de forma progresiva a los cambios del mundo real, de no ser así se volverá progresivamente menos útil.
Complejidad creciente- A medida que el sistema software 'E-type' evoluciona, sus complejidades tienden a incrementar a menos que se trabaje en ello con el fin de mantenerlas o reducirlas.
Conservació de la familiaridad - La familiaridad con el software o con el conocimiento sobre cómo y por qué fue desarrolado de una manera en concreto, etc. debe ser retenido a cualquier coste, con tal de poder implementar cambios en el sistema.
Crecimiento continuado- Para que un sistema 'E-type' intente resolver problemas de negocios, su magnitud para implementar camvios crece en acorde con los cambios de estilo de vida del negocio.
Decremento de la calidad - Los sistemas software 'E-type' reducen su calidad a menos que se mantengan de forma rigurosa o se adapten a los cambios operativos del entorno.
Sistemas de retroalimentación- Los sistemas software 'E-type' son sistemas de retroalimentación multi-loop y multi-nivel, deben ser considerados como tal con el fin de ser modificados o mejorados con éxito.
Autorregulación- Los procesos de evolución del sistema 'E-type', se regulan a sí mismos con la distribución del producto y las medidas del proceso de una manera casi normal.
Estabilidad organizacional - La tasa media de actividad efectiva global en un sistema evolutivo de 'E-type', no varia en toda la vida del producto.
Los paradigmas de Software son métodos y pasos, que se llevan a cabo mientras el software se diseña. Hay muchos métodos que se han propuesto y que funcionan hoy en día, pero necesitamos ver donde se ubican estos paradigmas en el marco de la Ingeniería de software. Estos se pueden combinar en varias categorías, en las que cada uno de ellos contiene a la otra:
El paradigma de programación es una parte del paradigma de diseño de Software y más adelante también se considera parte del paradigma de desarrollo de Software.
Este paradigma es conocido como paradigma de ingeniería de software, en el que todos los conceptos de ingeniería pertenecientes al desarrollo de software son implementados. Incluye varias investigaciones y recogida de requisitos lo que ayuda a la construcción del producto software. Consiste de –
Este paradigma forma parte del desarrollo software e incluye –
Este paradigma se relaciona de estrechamente a aspectos de programación en el desarrollo de software. Esto incluye –
La necesidad de la Ingeniería de software viene de la alta tasa de cambio en los requisitos y en el entorno en que trabaja el software.
Software de gran tamaño- Es más fácil construir una pared que construir una casa, de la misma manera, a medida que el software aumenta su tamaño, la ingeniería debe entrar para darle un proceso científico.
Escalabilidad- Si el proceso software no estuviera basado en conceptos científicos y de ingeniería, sería más fácil volver a crear nuevo software que escalar uno ya existente.
Costes- A medida que la industria del hardware ha mostrado sus capacidades y grandes fabricaciones, ha bajado el precio del hardware electrónico e informático. Pero el coste del software sigue siendo alto si el proceso no se ha adaptado a los nuevos avances.
Naturaleza dinámica - La naturaleza del software, creciente y adaptable, depende en gran medida del entorno en el que el consumidor trabaje. Si la naturaleza del software siempre cambia, se necesitará mejorar el ya existente. Aquí es donde la ingeniería de software juega un gran papel.
Gestión de calidad- Los mejores procesos de desarrollo de software producen productos mejores y de calidad.
Un producto software puede ser juzgado según lo que ofrece y la manera en que se puede usar.El software debe satisfacer en los siguientes aspectos:
Un software que se ha creado con buena ingeniería, debe tener los siguientes rasgos:
Esto nos cuenta lo bien que funciona el software en operaciones. Se puede medir en base a:
Este aspecto es importante cuando el software se mueve de una plataforma a la otra:
Estos aspectos resumen la capacidad que tiene el software para mantenerse en entornos contantemente cambiantes:
En resumen, La Ingeniería de Software es una rama de las ciencias de la computación, que usa conceptos de Ingeniería bien definidos requeridos para producir productos software eficientes, duraderos, escalable, y asequibles a tiempo.