Desde hace algunos años se están produciendo cambios de gran alcance en la forma en que se desarrolla el "software" para los equipos informáticos. Entre las causas de estos cambios se incluyen las siguientes:
Estas y otras presiones han
originado la reorganización de los métodos empleados en el
desarrollo de los programas para los ordenadores. Lo que se
necesita son técnicas para la elaboración de productos software muy
largos y complejos, que satisfagan estándares muy estrictos de
calidad y prestaciones, de acuerdo con una planificación, control y
presupuestos adecuados.
Los métodos de trabajo que se han desarrollado para responder a
estas necesidades constituyen lo que se ha dado en llamar
"Ingeniería del Software". La Ingeniería del
Software es una tarea de equipo, al comenzar un proyecto de
desarrollo, se constituyen una serie de equipos con una estructura
paralela a la del programa en sí. Se establece un calendario para
el proyecto y se asignan los costes a cada una de las partes y
etapas del proyecto. Cada equipo tiene un responsable, cuya tarea
es la de comprobar que la programación desarrollada por el equipo
sea correcta, está estructurado con propiedad, dispone de las
interfaces para conectar Sin embargo no ha mostrado gran eficacia
en el tiempo que lleva aplicándose, incluso hay quienes no son
partidarios de la Ingeniería del Software, como por ejemplo Ricardo
Galli, creador de la famosa página Meneame.
La Ingeniería del Software se ocupa del ciclo de vida completo de
un producto software, diseño, desarrollo, uso y mantenimiento. El
trabajo se hace buscando el mayor grado posible de estandarización
y los menores costes durante la totalidad del ciclo de vida de los
programas.
Por lo que respecta a las técnicas de diseño de programas, el método más simple y uno de los más populares es el conocido como de "Refinamiento Progresivo". Se fundamenta en el uso de algoritmos que se escriben en un lenguaje intermedio entre el castellano y un lenguaje de programación como el Pascal, este lenguaje se denomina pseudocódigo. El proceso se puede describir en términos de un lenguaje de esta naturaleza:
Existen otras metodologías más
depuradas como por ejemplo la conocida como "Descomposición
Funcional". A diferencia de la anterior en cada etapa se
especifican las propiedades esenciales de las estructuras de datos,
y cada algoritmo se expresa como una función matemática que
transforma esta estructura de datos.
Una vez desarrollado un programa como es lógico se ha de comprobar
su buen funcionamiento. Actualmente en la mayoría de los casos se
prueban con cualquier tipo de datos que hipotéticamente puedan
presentarse en la realidad. Sin embargo este proceso nunca puede
establecer si un programa es o no correcto, sin importar cuántos
conjuntos de datos se usen. Si un programa es de importancia
crítica, como ocurre en el presente con muchas aplicaciones en los
ámbitos de la salud, comerciales, industriales o militares, es
necesario tomar todas las precauciones posibles para asegurar que
están libres de errores.
Otra metodología moderna es la de los "Métodos
formales", la especificación formal es un área de
investigación cuyo propósito es el desarrollo de técnicas,
lenguajes y herramientas (basadas en lógicas clásicas y no
clásicas, álgebras o cálculos) para alcanzar una de las principales
metas de la ingeniería de software: permitir la construcción de
sistemas que operen de forma confiable a pesar de su complejidad.
Aún cuando la aplicación de métodos formales no garantiza a
priori que un sistema sea correcto, facilita
considerablemente el análisis de las propiedades del sistema,
mostrando posibles inconsistencias, ambigüedades o incompletitudes
que de otra forma pasarían desapercibidas.