3.3.- Metodologías De Programación

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:

- El coste creciente de los desarrollos

- La insatisfacción de los usuarios con la adecuación y calidad

- La complejidad y tamaño creciente de los programas

- La creciente dependencia de muchas organizaciones de sus sistemas informáticos, sin posibilidad de abandonarlos

- El avance hacia los ordenadores de quinta generación con características "software" muy diferentes de los actuales.

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.

- La Ingeniería del Software implica que un programa bien estructurado satisfaga las siguientes condiciones:

- El programa ha de tener una estructura general en forma de módulos, que a su vez estarán formados por procedimientos o segmentos.

- Debe existir un interfaz claramente definido entre los diversos módulos.

- Cada módulo debe de ser una combinación sencilla de construcciones elementales de un lenguaje de programación.

- Debe existir una fuerte correspondencia entre la estructura de los módulos y la de los datos sobre los que operan.

- Cada módulo debe dejar las estructuras de datos sobre las que opera en un estado consistente con su definición.

- Un módulo no debe tener efectos secundarios.

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:

- Establecer todos los pasos del programa en un algoritmo breve de alto nivel.

- Repetir

- Expandir cada sentencia del algoritmo en detalle, especificando los pasos necesarios.

- Hasta que las tareas hayan sido especificadas con el detalle suficiente como para que pueda generarse el código del programa.

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.