Fundamentos a la Ingeniería de Software (IS)

Josue Baque, 17 December 2019

Definicion de Ingenieria de Software

Fritz Bauer, 1969: Más que una disciplina o una parte del conocimiento, la Ingeniería es un verbo, una palabra de acción, un modo de enfocar el problema.

La Ingeniería del Software es el establecimiento y uso de principios robustos de la ingeniería a fin de obtener económicamente software que sea fiable y que funcione eficientemente sobre maquinas reales.

Bohem, 1976: Ingeniería del Software es la aplicación practica del conocimiento científico en el diseño y construcción de programas de computadora y la documentación necesaria requerida para desarrollar, operar (funcionar) y mantenerlos.

Mills, 1980: La Ingeniería de Software tiene como uno de sus principales objetivos la producción de programas que cumplan las especificaciones, y que se demuestren correctos, producidos en el plazo y costo adecuado

Meyer, 1988: La Ingeniería de Software es la producción de software de calidad.

IEEE 1993: La Ingeniería de Software es la aplicación de un enfoque sistemático, disciplinado y cuantificable hacia el desarrollo, operación y mantenimiento del software; es decir, la aplicación de Ingeniería de Software.

La ingeniería de software es una aplicación práctica del conocimiento científico para proveer metodologías y técnicas que ayuden a desarrollar sistemas de software a tiempo, y a su vez que aseguren que el desarrollador cumpla con las expectativas de calidad y permanezca dentro del presupuesto.

Objetivos de la Ingenieria de Software

  • Diseñar programas informáticos que se adecúen a las exigencias de la sociedad.
  • Liderar y acoplar el desarrollo de programaciones complicadas.
  • Actuar en todas las fases del ciclo de vida de un producto.
  • Computar los costos de un proyecto y evaluar los tiempos de desarrollo.
  • Realizar el seguimiento de costes y plazos.
  • Liderar equipos de trabajo de desarrollo software.
  • Estructurar la elaboración de evidencias que comprueben el perfecto funcionamiento de los programas y que se adaptan a los requerimientos de análisis y diseño.
  • Diseñar, construir y administrar bases de datos.
  • Liderar y orientar a los programadores durante el desarrollo de aplicaciones.
  • Incluir  procesos de calidad en los sistemas, calculando métricas e indicadores y chequeando la calidad del software producido.

Origen de IS

Ingeniería del Software, es el término utilizado por Fritz Bauer en la primera conferencia sobre desarrollo de software patrocinada por el Comité de Ciencia de la OTAN celebrada en Garmisch (Alemania), en octubre de 1968, previamente había sido utilizado por el holandés Edsger Dijkstra en su obra The Humble Programmer.

Puede definirse según Alan Davis como “la aplicación inteligente de principios probados, técnicas, lenguajes y herramientas para la creación y mantenimiento, dentro de un coste razonable, de software que satisfaga las necesidades de los usuarios”.

Su origen se debió a que el entorno de desarrollo de sistemas software adolecía de:

  • Retrasos considerables en la planificación
  • Poca productividad
  • Elevadas cargas de mantenimiento
  • Demandas cada vez más desfasadas frente a las ofertas
  • Baja calidad y fiabilidad del producto
  • Dependencia de los realizadores

Esto es lo que se ha denominado habitualmente “crisis del software”, que históricamente se generó en los siguientes pasos:

Primera Fase. Los albores (1945-1955)

  • Programar no es una tarea diferenciada del diseño de una máquina.
  • Uso de lenguaje máquina y ensamblador.

Segunda Fase. El florecimiento (1955-1965)

  • Aparecen multitud de lenguajes.
  • Se pensaba que era posible hacer casi todo.

Tercera Fase. La crisis (1965-1970)

  • Desarrollo inacabable de grandes programas Ineficiencia, errores, coste impredecible
  • Nada es posible.

Cuarta Fase. Innovación conceptual (1970-1980)

  • Fundamentos de programación
  • Verificación de programas
  • Metodologías de diseño.

Quinta Fase. El diseño es el problema (1980-?)

  • Entornos de programación
  • Especificación formal
  • Programación automática.

La evolución del software

El término “evolución” del software se utiliza desde los sesenta para denominar la dinámica de crecimiento del software. 

Una definición atribuida a Lehman y Ramil dice que la evolución del software es “todas las actividades de programación que se orientan a generar una nueva versión de un software a partir de una versión anterior operativa. 

Ned Chapin 1(1999) lo definió como “la aplicación de las actividades y procesos de mantenimiento del software que generan una nueva versión operative de un software con una funcionalidad de usuario o propiedades cambiadas a partir de una versión anterior […] junto con los procesos y actividades de garantía de calidad y con la gestión de esos procesos”. De estas definiciones se desprende que la evolución cubre el ajuste a funcionalidades adicionales. 

La guía SWEBOK2 considera que la causa del mantenimiento está tanto en la necesidad de “cambios” como de “evolución” en el software.

La crisis del software

¿Cómo se define crisis?

La palabra crisis se define en el diccionario como “un punto decisivo en el curso de algo; momento, etapa, o evento decisivo o crucial”. Sin embargo para el software no ha habido ningún punto crucial, sólo una lenta evolución.

La crisis en la industria del software permanece durante muchos años, lo cual parece una contradicción para el término. Lo que si se podría decir es que hay un problema crónico en el desarrollo de software.

  • Formalismo y metodología
  • Herramientas de soporte
  • Administración eficaz

Actualmente está surgiendo una gran expectativa ante la evolución de la Ingeniería del Software, al ir apareciendo nuevos métodos y herramientas formales que van a permitir en el futuro un planteamiento de ingeniería en el proceso de elaboración de software.

Dicho planteamiento permitirá dar respuesta a los problemas de:

  • Administración
  • Calidad
  • Productividad
  • Fácil mantenimiento

Este último es uno de los grandes problemas, pues puede llegar a suponer un importe superior al 60% del total del coste del software.

¿Por qué se crea la IS?

La ingeniería de software se crea debido a las siguientes características:

  • El producto debe ser confiable y realizar sólo las tareas especificadas en los requerimientos. 
  • El producto debe ser robusto. Esto quiere decir que el software se comporta de manera razonable, incluso en circunstancias no anticipadas desde el principio. 
  • El producto de software debe ser lo más reutilizable posible, de manera tal que pueda ser incorporado en otro producto de software si se requiere. 
  • El producto de software debe ser eficiente en el uso de los recursos del sistema.
  • Se requiere desarrollar el software en una manera que lo haga evolutivo, de forma tal que se pueda agregar funcionalidad adicional sin efectos perjudiciales. 
  • El producto de software debe cumplir con los requerimientos de rendimiento especificados, es decir, debe cumplir algunas de las restricciones relacionadas al rendimiento.
  • El producto de software tendrá mayor valor si es portable, es decir que puede trabajar bajo diferentes plataformas de software y ambientes (hardware, sistemas operativos, etc.).
  • El producto de software debe ser utilizable, es decir, el aprendizaje de su uso debe ser los suficientemente sencillo por parte de personas no especialistas.

El software en la actualidad

Las direcciones en las que evoluciona la ingeniería del software hoy en día pueden agruparse de la siguiente manera:

Metodologías ágiles: métodos de desarrollo de software basados en procesos iterativos e incrementales, donde los requisitos y soluciones evolucionan durante la colaboración. Metodologías como Scrum (1995), Extreme Programming (1999) o DSDM (1995) fueron evolucionando hasta que en Febrero del 2001 se publicó “Manifesto for Agile Software Development” para definir la aproximación ahora conocida como metodologías ágiles.

Experimentación: es una rama de la ingeniería del software interesada en realizar experimentos sobre software, recolectar datos y deducir leyes y teorías de los mismos.

Desarrollo dirigido por modelos: primero se desarrollan modelos textuales  gráficos del software a construir, y posteriormente se construye el software.

Líneas de productos software, en lugar de productos individuales.