La Ingeniería y el Software

En esta post, se tratara el tema de la ingeniería y su convergencia con el software. Para ello hay que conocer la definición de ingeniería, de acuerdo a academia de Cambrige menciona que: “La ingeniería es el uso de principios científicos para diseñar y construir máquinas, estructuras y otros entes, incluyendo puentes, túneles, caminos, vehículos, edificios

Significados, dice que: “disciplina que se vale de un conjunto de conocimientos de tipo técnico, científico, práctico y empírico para la invención, el diseño, el desarrollo, la construcción, el mantenimiento y la optimización de todo tipo de tecnologías, máquinas, estructuras, sistemas, herramientas, materiales y procesos. El objetivo de la ingeniería es ofrecer soluciones a los problemas prácticos de las personas, tanto a nivel social como económico e industrial. De allí que la ingeniería sea una disciplina que transforme el conocimiento en algo práctico para beneficio de la humanidad.

Ecured describe ingienería como: “aquella disciplina que se ocupa del estudio y de la aplicación de los conocimientos que de este y de la experiencia resultan, para que a través de diseños, técnicas y problemas puedan ser resueltos los diferentes problemas que afectan a la humanidad. La ingeniería, básicamente, requerirá de un ajustado conocimiento y manejo de las matemáticas, por un lado y de las ciencias naturales, por el otro, para desarrollar formas económicas que permitan utilizar determinados materiales y las fuerzas de la naturaleza en absoluto beneficio del ambiente y de la humanidad.

De lo que se puede construir la siguiente concepción: “disciplina que al hacer uso de principios científicos para diseñar, construir, brindar mantenimiento y optimización de tecnología, de la mano con la experiencia en conjunto con sus técnicas y problemas puedan resueltos los diferentes problemas que afectan a la humanidad.

Ahora se procede a establecer la concepto de software, donde Espalsa-calpe menciona que: ” soporte lógico al sistema formal de un sistema informático, que comprende el conjunto de los componentes lógicos necesarios que hacen posible la realización de tareas específicas”

La RAE Indica qué “el software es un conjunto de programas, instrucciones y reglas informáticas que permiten ejecutar distintas tareas en una computadora.”

Areatecnologica.com considera al software como ” un vocablo que proviene del ingles, cuyo significado literal es Partes Blandas y que son un conjunto de instrucciones para comunicarse con el ordenador y que hacen posible su uso”

Mi definición del software es la siguiente: Desde un punto de vista de génesis el software es el espíritu de cualquier dispositivo de computo, sea computadora, smartphone, microchip, entre otros. Desde una perspectiva científica es el conjunto de aplicaciones, programas y sistemas operativos que permite optimizar un flujo de trabajo. En otras palabras es lo que llega a darle “vida” al equipo de computo (si se incluye la inteligencia artificial ;-] )

Ahora bien ¿Qué sería la ingeniería de software?

Se puede definir la ingeniería de software como: “Una disciplina que hace uso de herramientas científicas para el diseño, construcción, mantenimiento y optimización de sistemas computacionales para la solución de problemas que afecta a los humanos

Un poco de historia

El surgimiento del termino

La ing. de software aparece en la década de 1950 y principios de los años 1960. Los programadores siempre habían sabido sobre ingenieros civiles, eléctricos y de computadores y debatían qué podría significar la ingeniería para el software.El Comité de ciencia de la OTAN patrocinó dos conferencias sobre ingeniería del software en 1968 (Garmisch, Alemania y en 1969).

Algunos sugieren que fue Friedrich Bauer quien acuño este termino en la conferencia de ingeniería de software de la OTAN en 1968, otros creen que fue Anthony Oettinger, el cual uso este termino en 1966 para hacer referencia a la distinción entre ciencias de la computación y el desarrollo de sistemas intensivos de software. Sin embargo, años atrás, en la edición de junio de 1965 de la revista ‘Computers and Automation’, apareció un anuncio de trabajo buscando un “ingeniero de sistemas de software“.

Grady Booch sostiene que todos sus datos apuntan a que Margaret Hamilton usó por primera vez el término ‘ingenieria de software‘ para distinguir su trabajo de la ingeniería de hardware mientras trabajaba en un programa espacial, el famoso proyecto Apollo y el Skylab, entre 1963 y 1964.

La Crisis del software

Conocido por el oscurantismo del software, algunos estudiosos lo colocan en la década de de la década de 1960 a la de 1980. Identifica muchos de los problemas de desarrollo de software. Debido a que existieron proyectos de software que sobrepasaron el presupuesto y el tiempo estimados. Algunos causaron daños a la propiedad. Otros generaron pérdidas de vidas. Pero evolucionó para enfatizar la calidad y la incapacidad de contratar programadores suficientemente calificados.

Sin embargo, el desarrollo de software es artesanal. las características como: fácil de modificar, fácil de copiar, no se gasta, es invisible, fomentaron el proceso de desarrollo tipo “codifica y corrige” (code and fix). Se inició la cultura del hacker en el buen sentido de la palabra, es decir, experto en programación, y la del vaquero (cowboy) que hace desarrollos heroicos de última hora.

Proyectos de software

Se busca la productividad y escalabilidad de sistemas y equipos de desarrollo. La Orientación a Objetos (no se olvide que los orígenes de la programación orientada a objetos se encuentra en simula 66), renace con fuerza a través de las múltiples propuestas de lenguajes de programación. Se crea el primer modelo de madurez de capacidades de procesos (SW-CMM) y los primeros estándares. Nace el concepto de Fábricas de Software y se generan las primeras herramientas para incrementar la productividad a través de la programación por el usuario, tales como 4GLs.

En 1985 empieza a surgir el ciclo de vida de un sistema donde se establecen: especificación: usuarios e ingenieros definen el software a producir y las restricciones en su funcionalidad. Desarrollo: fase en la cual el software se diseña y se programa. Validación: el software debe ser probado para asegurar que cumple con las necesidades del cliente. Evolución: el software debe poder ser modificado para adaptarse a cambios en el mercado y en las necesidades de los usuarios.

En 1986 Barry Boehm en su articulo “A Spiral Model of Software Development and Enchancement” (Modelo Espiral para el desarrollo de software y mejora) define el modelo espiral que es una combinación de procesos en cascada y prototipado.

Metodología de desarrollo de software

Crece el uso del navegador, empieza a hacerse popular el lenguaje de marcado HTML; dando un giro a la visión en la que se estaba organizando y recuperando la información. Las conexiones de red empiezan a ampliarse. Empieza a existir una prevención de los virus informáticos internacionales en equipos de computo con MS Windows, el spam crece a pasos agigantados.

Al rededor de 1995, surgen metodologías SCRUM, DSDM, algunos métodos de desarrollo de software basados en proceso iterativos, donde los requisitos y soluciones evolucionan durante la colaboración. En Febrero del 2001 se publicó “Manifiesto for Agile Sotware Development” para definir la aproximación ahora conocida como metodologías ágiles (esto ocurrio entre 1995 y 2012)

Situación Actual

Los temas nuevos son la agilidad en el desarrollo y el valor para el cliente, sin olvidar la privacidad. Se redacta el Manifiesto de Agilidad en respuesta al estilo promovido por CMM. El surgimiento de dispoitivos como tabletas, móviles y demás, hace que se involucren en el ciclo: Aprendizaje-Seguridad-Mejorar su uso. Las cualidades prioritarias de sistemas son: Seguridad/Privacidad, Usabilidad y Confiabilidad. Se incrementa la propagación de software empaquetado COTS (Commercial-Off-The_Shelf). Crece el entendimiento de las bondades del código abierto. El desarrollo dirigido por modelos (MDD, Model Driven Development) toma fuerza. Se integra el proceso de desarrollo de software con el de sistemas.

De acuerdo a la doctora Hanna comenta que las directrices que estarían afectando el desarrollo de software son: “

  • Globalización: La conectividad global proporcionada por el Internet y las comunicaciones de banda ancha causará la evolución de las principales economías hacia redes de economías. En consecuencia, se requerirá de nuevos procesos de desarrollo para la colaboración global exitosa. Los retos claves serán: la colaboración multicultural, lograr las visiones compartidas y la confianza, definir mecanismos de contratación, incentivos, entregas y la sincronización de cambios, que aprovechen múltiples zonas horarias. Algunos problemas relacionados con diferencias culturales fueron identificados en un estudio sobre la adopción de procesos. Por ejemplo, SW-CMM que proviene de la cultura Individualista/Masculina/Corto plazo tuvo muy baja aceptación en la cultura de Tailandia que es Colectiva/Feminista/Largo plazo.
  • Sistemas de sistemas: considerada como la habilidad de las organizaciones de competir, adaptarse y sobrevivir en el mercado y en la sociedad globalizada va a depender, en gran medida, su habilidad para integrar sistemas de software en sistemas de sistemas (Systems Of Systems – SOS). Un SOS integra múltiples sistemas desarrollados independientemente y se caracteriza por su gran tamaño (>10 millones de SLOCs, > 30 tipos de interfaces externas diferentes, > 20 proveedores). Los retos para el desarrollo de SOS son: lograr acuerdos a tiempo con diversos involucrados, resolver rápido los conflictos en los requerimientos y coordinar actividades de múltiples proveedores.
  • Abundancia computacional: La Ley de Moore seguirá vigente al menos durante los próximos veinte años. Con esto, vamos a tener una abundancia de aparatos pequeños pero con gran poder de procesamiento. La Ingeniería de Software tendrá que enfrentarse con los problemas de cómo manejar el desarrollo para esta abundancia computacional, y finalmente, como integrar estos dispositivos a los SOS. Esto va a requerir de nuevos niveles de abstracción para la programación y nuevas herramientas con mayor poder basado en el uso del conocimiento.
  • Autonomía computacional: Es una visión en la cual la Inteligencia Artificial alcanza plenamente sus objetivos. Las máquinas se vuelven autónomas, evalúan las situaciones y determinan la mejor opción para actuar.
  • Combinación de biología y computación: Aquí habrá una influencia mutua. La computación basada en biología utiliza fenómenos moleculares o biológicos para resolver problemas computacionales. Mientras que la biología computacional tratará de mejorar las capacidades humanas, incorporando dispositivos al cuerpo humano.”

Acabado con el repaso de historia de la ing. de software te hago la pregunta querido lector ¿dónde crees que se encuentra esta disciplina aún?

Comparte esta entrada en tus redes sociales